Skip to the main content.

PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting

Peppe deinen Output auf! Nutze versteckte PowerShell-Konfig-Variablen

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!

 

Nutze versteckte Konfigurationsvariablen

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:

 

  • PS C:\> $FormatEnumerationLimit = -1 
    PS C:\> $FormatEnumerationLimit = -1 


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}   

 

Good2know

Dein ultimativer PowerShell-Spickzettel

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.

PowerShell Poster 2023

Hol dir hier dein Poster!

 

 

Weiterführende Links 

Zusammenhängende Posts

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

2 min read

Bahn frei, schneller zum Ziel! Streame Fehler direkt zum Handler

Hier kommt die nächste Strategie zur Fehlerbehandlung, nachdem wir zuvor die Echtzeit und verzögerte Fehlerbehandlung...

3 min read

Stelle Fehlern eine Falle! Mit der Trap-Anweisung Terminating Errors abfangen

Du bist mit try...catch vertraut? Exceptions kannst du mit Trap-Anweisungen behandeln. Kurz und knackig kommt hier der...

Über den Autor: