バッチファイルからPowerShellスクリプトにパラメーターを渡す


88

私のバッチファイルでは、次のようにPowerShellスクリプトを呼び出します。

powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"

次に、文字列パラメータをに渡しますSTART_DEV.ps1。パラメータがであるとしましょうw=Dev

これどうやってするの?


1
スクリプトは、名前付きパラメーターまたは匿名パラメーターを想定していますか?
vonPryz

回答:


139

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%


23

スクリプトが以下のスニペットのようなもので、testargs.ps1という名前であると仮定します

param ([string]$w)
Write-Output $w

コマンドラインで次のように呼び出すことができます。

PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"

これにより、コンソールに「テスト文字列」(引用符なし)が出力されます。「テスト文字列」は、スクリプトの$ wの値になります。


13

スクリプトが読み込まれると、渡されたパラメータはすべて自動的に特殊変数に読み込まれます$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場合は、オプションを暗黙的に呼び出すのではなく、オプションを使用することをお勧めします&。特に、ネストされた引用符を処理する必要がある場合は、コマンドラインを少しクリーンにすることができます。


7

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

6

@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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.