Private/Wissen/C_Advance/C12a_Ausführungsrichtlinien.ps1

<#
 
# PowerShell-Dateien-Ausführungsrichtlinien
 
Schutz vor das automatische Ausführen von .ps1- und psm1-Dateien
 
- **Hashtags** Execution_Policy
- **Version** 2019.10.18
 
#>


# ! Legt die Ausführungsrichtlinien für .ps1- uns .psm1-Dateien fest
# ! Die Standardeinstellung für das Ausführen liegt bei Restricted
# ! d.h. diese Dateien werden NIE ausgeführt.
# ! Einstellung bleiben dauerhaft erhalten.
# ! Einstellung kann auch per GPO vorgenommen werden (Richtlinienname: Skriptausführung aktivieren).
# ! Einstellung kann nur mit Admin-Rechten vorgenommen werden

# TODO Weiterführende und Nachschlage-Informationen
Get-Help -Name 'about_Execution_Policy' -ShowWindow

# ? Was ist eingestellt
Get-ExecutionPolicy -List

# ? Was gilt für den aktuellen Scripthost
$env:PSExecutionPolicyPreference

# ? Mögliche Einstellungen sind
Set-ExecutionPolicy -ExecutionPolicy Restricted      -Scope LocalMachine
Set-ExecutionPolicy -ExecutionPolicy AllSigned       -Scope CurrentUser # ! 1. Ausführbare Dateien müssen signiert; 2. Signierer-Zertifikat speichern in Root und 3. speichern in TrustedPublisher
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned    -Scope Process # ! Wie AllSigned für Remote/Download-Datei; Lokale Dateien = Unrestricted s. auch Unblock-File
Set-ExecutionPolicy -ExecutionPolicy Default
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Set-ExecutionPolicy -ExecutionPolicy Bypass
Set-ExecutionPolicy -ExecutionPolicy Undefined

# ! Set-ExecutionPolicy steuert folgende Registry-Properties:
Get-ItemPropertyValue -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell -Name ExecutionPolicy
Get-ItemPropertyValue -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics  -Name ExecutionPolicy
Get-ItemPropertyValue -Path Registry::HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell  -Name ExecutionPolicy

# ? Empfohlene Einstellung für Client und Server
# ? d.h. alle ausführbare Dateien müssen signiert (x.509-Zertifikat) sein
Set-ExecutionPolicy -ExecutionPolicy 'AllSigned'
Get-Help -Name about_Signing -ShowWindow

# ? Empfohlene Einstellung für Test-/Entwicklungszwecke (Remote-Scripte müssen signiert sein)
Set-ExecutionPolicy -ExecutionPolicy 'RemoteSigned' -Scope 'CurrentUser'
# ! Bzgl. RemoteSign werden Dateien an einem Download-Marker identifiziert!
# ! s.a. Unblock-File

# ? Möglichkeiten *.ps1-Datei auszuführen sind ...
# ... per Rechtsklick / Mit PowerShell ausführen
# ... per Command oder *.PS1-Datei in eine .EXE-Datei umwandeln (s. C11_Sicherheit.ps1 bzw. X11_Technology_Hacking.ps1)
# ... per Autostart-Datei profile.ps1
# ... per Aufgabenplanung, RUN-Schlüssel, etc.
# ... per GPO
# ... per Aufruf in der Console:
c:\temp\MachWas.ps1
& "c:\temp\Mach Was.ps1" # & = Neuer Context
. "c:\temp\Mach Was.ps1" # . = Aktueller Context
# ... per Datei-Verknüpfung auf:
powershell.exe -File "c:\temp\MachWas.ps1" -WindowStyle Hidden
powershell.exe -File "c:\temp\MachWas.ps1" -NoExit
# ! ACHTUNG: Copy & Paste von .PS1-Code geht IMMER!