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).

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top