usar tutorial script como commands comandos powershell

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% .