2013-02-26 2 views
0

내가하려는 것은 일부 프로세스를 살펴보고 이러한 프로세스의 사용자 목록을 얻는 것입니다. 그리고 다음 코드가 저에게 잘 돌아갔습니다. 형식 테이블 출력 공백입니까?

get-wmiobject win32_process | 
where{$_.name -like "*notepad*"}|sort {$_.CommandLine}| 
select @{n="User";e={$_.getowner().user}},@{n="ProcessID";e={$_.ProcessID}},{$_.CommandLine} |ft -AutoSize |Out-String -Width 300 >> C:\ListUsers.txt 

은 어떻게 든 내가 분할 arrary의 일부 $ _. 길의 중간에 명령 행 문자열 출력을 분할 (코드가 잘못이지만, 더 좋은 아이디어를 다음 코드를 참조)하고 싶었다. 그러나 업데이트 된 코드는 텍스트 파일에 아무 것도 출력하지 않습니다. 나는 select-object 또는 fommat-object를 잘못 사용해야한다고 생각하지만, 어떻게 해결할 수 있는지 모르겠습니다.

get-wmiobject win32_process | 
where{$_.name -like "*notepad*"}|sort {$_.CommandLine}| 
%{ 
$split = $_.CommandLine.split("\")  
select @{n="User";e={$_.getowner().user}},@{n="ProcessID";e={$_.ProcessID}},@{n="Ihub";e=$split[3]},@{n="version";e=$split[3]},@{n="version";e=$split[3]} | 
ft -AutoSize |Out-String -Width 300 >> C:\ListUsers.txt 
} 

누구든지 조언을 줄 수 있습니까? 감사!!

+0

으로 아래 말했다, 내가 지금 대답을 업데이 트했습니다. 그러나 너는 무엇을하려고 하는가? "notepad"(보통 "notepad.exe"또는 "notepad ++. exe") 프로세스를 검색 할 수 있습니다. 그런 다음 경로의 하드 코딩 된 부분을 제거합니까? 그 논리는 어디에 있습니까? : P 프로세스 이름을 (당신이 그것을 검색 한 이후에) 알고 있다면, 왜 그것을 분리하려고합니까? 또한 어떤 경우에는'\ somefolder \ '를 답으로 얻을 수 있습니다. –

답변

0

select을 사용한 다음 format-table을 사용할 필요가 없습니다. Format-table도 계산 된 속성을 만들 수 있습니다. 또한 $split[3]을 스크립트 블록으로 묶는 것을 잊었습니다. "Ihub"와 동일했기 때문에 두 개의 "버전"속성을 제거했습니다.

이 (테스트되지 않은) 시도 :

get-wmiobject win32_process | 
where{$_.name -like "*notepad*"}|sort {$_.CommandLine} | 
Format-Table -Property @{n="User";e={$_.getowner().user}},@{n="ProcessID";e={$_.ProcessID}},@{n="Ihub";e={($_.CommandLine.split("\"))[3]}} -AutoSize | 
Out-String -Width 300 >> ListUsers.txt 
+0

답장을 보내 주셔서 감사합니다. 비록 .. 당신의 코드에 대해 확신합니까, 그것은 나를 위해 일하는 것 같지 않습니다 :) – bookends

+0

마찬가지로, 이것은 테스트되지 않았습니다. PS를 사용할 수 없었습니다. –

+0

지금 업데이트했습니다. 포맷하기 전에 객체 출력을 잊어 버렸습니다. foreach 대신 일반 파이프 라인을 사용하도록 다시 작성했습니다. –