В своем пакетном файле я вызываю сценарий PowerShell следующим образом:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Теперь я хочу передать строковый параметр START_DEV.ps1
. Допустим, параметр есть w=Dev
.
Как я могу это сделать?
powershell
batch-file
Каран
источник
источник
Ответы:
Допустим, вы хотите передать строку
Dev
в качестве параметра из командного файла:powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
поместите в заголовок сценария PowerShell:
$w = $args[0] # $w would be set to "Dev"
Это если вы хотите использовать встроенную переменную
$args
. Иначе:powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
и внутри вашего сценария PowerShell:
param([string]$Environment)
Это если вам нужен именованный параметр.
Вам также может быть интересно вернуть уровень ошибки:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
Уровень ошибки будет доступен внутри командного файла как
%errorlevel%
.источник
Предполагая, что ваш скрипт похож на приведенный ниже фрагмент и называется testargs.ps1
param ([string]$w) Write-Output $w
Вы можете вызвать это в командной строке как:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
Это напечатает "Test String" (без кавычек) на консоли. «Test String» становится значением $ w в скрипте.
источник
Когда скрипт загружается, любые переданные параметры автоматически загружаются в специальные переменные
$args
. Вы можете указать это в своем скрипте, не объявляя его предварительно.В качестве примера создайте файл с именем
test.ps1
и просто поместите переменную в отдельную$args
строку. При вызове такого сценария создается следующий вывод:PowerShell.exe -File test.ps1 a b c "Easy as one, two, three" a b c Easy as one, two, three
В качестве общей рекомендации при вызове скрипта путем прямого вызова PowerShell я бы предложил использовать этот
-File
параметр, а не неявно вызывать его с помощью&
- он может сделать командную строку немного чище, особенно если вам нужно иметь дело с вложенными кавычками.источник
Добавьте объявление параметра вверху файла 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
источник
Ответ от @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
источник