Как правильно игнорировать ошибки Import-Module в PowerShell

В настоящее время у меня возникают проблемы при вызове Import-Module с Powershell, и я был бы признателен за некоторые советы.

Согласно предыдущим вопросам и ответам здесь, следующая ошибка, полученная при попытке импортировать модуль с помощью PowerShell, может быть проигнорирована:

Файл пропущен, поскольку он уже присутствовал в Microsoft.PowerShell.

Проблема в том, что он будет перехвачен, если команда import находится внутри оператора try / catch.

Я прочитал несколько постов, касающихся этого (например, PowerShell на SCOM не может импортировать модуль), и в одном из них упоминается попытка добавить "-ErrorAction SilentlyContinue" к команде Import-Module, но, к сожалению, это не имеет значения.

Ниже приведен код, который я сейчас использую для тестирования проблемы, которая должна дать вам лучшее понимание того, чего я пытаюсь достичь.

Кому-нибудь удалось успешно проигнорировать эти предупреждения при импорте модуля, пока он был включен в 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: $_" 
}

1 ответ

Решение
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
}
Другие вопросы по тегам