2013-02-26 118 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 

不知怎的,我想分裂$ _。在路中间的CommandLine字符串,并输出一些分裂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.exe”或“notepad ++。exe”)进程。那么你拿出一个硬编码的路径部分?那里的逻辑在哪里? :P如果您知道进程名称(因为您搜索了它),为什么试图将其分开?此外,在某些情况下,您可能只需将\ somefolder \作为答案。 – 2013-02-26 16:00:43

回答

0

您不需要使用select,然后format-tableFormat-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 2013-02-26 10:21:56

+0

如上所述,这是未经测试。我没有PS可用 – 2013-02-26 11:56:52

+0

我已经更新了它。格式化之前忘记输出对象。重写它使用正常的管道而不是foreach。 – 2013-02-26 12:05:40