2012-05-08 625 views
6

Actualmente tengo problemas al llamar a Import-Module con Powershell y le agradeceré algunos consejos.Cómo ignorar correctamente los errores del Módulo de importación en PowerShell

De acuerdo con las preguntas y respuestas anteriores aquí, el siguiente error, cuando se reciben al mismo tiempo tratando de importar un módulo de uso de PowerShell, puede ser ignorado:

archivo omitido debido a que ya estaba presente desde "Microsoft.PowerShell".

El problema es que se detectará si el comando de importación se encuentra dentro de una declaración try/catch.

He leído un número de publicaciones relacionadas con esto (ejemplo PowerShell on SCOM fails to import module) y mencioné para intentar agregar "-ErrorAction SilentlyContinue" al comando Import-Module, pero desafortunadamente esto no hace diferencia.

A continuación se muestra el código que estoy utilizando actualmente para probar el problema que debería proporcionarle una mejor comprensión de lo que estoy tratando de lograr.

¿Alguien ha logrado ignorar con éxito estas advertencias en la importación del módulo mientras estaba envuelto en un try/catch antes?

Gracias por su tiempo,

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

Cómo se obtiene el error que mencionas cuando se carga el módulo AD con su código de prueba, porque yo no –

+0

Hola Shay, sí, ejecutar "Import-Module ActiveDirectory" por sí solo me dará este error. – AndrewB

+0

¿Te "cargan"? Import-Module ActiveDirectory; Write-Host "cargado" –

Respuesta

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

Además de perder $ en retVal en la captura, esto se está acercando. Agregar un try/catch alrededor del módulo de importación ocultará el error y evitará que quede atrapado en el try/catch principal. Gracias. Solo queremos que oculte el error si es el mensaje específico "Archivo omitido porque ya estaba presente", pero esto se puede realizar al marcar el mensaje de excepción. – AndrewB

+0

Agregó los $ perdidos –

Cuestiones relacionadas