GitHub ActionsでPowerShellを実行する方法を調べて、サンプルコード書いたのでまとめておきます。ワークフローから直接実行するパターンと、ps1ファイルを実行するパターンがあります。今回まとめてみて分かったことは、書き方によって実行されるPowerShellのEditionやVersionが異なることです。
コードはこちら
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: cmd
やshell: pwsh
から ps1ファイルを実行すればOKです。注意点はチェックアウトを忘れずにです。サンプルコードを書いているときに「なぜか実行されない」と思っていたらそもそもファイルがなかったという凡ミスをしたので、注意してください。また、shell: cmd
やshell: pwsh
どちらで実行してもPowerShellのEditionはDesktopとして実行されました。
まとめ
- GitHub Actions で PowerShell を実行する方法がわかった
- ワークフローから直接実行、ps1ファイルを実行、どちらも可能
- 構文の書き方の違いで実行されるPowerShellのバージョンが変わるため注意が必要
- 特別な理由がない限り、shell: pwsh で実行したほうが良い
参考
GitHub Actionsのワークフロー構文 - GitHub Docs
ASCII.jp:あらためて「PowerShell」の現状と登場後の経緯を整理する (1/2)
PowerShell 7.0 の新機能 - PowerShell | Microsoft Docs
参考2
GitHub Actionとは?については過去に書いています。
iucstscui.hatenablog.com