Kategorieauswahl

Cmdlet

Windows PowerShell 3.0 update-help funktioniert nicht

Auch in der finalen Version von PowerShell 3.0 funktioniert das CMDlet update-help nicht. Das ist nur zum Teil richtig, denn in der Englischen Version klappt es. Das liegt daran, dass die Deutschen Fassungen aktuell noch nicht veröffentlicht sind. Peter Kriegel postete kürzlich in Xing einen Workaround zu diesem Problem welches wenigstens die Hilfe in Englisch anzeigt:

Function Get-HelpUICulture {
 param (
 [String]$HelpSearchString,
 [String]$UICulture
 )
# UICulture merken, damit man Sie zurücksetzen kann
 $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
 trap
 {
 [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldCulture
 }
# neue UICulture setzen
 [System.Threading.Thread]::CurrentThread.CurrentUICulture = $UICulture
# Hilfe in einer anderen Sprache abrufen
 # Get Help in another language
 Get-Help $HelpSearchString -Full
# alte UICulture zurücksetzen
 [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldCulture
 }
# Hilfe in Englisch abrufen:
 Get-HelpUICulture -HelpSearchString Get-Command -UICulture ‘en-US’

In seinem Blog findet man weitere Informationen und Links zu den neuen Hilfemechanismen.

Befehle von Powershell Modulen eines anderen Rechners benutzen

Bei Windows XP und Server 2003 können Sie z. B. die Befehle aus dem Active-Directory Modul in der Powershell nicht benutzen. Es gibt jedoch eine Lösung, wie Sie die AD cmdlets (Befehle) ohne direkten Remotezugriff trotzdem in die Powershell Konsole von XP einbinden können:

$cred=get-credential
$session=new-pssession -computer 192.168.0.50 -cred $cred
invoke-command {import-module activedirectory} -session $session
import-pssession -session $session -module activedirectory

Im Script sind 2 Stellen fett markiert. Die erste Stelle enthält die IP-Adresse eines W2k8R2 DCs von dem die Modulbefehle importiert werden. Alternativ können Sie hier natürlich auch gerne den Namen einsetzen. Die zweite fett geschriebene Stelle am Schluß legt das zu importierende Modul fest. In diesem Beispiel ist es das AD Modul. Es kann natürlich auch ein X-beliebiges anderes Modul sein, dass auf der Remotemaschine allerdings instaloliert sein muss.

Powershell Variablen mit Befehlen belegen

Sie können in Powershell ganze Befehlsketten in Variablen ablegen, z. B. so:

$a=get-childitem

Dann wird allerdings zum Zeitpunkt der Variablendeklaration der Befehl ausgeführt und der Inhalt in der Variablen hinterlegt. Legt man also nun ein neues Verzeichnis an, ist dieses nicht in $a enthalten, da die Variable zuerst in Inhalt übergeben bekam und erst danach der neue Ordner erstellt wurde. Gibt man nun $a aus, fehlt der neu erstellte Ordner. Man kann allerdings auch Code in einer Variablen zum Zeitpunkt der Variablenabfrage ausführen lassen. Dazu müssen Sie den Code nur in geschweifte Klammern setzen und die Variable mit vorangestelltem Punkt abrufen. Also beispielsweise so:

$a={get-childitem}

Wenn Sie nun:

. $a

abrufen, wird der Inhalt der Variablen zum Zeitpunkt von der Angabe . $a als Code ausgeführt und enthält somit den aktuellen Stand des Verzeichnisses.

Auch interessant ist die Möglichkeit Befehle mit Variablen zu Befehlen zusammen zuschrauben.

$Verb="set"
&("$Verb-service")