Передайте параметр из командного файла в сценарий PowerShell
В моем командном файле я вызываю сценарий PowerShell следующим образом:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Теперь я хочу передать строковый параметр START_DEV.ps1
. Пусть говорят, что параметр w=Dev
.
Как я могу это сделать?
Ответы
Ответ 1
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
и внутри вашей скриптовой головы:
$w=$args[0]
Это если вы хотите использовать встроенную переменную $args
. Иначе:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
и внутри вашей скриптовой головы:
param([string]$Environment)
Это если вы хотите именованный параметр.
Вы также можете быть заинтересованы в возврате уровня ошибки:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
Уровень ошибок будет доступен внутри командного файла как %errorlevel%
.
Ответ 2
Предполагая, что ваш script является чем-то вроде приведенного ниже фрагмента и назван testargs.ps1
param ([string]$w)
Write-Output $w
Вы можете вызвать это в командной строке как:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
При этом на консоли будет напечатано "Test String" (без кавычек). "Test String" становится значением $w в script.
Ответ 3
При загрузке script любые передаваемые параметры автоматически загружаются в специальные переменные $args
. Вы можете ссылаться на это в своем script, не объявив сначала.
В качестве примера создайте файл с именем test.ps1
и просто получим переменную $args
в строке. Вызов script следующим образом:
PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three
Как общая рекомендация при вызове script путем прямого вызова PowerShell я бы предложил использовать опцию -File
вместо того, чтобы неявно вызвать его с помощью &
- он может сделать командную строку немного более чистым, особенно если вам нужно иметь дело с вложенными кавычками.
Ответ 4
Добавьте объявление параметра в начало файла 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)
Результат
C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII
Ответ 5
Ответ от @Emiliano превосходный. Вы также можете передать именованные параметры следующим образом:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
Обратите внимание, что параметры находятся за пределами командного вызова, и вы будете использовать:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2