このタスクを使用して、Linux、macOS、または Windows で PowerShell スクリプトを実行します。
注
既定では、PowerShell v2 では Linux エージェント用の PowerShell Core と Windows エージェント用の Windows PowerShell が使用されます。 Windows エージェントで最新バージョンの PowerShell を使用するには、pwsh パラメーターを trueに設定します。 代わりに PowerShell Core が使用されます。
構文
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
inputs:
#targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
filePath: # string. Required when targetType = filePath. Script Path.
#arguments: # string. Optional. Use when targetType = filePath. Arguments.
#script: # string. Required when targetType = inline. Script.
# Preference Variables
#errorActionPreference: 'stop' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
#warningPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. WarningPreference. Default: default.
#informationPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. InformationPreference. Default: default.
#verbosePreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. VerbosePreference. Default: default.
#debugPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. DebugPreference. Default: default.
#progressPreference: 'silentlyContinue' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. ProgressPreference. Default: silentlyContinue.
# Advanced
#failOnStderr: false # boolean. Fail on Standard Error. Default: false.
#showWarnings: false # boolean. Show warnings as Azure DevOps warnings. Default: false.
#ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
#pwsh: false # boolean. Use PowerShell Core. Default: false.
#workingDirectory: # string. Working Directory.
#runScriptInSeparateScope: false # boolean. Run script in the separate scope. Default: false.
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
inputs:
#targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
filePath: # string. Required when targetType = filePath. Script Path.
#arguments: # string. Optional. Use when targetType = filePath. Arguments.
#script: # string. Required when targetType = inline. Script.
# Preference Variables
#errorActionPreference: 'stop' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
#warningPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. WarningPreference. Default: default.
#informationPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. InformationPreference. Default: default.
#verbosePreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. VerbosePreference. Default: default.
#debugPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. DebugPreference. Default: default.
# Advanced
#failOnStderr: false # boolean. Fail on Standard Error. Default: false.
#showWarnings: false # boolean. Show warnings as Azure DevOps warnings. Default: false.
#ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
#pwsh: false # boolean. Use PowerShell Core. Default: false.
#workingDirectory: # string. Working Directory.
#runScriptInSeparateScope: false # boolean. Run script in the separate scope. Default: false.
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
inputs:
#targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
filePath: # string. Required when targetType = filePath. Script Path.
#arguments: # string. Optional. Use when targetType = filePath. Arguments.
#script: # string. Required when targetType = inline. Script.
#errorActionPreference: 'stop' # 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
# Advanced
#failOnStderr: false # boolean. Fail on Standard Error. Default: false.
#showWarnings: false # boolean. Show warnings as Azure DevOps warnings. Default: false.
#ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
#pwsh: false # boolean. Use PowerShell Core. Default: false.
#workingDirectory: # string. Working Directory.
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
inputs:
#targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
filePath: # string. Required when targetType = filePath. Script Path.
#arguments: # string. Optional. Use when targetType = filePath. Arguments.
#script: # string. Required when targetType = inline. Script.
#errorActionPreference: 'stop' # 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
# Advanced
#failOnStderr: false # boolean. Fail on Standard Error. Default: false.
#ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
#pwsh: false # boolean. Use PowerShell Core. Default: false.
#workingDirectory: # string. Working Directory.
入力
targetType
-
型の
string。 使用できる値: filePath (ファイル パス)、inline。 既定値: filePath.
実行するタスクのスクリプトの種類 (インライン スクリプトまたは .ps1 ファイルへのパス) を指定します。
filePath
-
スクリプト パスの
string。
targetType = filePathする場合に必要です。
実行するスクリプトのパスを指定します。 完全修飾パスであるか、$(System.DefaultWorkingDirectory)に対する相対パスである必要があります。
arguments
-
引数
string。 任意
targetType = filePathするときに使用します。
PowerShell スクリプトに渡される引数を指定します。 引数には、序数パラメーターまたは名前付きパラメーターを指定できます。 たとえば、-Name someName -Path -Value "Some long string value" のようにします。
arguments は、targetType が inlineに設定されている場合は使用されません。
script
-
スクリプト
string。
targetType = inlineする場合に必要です。 既定値: # Write your PowerShell commands here.\n\nWrite-Host "Hello World".
スクリプトの内容を指定します。 サポートされるインライン スクリプトの最大長は 2,000 文字です。 より長いスクリプトを使用する場合は、ファイルのスクリプトを使用します。
errorActionPreference
-
ErrorActionPreference (エラーアクションプリファレンス)
string。 使用できる値: default、stop、continue、silentlyContinue。 既定値: stop.
スクリプトの先頭 $ErrorActionPreference = 'VALUE' 行の先頭に追加します。
errorActionPreference
-
ErrorActionPreference (エラーアクションプリファレンス)
string。 使用できる値: stop、continue、silentlyContinue。 既定値: stop.
スクリプトの先頭 $ErrorActionPreference = 'VALUE' 行の先頭に追加します。
warningPreference
-
警告設定
string。 使用できる値: default、stop、continue、silentlyContinue。 既定値: default.
Defaultに設定されていない場合は、スクリプトの先頭に $WarningPreference = 'VALUE' 行の先頭に追加します。
informationPreference
-
情報設定
string。 使用できる値: default、stop、continue、silentlyContinue。 既定値: default.
Defaultに設定されていない場合は、スクリプトの先頭に $InformationPreference = 'VALUE' 行の先頭に追加します。
VerbosePreferenceの verbosePreference -
string。 使用できる値: default、stop、continue、silentlyContinue。 既定値: default.
Defaultに設定されていない場合は、スクリプトの先頭に $VerbosePreference = 'VALUE' 行の先頭に追加します。
debugPreference
-
デバッグ設定
string。 使用できる値: default、stop、continue、silentlyContinue。 既定値: default.
Defaultに設定されていない場合は、スクリプトの先頭に $DebugPreference = 'VALUE' 行の先頭に追加します。
progressPreference
-
プログレッションプリファレンス
string。 使用できる値: default、stop、continue、silentlyContinue。 既定値: silentlyContinue.
Defaultに設定されていない場合は、スクリプトの先頭に $ProgressPreference = 'VALUE' 行の先頭に追加します。
標準エラーで失敗する failOnStderr -
boolean。 既定値: false.
このブール値の値が trueの場合、エラーがエラー パイプラインに書き込まれた場合、または標準エラー ストリームにデータが書き込まれた場合、タスクは失敗します。 それ以外の場合、タスクは終了コードに依存してエラーを判断します。
showWarnings
-
Azure DevOps の警告として警告を表示
boolean。 既定値: false.
値が trueに設定され、スクリプトが警告を書き込む場合、警告はパイプライン ログに警告として表示されます。
ignoreLASTEXITCODE
-
無視$LASTEXITCODE
boolean。 既定値: false.
値が falseに設定されている場合、スクリプトの末尾に if ((Test-Path -LiteralPath variable:\LASTEXITCODE)) { exit $LASTEXITCODE } 行が追加されます。 これにより、外部コマンドの最後の終了コードが powershellの終了コードとして伝達されます。 それ以外の場合、行はスクリプトの末尾に追加されません。
PowerShell Coreを使用する pwsh -
boolean。 既定値: false.
これが当てはまる場合、Windows エージェントで実行されているタスクは、pwsh.exeの代わりにパスから powershell.exe を使用します。
workingDirectory
-
作業ディレクトリの
string。
スクリプトを実行する作業ディレクトリを指定します。 値が指定されていない場合、作業ディレクトリは $(Build.SourcesDirectory)。
runScriptInSeparateScope
-
別のスコープ でスクリプトを実行する
boolean。 既定値: false.
この入力により、既定の &ではなく、. 演算子を使用して PowerShell スクリプトを実行できます。 この入力が trueに設定されている場合、スクリプトは別のスコープで実行され、グローバル スコープの PowerShell 変数は更新されません。
タスク コントロールのオプション
すべてのタスクには、タスク入力に加えて制御オプションがあります。 詳細については、「コントロール オプションと一般的なタスク プロパティを参照してください。
出力変数
なし。
注釈
各 PowerShell セッションは、実行されるジョブの期間中のみ継続します。 ブートストラップされた内容に依存するタスクは、ブートストラップと同じジョブ内にある必要があります。
タスクのショートカット
PowerShell@2 YAML には、steps.powershell と steps.pwshの 2 つのショートカットがあります。
-
powershellは、Windows PowerShell (Windows 上) またはpwsh(Linux および macOS) を使用して実行されます。 -
pwshは、.NET Core 上に構築された PowerShell のクロスプラットフォーム エディションである PowerShell Core を実行します。
steps:
- powershell: # Run a script in Windows PowerShell on Windows, and pwsh on Linux and macOS.
- pwsh: # Run a script in PowerShell Core on Windows, macOS, and Linux.
後続のスクリプトやタスクで読み取ることができるように変数を設定する
スクリプトでビルド変数を定義する方法の詳細については、「スクリプトでビルド変数を定義および変更する」を参照してください。
スクリプトでのリリース変数の定義の詳細については、「スクリプトでリリース変数を定義および変更する」を参照してください。
スクリプトでパイプライン シークレットを渡すが、パイプライン ログでシークレットがマスクされない
PowerShell はエラー メッセージを遮断するので、スクリプトでパイプライン シークレットを使用すると、シークレットがトリミングされて公開される可能性があることに注意してください。 たとえば、次のインライン スクリプトでは次のようになります。
./script.ps1 --arg1 value1 --arg2 <some_secret_which_will_be_masked_here>
次のような例外が発生する可能性があります: At <path_to_temp_script_file>:4 char:3:
+ ./script.ps1 --arg1 value1 --arg2 <unmasked_part_of_original_secret> ...
+ ~~~~~~~~~~
+ <Additional exception details>
この問題を回避するには、スクリプト レベルでこれらの例外を処理するか、エラー メッセージ内のソース コード行にパイプライン シークレットが表示される場合を回避できます。
例示
- ファイル からスクリプトを呼び出す
- 警告 を書き込む
- エラー を書き込む
- 複数の引数を使用して PowerShell スクリプトを呼び出
ファイルからスクリプトを呼び出す
リポジトリのルートにある test.ps1 という名前の PowerShell ファイルのサンプルを次に示します。
Write-Host "Hello World from $Env:AGENT_NAME."
Write-Host "My ID is $Env:AGENT_ID."
Write-Host "AGENT_WORKFOLDER contents:"
gci $Env:AGENT_WORKFOLDER
Write-Host "AGENT_BUILDDIRECTORY contents:"
gci $Env:AGENT_BUILDDIRECTORY
Write-Host "BUILD_SOURCESDIRECTORY contents:"
gci $Env:BUILD_SOURCESDIRECTORY
Write-Host "Over and out."
このスクリプトは、次のようにパイプラインで呼び出すことができます。
steps:
- task: PowerShell@2
inputs:
targetType: 'filePath'
filePath: 'test.ps1'
警告を書き込む
- task: PowerShell@2
inputs:
targetType: 'inline'
script: Write-Host "##vso[task.LogIssue type=warning;]This is the warning"
# Writes a warning to build summary and to log in yellow text
エラーを書き込む
- task: PowerShell@2
inputs:
targetType: 'inline'
script: Write-Host "##vso[task.LogIssue type=error;]This is the error"
# Writes an error to build summary and to log in red text
このエラーでビルドが失敗する場合は、スクリプトに exit 1 を追加します。
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "##vso[task.LogIssue type=error;]This is the error"
exit 1
# Writes an error to build summary and to log in red text
複数の引数を使用して PowerShell スクリプトを呼び出す
PowerShell スクリプト test2.ps1を作成します。
param ($input1, $input2)
Write-Host "$input1 $input2"
YAML パイプラインで、次を呼び出します。
- task: PowerShell@2
inputs:
targetType: 'filePath'
filePath: $(System.DefaultWorkingDirectory)\test2.ps1
arguments: > # Use this to avoid newline characters in multiline string
-input1 "Hello"
-input2 "World"
displayName: 'Print Hello World'
必要条件
| 要件 | 説明 |
|---|---|
| パイプラインの種類 | YAML、クラシック ビルド、クラシック リリース |
| 実行日 | エージェント、DeploymentGroup |
| の需要 | なし |
| 機能の | このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。 |
| コマンドの制限 | どれでも |
| 設定可能な変数 | どれでも |
| エージェントのバージョン | 2.115.0 以上 |
| タスク カテゴリ | 効用 |
こちらもご覧ください
- PowerShell スクリプトを使用してパイプラインをカスタマイズする - ApplyVersionToAssemblies.ps1
- PowerShell スクリプトの詳細
- Windows PowerShell を使用したスクリプトの
- Microsoft スクリプト センター (Scripting Guys)
- PowerShell.org