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

5 min read

Mehr Ordnung in PowerShell: lagere Konfigurationsdaten einfach aus

Verabschiede dich von fest codierten Pfaden und Einstellungen! Vereinfache deine PowerShell-Skripte, indem du...

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

Über den Autor: