2

GWMI クエリが失敗したときに、カスタム エラー メッセージをログに出力したいと考えています。例外をキャッチできますが、エラー ファイルの出力にはリスト内の最後のコンピューターの名前しか含まれていないため、明らかに最後の例外だけです。WMI が有効になっていないことがわかっているコンピューターのリストを使用しています。それぞれにエントリがあるはずです。

テキスト ファイルにドメイン コンピューターのリストがあり、それぞれが 1 行であり、末尾の文字はありません。GWMI を使用して、ファイルをループしてネットワーク情報を取得します。一部のコンピュータでは WMI が有効になっていません。どのコンピュータかを知りたいです。私の現在のスクリプトは単にスローします:

gwmi : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At line:12 char:17
+         $base = gwmi win32_networkadapterconfiguration -computername $comp | whe ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId :        GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand   

wmi が有効になっていないマシンをループするたびに。

これは、例外をスローしたコンピューターを識別しません。私が望むのは、エラーがスローされるたびRPC server is unavailable...に、カスタムエラーメッセージが例外をスローしたコンピューターの名前でログに書き込まれることです。

私のスクリプト:

$computers = Get-Content -path f:\scripts\docs\computer_list_test.txt

if (F:\scripts\wmi_mac_output.txt){
rm F:\scripts\wmi_mac_output.txt
}

foreach ($comp in $computers) {

try
{

    $base = gwmi win32_networkadapterconfiguration -computername $comp -ErrorAction Stop | where {$_.dnsdomain -eq "mydomain.com"}
    $machine = $base.DNSHostName 
    $mac = $base.MACAddress
    $ip = $base.IPAddress
    "<COMPUTER>`n`tname: $machine`n`tMAC: $mac`n`tIP: $ip`n</COMPUTER>" | Out-File F:\scripts\wmi_mac_output.txt
}


catch [Exception]
{
    if ($_.Exception.GetType().Name -eq "COMException")
    {
       "$comp has no winrm" > f:\scripts\docs\error.txt
    }
}
}

ありがとうございました。

4

1 に答える 1