PowerShell タスク

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

このタスクは、PowerShell スクリプトを実行する場合に使用します。

注意

Microsoft Team Foundation Server (TFS) 2018 以前のバージョンでは、ビルドとリリースの "パイプライン" は "定義"、"実行" は "ビルド"、"サービス接続" は "サービス エンドポイント"、"ステージ" は "環境"、"ジョブ" は "フェーズ" と呼ばれます。

確認要求

  • DotNetFramework

YAML スニペット

# PowerShell
# Run a PowerShell script on Linux, macOS, or Windows
- task: PowerShell@2
  inputs:
    #targetType: 'filePath' # Optional. Options: filePath, inline
    #filePath: # Required when targetType == FilePath
    #arguments: # Optional
    #script: '# Write your PowerShell commands here.Write-Host Hello World' # Required when targetType == Inline
    #errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue
    #failOnStderr: false # Optional
    #ignoreLASTEXITCODE: false # Optional
    #pwsh: false # Optional
    #workingDirectory: # Optional

PowerShell タスクには、YAML の2つのショートカットもあります。

- powershell:  # inline script
  workingDirectory:  #
  displayName:  #
  failOnStderr:  #
  errorActionPreference:  #
  ignoreLASTEXITCODE:  #
  env:  # mapping of environment variables to add
- pwsh:  # inline script
  workingDirectory:  #
  displayName:  #
  failOnStderr:  #
  errorActionPreference:  #
  ignoreLASTEXITCODE:  #
  env:  # mapping of environment variables to add

どちらもタスクに解決さ PowerShell@2 れます。 powershell は windows PowerShell を実行し、Windows エージェントでのみ機能します。 pwsh エージェントまたはコンテナーにインストールする必要がある PowerShell Core を実行します。

注意

各 PowerShell セッションは、ジョブが実行されている間だけ継続されます。 ブートストラップの内容に依存するタスクは、ブートストラップと同じジョブ内に存在する必要があります。

引数

引数説明
targetType
Type
Optionalインラインスクリプトとファイルのパスのどちらであるかを設定 .ps1 します。 既定値は filepath です
既定値: filePath
filePath
スクリプトのパス
必要実行するスクリプトのパス。 は、完全修飾パスまたはからの相対パスである必要があり $(System.DefaultWorkingDirectory) ます。 型がの場合は必須 filePath
arguments
引数
OptionalPowershell スクリプトに渡される引数。
たとえば、-Name someName -Path -Value "Some long string value" のように指定します。

注: 型がの場合は使用され inline ません。
script
スクリプト
必要スクリプトの内容。 TargetType がの場合は必須です inline
既定値: # PowerShell コマンドをここに記述します。
Write-Host "Hello World"
errorActionPreference
ErrorActionPreference
Optional $ErrorActionPreference = 'VALUE' スクリプトの先頭に行を付加する
既定値: 停止
failOnStderr
標準エラーで失敗
Optionalこれが true の場合、エラーがエラーパイプラインに書き込まれた場合、またはデータが標準エラーストリームに書き込まれた場合、このタスクは失敗します。 そうしないと、タスクは終了コードに依存してエラーを特定します。
既定値: false
ignoreLASTEXITCODE
無視 $LASTEXITCODE
OptionalFalse の場合は、 if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE } スクリプトの末尾に行が追加されます。 これにより、外部コマンドの最後の終了コードが powershell の終了コードとして反映されます。 それ以外の場合、行はスクリプトの末尾に追加されません。
既定値: false
pwsh
PowerShell Core の使用
OptionalTrue の場合、Windows では、タスクはの代わりにパスから pwsh.exe を使用し powershell.exe
既定値: false
workingDirectory
作業ディレクトリ
Optionalコマンドを実行する作業ディレクトリを指定します。 空のままにした場合、作業ディレクトリは $(Build.SourcesDirectory)
環境変数プロセス's 環境にマップする追加項目の一覧。 たとえば、シークレット変数は自動的にマップされません。 という名前のシークレット変数がある場合は Foo 、次のようににマップできます。


- powershell: echo $env:MYSECRET
  env:
    MySecret: $(Foo)

Hello World

test.ps1リポジトリのルートでを作成します。

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."

ビルドパイプラインの [ビルド] タブで、次のタスクを追加します。

タスク 引数

ユーティリティ: PowerShell
test.ps1 を実行します。

スクリプトファイル名: test.ps1

警告の書き込み

PowerShell タスクを追加し、 をに設定 inline して、次のスクリプトを貼り付けます。

# Writes a warning to build summary and to log in yellow text
Write-Host  "##vso[task.LogIssue type=warning;]This is the warning"

エラーの書き込み

PowerShell タスクを追加し、 をに設定 inline して、次のスクリプトを貼り付けます。

# Writes an error to build summary and to log in red text
Write-Host  "##vso[task.LogIssue type=error;]This is the error"

ヒント

このエラーによってビルドが失敗するようにするには、次の行を追加します。

exit 1

ApplyVersionToAssemblies.ps1

スクリプトを使用してビルドパイプラインをカスタマイズする

複数の引数を指定して 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'

ソースを開く

このタスクは、 GitHub のオープンソースです。 フィードバックと投稿が歓迎されます。

よく寄せられる質問

PowerShell スクリプトについてはどこで学習できますか。

Windows PowerShell を使用したスクリプト

Microsoft スクリプトセンター (Scripting Guys)

Windows PowerShell のチュートリアル

PowerShell.org

変数を設定して、その後のスクリプトとタスクで読み取ることができるように操作方法しますか。

スクリプトでのビルド変数の定義の詳細については、「 スクリプトでのビルド変数の定義および変更」を参照してください。

スクリプトでのリリース変数の定義の詳細については、「 スクリプトでのリリース変数の定義および変更」を参照してください。

Q: アーティファクトを発行する際に問題が発生しています。 詳細ログを表示するにはどうすればよいですか。

パイプラインの詳細ログを有効にするには、次の手順を実行します。

  1. パイプラインを編集して 変数 を選択する
  2. 名前と値を持つ新しい変数を追加します。 System.Debug``true
  3. 保存

Q: どの変数を使用できますか。

A: $(Build.SourcesDirectory)$(Agent.BuildDirectory) は、パイプラインで使用できる変数のほんの一部です。 変数は、 またはスクリプトとして使用できます。

さまざまな種類の変数の詳細については、「変数、定義済みの変数、および従来のリリースとアイテムの変数定義」を参照してください。

エージェントは必要ですか?

ビルドまたはリリースを実行するには、エージェントが少なくとも 1 つ必要です。

問題が発生しています。 どのように対処すればよいですか?

ビルドとリリースのトラブルシューティングに関するページを参照してください。

既定のエージェント プールが選択できず、ビルドまたはリリースをキューに入れることができません。 これをどのように修正すればよいですか?

エージェント プール」を参照してください。

NuGet プッシュ タスクが次のエラーで失敗します: "Error: unable to get local issuer certificate" (エラー: ローカル発行者の証明書を取得できません)。 どうしたらいいですか。

これは、信頼されたルート証明書を追加することで修正できます。 ビルド エージェントに NODE_EXTRA_CA_CERTS=file 環境変数を追加するか、パイプラインに NODE.EXTRA.CA.CERTS=file タスク変数を追加することができます。 詳細については、環境変数に関するページを参照してください。

TFS をオンプレミスで使用していますが、これらの機能の一部が表示されません。 なぜでしょうか。

これらの機能の一部は Azure Pipelines でのみ使用でき、オンプレミスではまだ使用できません。 TFS の最新バージョンにアップグレードした場合は、一部の機能をオンプレミスで使用できます。