Как правильно игнорировать ошибки 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
}