2017-11-27 10 views
0

私は、プロセスのPercentProcessorTimeを取得するためのスクリプトpowershellを持っています。以下のように結果のpowershellのパイプ出力を行にフォーマットする方法

$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 

フォーマット: ​​3210

しかし、私は、データベースに挿入するには以下のように結果をフォーマットします:

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 

は私がそれを解決するために助けてください。 どうもありがとうございます^^

+1

'Format- *'コマンドレットはデータを生成するためのものではない。あなたの質問に直接、好ましくはテキストとして、希望の出力を説明と一緒に含めてください。また、[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)をお読みください。 – mklement0

+1

これは、convertto-stringdataを使用する古典的な例で、デフォルトではPSが付属していません。 Convertfrom-stringdataはハッシュテーブル形式でデータを分割し、その逆はkey = valueのペアとしてデータを作成します。 [このリンク](https://blogs.technet.microsoft.com/heyscriptingguy/2011/01/17/simplify-powershell-hash-table-creation-with-a-simple-cmdlet/)を使用すると、 。 –

答えて

1

私はそれについて、「簡単」組み込みコマンドがあるとは思わないが、それはあなたがやりたい機能を更新するために多くを取ることはありません。

$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 " " 

基本的には、文字列key/value parisを保持する配列を追加し、最後のNew-Objectをコードに置き換えて目的の文字列を作成しました。最後に、スペースで結合して最終的な文字列を作成します。

あなたは絶対にアレイ部をスキップしてだけではなく、配列を作成するのではなく、直接文字列を構築することができ、私はちょうどそのアプローチ:)のよう

それは含まれていません「OK |」最初は、あなたがOKを構成するか分からないが、あなたが望むものを得るためにあなた自身を加えることができると確信している:

+0

ご協力いただきありがとうございます。私はそれをしました^^ –

関連する問題