2012-09-07 17 views
7

En un script de PowerShell, que algo como esto:Cómo canalizar la salida de Invoke-Expression a la cadena?

Invoke-Expression "& `"C:\Scripts\psftp.exe`" ftp.blah.com" 

Quiero tubo de toda la producción, etc errores de este a la cadena $output

¿Cómo puedo hacer esto? He intentado > al final, así como $output = ..., pero ninguno parece detectar errores y el tipo.

Respuesta

12

Prueba esto:

$output = Invoke-Expression "C:\Scripts\psftp.exe ftp.blah.com 2>&1" 

El uso del operador de llamada & es innecesario, ya que está citando el camino exe en este caso, ya que el camino no contiene espacios. Si la ruta contenía espacios, entonces necesitaría ser citada y luego tendría que usar el operador de llamada. Dicho esto, no estoy seguro de por qué necesita usar Invoke-Expression en este caso. Lo siguiente funcionaría igual de bien dado tu ejemplo.

$output = C:\Scripts\psftp.exe ftp.blah.com 2>&1 
+0

No tocará el símbolo del sistema (se automatizará), ¿cómo puedo hacer esto en el script? – JBurace

+0

Eso es una secuencia de comandos. Todo lo que escriba en el símbolo del sistema se puede soltar en un script y se puede ejecutar, es decir, automatizado. La única excepción que puedo pensar son los comandos que requieren la entrada del usuario como Read-Host. ¿Ejecuta el psftp.exe en este indicador de moda para la entrada? –

+0

Agregaré que esto generalmente devolverá una matriz de cadenas; si desea capturar toda la salida como una sola cadena, agregue "| Out-String" al final del comando. – deadlydog

Cuestiones relacionadas