Private/Wissen/B_Basic/B8_PSProvider.ps1

<#
 
# PSProvider & PSDrive
 
Über PowerShell Provider und Drive kann mittels Default-Cmdlets auf div. Technologien zugegriffen werden.
 
- **Hashtags** PSProvider PSDrive
 
- **Version** 2020.5.26
 
#>


# ! Typische PowerShell Provider sind:

# * Registry => Registrierungsdatenbank
# * Alias => PowerShell Aliase
# * Environment => Windows Umgebungsvariablen
# * FileSystem => Dateisystem
# * Function => PowerShell-Funktionen
# * Variable => PowerShell-Variablen
# * Certificate => X.509-Zertifikatsspeicher
# * ActiveDirectory => [OPTIONAL] ActiveDirectory
# * Exchange => [OPTIONAL] Exchange-Postfächer/-Ordner
# * SqlServer => [OPTIONAL] Microsoft SQL-Server
# * ... => u.v.m.

# READ Weiterführende und Nachschlage-Informationen:

Get-Help -Name 'about_Providers'   -ShowWindow
Get-Help -Name 'about_Path_Syntax' -ShowWindow
Get-Help -Name 'about_Locations'   -ShowWindow

# ! Durch das importieren eines Modules können weitere PowerShell-Provider aktiviert werden:

Get-PSProvider # vorher
Import-Module -Name 'SqlServer'
Get-PSProvider # nachher

# ! Für die Interaktion mit den PowerShell-Providern gibt es Laufwerke (PowerShell-Drive) um auf die Inhalte per Pfad-Angabe zugreifen zu können:

Get-PSDrive
New-PSDrive -PSProvider 'FileSystem' -Name 'DL' -Root "$env:USERPROFILE\Downloads"
New-PSDrive -PSProvider 'FileSystem' -Name 'GFU' -Root '\\srv00\disk\Raum5'
New-PSDrive -PSProvider 'Registry' -Name 'HKCC' -Root 'HKEY_CURRENT_CONFIG'

# ! PowerShell 7 - Ein neues PS-Laufwerk um benutzerbezogene temporäre Dateien abzulegen:
Get-PSDrive -Name 'Temp'
Get-ChildItem -Path 'Temp:\'

# ! Für die Adressierung gibt es **absolute** Pfad-Angaben:

Get-ChildItem -Path 'C:\'
Get-ChildItem -Path 'variable:\'
Get-ChildItem -Path 'Cert:\CurrentUser\My' -CodeSigningCert
Get-ChildItem -Path 'env:\'
Get-ChildItem -Path 'hkcu:\'
Get-ChildItem -Path 'SqlServer:\'

# ! Für die Adressierung gibt es **relative** Pfad-Angaben:

Get-ChildItem -Path '.'  # . => Arbeitsverzeichnis
Get-ChildItem -Path '..' # .. => Übergeordneter
Get-ChildItem -Path '/'  # \ oder / => Stammordner
Get-ChildItem -Path '~'  # ~ => Home-Verzeichnis

# ! Arbeitsverzeichnis wechseln:

Set-Location -Path 'HKCU:\SOFTWARE'
Set-Location -Path 'C:\Windows\System32'

# ! Pfad auflösen:

Resolve-Path -Path '.\MsInfo32.exe'

# ! Pfad testen:

Test-Path -Path 'C:\Windows\System32\MsInfo32.exe'
Test-Path -Path 'Variable:\PSUICulture'
Test-Path -Path 'C:\Window?\System32\MsBlub32.exe' -IsValid # ! Syntax-Prüfung

# ! Pfad zerlegen:

Split-Path -Path 'C:\Windows\System32\MsInfo32.exe' -Parent
Split-Path -Path 'C:\Windows\System32\MsInfo32.exe' -Leaf

# ! Pfad zusammenbauen:

Join-Path -Path $env:WinDir -ChildPath 'System32'

# ! Die PowerShell-Provider-Default-Cmdlets können in allen PowerShell-Drives benutzt werden und benutzen sich identisch.

# ! Übersicht aller Default-Cmdlets:

Get-Command -Noun 'ChildItem', 'Item', 'ItemProperty', 'ItemPropertyValue', 'Location', 'Path' -Module 'Microsoft.PowerShell.*'

# ? Beispiele anhand von New-Item:

New-Item -Path 'C:\Temp' -Name 'NeueDatei1.txt' -ItemType 'File'
New-Item -Path 'C:\Temp' -Name 'NeueDatei2.txt' -ItemType 'Directory'

New-Item -Path 'HKCU:\Software' -Name '_NeuerKey' -ItemType 'Key'

New-Item -Path 'variable:\' -Name 'NeueVariable' -Value 'Hallo Köln!' -ItemType 'Variable' ; $NeueVariable # TIPP Natürlich einfacher so: $NeueVariable = 'Hallo Köln!'

New-ItemProperty -Path 'HKCU:\SOFTWARE\_NeuerKey' -Name 'Heute' -Value (Get-Date) -PropertyType 'string'

# TIPP - Freie Kapazitäten von Festplatten ermitteln:

Get-PSDrive -PSProvider 'FileSystem'

# TODO QUIZ - https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAa__Yp1xwFUME43QlZWRlM1UlpYRk5NTDQyQjRVVFI5US4u

<# TODO ÜBUNG
 
1. Legen Sie unter **HKEY_CURRENT_USER\Software** einen Key **ABC**, mit einer Property **HexWert** und den hexadezimalen Value **8BAA** an.
 
2. Legen Sie unter **HKEY_CURRENT_USER\Software\ABC** eine Property **ErstelltAm** mit dem Value des aktuellen Datums (Get-Date) an.
 
3. Lesen Sie das Datum **ErstelltAm** (s. 2.) wieder ein und addieren **10** Monate dazu, um es anschließend erneut der Eigenschaft **ErstelltAm** zuzuweisen.
 
4. Setzen Sie den Standard-Wert des **ABC**-Key auf den Value **Hallo Köln!**.
 
5. Löschen Sie den **ABC**-Key wieder und prüfen / stellen Sie sich das dieser Key wirklich nicht mehr existiert.
 
6. KNIFFLIG: Finden Sie alle Keys unter **HKEY_CURRENT_USER\Software\Microsoft\Windows** und **HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows** die mit **Run** beginnen.
 
TIPPS: *-Item; *-ItemProperty; Get-Date; Get-ChildItem, Get-ItemPropertyValue
 
#>