Private/Wissen/C_Advance/C06_AufbauAusführbareDatei.ps1
<#
# Inhaltliche Aufbau von ausführbaren Dateien Wie sollten .PS1- und .PSM1-Dateien idealerweise aufgebaut sein? - **Hashtags** PS1 PSM1 TEMPLATE - **Version** 2020.02.27 #> #region Prolog # ! 1. Benötigte Module importieren # ! ├ Für Dritte eine Übersicht der benötigten und damit zu installierenden Module # ! └ using Module ... ist identisch mit Import-Module -Name ... using Module Microsoft.PowerShell.Management using Module Microsoft.PowerShell.Utility # ! 2. Benötigte Namespace importieren # ! └ Erleicht den Zugriff auf Typen, # ! anstelle [System.Management.Automation.ActionPreference]::Stop # ! kann [ActionPreference]::Stop geschrieben werden. using namespace System.Management.Automation using namespace System.Windows.Forms # ! 3. Standard-Verhalten beim auftretten von Fehlern festlegen # ! └ Die Skript-Verarbeitung sollte beim ersten auftretenden Fehler abbrechen (STOP) # ! und nicht weiter arbeiten (Standard ist Continue), um einen Schaden auf # ! minimum zu beschränken. $backupErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = [ActionPreference]::Stop # ! 4. Benötigte .NET Assemblies laden # ! └ Die gebräuchlisten Assemblies sind bereits geladen. # ! Darüberhinaus muss manuell geladen werden. # ! Das schont Ressourcen. Add-Type -AssemblyName "System.Windows.Forms" # ! 5. Script-Übergabe-Parameter definieren # ! ├ Optional # ! └ Diese Datei kann jetzt wie folgt aufgerufen werden: # ! MyScript.ps1 -Path x:\wtf -BenutzerId 47110815 param ( [string]$Path, [int]$BenutzerId ) # ! 6. Aktivieren von 'Variablen-Deklaration muss vor der ersten Verwendung erfolgen' # ! ├ Vor der ersten Verwendung einer Variable, muss diese einen Wertaufweisen. # ! │ Sonst wird ein Fehler ausgelöst. # ! └ Diese Verfahren schützt vor Tippfehlern im Variablennamen. Set-StrictMode -Version Latest # ! 7. Benötigte Funktions-Definitionen erstellen # ! ├ Optional # ! └ Vor der ersten Verwendung von Functions muss die Function-Definition stehen, # ! um rechtzeitig geladen werden zu können. function Invoke-Irgendwas { param ([string]$Stadtname) $Stadtname } #endregion # ! 8. Der eigentliche Business-Logik-Code der Script-Datei: $prozesse = Get-Process foreach($p in $prozesse) { $prozessname = $p.Name if($prozessname -eq "notepad") { $p.Kill() } } $fenster = New-Object -TypeName Form $fenster.ShowDialog() Invoke-Irgendwas -Stadtname Köln #region Epilog # ! 9. Aufräumen, d.H. keine Spuren hinterlassen Remove-Variable -Name prozesse, prozessname, p, fenster -Force Remove-Item -Path function:\Invoke-Irgendwas -Force Set-StrictMode -Off $ErrorActionPreference = $backupErrorActionPreference Remove-Module -Name Module Microsoft.PowerShell.Utility -Force Remove-Module -Name Microsoft.PowerShell.Management -Force # ! 10. Digitale Signatur # ! ├ Optional # ! └ siehe Set-AuthenticodeSignature # SIG # Begin signature block # MIIkBwYJKoZIhvcNAQcCoIIj+DCCI/QCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # ... # Dg4zxvPhyyMhIuS/Rz2KOG8Ly6rTmGC1C5VxdjpP96xuhz6IefLKVxRZqZQNRJ25 # oCid85NU8LI2+rA= # SIG # End signature block # ! 11. Allgemeine Regeln # ! 11.1 Keine Aliase verwenden # ! 11.2 Invoke-ScriptAnalyzer -Path .\MeinSkript.ps1 ausführen. # ! 11.3 Scripte/Code-Blöcke formatieren: Invoke-Formatter -Settings CodeFormattingAllman -ScriptDefinition (Get-Clipboard -Raw) #endregion |