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