У своєму командному файлі я називаю сценарій PowerShell таким чином:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Тепер я хочу передати параметр рядка в START_DEV.ps1
. Скажімо, параметр є w=Dev
.
Як я можу це зробити?
У своєму командному файлі я називаю сценарій PowerShell таким чином:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Тепер я хочу передати параметр рядка в START_DEV.ps1
. Скажімо, параметр є w=Dev
.
Як я можу це зробити?
Відповіді:
Скажімо, ви хотіли б передати рядок 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"
Після цього на консолі буде надруковано "Тестовий рядок" (без лапок). "Тестовий рядок" стає значенням $ 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
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