2

看起来这应该很简单,但是powershell正在与我赢得另一场战斗。只是想输出系统上运行的所有服务的名称,以及它们的可执行路径,并将其通过管道传输到我可以用来搜索它的东西中,比如 Less。

到目前为止,我有:

$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name $service.Pathname} | less

但这给了我“不允许使用空管道元素”。我似乎出现了很多。任何人都告诉我如何解决这个问题,或者通过输出到文件并用 vim 浏览它,或者通过管道传输到 page/less/etc,这样我就可以进行快速扫描(我的眼睛还没有完全编程)。

4

4 回答 4

5

尝试执行以下操作

$services | %{ $_.Pathname } | less

编辑将多个添加到路径

$services | %{ "{0} {1}" -f $_.Pathname,$_.Name } | less
于 2010-02-25T18:58:31.510 回答
3

如果您使用的是 PowerShell 2.0,您可能会喜欢这样:

gwmi win32_service | select-object Name,PathName | ogv

ogv (Output-GridView) 是 2.0 中的新 cmdlet。

于 2010-02-26T16:04:20.013 回答
1
get-wmiobject win32_service | select-object name, pathname | more

这也是powershell 2.0,接近上面的评论。在这种情况下,您只是在不需要时尝试使用 foreach。

即使使用 foreach,您也接近获得可以使用的输出。foreach 中的逗号会生成类似列表的输出,您可以使用 more 命令而不是 less。

$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name  $service.Pathname} | more

这是编写相同语句的另一种方法。

获取 WmiObject win32_service | foreach{$ .Name, $ .Pathname} | 更多的

这仍然与我的第一个示例不同,但我想向您展示您有多接近。

于 2010-02-27T02:12:18.247 回答
0

看起来是使用 foreach-object 的一个很好的理由:

$services = get-WmiObject -query 'select * from win32_service'
$services|ForEach-Object {$_|Select-Object Name,Pathname}|less

请原谅我,当我在线时:

get-WmiObject -query 'select * from win32_service' |ForEach-Object {$_|Select-Object Name,Pathname}|less

foreach-object 将根据输入对象向管道返回一个对象。

我假设 less 是您自己制作的别名,因为我似乎没有它。

于 2010-02-26T15:28:22.750 回答