Ein Get-Object-Pendant für die PowerShell

Interessant, was alles so möglich ist, wenn man weiß wie es geht. In VBScript gibt es die GetObject-Funktion, die man bei der PowerShell nicht wirklich braucht. Sollte man sie aber doch aus irgendeinem Grund benötigen, lässt sie sich durch eine kleine Anleihe aus der .NET-Klassenbibliothek und einem indirekten Aufruf per Invoke-Member nachbauen.

Das folgende Beispiel ruft per „Get-Object-Emulation“ die SetPassword-Methode auf mit der sich das Passwort eines lokalen Benutzers setzen lässt:

# Nachbildung der GetObject-Funktion
$UserName = „Susi“
$PwNeu = „geheim“
[System.Reflection.Assembly]::LoadWithPartialName(„Microsoft.VisualBasic“) | Out-Null
$User = [Microsoft.VisualBasic.Interaction]::GetObject(„WinNT://./$UserName,user“,$Null)
$Im = [System.Reflection.Bindingflags]::InvokeMethod
$GmType = $User.GetType()
$GmType.InvokeMember(„SetPassword“, $Im, $Null, $User, $PwNeu)
$GmType.InvokeMember(„SetInfo“,$Im, $Null, $User, $Null)
Write-Host -fore green „Auftrag ausgeführt…“

Diese Techniken haben mit der PowerShell nur indirekt etwas zu tun. Sie basieren darauf, dass die durch das .NET Framework zur Verfügung gestellte „Infrastruktur“ ebenfalls über Klassen der .NET-Klassenbibliothek ansprechbar ist. Wer die obige Befehlsfolge nicht auf Anhieb versteht sollte sich daraus nichts machen. Das ist eher etwa für die „Insider“ – allerdings ist alles in der .NET-Referenz ausführlich dokumentiert. Das ist ein angenehmer Kontrast zu früher, wo man sich ein solches Insider-Know how nur durch gute Kontakte zum Hersteller oder harte Arbeit erwerben konnte.

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s