Private/Wissen/B08_PSProvider.ps1

# ? TITEL PSProvider & PSDrive
# ? DESCRIPTION Mit Default-Cmdlets auf div. Subsystem zugreifen
# ? TAGS PSProvider PSDrive Registry
# ? VERSION 2020.01.08

# ! Mit einem PowerShell-Provider werden div. Technologien
# ! mit Default-Cmdlets benutzbar gemacht

# Typische PS 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
# * ????? => [OPTIONAL] Exchange-Postfächer/-Ordner
# * SqlServer => [OPTIONAL] Microsoft SQL-Server
# * u.v.m.

# TODO 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 PS-Provider aktiviert werden
Get-PSProvider
Import-Module -Name SqlServer
Get-PSProvider

# ! Für die Interaktion mit den PS-Providern gibt es Laufwerke (PSDrive)
# ! um auf die Inhalte per Pfad 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\Raum3
New-PSDrive -PSProvider Registry   -Name HKCC -Root HKEY_CURRENT_CONFIG

# ? Absolute Pfad-Angaben
Get-ChildItem -Path c:\
Get-ChildItem -Path variable:\    # $PsUiCulture
Get-ChildItem -Path cert:\
Get-ChildItem -Path env:\         # $env:WinDir
Get-ChildItem -Path hkcu:\
Get-ChildItem -Path SqlServer:\

# ? Relative Pfad-Angaben
Get-ChildItem -Path .  # . => Arbeitsverzeichnis
Get-ChildItem -Path .. # .. => Übergeordneter
Get-ChildItem -Path /  # \ => Stammordner oder /
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 # Nur Syntax-Prüfung mit: -IsValid
Test-Path -Path Variable:\PSUICulture

# ? 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 PSProvider-Default-Cmdlets können in allen Laufwerken benutzt werden
# ! und verhalten sich identisch.

# ? Übersicht aller Default-Cmdlets
Get-Command -Noun ChildItem, Item, ItemProperty, ItemPropertyValue, Location, Path -Module Microsoft.PowerShell.* 

New-Item         -Path C:\Temp                 -Name NeueDatei.txt                     -ItemType File 
New-Item         -Path HKCU:\Software          -Name NeuerKey                          -ItemType Key
New-Item         -Path variable:\              -Name NeueVariable -Value "Hallo Köln!" -ItemType Variable   # ! $NeueVariable = "Hallo Köln!" ; New-Variable -Name NeueVariable -Value "Hallo Köln!" -Option ReadOnly
New-ItemProperty -Path HKCU:\SOFTWARE\NeuerKey -Name Heute        -Value (Get-Date)    -PropertyType

#region Übungen

<# TODO Übung 1 (PSProvider & PSDrive)
        ? A) Legen Sie unter 'HKEY_CURRENT_USER\Software' einen Schlüssel 'ABC', mit einer Eigenschaft 'HexWert' und dem hexadezimalen Wert '8BAA' an.
        ? B) Legen Sie unter 'HKEY_CURRENT_USER\Software\ABC' eine Property 'ErstelltAm' mit dem Value des 'aktuellen Datums' an.
        ? C) Lesen Sie das o.a. Datum 'ErstelltAm' wieder ein und addieren '10' Monate dazu, um es erneut der Eigenschaft 'ErstelltAm' zuzuweisen.
        ? D) Setzen Sie den Standard-Wert des 'ABC'-Key auf den Value 'Hallo Köln!'.
        ? F) Löschen Sie den 'ABC'-Key wieder und Prüfen / stellen sich das dieser wirklich nicht mehr existiert.
        ? G) KNIFFLIG: Finden Sie alle Schlüssel die mit 'Run' beginnen unter 'HKEY_CURRENT_USER\Software\Microsoft\Windows' bzw. 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows'.
        ! TIPPS New-Item; New-ItemProperty; Get-Date; Get-Help; about_Assignment_Operators; Get-ChildItem; Where-Object
        * MUSTERLÖSUNG
#>


#endregion