2017-10-02 18 views
0

필자는 powershell에 스크립트를 작성했으며 scrips는 원격 호스트의 DHCP 서비스와 같은 일부 시스템 서비스의 상태에 대한 정보를 수집합니다. 때때로 원격 호스트에 연결하여 WMI에서 정보를 수집하는 데 문제가 있습니다. 아래 의 WMI 명령Powershell - 원격 연결을 통한 WMI 오류

$DHCP = Get-WmiObject win32_service -ComputerName $server 2>>$logerror2 | 
Where-Object -FilterScript {$_.Name -eq "dhcp"} 

나는 두 특성을 갖는 객체를 만든 다음 출력 .csv 파일에 관한 것이다

   [pscustomobject][ordered]@{ 
       ServerName = $server 
       DHCP = $DHCP.State 
       } 

파일의 내용은 다음과 같다 :

"ServerName","DHCP" 
"srv1","Running" 
"srv2",, 
"srv3",, 

"srv2"및 "srv3"이라는 호스트에서 원격 호스트 WMI의 연결 및 수집 정보에 문제가 있습니다. 나는 예 "WMI 문제"에 대한 몇 가지 정보를 제공하는 대신에 빈 공간 싶습니다, 그리고 파일의 내용은해야는 다음과 같습니다

"ServerName","DHCP" 
"srv1","Running" 
"srv2",WMI Problem, 
"srv3",WMI Problem,  

답변

1

가 확인을해야,이 시도 :

## Clear the Error variable incase the last server had an error ## 
if ($error) 
{ 
    $error.clear() 
} 

## Attempt to do the WMI command ## 
try 
{ 
    $DHCP = Get-WmiObject win32_service -ComputerName $server -erroraction stop | Where-Object {$_.Name -eq "dhcp"} 
} 
Catch 
{ 
    $errormsg = $_.Exception.Message 
} 

## If the WMI command errored then do this ## 
if ($error) 
{ 
    [pscustomobject][ordered]@{ 
    ServerName = $server 
    DHCP = $errormsg 
    } 
} 

## If the WMI command was successful do this ## 
Else 
{ 
    [pscustomobject][ordered]@{ 
    ServerName = $server 
    DHCP = $DHCP.State 
    } 
} 
0

@ Dizzy의 답변에서 한 페이지를 가져옵니다.

$CSV = Foreach ($Server in $ServerList) 
{ 
    $ServerObj = [pscustomobject][ordered]@{ 
     ServerName = $server 
     DHCP = $null 
    } 

    ## Attempt to do the WMI command ## 
    try 
    { 
     $DHCP = Get-WmiObject win32_service -ComputerName $server -erroraction stop | Where-Object {$_.Name -eq "dhcp"} 
     [String]$ServerObj.DHCP = $DHCP.State 
    } 
    Catch 
    { 
     $errormsg = $_.Exception.Message 
     [String]$ServerObj.DHCP = $errormsg 
    } 
    $ServerObj 
} 
$CSV | Export-Csv .\result.csv -NoTypeInformation