8

現在、Powershell で Import-Module を呼び出しているときに問題が発生しています。アドバイスをいただければ幸いです。

ここでの以前の質問と回答によると、PowerShell を使用してモジュールをインポートしようとしたときに次のエラーが表示された場合、無視できます。

"Microsoft.PowerShell" から既に存在していたため、ファイルはスキップされました。

問題は、インポート コマンドが try / catch ステートメント内にある場合にキャッチされることです。

私はこれに関する多くの投稿を読みました ( SCOM の PowerShell がモジュールのインポートに失敗する例) と、Import-Module コマンドに "-ErrorAction SilentlyContinue" を追加してみるように言及した人もいましたが、残念ながらこれは違いはありません。

以下は、問題をテストするために現在使用しているコードです。これにより、私が達成しようとしていることをよりよく理解できるはずです。

前に try / catch でラップされている間に、モジュールのインポートに関するこれらの警告をうまく無視できた人はいますか?

御時間ありがとうございます、

アンドリュー

function load_module($name)
{
    if (-not(Get-Module -Name $name))
    {
        if (Get-Module -ListAvailable | Where-Object { $_.name -eq $name })
        {
            Import-Module $name  

            return $true
        }
        else
        {   
            return $false
        }
    }
    else
    {
        return $true
    }
}

$moduleName = "ActiveDirectory"

try 
{
    if (load_module $moduleName)
    {
        Write-Host "Loaded $moduleName"
    }
    else
    {
        Write-Host "Failed to load $moduleName"
    }
}
catch 
{
    Write-Host "Exception caught: $_" 
}
4

1 に答える 1

9
function Load-Module
{
    param (
        [parameter(Mandatory = $true)][string] $name
    )

    $retVal = $true

    if (!(Get-Module -Name $name))
    {
        $retVal = Get-Module -ListAvailable | where { $_.Name -eq $name }

        if ($retVal)
        {
            try
            {
                Import-Module $name -ErrorAction SilentlyContinue
            }

            catch
            {
                $retVal = $false
            }
        }
    }

    return $retVal
}
于 2012-05-08T14:12:03.503 に答える