Kategoriearchive: Windows Server/Client

PowerShell: Script mit administrativen Rechten ausführen

PowerShell Icon (c)

PowerShell bietet seinen Benutzern keine Funktion, eine Privilegienerweiterung durchzuführen.
Als Workaround dient eine Routine, welche als Kopfzeile eingebunden, das gesamte darauf folgende Script in einer neuen PowerShell Instanz mit administrativen Rechten ausführt:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
    Write-Host "Running elevated..."
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

Sind die gewünschten Rechte bereits gegeben, öffnet sich keine neue Instanz.

Powershell: 7-Zip installieren und Dateizuordnungen setzen

PowerShell Icon (c)

Das Script beginnt mit einer Funktion, die – falls nicht gegeben – administrative Rechte einfordert, um die Software korrekt installieren zu können und ebenso die Dateizuordnungen einzurichten.

Abzuspeichern etwa als „7zip.ps1“ an beliebigem Ort.

Zur Ausführung genügt ein Rechtsklick auf die Datei mit anschließender Auswahl „Mit PowerShell ausühren“ bzw. „Run with PowerShell“:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
    Write-Host "Running elevated..."
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

function register_filetypes() {
    cmd /c "ftype 7-Zip.001=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.7z=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.arj=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.bz2=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.bzip2=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.cab=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.cpio=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.deb=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.dmg=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.fat=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.gz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.gzip=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.hfs=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.iso=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.lha=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.lzh=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.lzma=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.ntfs=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.rar=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.rpm=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.squashfs=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.swm=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.tar=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.taz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.tbz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.tbz2=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.tgz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.tpz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.txz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.vhd=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.wim=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.xar=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.xz=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.z=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "ftype 7-Zip.zip=""C:\Program Files\7-Zip\7zFM.exe"" ""%1"""
    cmd /c "assoc .001=7-Zip.001"
    cmd /c "assoc .7z=7-Zip.7z"
    cmd /c "assoc .arj=7-Zip.arj"
    cmd /c "assoc .bz2=7-Zip.bz2"
    cmd /c "assoc .bzip2=7-Zip.bzip2"
    cmd /c "assoc .cab=7-Zip.cab"
    cmd /c "assoc .cpio=7-Zip.cpio"
    cmd /c "assoc .deb=7-Zip.deb"
    cmd /c "assoc .dmg=7-Zip.dmg"
    cmd /c "assoc .fat=7-Zip.fat"
    cmd /c "assoc .gz=7-Zip.gz"
    cmd /c "assoc .gzip=7-Zip.gzip"
    cmd /c "assoc .hfs=7-Zip.hfs"
    cmd /c "assoc .iso=7-Zip.iso"
    cmd /c "assoc .lha=7-Zip.lha"
    cmd /c "assoc .lzh=7-Zip.lzh"
    cmd /c "assoc .lzma=7-Zip.lzma"
    cmd /c "assoc .ntfs=7-Zip.ntfs"
    cmd /c "assoc .rar=7-Zip.rar"
    cmd /c "assoc .rpm=7-Zip.rpm"
    cmd /c "assoc .squashfs=7-Zip.squashfs"
    cmd /c "assoc .swm=7-Zip.swm"
    cmd /c "assoc .tar=7-Zip.tar"
    cmd /c "assoc .taz=7-Zip.taz"
    cmd /c "assoc .tbz=7-Zip.tbz"
    cmd /c "assoc .tbz2=7-Zip.tbz2"
    cmd /c "assoc .tgz=7-Zip.tgz"
    cmd /c "assoc .tpz=7-Zip.tpz"
    cmd /c "assoc .txz=7-Zip.txz"
    cmd /c "assoc .vhd=7-Zip.vhd"
    cmd /c "assoc .wim=7-Zip.wim"
    cmd /c "assoc .xar=7-Zip.xar"
    cmd /c "assoc .xz=7-Zip.xz"
    cmd /c "assoc .z=7-Zip.z"
    cmd /c "assoc .zip=7-Zip.zip"
}

Write-Host "Installing 7-Zip ..."
$instPath = "$env:ProgramFiles\7-Zip\7z.exe"
if (!(Test-Path $instPath))
{
    Write-Host "Determining download URL ..."
    $web = New-Object System.Net.WebClient
    $page = $web.DownloadString("http://www.7-zip.org/download.html")
 
    $64bit = ''
 
    if ($env:PROCESSOR_ARCHITECTURE -match '64')
    {
        $64bit = 'x64'
    }
 
    $pattern = "(http://.*?${64bit}\.msi)"
    $url = $page | Select-String -Pattern $pattern | Select-Object -ExpandProperty Matches -First 1 | foreach { $_.Value }
 
    $file = "$env:TEMP\7z.msi"
    if (Test-Path $file)
    {    
        rm $file | Out-Null
    }
    
    Write-Host "Downloading $url -> $file"
 
    $web.DownloadFile($url, $file)
 
    Write-Host "Installing..."
 
    $cmd = "$file /passive"
 
    Invoke-Expression $cmd | Out-Null
 
    while (!(Test-Path $instPath))
    {
        Start-Sleep -Seconds 10
    }
    Write-Host "Associating file types..."
    register_filetypes | Out-Null
    Write-Host "Done!"
    Write-Host "Press any key to continue ..."
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
 
}
else
{
    Write-Host "7-Zip already installed."
    Write-Host "Press any key to continue ..."
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}

Windows Domäne: Offline-Join mit DirectAccess Policy

Üblicherweise baue ich eine SSTP-Verbindung von einem Windows-Client zu einem Windows-Server auf, um anschließend der Domäne beizutreten. Das ist aber gerade im Bezug auf DirectAccess nicht die schönste Möglichkeit und erfordert weiterhin nach dem Beitritt in die Domäne, dass nach einem Neustart mit dem lokalen Administrator wieder das VPN aufgebaut- und anschließend der Benutzer gewechselt wird, um die erste Anmeldung durchzuführen.
Schöner und eigentlich auch sehr einfach ist es, den Client offline in die Domäne beitreten zu lassen. Ein einfacher Befehl auf dem Domänen-Controller ist hierfür ausreichend. Die Gruppenrichtlinie für DirectAccess unterscheidet sich im Namen je nach Installationssprache des Servers.

Zwei Parameter des Befehls sind zu ändern:
– „domain.local“ muss dem Domänennamen entsprechen
– „computername“ entspricht dem Computernamen des Clients

Der Computername des Clients wird vorab entsprechend der eigenen Richtlinien zur Benennung geändert.

Nun der Befehl, welcher auf dem Windows-Server ausgeführt wird.

Für die englische Windows-Server Installation:

djoin /provision /domain domain.local /machine computername /policynames "DirectAccess Client Settings" /rootcacerts /savefile c:\outjoin.txt /reuse

Für die deutsche Windows-Server Installation:

djoin /provision /domain domain.local /machine computername /policynames "DirectAccess-Clienteinstellungen" /rootcacerts /savefile c:\outjoin.txt /reuse

Wie im Befehl zu sehen, wird eine Datei „c:\outjoin.txt“ erstellt, die nun auf den Windows-Client kopiert wird. Für den Transport der Datei auf den Client, wähle ich die FTP-Übertragung. Jede Übertragung ist denkbar.

Ist die Datei auf dem Client angekommen, gilt folgender Befehl unabhängig von der Sprache der Installation.
Im seltensten Fall wird „C:\Windows“ als Windows-Pfad anzupassen sein.
Auch hier gehe ich davon aus, dass die Datei via „c:\outjoin.txt“ auf dem Client zu finden ist:

djoin /requestodj /loadfile c:\outjoin.txt /windowspath c:\windows /localos
der Befehl wird in einer Konsole („cmd“) als Administrator ausgeführt.

Nach einem Neustart des Clients, erfolgt die Anmeldung als gültiger Benutzer mit Rechten zum DirectAccess-Gebrauch.

Lenovo Treiber entpacken

Lenovo Treiber entpacken - (c) Lenovo.com

Ein kleines Snippet, um via Batch-Datei Lenovo Treiber-Pakete zu entpacken.

Lenovo Treiber entpacken

Die .exe-Dateien einfach auf die Batch-Datei mit folgendem Inhalt ziehen, um sie zu entpacken:

@echo off
:next
if "%~1" == "" goto done
%~1 /VERYSILENT /DIR=%~n1 /Extract="YES"
shift
goto next
:done
exit

Die Dateien werden in einen Ordner mit dem Namen der Datei (ohne Dateiendung, daher „%~n1“) entpackt.

Quelle zur Idee