2012-05-08 10 views
6

Mam obecnie problemy podczas wywoływania modułu importu z Powershell i byłbym wdzięczny za radę.Jak poprawnie ignorować błędy modułu importu w programie PowerShell

Zgodnie z wcześniejszymi pytaniami i odpowiedziami tutaj następujący błąd, gdy otrzymali podczas próby importowania moduł za pomocą PowerShell, mogą być ignorowane:

Plik pominięty, ponieważ był już obecny od „Microsoft.PowerShell”.

Problem polega na tym, że zostanie on złapany, jeśli polecenie import znajduje się w instrukcji try/catch.

Czytałem wiele postów dotyczących tego (np PowerShell on SCOM fails to import module) i jeden wspominając spróbować dodając „-ErrorAction SilentlyContinue” do polecenia Import-Module, ale niestety to nie robi różnicy.

Poniżej znajduje się kod, którego używam obecnie do testowania problemu, który powinien dać ci lepsze zrozumienie tego, co próbuję osiągnąć.

Czy ktoś zdołał skutecznie zignorować te ostrzeżenia podczas importowania modułu, a wcześniej był zapakowany w try/catch?

Dzięki za poświęcony czas,

Andrew

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: $_" 
} 
+0

Czy pojawia się błąd można wymienić podczas ładowania modułu ad z kodem testu, bo NIE –

+0

Hi Shay, tak, uruchomienie "Import-Module ActiveDirectory" samo w sobie da mi ten błąd. – AndrewB

+0

Czy otrzymujesz "załadowany"? ActiveDirectory modułu importu; Write-Host "załadowany" –

Odpowiedz

5
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 
} 
+0

Oprócz braku $ on retVal w haczyku, jest coraz bliżej. Dodanie try/catch wokół modułu importu ukryje błąd i uniemożliwi jego przechwycenie w głównym try/catch. Dzięki. Chcemy tylko, aby ukryć błąd, jeśli jest to komunikat "Pominięto plik, ponieważ był już obecny", ale można to zrobić, sprawdzając komunikat o wyjątku. – AndrewB

+0

Dodano brakujące $ –

Powiązane problemy