2012-05-08 19 views
6

Tôi hiện đang gặp sự cố khi gọi Nhập-Mô-đun với Powershell và sẽ biết ơn một số lời khuyên.Cách bỏ qua các lỗi Nhập-Mô-đun đúng cách trong PowerShell

Theo lời các câu hỏi và câu trả lời trước đây, các lỗi sau, khi nhận được trong khi cố gắng để nhập khẩu một module sử dụng PowerShell, có thể được bỏ qua:

tập tin bị bỏ qua vì nó đã hiện diện từ "Microsoft.PowerShell".

Vấn đề là nó sẽ bị bắt nếu lệnh nhập khẩu nằm trong một câu lệnh try/catch.

Tôi đã đọc một số bài viết liên quan đến điều này (ví dụ PowerShell on SCOM fails to import module) và đã đề cập đến việc thêm "-ErrorAction SilentlyContinue" vào lệnh Import-Module, nhưng tiếc là điều này không có sự khác biệt.

Dưới đây là đoạn code Tôi hiện đang sử dụng để kiểm tra các vấn đề mà nên cung cấp cho bạn một sự hiểu biết tốt hơn về những gì tôi đang cố gắng để đạt được.

Có ai quản lý để bỏ qua thành công những cảnh báo về nhập khẩu mô-đun trong khi bọc trong một try/catch trước?

Cảm ơn thời gian của bạn,

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

Bạn nhận được lỗi bạn đề cập đến khi bạn nạp module AD với mã thử nghiệm của bạn, vì tôi không –

+0

Hi Shay, có, chạy "Import-Module ActiveDirectory" trên của riêng nó sẽ cho tôi lỗi này. – AndrewB

+0

Bạn có được "nạp" không? Import-Module ActiveDirectory; Viết-Host "nạp" –

Trả lời

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

Ngoài việc thiếu $ trên retVal trong phần đánh bắt, điều này đang tiến gần hơn. Thêm một thử/nắm bắt xung quanh mô-đun nhập sẽ ẩn lỗi và ngăn chặn nó bị bắt trong thử/nắm bắt chính. Cảm ơn. Chúng tôi chỉ muốn ẩn lỗi nếu đó là thông báo "Tệp bị bỏ qua vì nó đã xuất hiện" cụ thể, nhưng điều này có thể được thực hiện bằng cách kiểm tra thông báo ngoại lệ. – AndrewB

+0

Đã thêm $ bị thiếu –

Các vấn đề liên quan