2017-11-27 8 views
0

Ich habe eine Skript Powershell, um PercentProcessorTime von Prozessen zu erhalten.Wie piped Ausgabe in Powershell zu einer Zeile formatieren

$Processes = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) 
$Processes | %{ New-Object psobject -Property ` 
    @{ Time = $_.PercentProcessorTime; 
     Name = ($_.name -replace "#\d+", "")}}` 
| ?{ $_.Name -notmatch "_Total|Idle" } ` 
| Group-Object Name ` 
| %{ New-Object psobject -Property ` 
     @{ Name = $_.Name; 
     Sum = ($_.Group | Measure-Object Time -Sum).Sum }} ` 
| Format-Table 

Format des Ergebnisses wie folgt: Format of result

Aber ich möchte, wie unten Ergebnis zu formatieren, um Datenbank einzufügen:

OK |Idle=100 System=6 smss=0 csrss=0 wininit=0 services=0 lsass=0 lsm=0 svchost=18 ICTrigger=0 nvvsvc=0 ICDCMGR64=0 svchost#2=0 winlogon=0 svchost#3=0 svchost#4=0 svchost#5=0 igfxCUIService=0 svchost#6=0 spoolsv=0 svchost#7=0 armsvc=0 ShieldStart=0 svchost#8=0 GateMan=0 HeciServer=0 Jhi_service=0 NHCAAgent=0 nvxdsync=0 nvvsvc#1=0 nscp=0 PaSvc=0 pcdrmsvc=0 NSCHIM=0 ASDSvc=0 secugate64=0 WindowsSecuService=0 WinFil32=0 WmiPrvSE=0 svchost#9=0 papersrv64=0 WUDFHost=0 svchost#10=0 svchost#11=0 WmiP rvSE#1=0 PaTray=0 unsecapp=0 WmiPrvSE#2=0 LMS=0 SWMAgent=0 

Bitte helfen Sie mir, es zu lösen. Vielen Dank ^^

+1

'Format- *' Cmdlets sind für _display Formatierung_, nicht für die Erstellung von Daten. Bitte geben Sie Ihre gewünschte Ausgabe direkt in Ihre Frage ein, vorzugsweise als Text, zusammen mit einer Erklärung. Lesen Sie auch über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask). – mklement0

+1

Dies ist ein klassisches Beispiel für die Verwendung von convertto-stringdata, die standardmäßig nicht mit PS geliefert wird. Convertfrom-stringdata bricht die Daten im Hashtable-Format und die Umkehrung macht es als Schlüssel-Wert-Paar. [Dieser Link] (https://blogs.technet.microsoft.com/heyscriptingguy/2011/01/17/simplify-powershell-hash-table-creation-with-a-simple-cmdlet/) wird Ihnen dabei helfen . –

Antwort

1

Ich glaube nicht, gibt es einen „easy“, builtin Befehl für sie, aber es braucht nicht viel, um die Funktion zu aktualisieren, zu tun, was Sie wollen:

$Processes = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) 

$procStrings = @() 
$Processes | %{ New-Object psobject -Property ` 
    @{ Time = $_.PercentProcessorTime; 
     Name = ($_.name -replace "#\d+", "")}}` 
| ?{ $_.Name -notmatch "_Total|Idle" } ` 
| Group-Object Name ` 
| %{ 
    $procStrings += "$($_.Name)=$(($_.Group | Measure-Object Time -Sum).Sum)"} 

$procStrings -join " " 

Grundsätzlich habe ich ein Array hinzugefügt, das den String-Schlüssel/Wert paris enthält und das endgültige New-Object durch Code ersetzt, um die gewünschte Zeichenfolge zu erstellen. Schließlich wird es mit Leerzeichen verbunden, um die endgültige Zeichenfolge zu erstellen.

Sie unbedingt den Array-Teil überspringen könnte und stattdessen ein Array zu erstellen, nur die Zeichenfolge direkt, ich möchte nur, dass Ansatz :)

Nicht enthalten sind die „OK |“ aufbauen Am Anfang weiß ich nicht, was Sie ein OK bilden, aber ich bin sicher, dass Sie sich hinzufügen können, um zu bekommen, was Sie wollen :)

+0

Danke für Ihre Hilfe. Ich habe es getan ^^ –

Verwandte Themen