Powershell - ошибка WMI через удаленное соединение

Я написал скрипт на powershell, scrips собирает информацию о состоянии некоторых системных служб, например, службы DHCP на удаленных хостах. Иногда возникает проблема с подключением к удаленным хостам и сбором информации из WMI. Команда WMI ниже:

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

Я создал объект с двумя свойствами:

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

Вывод направляется в файл.csv, содержимое файла выглядит так:

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

На хостах с именами "srv2" и "srv3" существует проблема с подключением и сбором информации с удаленных хостов WMI. Я хотел бы вместо пустого пространства дать некоторую информацию, например, "Проблема WMI", и содержимое файла должно выглядеть так:

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

2 ответа

Решение

Попробуйте это, должно быть в порядке:

## 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
    }
}

Взяв страницу из ответа @ Диззи.

$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
Другие вопросы по тегам