Nel mio file batch, chiamo lo script PowerShell in questo modo:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Ora voglio passare un parametro stringa a START_DEV.ps1
. Diciamo che il parametro è w=Dev
.
Come posso fare questo?
Nel mio file batch, chiamo lo script PowerShell in questo modo:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Ora voglio passare un parametro stringa a START_DEV.ps1
. Diciamo che il parametro è w=Dev
.
Come posso fare questo?
Risposte:
Diciamo che desideri passare la stringa Dev
come parametro, dal tuo file batch:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
inserisci la tua testina di script PowerShell:
$w = $args[0] # $w would be set to "Dev"
Questo se vuoi usare la variabile incorporata $args
. Altrimenti:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
e all'interno della tua testina di script PowerShell:
param([string]$Environment)
Questo se vuoi un parametro con nome.
Potresti anche essere interessato a restituire il livello di errore:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
Il livello di errore sarà disponibile all'interno del file batch come %errorlevel%
.
Supponendo che lo script sia qualcosa di simile allo snippet di seguito e denominato testargs.ps1
param ([string]$w)
Write-Output $w
Puoi chiamarlo dalla riga di comando come:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
Questo stamperà "Stringa di prova" (senza virgolette) sulla console. "Stringa di prova" diventa il valore di $ w nello script.
Quando viene caricato uno script, tutti i parametri passati vengono automaticamente caricati in una variabile speciale $args
. Puoi fare riferimento a questo nel tuo script senza prima dichiararlo.
Ad esempio, creare un file chiamato test.ps1
e avere semplicemente la variabile $args
su una riga da sola. Invocando lo script in questo modo, viene generato il seguente output:
PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three
Come raccomandazione generale, quando si richiama uno script chiamando direttamente PowerShell, suggerirei di utilizzare l' -File
opzione piuttosto che invocarla implicitamente con il &
- può rendere la riga di comando un po 'più pulita, in particolare se è necessario gestire le virgolette nidificate.
Aggiungi la dichiarazione del parametro all'inizio del file 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 risposta di @Emiliano è eccellente. Puoi anche passare parametri denominati in questo modo:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
Nota che i parametri sono al di fuori della chiamata al comando e utilizzerai:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2