3 min read
Skriptabbruch verhindern: PowerShell-Fehler clever behandeln
Da $error eine globale Variable ist, solltest du in Erwägung ziehen, eine eigene Protokollierungsvariable für die...
PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting
Wie wäre es mit einem PowerShell-Upgrade? Mit zwei wenig bekannten Variablen – $ofs und $FormatEnumerationLimit – kannst du deine Outputs aufpeppen. Keine abgeschnittenen Listen mehr und volle Kontrolle über die Formatierung deiner Ergebnisse! Schau dir an, wie du diese Einstellungen nutzt, um deine Skripte lesbarer und effizienter zu machen. Hol dir den PowerShell-Vorteil und bring deine Scripting-Skills aufs nächste Level!
Es gibt zwei wichtige Konfigurationsvariablen in PowerShell, die großen Einfluss auf die Formatierung haben, aber nicht immer sichtbar sind.
$ofs (Ausgabefeldtrennzeichen) enthält standardmäßig ein Leerzeichen. Es ist das Zeichen, das PowerShell beim automatischen Umwandeln von Arrays in Strings verwendet:
PS C:\> $lottery = 1..49 | Get-Random -Count 7
PS C:\> "Lottozahlen: $lottery"
Lottozahlen: 22 2 48 44 23 13 4
PS C:\> $ofs = ', '
PS C:\> "Lottozahlen: $lottery"
Lottozahlen: 22, 2, 48, 44, 23, 13, 4
PS C:\> $ofs = ','
PS C:\> "Lottozahlen: $lottery"
Lottozahlen: 22,2,48,44,23,13,4
$FormatEnumerationLimit ist standardmäßig auf 4 eingestellt. Dies ist die Anzahl der Array-Elemente, die PowerShell in einer Vorschau für die Zeichenkettenkonvertierung berücksichtigt. Hier ist ein Beispiel:
Get-Service |
Where-Object { $_.DependentServices.Count -gt 1 } |
Select-Object -Property Name, Dep*
Sie erhalten eine Liste mit Diensten, die mindestens 2 abhängige Dienste haben. Wenn Sie sich die Ergebnisse genau ansehen, sehen Sie, dass maximal 4 abhängige Dienste sichtbar sind. Wenn ein Dienst mehr hat, wird die Liste abgeschnitten und "..." wird angezeigt:
NlaSvc {NcdAutoSetup, AppVClient, netprofm}
nsi }
p2pimsvc {PNRPAutoReg, p2psvc, PNRPsvc}
PNRPsvc {PNRPAutoReg, p2psvc}
ProfSvc {XblGameSave, TokenBroker, UserManager, shpamsvc...}
SamSs {MSDTC, KAPSService, LanmanServer, KtmRm}
Wenn Sie $FormatEnumerationLimit auf eine beliebige andere Zahl setzen, können Sie diese Grenze kontrollieren. Wenn man es auf -1 setzt, wird jede Begrenzung deaktiviert und es werden immer alle Elemente angezeigt:
Nun sind alle Einträge sichtbar:
NlaSvc {NcdAutoSetup, AppVClient, netprofm}
nsi {WlanSvc, icssvc, Wcmsvc, upnphost, SSDPSRV, NcdAutoSetup, AppVClient, netprofm, NlaSvc, KND...
p2pimsvc {PNRPAutoReg, p2psvc, PNRPsvc}
PNRPsvc {PNRPAutoReg, p2psvc}
ProfSvc {XblGameSave, TokenBroker, UserManager, shpamsvc, NaturalAuthentication, Appinfo}
SamSs {MSDTC, KAPSService, LanmanServer, KtmRm}
Außer bei "nsi" in diesem Beispiel gibt es noch ein "..." und einen Abbruch. Diesmal wurde sie jedoch durch die Platzbeschränkungen der Konsole ausgelöst. Um auch diese zu überwinden, müsste man eine Format-Tabelle hinzufügen:
Get-Service |
Where-Object { $_.DependentServices.Count -gt 1 } |
Select-Object -Property Name, Dep* |
Format-Table -Wrap -AutoSize
Nun listet die Ausgabe endlich alle Ausgaben auf, ohne etwas abzuschneiden:
NlaSvc {NcdAutoSetup, AppVClient, netprofm}
nsi {WlanSvc, icssvc, Wcmsvc, upnphost, SSDPSRV, NcdAutoSetup, AppVClient, netprofm, NlaSvc,
KNDBWM, KAPSService, Netman, NcaSvc, SessionEnv, Netlogon, LanmanWorkstation, Killer Network
Service, jhi_service, IpxlatCfgSvc, iphlpsvc, XboxNetApiSvc, IKEEXT, hns, Dnscache,
WinHttpAutoProxySvc, Dhcp}
p2pimsvc {PNRPAutoReg, p2psvc, PNRPsvc}
PNRPsvc {PNRPAutoReg, p2psvc}
ProfSvc {XblGameSave, TokenBroker, UserManager, shpamsvc, NaturalAuthentication, Appinfo}
SamSs {MSDTC, KAPSService, LanmanServer, KtmRm}
Entfessele das volle Potenzial von PowerShell mit unserem praktischen Poster. Egal, ob frischer Einsteiger oder erfahrener Profi, dieser Spickzettel ist so konzipiert, dass du schnell die wichtigsten und am häufigsten verwendeten Cmdlets findest.
Das Poster ist zum Download und in Papierform erhältlich.
Okt 17, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Da $error eine globale Variable ist, solltest du in Erwägung ziehen, eine eigene Protokollierungsvariable für die...
Okt 24, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Hier kommt die nächste Strategie zur Fehlerbehandlung, nachdem wir zuvor die Echtzeit und verzögerte Fehlerbehandlung...
Okt 10, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Du bist mit try...catch vertraut? Exceptions kannst du mit Trap-Anweisungen behandeln. Kurz und knackig kommt hier der...
Tobias Weltner und Aleksandar Nikolić haben gemeinsam die Blogpost-Reihe „Tobias&Aleksandars PowerShell-Tipps“ verfasst. Deshalb möchten wir euch beide hier vorstellen:
----------------------------
Aleksandar Nikolić ist ein Microsoft Azure MVP und Mitbegründer von PowerShellMagazine.com, der ultimativen Online-Ressource für PowerShell-Enthusiasten. Mit über 18 Jahren Erfahrung in der Systemadministration ist er ein angesehener Trainer und Redner, der rund um den Globus reist, um sein Wissen und seine Fähigkeiten über Azure, Entra und PowerShell weiterzugeben. Er hat auf IT-Veranstaltungen wie Microsoft Ignite, ESPC, NIC, CloudBrew, NTK und der PowerShell Conference Europe gesprochen.
----------------------------
Tobias ist ein langjähriger Microsoft MVP und war von Anfang an an der Entwicklung von PowerShell beteiligt. Er hat die PowerShell IDE „ISESteroids“ erfunden, zahlreiche Bücher über PowerShell für Microsoft Press und O'Reilly geschrieben, die PowerShell Conference EU (psconf.eu) gegründet und trägt derzeit als Mitglied der „Microsoft Cmdlet Working Group“ zur Weiterentwicklung der PowerShell bei. Tobias gibt sein Wissen als Berater in Projekten und als Trainer in Inhouse-Schulungen für zahlreiche Unternehmen und Agenturen in ganz Europa weiter.