En mi archivo 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?
En mi archivo 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?
Respuestas:
Digamos que le gustaría pasar la cadena Dev
como un parámetro, desde su archivo por lotes:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
poner dentro de su cabeza de script de powershell:
$w = $args[0] # $w would be set to "Dev"
Esto si desea utilizar la variable incorporada $args
. De otra manera:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
y dentro de la cabeza del script de powershell:
param([string]$Environment)
Esto si desea un parámetro con nombre.
También puede 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%
.
Suponiendo que su secuencia de comandos es algo como el siguiente fragmento y se llama testargs.ps1
param ([string]$w)
Write-Output $w
Puede llamar a esto en la línea de comandos como:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
Esto imprimirá "Test String" (sin comillas) en la consola. "Test String" se convierte en el valor de $ w en el script.
Cuando se carga un script, los parámetros que se pasan se cargan automáticamente en variables especiales $args
. Puede hacer referencia a eso en su secuencia de comandos sin antes declararlo.
Como ejemplo, cree un archivo llamado test.ps1
y simplemente tenga la variable $args
en una línea por sí misma. Al invocar el script de esta manera, se 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 a PowerShell directamente, sugeriría usar la -File
opción en lugar de invocarla implícitamente con el &
- puede hacer que la línea de comando sea un poco más limpia, particularmente si necesita lidiar con comillas anidadas.
Agregue la declaración de parámetros en la parte superior del archivo ps1
param(
# Our preferred encoding
[parameter(Mandatory=$false)]
[ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
[string]$Encoding = "UTF8"
)
write ("Encoding : {0}" -f $Encoding)
C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII
La respuesta de @Emiliano es excelente. También puede pasar parámetros con nombre así:
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 utilizará:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2