start - Ejecutando un comando almacenado en una variable de Powershell
principales comandos de powershell (2)
Aquí hay otra manera sin Invoke-Expression
pero con dos variables (comando: cadena y parámetros: matriz). Funciona bien para mí. Supongamos que 7z.exe
está en la ruta del sistema.
$cmd = ''7z.exe''
$prm = ''a'', ''-tzip'', ''c:/temp/with space/test1.zip'', ''C:/TEMP/with space/changelog''
& $cmd $prm
Si el comando es conocido (7z.exe) y solo los parámetros son variables, esto hará
$prm = ''a'', ''-tzip'', ''c:/temp/with space/test1.zip'', ''C:/TEMP/with space/changelog''
& 7z.exe $prm
Por cierto, Invoke-Expression
con un parámetro también funciona para mí, por ejemplo, esto funciona
$cmd = ''& 7z.exe a -tzip "c:/temp/with space/test2.zip" "C:/TEMP/with space/changelog"''
Invoke-Expression $cmd
PD. Por lo general, prefiero el camino con una matriz de parámetros porque es más fácil componer programáticamente que construir una expresión para Invoke-Expression
.
Tengo un comando que tengo compilado y almacenado en una variable en power shell. Este comando funciona si hago un write-host y lo copio y lo paso a una ventana estándar de cmd.exe.
¿Cómo ejecuto este comando desde adentro de mi script?
He intentado varias combinaciones de invoke-command o invoke-expression sin suerte.
Así es como construí la variable:
$cmd1= $arcprg + $arcdir + "/" + $site1+"-"+$hst+"-"+$yesterday+".zip "+$logpath1+"u_ex"+$yesterday+".log"
Esta es la apariencia de la variable si se imprime en la pantalla:
7z.exe a -tzip c:/arc_logs/site-host-at-web1-100827.zip c:/inetpub/logs/logfiles/w3svc1/u_ex100827.log
Intenta invocar tu comando con invoke-expression
.
invoke-expression $cmd1
Aquí hay un ejemplo de trabajo en mi máquina:
$cmd = "& ''C:/Program Files/7-zip/7z.exe'' a -tzip c:/temp/test.zip c:/temp/test.txt"
invoke-expression $cmd