2012-05-08 11 views
6

Attualmente sto riscontrando problemi durante la chiamata a Import-Module con PowerShell e sarei grato per qualche consiglio.Come ignorare correttamente gli errori Import-Module in PowerShell

Secondo domande precedenti e risposte qui, il seguente errore, quando ha ricevuto mentre sta cercando di importare un modulo utilizzando PowerShell, può essere ignorato:

File saltato perché era già presente da "Microsoft.PowerShell".

Il problema è che verrà catturato se il comando di importazione è all'interno di un'istruzione try/catch.

Ho letto un numero di post su questo (esempio PowerShell on SCOM fails to import module) e uno ha menzionato per provare ad aggiungere "-ErrorAction SilentlyContinue" al comando Import-Module, ma sfortunatamente questo non fa alcuna differenza.

Di seguito è riportato il codice che sto attualmente utilizzando per testare il problema che dovrebbe fornire una migliore comprensione di ciò che sto cercando di ottenere.

Qualcuno è riuscito a ignorare con successo questi avvertimenti sull'importazione del modulo mentre è stato eseguito il wrapping in un try/catch prima?

Grazie per il vostro tempo,

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

si ottiene l'errore si parla quando si carica il modulo di AD con il codice di prova, perché io non –

+0

Hi Shay, sì, l'esecuzione di "Import-Module ActiveDirectory" da sola mi darà questo errore. – AndrewB

+0

Ricevi "caricato"? Import-Module ActiveDirectory; Write-Host "loaded" –

risposta

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

A parte la mancanza del $ on retVal nella presa, questo si sta avvicinando. Aggiungere un try/catch al modulo di importazione nasconderà l'errore e impedirà che venga catturato nel try/catch principale. Grazie. Vogliamo solo nascondere l'errore se è il messaggio specifico "File saltato perché era già presente", ma è possibile farlo controllando il messaggio di eccezione. – AndrewB

+0

Aggiunto $ mancanti –