Обработка ошибок - скрипт PowerShell - PullRequest
1 голос
/ 11 августа 2011

У меня есть следующий скрипт powershell, который циклически просматривает список имен хостов и изменяет настройки DNS для активных интерфейсов:

$servers = Get-Content C:\users\kevin.todd\desktop\serverlist.txt 



foreach($server in $servers)

{

    Write-Host "Connect to $server..."

    $nics = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $server -ErrorAction Inquire | Where{$_.IPEnabled -eq "TRUE"}

    $newDNS = "10.100.10.81","10.100.10.82"

    foreach($nic in $nics)

    {

        Write-Host "`tExisting DNS Servers " $nic.DNSServerSearchOrder

        $x = $nic.SetDNSServerSearchOrder($newDNS)

        if($x.ReturnValue -eq 0)

        {

            Write-Host "`tSuccessfully Changed DNS Servers on " $server

        }

        else

        {

            Write-Host "`tFailed to Change DNS Servers on " $server

        }

    }

}

Проблема в том, что на некоторых хостах я получаю следующую ошибку:

Get-WmiObject: сервер RPC недоступен.(Исключение из HRESULT: 0x800706BA) В C: \ Documents and Settings \ user1 \ desktop \ changesnsserver.ps1: 20 char: 26 + $ nics = Get-WmiObject <<<< Win32_NetworkAdapterConfiguration -ComputerName $ server -ErrorAction Inquire |Где {$ _. IPEnabled -eq «ИСТИНА»} + CategoryInfo: InvalidOperation: (:) [Get-WmiObject], COMException + FullyQualifiedErrorId: GetWMICOMException, Microsoft.PowerShell.Commands.GetWmiObjectCommand <br>Существующие серверы DNS не могут вызвать существующий DNS-серверна нулевом выражении.В C: \ Documents and Settings \ user1 \ desktop \ changesnsserver.ps1: 30 char: 42 + $ x = $ nic.SetDNSServerSearchOrder <<<< ($ newDNS) + CategoryInfo: InvalidOperation: (SetDNSServerSearchOrder: String) [], RuntimeException+ FullyQualifiedErrorId: InvokeMethodOnNull </p>

И Powershell задает мне следующий вопрос:

Сервер RPC недоступен.(Исключение из HRESULT: 0x800706BA) [Y] Да [A] Да для всех [H] Команда остановки [S] Приостановить [?] Справка (по умолчанию «Y»):

Я бы хотеласценарий, чтобы просто ответить A - Да всем и продолжить выполнение сценария.Проблема в том, что он просто останавливает сценарий, пока я не введу вручную «A».Как я могу автоматически ответить и продолжить?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Ну, краткий ответ - не говорить об этом во-первых:

$ nics = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ server -Инструкция запроса об ошибке | Где {$ _. IPEnabled -eq "ИСТИНА"}

Попробуйте:

$ nics = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ server -ErrorAction SilentlyContinue | Где {$ _. IPEnabled -eq "ИСТИНА"}

0 голосов
/ 20 февраля 2018

Если вам нужно увидеть, где происходят ошибки, у вас также есть возможность определить переменную ошибки с помощью переключателя -ErrorVariable $<variable>

Если ошибки происходят в цикле foreach, переменная Error будет массивомсообщения об ошибках, которые вы можете позже проанализировать, запросив определенную переменную ошибки с индексом массива echo $<EVariable>[<index>]

, это будет что-то вроде echo $MyErrorArray[0] для получения первой возникшей ошибки в этом массиве.

Anэлегантным способом было бы добавить все это к текстовому полю / комбинированному списку для целей ведения журнала, но вы можете приступить к анализу ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...