2012-09-07 7 views
7

In uno script PowerShell, ho qualcosa di simile:Come convogliare l'output di Invoke-Expression nella stringa?

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

voglio tubo di tutti gli output, errori ecc di questa alla stringa $output

Come posso fare questo? Ho provato > alla fine e $output = ... ma nessuno sembra catturare errori e l'ordinamento.

risposta

12

Prova questa:

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

L'uso dell'operatore chiamata & è inutile, in quanto sta citando il percorso exe in questo caso, poiché il percorso non contenga spazi. Se il percorso conteneva spazi, allora avrebbe bisogno di essere quotato e quindi si dovrebbe usare l'operatore di chiamata. Detto questo, non sono sicuro del motivo per cui in questo caso è necessario utilizzare Invoke-Expression. Quanto segue funzionerebbe altrettanto bene dato il tuo esempio.

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

Non toccherà il prompt dei comandi (sarà automatizzato), come posso farlo all'interno dello script? – JBurace

+0

Questo è lo script. Tutto ciò che scrivi al prompt dei comandi può essere inserito in uno script ed eseguito automaticamente. L'unica eccezione che posso pensare sono i comandi che richiedono l'input dell'utente come Read-Host. L'esecuzione di psftp.exe in questo modo richiede l'input? –

+0

Aggiungo che questo in genere restituisce un array di stringhe; se vuoi che tutto l'output sia catturato come una singola stringa, aggiungi "| Out-String" alla fine del comando. – deadlydog