2017-11-27 2 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 

형식 : Format of result

하지만 데이터베이스에 삽입 할 다음과 같이 결과를 포맷 할 :

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- *'cmdlets는 데이터를 생성하는 것이 아니라 _display 형식화를위한 것입니다. 원하는 결과물을 질문에 직접 포함 시키십시오. 설명과 함께 텍스트로 입력하십시오. 또한 [좋은 질문을하는 방법] (http://stackoverflow.com/help/how-to-ask)을 읽어보십시오. – mklement0

+1

이것은 convertto-stringdata를 사용하는 전형적인 예입니다. 기본값으로는 ​​PS가 제공되지 않습니다. Convertfrom-stringdata는 Hashtable 형식으로 데이터를 분할하고 역순으로 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 " " 

기본적으로 문자열 키/값 paris를 보유 할 배열을 추가하고 마지막 New-Object를 코드로 바꿔 원하는 문자열을 만들었습니다. 마지막으로 공백으로 결합하여 최종 문자열을 만듭니다.

당신은 절대적으로 배열 부분을 건너 뛰고 대신 배열을 만드는, 직접 문자열을 만들 수있다, 난 그냥 그 접근 방법 : 같은

그것은 포함하지 않는 "OK |" 처음에는 당신이 무엇을 구성하는지 모르겠지만 원하는 것을 얻기 위해 자신을 추가 할 수 있습니다. :)

+0

도움 주셔서 감사합니다. 나는 그것을했다. ^^ –

관련 문제