はんなりと、ゆるやかに

アジャイル、スクラムが好きなITエンジニアが日々から学んだことをアウトプット

GitHub ActionsでPowerShellを実行する

GitHub ActionsでPowerShellを実行する方法を調べて、サンプルコード書いたのでまとめておきます。ワークフローから直接実行するパターンと、ps1ファイルを実行するパターンがあります。今回まとめてみて分かったことは、書き方によって実行されるPowerShellのEditionやVersionが異なることです。

コードはこちら

github.com

GitHub Actionsのワークフローはこちら

name: PowerShellTest

on: push

jobs:
  first_job:
    runs-on: windows-2019
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Display hello world pwsh
        run: |
          write-host "hello world pwsh"
          $PSVersionTable
        shell: pwsh

      - name: Display hello world powershell
        run: |
          write-host "hello world pwsh"
          $PSVersionTable
        shell: powershell

      - name: run ps1File cmd
        run: powershell -NoProfile -ExecutionPolicy Unrestricted ./helloworld.ps1
        shell: cmd

      - name: run ps1File pwsh
        run: powershell -NoProfile -ExecutionPolicy Unrestricted ./helloworld.ps1
        shell: pwsh

ワークフローから直接実行する方法

ワークフローのこの部分がPowerShellを実行している部分です。

     - name: Display hello world pwsh
        run: |
          write-host "hello world pwsh"
          $PSVersionTable
        shell: pwsh

shell: pwsh と指定するとPowerShell Coreとして実行されます。実行結果を見てもPowerShell Coreとして実行されていることがわかります。

Run write-host "hello world pwsh"
  write-host "hello world pwsh"
  $PSVersionTable
  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
hello world pwsh

Name                           Value
----                           -----
PSVersion                      7.1.3
PSEdition                      Core
~省略~

shell の指定を powershell と書くと、Windows PowerShell として実行される

上で紹介した構文との違いはshell: powershellだけです。

      - name: Display hello world powershell
        run: |
          write-host "hello world pwsh"
          $PSVersionTable
        shell: powershell

この違いで実行されるPowerShellのEditionがDesktopに変わっていることがわかります。PowerShell 7.0以上で追加された機能を使う場合は、pwshを指定したほうが良いです。

Run write-host "hello world pwsh"
  write-host "hello world pwsh"
  $PSVersionTable
  shell: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.EXE -command ". '{0}'"
hello world pwsh

Name                           Value                                                                                   
----                           -----                                                                                   
PSVersion                      5.1.17763.1971                                                                          
PSEdition                      Desktop     
~省略~

ps1 ファイルを実行する

ps1 ファイルを実行するのは以下の部分です。

      - name: Checkout
        uses: actions/checkout@v2
~省略~
      - name: run ps1File cmd
        run: powershell -NoProfile -ExecutionPolicy Unrestricted ./helloworld.ps1
        shell: cmd

shell: cmdshell: pwshから ps1ファイルを実行すればOKです。注意点はチェックアウトを忘れずにです。サンプルコードを書いているときに「なぜか実行されない」と思っていたらそもそもファイルがなかったという凡ミスをしたので、注意してください。また、shell: cmdshell: pwsh どちらで実行してもPowerShellのEditionはDesktopとして実行されました。

まとめ

  • GitHub Actions で PowerShell を実行する方法がわかった
    • ワークフローから直接実行、ps1ファイルを実行、どちらも可能
  • 構文の書き方の違いで実行されるPowerShellのバージョンが変わるため注意が必要
    • 特別な理由がない限り、shell: pwsh で実行したほうが良い

参考2

GitHub Actionとは?については過去に書いています。
iucstscui.hatenablog.com