Durante años, he utilizado el shell cmd/DOS/Windows
y he pasado los argumentos de la línea de comandos a los archivos por lotes. Por ejemplo, tengo un archivo, zuzu.bat
y en él, tengo acceso a %1
, %2
, etc. Ahora, quiero hacer lo mismo cuando llamo a PowerShell
script when I am in a Cmd.exe shell
. Tengo un script, xuxu.ps1
(y he agregado PS1 a mi variable PATHEXT y archivos PS1 asociados con PowerShell). Pero no importa lo que haga, parece que no puedo obtener nada de la variable $args
. Siempre tiene longitud 0.Cómo pasar argumentos de línea de comandos a un archivo PowerShell ps1
Si estoy en un shell PowerShell
, en lugar de cmd.exe
, funciona (por supuesto). Pero todavía no me siento lo suficientemente cómodo para vivir en el entorno de PowerShell a tiempo completo. No quiero escribir powershell.exe -command xuxu.ps1 p1 p2 p3 p4
. Quiero escribir xuxu p1 p2 p3 p4
.
Esto es posible, y si es así, ¿cómo?
La muestra no puedo ir a trabajar es trivial, foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
Los resultados son siempre así:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
Creo que la clave está en el paso 6, donde se pasa en los parámetros a PowerShell .exe. Daniel dice que ha asociado archivos PS1 con PowerShell, pero que no pasa argumentos sin las especificaciones adicionales% 1% *. También tenga en cuenta que el parámetro -File no está disponible en V1. Es nuevo para V2. –
Buena captura con respecto al parámetro -file Había olvidado eso. – EBGreen
Tendré que instalar V2 antes de poder probar tu sugerencia. Gracias.Cuando dices que esto está rompiendo una característica de seguridad básica, ¿a qué se refiere "esto"? ¿Llamar a un script de PowerShell desde Cmd.exe como si fuera un archivo .com/.bat/.exe? Pasar los parámetros al script? –