Powershell, paginando la salida de foreach
-
22-09-2019 - |
Pregunta
Parece que esto debería ser simple, pero PowerShell está ganando otra batalla conmigo.Simplemente quiero generar el nombre de todos los servicios que se ejecutan en un sistema y su ruta ejecutable, y canalizarlo en algo que pueda usar para buscar como Menos.
Hasta ahora tengo:
$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name $service.Pathname} | less
Pero eso me da el "un elemento de tubería vacío no está permitido". que parece haber aparecido mucho.Alguien me puede decir cómo solucionar este problema, ya sea exportándolo a un archivo y lo revisaré con vim, o canalizándolo a la página/menos/etc. para poder hacer un escaneo rápido (con mis ojos aún sin programación).
Solución
Intenta hacer lo siguiente
$services | %{ $_.Pathname } | less
EDITAR Agregar varios a la ruta
$services | %{ "{0} {1}" -f $_.Pathname,$_.Name } | less
Otros consejos
Si está utilizando PowerShell 2.0, que le gustaría esto:
gwmi win32_service | select-object Name,PathName | ogv
ogv (Output-GridView) es un nuevo cmdlet en 2.0.
get-wmiobject win32_service | select-object name, pathname | more
Este es también powershell 2.0 y es el cerca del comentario anterior. Sólo estabas tratando de utilizar un foreach cuando no es necesario en este caso.
A pesar de la foreach, estabas cerca de conseguir una salida que podría trabajar con ellos. Una coma en su foreach habría generado una salida como una lista y que podría haber utilizado más comandos en lugar de menos.
$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name $service.Pathname} | more
Esta es otra manera de escribir esta misma declaración.
get-WmiObject win32_service | foreach {$ .name $ .Pathname} | más
Esto todavía no es lo mismo que mi primera ejemplo, pero quería mostrar lo cerca que estaba.
se ve como una buena razón para usar foreach a objetos:
$services = get-WmiObject -query 'select * from win32_service'
$services|ForEach-Object {$_|Select-Object Name,Pathname}|less
Por favor, discúlpeme mientras que Oneline:
get-WmiObject -query 'select * from win32_service' |ForEach-Object {$_|Select-Object Name,Pathname}|less
foreach-objeto devolverá un objeto a la tubería basado en el objeto de entrada.
Estoy asumiendo menos es un alias de su propia creación ya que no parecen tener la misma.