2016-07-29 59 views
3

Ich habe dieses Skript:Ausgang Reduzieren von drei Befehle einer Zeile

$counterWS = "\Process(powershell)\Working Set" 
$counterWSPe = "\Process(powershell)\Working Set Peak" 
$counterWSPr = "\Process(powershell)\Working Set - Private" 

$dataWS = Get-Counter -Counter $counterWS 
$dataWSPe = Get-Counter -Counter $counterWSPe 
$dataWSPr = Get-Counter -Counter $counterWSPr 

$dataWS.countersamples | Format-Table Timestamp,@{Name='WorkingSet';Expression={($_.CookedValue/1KB)}},WorkingSetPeak,WorkingSetPrivate -Auto | findstr Timestamp 
$dataWS.countersamples | Format-Table Timestamp,@{Name='WorkingSet';Expression={($_.CookedValue/1KB)}},WorkingSetPeak,WorkingSetPrivate -Auto | findstr [-] 

while ($true) { 
    $dataWS.countersamples | Format-Table Timestamp,@{Name='WorkingSet';Expression={($_.CookedValue/1KB)}},WorkingSetPeak,WorkingSetPrivate -Auto | findstr [:] 
    $dataWSPe.countersamples | Format-Table Timestamp,WorkingSet,@{Name='WorkingSetPeak';Expression={($_.CookedValue/1KB)}},WorkingSetPrivate -Auto | findstr [:] 
    $dataWSPr.countersamples | Format-Table Timestamp,WorkingSet,WorkingSetPeak,@{Name='WorkingSetPrivate';Expression={($_.CookedValue/1KB)}} -Auto | findstr [:] 
    Start-Sleep -s $args[0] 
} 

und das Ergebnis ist wie:

Timestamp   WorkingSet WorkingSetPeak WorkingSetPrivate 
---------   ---------- -------------- ----------------- 
29/07/2016 18:41:12  10644         
29/07/2016 18:41:13      10676     
29/07/2016 18:41:14          3056

Gibt es eine Möglichkeit zu reduzieren, um eine Ausgabe wie diese zu machen:

Timestamp   WorkingSet WorkingSetPeak WorkingSetPrivate 
---------   ---------- -------------- ----------------- 
29/07/2016 18:41:12  10644   10676    3056

Antwort

4

Sammeln Sie alle 3 Zähler auf einmal (der Parameter -Counter akzeptiert eine Liste von Argumenten), dann teilen Sie das Ergebnis in calculated properties getrennt:

$ws  = '\Process(powershell)\Working Set' 
$wsPeak = '\Process(powershell)\Working Set Peak' 
$wsPriv = '\Process(powershell)\Working Set - Private' 

Get-Counter -Counter $ws, $wsPeak, $wsPriv | 
    Select-Object Timestamp, 
     @{n='WorkingSet';e={$_.CounterSamples[0].CookedValue/1KB}}, 
     @{n='WorkingSetPeak';e={$_.CounterSamples[1].CookedValue/1KB}}, 
     @{n='WorkingSetPrivate';e={$_.CounterSamples[2].CookedValue/1KB}} 

Die CounterSamples Eigenschaft ist eine Liste von PerformanceCounterSample Objekte, die durch den Index einzeln zugegriffen werden kann.

Wenn Sie sich nicht darauf verlassen möchten, dass die Ergebnisse in der Reihenfolge der an Get-Counter übergebenen Parameter zurückgegeben werden, können Sie sie nach ihrem Pfad auswählen, z. dies wie:

@{n='WorkingSetPeak';e={ 
    ($_.CounterSamples | Where-Object { $_.Path -like '*peak' }).CookedValue/1KB 
}} 

Zur kontinuierlichen Probenentnahme der Parameter -Continuous und -SampleInterval-Get-Counter hinzuzufügen. Eine Schleife ist nicht erforderlich.

$interval = 5 # seconds 

Get-Counter -Counter $ws, $wsPeak, $wsPriv -Continuous -SampleInterval $interval | 
    Select-Object ...