Powershell, разбивка выходных данных на страницы из foreach

StackOverflow https://stackoverflow.com/questions/2336745

Вопрос

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

До сих пор у меня есть:

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

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

Это было полезно?

Решение

Попробуйте выполнить следующее

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

Редактировать Добавьте несколько к пути

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

Другие советы

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

gwmi win32_service | select-object Name,PathName | ogv

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

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{$.Имя, $.Путь} | подробнее

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top