Private/Wissen/C02_Ausführungsrichtlinien.ps1

# ? TITEL PowerShell-Dateien-Ausführungsrichtlinien
# ? DESCRIPTION Schutz vor das automatische Ausführen von .ps1- und psm1-Dateien
# ? TAGS Execution_Policy
# ? VERSION 2019.10.18.0800

# ! 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.
# ! 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

# ? Empfohlen 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 

# ? Empfohlen 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 MyPSScript.exe => z.B. über das Tool PowerGui oder VisualStudio und C# (s. C08_ScriptAutostart.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" # . = Aktueller Context
& "c:\temp\Mach Was.ps1" # & = Neuer Context
# ... per Datei-Verknüpfung auf:
powershell.exe -WindowStyle Hidden -File "c:\temp\MachWas.ps1"
powershell.exe -NoExit -File "c:\temp\MachWas.ps1"
# ! ACHTUNG: Copy & Paste von .PS1-Code geht IMMER!