2010-03-01 18 views
7

trata de abrir el siguiente comando en php para ejecutar comandos PowerShell ...PHP Powershell comando

las siguientes obras:

$output = shell_exec(escapeshellcmd('powershell get-service | group-object')); 

no puedo correr así:

$output = shell_exec('powershell get-service | group-object'); 

no pasará la tubería | carácter

pero si trato de ejecutar:

$output = shell_exec(escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}')); 

consigo ninguna salida.

los siguientes:

$cmd = escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}'); 

devuelve:

powershell get-service ^| where-object ^{^$_.status -eq ^"Running^"^} 

alguna sugerencia sobre qué está sucediendo esto y cómo solucionar este problema?

Editar: También podría ejecutarlo como script .ps1 pero quiero poder pasar $ var a él.

Respuesta

4

Haré una puñalada aunque no tengo ninguna experiencia de PHP en absoluto.

Tengo la sensación de que lo que está sucediendo es que el intérprete de comandos interpreta el carácter de la tubería en lugar de PowerShell. Por ejemplo si se ejecutó lo siguiente en el símbolo del sistema cmd.exe:

dir /s | more 

La salida del primer comando obtiene por tubería a la entrada del segundo al igual que cabe esperar de PowerShell.

Escapar de la cadena solo empeorará el problema porque está transformando la cadena de tal manera que PowerShell no tiene idea de cómo volver a abrirla.

Trate encerrando su expresión PowerShell original en una cita como la siguiente:

$output = shell_exec('powershell.exe -c "get-service | group-object"'); 

o preferiblemente, parece que hay una función exec() que no pasa a través de la consola de comandos. Esto podría funcionar mejor.

$output = exec('powershell.exe -c get-service | group-object'); 
+1

shell_exec ('PowerShell -c "get-service | Where-Object {$ _ estado eq \". \ "Ejecución}');! trabajó como un encanto Josh, gracias –

+0

Dar el ejecutivo comandar un disparo también. Dado que está llamando directamente a PowerShell, no es necesario pasar primero por el shell de comandos. También puede evitar problemas con otros caracteres, como los símbolos de porcentaje. – Josh

+0

No le gusta el comando exec. –

2
'powershell get-service | group-object' 

se interpretará como

  1. carrera powershell y pasarlo conseguir-servicio como un argumento
  2. entonces canalizar la salida de powershell a group_object (es decir, no la salida de servicio de obtención)

Lo que desea es para los poderes Diablos para ver get-service | group-object como argumento, por lo que tiene que adjuntar entre comillas, como este.

$output = shell_exec('powershell "get-service | group-object"'); 
Cuestiones relacionadas