Private/Wissen/C06_AufbauAusführbareDatei.ps1
# ? TITEL Inhaltliche Aufbau von ausführbaren Dateien # ? DESCRIPTION Wie sollten .PS1- und .PSM1-Dateien idealerweise aufgebaut sein? # ? TAGS PS1 PSM1 TEMPLATE # ? VERSION 2019.12.19 # ! 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. $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 # ! └ 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 } # ! 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 # ! 9. Digitale Signatur # ! ├ Optional # ! └ siehe Set-AuthenticodeSignature # SIG # Begin signature block # MIIkBwYJKoZIhvcNAQcCoIIj+DCCI/QCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # ... # Dg4zxvPhyyMhIuS/Rz2KOG8Ly6rTmGC1C5VxdjpP96xuhz6IefLKVxRZqZQNRJ25 # oCid85NU8LI2+rA= # SIG # End signature block |