🔘
PowerShell 6.0以降(Core)導入有無によって実行するバージョンを切り分ける方法
概要
複数のWindows環境でPowerShellスクリプトを実行したい場合、環境によって実行するPowerShellのバージョンを切り替えたいケースがありました。
PowerShellバージョン 6.0以降のCore エディションを導入済みの場合は、pwsh.exe
でPowerShellスクリプトを実行し、
未導入の場合は、Windows標準のPowerShellバージョン 5.1、powershell.exe
で実行する方法を紹介。
この記事のターゲット
- PowerShellユーザーの方
- 6.0以降のCoreエディションを導入有無によって実行するPowerShellバージョンを切り分けたい方
- 6.0以降のCoreエディションを導入済みの場合、
pwsh.exe
でPowerShellスクリプトを実行 - 未導入の場合、
powershell.exe
(標準5.1バージョン)で実行
- 6.0以降のCoreエディションを導入済みの場合、
対応方法
PowerShellで実現する場合
コマンドの存在有無をPowerShellコマンドレット「Get-Command」で調べる事により、
PowerShell Core環境か・そうでないか判定可能です。
PowerShellで実現する場合
# 'pwsh' コマンドのパスを取得
[System.String]$pwsh_path = (Get-Command 'pwsh' -ErrorAction SilentlyContinue).Source
if ($pwsh_path) {
# pwsh がある場合(PowerShell Core環境)
pwsh -NoProfile -ExecutionPolicy Unrestricted -File "ps1ファイルのパスを指定"
} else {
# pwsh がない場合(PowerShell 5.1環境)
powershell -NoProfile -ExecutionPolicy Unrestricted -File "ps1ファイルのパスを指定"
}
コマンドプロンプト(バッチ)で実現する方法
上記のPowerShellと同様、コマンドの存在有無を確認(コマンドプロンプトの場合、WHEREコマンドを使用)し、
どちらのPowerShellバージョンで実行すべきか切り分けて実行します。
コマンドプロンプト(バッチ)で実現する方法
@REM pwshコマンドの存在確認
WHERE /Q pwsh
IF %ERRORLEVEL% == 0 (
@REM pwsh がある場合(PowerShell Core環境)
pwsh -NoProfile -ExecutionPolicy Unrestricted -File "ps1ファイルのパスを指定"
) ELSE (
@REM pwsh がない場合(PowerShell 5.1環境)
powershell -NoProfile -ExecutionPolicy Unrestricted -File "ps1ファイルのパスを指定"
)
まとめ
- PowerShellでは「
Get-Command
」でpwsh.exe
の存在有無により切り替える方法 - コマンドプロンプト(バッチ)では「
WHERE
」でpwsh.exe
の存在有無により切り替える方法
関連記事
Discussion