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?
powershell
batch-file
Karan
fuente
fuente
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%
.fuente
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.
fuente
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.fuente
Agregue la declaración de parámetros 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
fuente
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
fuente