Zum Hauptinhalt springen

Powershell-Provider

Powershell stellt mit Powershell-Providern eine Schnittstelle zur Verfügung, über die es möglich ist, auf verschiedene Datenquellen wie die Registry, Zertifikatsspeicher oder das Dateisystem mit demselben Satz von Cmdlets zurückzugreifen. Provider kann man selber registrieren, Microsoft liefert aber bereits verschiedene Provider mit Powershell aus. Welche Provider registriert sind, können Sie sich mit Get-PSProvider anzeigen lassen.

Get-PSProvider

> Name        Capabilities                          Drives
> ----        ------------                          ------
> Registry    ShouldProcess, Transactions           {HKLM, HKCU}
> Alias       ShouldProcess                         {Alias}
> Environment ShouldProcess                         {Env}
> FileSystem  Filter, ShouldProcess, Credentials    {C, D, E, F}
> Function    ShouldProcess                         {Function}
> Variable    ShouldProcess                         {Variable}
> Certificate ShouldProcess                         {Cert}
> WSMan       Credentials                           {WSMan}

Der Zugriff auf Powershell-Provider erfolgt normalerweise über "Laufwerke". Die registrierten Laufwerke sehen Sie in der Spalte Drives.

Alternativ können Sie sich mit Get-PSDrive auch eine Liste der verfügbaren Laufwerke ausgeben lassen:

 

Get-PSDrive

> Name      Used (GB)  Free (GB)  Provider     Root
> ----      ---------  ---------  --------     ----
> Alias                           Alias
> C           231,18      17,97  FileSystem   C:\
> Cert                            Certificate  \
> D          1657,40     205,49  FileSystem   D:\
> E           435,97     262,37  FileSystem   E:\
> Env                             Environment
> F           365,16    1497,73  FileSystem   F:\
> Function                        Function
> HKCU                            Registry     HKEY_CURRENT_USER
> HKLM                            Registry     HKEY_LOCAL_MACHINE
> Variable                        Variable
> WSMan                           WSMan

Den Inhalt eines Laufwerks sehen Sie mit Get-Item und Get-Childitem.

Get-Item -path c:\
Get-ChildItem -path C:\

 

Get-Item liefert das Objekt zurück, das Sie angegeben haben, während Get-Childitem alle Objekte unterhalb des Objekts angibt. Die häufig verwendeten Aliase für Get-Childitem sind dir und ls:

Dir -path c:\
ls c:\ # -Path ist ein Positionsparameter und kann ausgelassen werden

Sie können auch auf alle anderen Provider mit dem gleichen Satz von Cmdlets zurückgreifen:

Get-ChildItem -Path Variable:

Die Windows-Umgebungsvariablen werden über das Laufwerk Env: bereitgestellt.

Get-Childitem -Path Env:

Eine einzelne Variable können Sie über Get-Item aufrufen:

Get-Item -Path Env:\TEMP

Um nur den Wert der Variable aufzurufen, fragen Sie die Eigenschaft Value ab:

(Get-Item -Path Env:\TEMP).Value

Um den Zugriff auf den Inhalt der Umgebungsvariable zu vereinfachen, gibt es eine Kurzform:

$env:Temp

Natürlich können Sie so auch neue Umgebungsvariablen anlegen:

New-Item -Path env:MyName -Value 'PowershellHero'
$env:MyName

Auf diese Weise wird die Umgebungsvariable aber nur im Arbeitsspeicher hinterlegt. Beim Schließen des Powershell-Hosts geht sie verloren. Um die Variable permanent zu setzen, müssen Sie eine Methode aus der Environment-Klasse verwenden (s. Arbeiten mit .Net).

Auf die gleiche Art und Weise können Sie Items überschreiben, den Inhalt entfernen und löschen:

[string]$MySecrectIdentity = 'Batman'
$MySecrectIdentity.GetType().FullName    # GetType() gibt den Datentyp eines Objekts zurück
Set-Item -Path Variable:\MySecrectIdentity -Value 'PowershellSuperHero' 
Clear-Item -Path Variable:\MySecrectIdentity
Remove-Item -Path Variable:\MySecrectIdentity

Im Beispiel wird eine neue Variable vom Typ String erzeugt. Set-Item überschreibt die Variable, und Clear-Item löscht den Inhalt der Variable.

 
 
[string]$MySecrectIdentity = 'Batman'
$MySecrectIdentity.GetType().FullName    # GetType() gibt den Datentyp eines Objekts zurück
Set-Item -Path Variable:\MySecrectIdentity -Value 'PowershellSuperHero' Clear-Item -Path Variable:\MySecrectIdentity
Remove-Item -Path Variable:\MySecrectIdentity