2010-08-28 12 views
104

Ho un comando che ho creato e memorizzato in una variabile in power shell. Questo comando funziona se faccio un host di scrittura e copio e incollato in una finestra standard di cmd.exe.Esecuzione di un comando memorizzato in una variabile da PowerShell

Come si esegue questo comando dall'interno del mio script?

Ho provato diverse combinazioni di invoke-command o invoke-expression senza fortuna.

Ecco come ho costruito la variabile:

$cmd1= $arcprg + $arcdir + "\" + $site1+"-"+$hst+"-"+$yesterday+".zip "+$logpath1+"u_ex"+$yesterday+".log" 

Questo è ciò che la variabile appare come se viene stampato sullo schermo:

7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log 

risposta

136

Ecco ancora un altro modo, senza Invoke-Expression ma con due variabili (comando: stringa   e   parametri: array). Funziona bene per me. Si supponga che 7z.exe si trovi nel percorso di sistema.

$cmd = '7z.exe' 
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog' 

& $cmd $prm 

Se il comando è nota (7z.exe) e solo i parametri sono variabili, allora questo farà

$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog' 

& 7z.exe $prm 

BTW, Invoke-Expression con un parametro funziona per me, anche, ad esempio, funziona

P.S. Di solito preferisco il modo con un array di parametri, perché è più facile comporre a livello di programmazione piuttosto che creare un'espressione per Invoke-Expression.

+0

È grandioso. Sta cominciando a venire insieme ora. Invece di 'c: \ temp \ con spazio \ test1.zip' posso usare solo una variabile $? Devo posizionarlo "" o ""? – Travis

+0

+1 per la tecnica dell'array, questo è il mio modo preferito per farlo. –

+0

Lo splatting sembra funzionare allo stesso modo: & $ cmd @prm Ma sono curioso di sapere perché è quello – C2H5OH

22

provare a lanciare il vostro comando con invoke-expression.

invoke-expression $cmd1 

Ecco un esempio di lavoro sulla mia macchina:

$cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt" 
invoke-expression $cmd 
+0

mi dice Il termine '7z.exe un -tzip c: \ arc_logs \ site-host-at-web1-100827.zip c: \ inetpub \ logs \ logfiles \ W3SVC1 \ u_ex100827.log' non è riconosciuto come il nome di un cmdlet, una funzione, un file di script o un programma eseguibile. Controlla l'ortografia del nome o se è stato incluso un percorso, verifica che il percorso sia corretto e riprova. A: riga: 14 caratteri: 1 + & <<<< $ cmd1 – Travis

+0

@Travis: Oops. la e commerciale è funzionante se non ci sono argomenti. Ho aggiornato il post con una soluzione per il tuo comando. – kbrimington

+0

Ho già provato invoke-expression e non ha funzionato. Sputa l'errore: Costante numerica non valida: 7. A: riga: 1 carattere: 2 + 7z <<<< .exe a -tzip c: \ arc_logs \ site-host-at-web1-100827 .zip c: \ inetpub \ logs \ logfiles \ w3svc1 \ u_ex100827.log Sembra quasi che stia cercando di valutarlo invece di eseguirlo. – Travis

Problemi correlati