看起来这应该很简单,但是powershell正在赢得与我的另一场战斗。只是想输出在系统上运行的所有服务的名称,以及它们的可执行路径,并将其输入到我可以用来搜索它的内容中,如Less。
到目前为止,我有:
$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name $service.Pathname} | less
但那给了我“不允许空管元素”。我似乎已经提出了很多。任何人都告诉我如何解决这个问题,要么输出到文件,要么用vim通过它,或者管道到页面/更少/等等所以我可以快速扫描(我的眼睛还没有程序化)。
答案 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将根据输入对象将对象返回到管道。
我假设较少是你自己制作的别名,因为我似乎没有它。