私のバッチファイルでは、次のように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%
。
スクリプトが読み込まれると、渡されたパラメータはすべて自動的に特殊変数に読み込まれます$args
。最初に宣言しなくても、スクリプトでそれを参照できます。
例として、というファイルを作成し、それ自体でtest.ps1
変数$args
を1行に記述します。このようなスクリプトを呼び出すと、次の出力が生成されます。
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