|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Перехват ошибок |
|
PowerShell - Перехват ошибок
|
Пользователь Сообщения: 80 |
Добрый День!
Необходимо у активного сетевого интерфейса получить определенные сведения. Подключение к ПК производиться средствами WMI и на определенных ПК возникает ошибка подключения. Если на ПК числиться более одного сетевого интерфейса, происходит перезапись в ячейке Excel последними найденными данными, ни как не получается корректно вставить блок try catch. Set-PSDebug -Trace 0 $Excel = New-Object -Com Excel.Application $Excel.visible = $True $Excel = $Excel.Workbooks.Add() $Excel.Worksheets.Item(1).Name = "Данные" $sheet = $Excel.WorkSheets.Item("Данные") $Sheet.Cells.Item(1,1) = "Имя ПК" $Sheet.Cells.Item(1,2) = "Имя Сетевого интерфейса" $Sheet.Cells.Item(1,3) = "DNS" $Sheet.Cells.Item(1,4) = "Primary WINS" $Sheet.Cells.Item(1,5) = "Secondary WINS" $Sheet.Cells.Item(1,6) = "DHCP Auto" $intRow = 2 $WorkBook = $Sheet.UsedRange $WorkBook.Interior.ColorIndex = 20 $WorkBook.Font.ColorIndex = 11 $WorkBook.Font.Bold = $True $pc = Get-Content D:\2.txt Foreach ($PS in $pc) { try { $DeviceID = Get-WmiObject Win32_NetworkAdapter -computer $PS -ErrorAction Stop | Where {$_.NetConnectionStatus -eq "2"} | Select DeviceID $Index = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $PS | Where {$DeviceID.DeviceID -contains $_.Index} | #$data = $index | Where {$DeviceID.DeviceID -contains $_.Index} | Select PSComputerName, Description, DNSServerSearchOrder, WINSPrimaryServer, WINSSecondaryServer, DHCPEnabled | ForEach-Object { $c = $_ $DNSServerSearchOrder = $c.DNSServerSearchOrder $Sheet.Cells.Item($intRow,1) = $ps $Sheet.Cells.Item($intRow,1).EntireColumn.AutoFit() $Sheet.Cells.Item($intRow,2) = $c.Description $Sheet.Cells.Item($intRow,2).EntireColumn.AutoFit() $Sheet.Cells.Item($intRow,3) = "$DNSServerSearchOrder" $Sheet.Cells.Item($intRow,3).EntireColumn.AutoFit() $Sheet.Cells.Item($intRow,4) = $c.WINSPrimaryServer $Sheet.Cells.Item($intRow,4).EntireColumn.AutoFit() $Sheet.Cells.Item($intRow,5) = $c.WINSSecondaryServer $Sheet.Cells.Item($intRow,5).EntireColumn.AutoFit() $Sheet.Cells.Item($intRow,6) = $c.DHCPEnabled $Sheet.Cells.Item($intRow,6).EntireColumn.AutoFit() } } Catch { $Sheet.Cells.Item($intRow,1) = $ps $Sheet.Cells.Item($intRow,1).EntireColumn.AutoFit() } $intRow = $intRow + 1 } |
|
Отправлено: 12:55, 25-10-2019 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Если версия Powershell на целевых машинах современная, гораздо удобнее пользоваться Get-NetAdapter, и вообще, лучше настроить так, чтобы можно было подключаться к удалённым машинам прямо самой консолью.
Если конечный файл xlsx, то для Powershell есть отличный модуль ImportExcel, позволяющий работать с такими файлами без Экселя. В блоке try-catch не надо указывать ErrorAction. |
------- Отправлено: 20:35, 25-10-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 80
|
Профиль | Отправить PM | Цитировать Добрый День!
Это как можно перехватывать ошибки не указывая ErrorAction -Stop? Что-то не припомню такого. ImportExcel - это дополнительный модуль, при нашей орг структуре, использование сторонних модулей без особой необходимости не приемлемо. Проблема не в том что используется для получения сведений, а в том что не можем корректно выполнить перехват ошибок. |
Отправлено: 06:28, 28-10-2019 | #3 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата lox-ness:
Существуют прерывающие и не прерывающие ошибки. Прерывающие ошибки приводят к исключению, а исключение уже ловится в try-catch. параметр команды: - приводит к искусственному исключению. В командлетах есть возможность переопределять переменную, сохраняющую ошибки (то бишь для каждого можно назначить свою). Пример - и анализировать переменную на предмет ошибок... зачем искусственно вызывать останов? А прерывающие ошибки, уже отлавливать в try-catch... |
|
------- Отправлено: 07:09, 28-10-2019 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
перехват GPRS | exo | Хочу все знать | 0 | 03-03-2010 14:14 | |
Перехват сообщений | Bodler | Microsoft Windows 2000/XP | 21 | 08-03-2007 01:46 | |
Delphi - Delphi | перехват проводника | Crowner | Программирование и базы данных | 5 | 06-02-2007 18:30 | |
Перехват обращения к принтеру | knzsoft | Программирование и базы данных | 4 | 25-03-2006 23:13 | |
Перехват ICQ | Apock | Программирование и базы данных | 3 | 13-02-2004 16:59 |
|