🗺

[PowerShell]指定したモジュールの導入有無を確認するFunction

2024/06/17に公開

概要

PowerShellは、モジュールを追加(導入・インストール)することで、機能が拡張されます。
拡張される機能はインストールするモジュールによって異なります。

今回は、PowerShellスクリプトにおいて、指定したモジュールが導入されているかBoolでチェックするFunctionを自作したので紹介。

この記事のターゲット

  • PowerShellユーザーの方
  • PowerShellスクリプトなどで指定したモジュールの導入有無を確認したい方

対応方法

指定したモジュール名で導入有無をチェックするFunction

チェックのみ(Get-Module)だけであれば、管理者権限は不要。

モジュールの導入有無を確認
function Test-ModuleInstalled {
    param (
        [System.String]$ModuleName
    )

    $moduleInstalled = $false

    # モジュール情報を取得
    $module = (Get-Module -ListAvailable -Name $ModuleName)
    # モジュールが導入済みの場合
    if ($null -ne $module) {
        $moduleInstalled = $true
    }
    
    return $moduleInstalled
}

未導入と判定した場合にインストール処理をするコード

上記のFunctionを使用しチェックの結果、モジュールが未導入と判断した場合のみインストール処理を実行するコードは下記の通り。
このコードの場合、モジュールのインストールを伴う為、管理者権限が必要 です。

未導入の場合に該当モジュールをインストールするコード
# ImportExcel モジュールのインストール
$moduleName = 'ImportExcel'
if (-Not(Test-ModuleInstalled $moduleName)) {
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    # 管理者権限が必要
    Install-Module -Name $moduleName -Scope CurrentUser -Force
    Write-Host "$($moduleName) モジュールをインストールしました。"
} else {
    Write-Host "$($moduleName) モジュールは既にインストールされています。"
}

導入済みと判定した場合にアンインストール処理をするコード

上記、インストール処理の真逆の処理です。
これもアンインストール実行時に 管理者権限が必要 となります。

導入済みの場合に該当モジュールをアンインストールするコード
# ImportExcel モジュールのインストール
$moduleName = 'ImportExcel'
if (Test-ModuleInstalled $moduleName) {
    # 管理者権限が必要
    Uninstall-Module -Name $moduleName -AllVersions
    Write-Host "$($moduleName) モジュールをアンインストールしました。"
} else {
    Write-Host "$($moduleName) モジュールは見つかりませんでした。"
}

まとめ

  • 指定したモジュール名が導入されているか戻り値「bool$True or $False)」で確認できるFunctionを自作できた
  • 作成したFunctionで判定した結果が未導入($False)でインストールコマンド(Install-Module )を実行する場合は、管理者権限が必要
  • 作成したFunctionで判定した結果が導入済み($True)でアンインストールコマンド(Uninstall-Module )を実行する場合も、管理者権限が必要

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion