script - powershell tutorial
Pase el parĂ¡metro del archivo por lotes al script powershell (5)
Agregue la declaración de param en la parte superior del archivo ps1
test.ps1
param(
# Our preferred encoding
[parameter(Mandatory=$false)]
[ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
[string]$Encoding = "UTF8"
)
write ("Encoding : {0}" -f $Encoding)
resultado
C:/temp> ./test.ps1 -Encoding ASCII
Encoding : ASCII
En mi archivo de proceso por lotes, llamo al script de powershell así:
powershell.exe "& "G:/Karan/PowerShell_Scripts/START_DEV.ps1"
Ahora, quiero pasar un parámetro de cadena a START_DEV.ps1
. Digamos que el parámetro es w=Dev
.
¿Cómo puedo hacer esto?
Cuando se carga un script, cualquier parámetro que se pase se carga automáticamente en una variable especial $args
. Puedes hacer referencia a eso en tu script sin declararlo primero.
Como ejemplo, cree un archivo llamado test.ps1
y simplemente tenga la variable $args
en una línea por sí mismo. Invocar el script de esta manera genera el siguiente resultado:
PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three
Como recomendación general, al invocar un script llamando directamente a PowerShell, sugeriría usar la opción -File
lugar de invocarla implícitamente con el &
-; esto puede hacer que la línea de comando sea un poco más limpia, particularmente si necesita tratar con comillas anidadas.
La respuesta de @Emiliano es excelente. También puede pasar los parámetros nombrados de la siguiente manera:
powershell.exe -Command ''G:/Karan/PowerShell_Scripts/START_DEV.ps1'' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
Tenga en cuenta que los parámetros están fuera de la llamada de comando y usará:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2
Suponiendo que su script es algo así como el fragmento de abajo y se llama testargs.ps1
param ([string]$w)
Write-Output $w
Puede llamar esto a la línea de comando como:
PowerShell.Exe -File C:/scripts/testargs.ps1 "Test String"
Esto imprimirá "Cadena de prueba" (sin comillas) en la consola. "Cadena de prueba" se convierte en el valor de $ w en el script.
powershell -command "G:/Karan/PowerShell_Scripts/START_DEV.ps1 Dev"
y dentro de la cabeza del script:
$w=$args[0]
Esto si quieres usar la variable incorporada $args
. De otra manera:
powershell -command "G:/Karan/PowerShell_Scripts/START_DEV.ps1 -w /"Dev/""
y dentro de la cabeza del script:
param([string]$w)
Esto si quieres un parámetro con nombre.
También podría estar interesado en devolver el nivel de error:
powershell -command "G:/Karan/PowerShell_Scripts/START_DEV.ps1 Dev; exit $LASTEXITCODE"
El nivel de error estará disponible dentro del archivo por lotes como %errorlevel%
.