Powershell, нумерация страниц с foreach - PullRequest
2 голосов
/ 25 февраля 2010

Кажется, это должно быть просто, но PowerShell выигрывает еще одну битву со мной. Просто хочу вывести имя всех сервисов, запущенных в системе, и их путь к исполняемому файлу, и передать его во что-то, что я могу использовать для поиска по нему, например, Less.

Пока у меня есть:

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

Но это дает мне «Пустой элемент трубы не разрешен». что я, кажется, придумал много. Кто-нибудь подскажет мне, как это исправить, либо выведя в файл, и я пройду через него с помощью vim, либо передам трубу на страницу / less / etc, чтобы я мог выполнить быстрое сканирование (пока еще не программно)

Ответы [ 4 ]

5 голосов
/ 25 февраля 2010

Попробуйте сделать следующее

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

РЕДАКТИРОВАТЬ Добавить несколько к пути

$services | %{ "{0} {1}" -f $_.Pathname,$_.Name } | less
3 голосов
/ 26 февраля 2010

Если вы используете PowerShell 2.0, вам может понравиться это:

gwmi win32_service | select-object Name,PathName | ogv

ogv (Output-GridView) - это новый командлет в 2.0.

1 голос
/ 27 февраля 2010
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

Вот еще один способ написать то же утверждение.

get-WmiObject win32_service | foreach {$ .Name, $ .Pathname} | более

Это не то же самое, что мой первый пример, но я хотел показать вам, насколько вы были близки.

0 голосов
/ 26 февраля 2010

Похоже, веская причина для использования 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 будет возвращать объект в конвейер на основе входного объекта.

Я предполагаю, что меньший - это псевдоним вашего собственного создания, поскольку у меня его, кажется, нет.

...