W moim pliku wsadowym wywołuję skrypt PowerShell w następujący sposób:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Teraz chcę przekazać parametr ciągu do START_DEV.ps1
. Powiedzmy, że parametr to w=Dev
.
Jak mogę to zrobić?
powershell
batch-file
Karan
źródło
źródło
Odpowiedzi:
Powiedzmy, że chcesz przekazać ciąg
Dev
jako parametr z pliku wsadowego:powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
umieść wewnątrz głowy skryptu PowerShell:
$w = $args[0] # $w would be set to "Dev"
Dzieje się tak, jeśli chcesz użyć zmiennej wbudowanej
$args
. Inaczej:powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
a wewnątrz głowy skryptu PowerShell:
param([string]$Environment)
Dzieje się tak, jeśli chcesz mieć nazwany parametr.
Możesz być także zainteresowany zwróceniem poziomu błędu:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
Poziom błędu będzie dostępny w pliku wsadowym jako
%errorlevel%
.źródło
Zakładając, że Twój skrypt jest podobny do poniższego fragmentu i nosi nazwę testargs.ps1
param ([string]$w) Write-Output $w
Możesz nazwać to w linii poleceń jako:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
Spowoduje to wydrukowanie „Ciągu testowego” (bez cudzysłowów) na konsoli. „Ciąg testowy” staje się wartością $ w w skrypcie.
źródło
Po załadowaniu skryptu wszelkie przekazane parametry są automatycznie ładowane do specjalnych zmiennych
$args
. Możesz odwołać się do tego w swoim skrypcie bez uprzedniej deklaracji.Na przykład utwórz plik o nazwie
test.ps1
i po prostu umieść zmienną$args
w osobnym wierszu. Wywołanie takiego skryptu powoduje wygenerowanie następującego wyniku:PowerShell.exe -File test.ps1 a b c "Easy as one, two, three" a b c Easy as one, two, three
Zgodnie z ogólną rekomendacją, podczas wywoływania skryptu przez bezpośrednie wywołanie programu PowerShell sugerowałbym użycie tej
-File
opcji zamiast niejawnego wywoływania go za pomocą&
- może to spowodować, że wiersz poleceń będzie nieco czystszy, szczególnie jeśli chcesz poradzić sobie z zagnieżdżonymi cudzysłowami.źródło
Dodaj deklarację parametru na początku pliku 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)
Wynik
źródło
Odpowiedź @Emiliano jest doskonała. Możesz również przekazać nazwane parametry, takie jak:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
Zwróć uwagę, że parametry są poza wywołaniem polecenia, a użyjesz:
[parameter(Mandatory=$false)] [string]$NamedParam1, [parameter(Mandatory=$false)] [string]$NamedParam2
źródło