Powershell,来自foreach的分页输出

时间:2010-02-25 18:55:47

标签: powershell scripting service less

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

到目前为止,我有:

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

但那给了我“不允许空管元素”。我似乎已经提出了很多。任何人都告诉我如何解决这个问题,要么输出到文件,要么用vim通过它,或者管道到页面/更少/等等所以我可以快速扫描(我的眼睛还没有程序化)。

4 个答案:

答案 0 :(得分:5)

尝试执行以下操作

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

编辑在路径中添加多个

$services | %{ "{0} {1}" -f $_.Pathname,$_.Name } | less

答案 1 :(得分:3)

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

gwmi win32_service | select-object Name,PathName | ogv

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

答案 2 :(得分:1)

get-wmiobject win32_service | select-object name, pathname | more

这也是PowerShell 2.0,并且接近上面的评论。 在这种情况下,当你不需要时,你只是试图使用foreach。

即使使用foreach,您也可以获得可以使用的输出。 你foreach中的逗号会产生类似列表的输出,你可以使用more命令而不是更少。

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

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

get-WmiObject win32_service | foreach {$ .Name,$ .Pathname} |更

这仍然与我的第一个例子不同,但我想告诉你你有多接近。

答案 3 :(得分: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将根据输入对象将对象返回到管道。

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