Member 11866893 Ответов: 1

Openremotebasekey исключения как время и затем перейти к следующему компьютеру в каждом цикле


Я создал инструмент (с Visual Studio 2015 Express - Visual Basic), который будет проверять версию и дату mcafee dat из реестра на компьютерах, вводимых вручную, в текстовом файле или выбранных из активного каталога. Инструмент работает, успешно вернул всю информацию для 714 из 970 компьютеров / ноутбуков. Большинство сбоев было связано либо с тем, что они не могли быть разрешены в DNS, либо с отсутствием проверки связи, и инструменты идентифицируют их и успешно регистрируют их. Инструменту потребовалось чуть больше 15 минут, чтобы получить информацию и зарегистрировать ее в электронной таблице. Проблема в том, что при 19 сбоях я получил одну из двух следующих ошибок, и эти 19 заняли большую часть из 15 минут, чтобы инструмент получил и записал всю информацию:

1. Попытался выполнить несанкционированную операцию

2. Сетевой путь не найден

Есть ли способ использовать таймер, чтобы программа попыталась подключиться к реестру в этот момент?.. рк1 = объект registrykey.OpenRemoteBaseKey(RegistryHive.LocalMachine, strComputer, RegistryView. Registry64), а затем через определенное количество времени остановиться и перейти к следующему компьютеру в каждом цикле? Я программирую всего чуть больше года и учился исключительно методом проб и ошибок и google, поэтому, пожалуйста, наберитесь терпения, так как я не опытный программист. Вот код:

Что я уже пробовал:

Моя цель здесь состоит в том, чтобы улучшить ее, заставив ее перейти к следующему компьютеру, когда она зависает в течение длительного периода времени. Я отфильтровал компьютеры, которые не могут быть разрешены в DNS или не поддаются пингу.

Попробуй
подпрограмма comsys (host) для сбора имени модели и вошедшего в систему пользователя
Дим рк1 как объект registrykey
Дим рк2 как объект registrykey
рк1 = объект registrykey.OpenRemoteBaseKey(RegistryHive.Значение LocalMachine, сел.Имя, RegistryView.Registry64)
rk2 = rk1. OpenSubKey ("SOFTWARE\Wow6432Node\McAfee\AVEngine")
mAV = rk2. GetValue ("AVDatVersion").Метод toString
mAD = rk2. GetValue ("AVDatDate").Метод toString
objExcel.Ячейки (y, 1) = sel.Name
objExcel.Клетки(г, 2) = при
objExcel.Ячейки (y, 3) = commodel
objExcel.Ячейки (y, 4) = comuser
objExcel.Ячейки (y, 5) = "номер версии DAT:" & mAV
objExcel.Ячейки (y, 6) = "Дата DAT:" & mAD
y = y + 1
Поймать ex как исключение
Мой.Компьютер.файловая система.WriteAllText(Dell & "\McAfeeDATeNumFailed.txt", сел.Имя & "- не удается подключиться. Убедитесь, что этот компьютер находится в сети, имеет включенное удаленное администрирование и что на обоих компьютерах запущена служба удаленного реестра. Сообщение об ошибке: "& ex.Message & vbCrLf, True)
Конец Попытки

1 Ответов

Рейтинг:
12

Member 11866893

Вот как я сделал это быстрее. Теперь он обрабатывает 970 компьютеров за 3 с половиной минуты вместо 15-19 минут.


For Each sel In picker.SelectedObjects
                       Thread.Sleep(5)
                       Try
                           Dim source1 As New CancellationTokenSource
                           Dim token As CancellationToken = source1.Token

                           Dim T20 As Task = Task.Factory.StartNew(Function() getping((sel.Name), token)) 'Function that uses My.Computer.Network.Ping (this ping method resolves the computer in DNS and Ping it) and ping.send (to return IP Address)
                           T20.Wait(60)
                           If T20.Status = TaskStatus.Running Then
                               source1.Cancel()
                               My.Computer.FileSystem.WriteAllText(Dell & "\McAfeeDATeNumFailed.txt", sel.Name & " Ping timed out.  The task was disposed of at " & ex_time & "." & vbCrLf & vbCrLf, True)
                               Continue For
                           End If

                           Dim source2 As New CancellationTokenSource
                           Dim token2 As CancellationToken = source2.Token
                           Dim T21 As Task = Task.Factory.StartNew(Function() comsys((sel.Name), token2)) 'WMI Function
                           T21.Wait(500)
                           If T21.Status = TaskStatus.Running Then
                               source2.Cancel()
                               My.Computer.FileSystem.WriteAllText(Dell & "\McAfeeDATeNumFailed.txt", sel.Name & " RPC error.  The task was disposed of at " & ex_time & "." & vbCrLf & vbCrLf, True)
                           End If

                           Dim source3 As New CancellationTokenSource
                           Dim token3 As CancellationToken = source3.Token
                           Dim T22 As Task = Task.Factory.StartNew(Function() getregvalues((sel.Name), token3)) 'Function that uses RegistryKey.OpenRemoteBaseKey to get remote registry value
                           T22.Wait(600)
                           If T22.Status = TaskStatus.Running Then
                               source3.Cancel()
                               My.Computer.FileSystem.WriteAllText(Dell & "\McAfeeDATeNumFailed.txt", sel.Name & " Error retrieving registry value.  The task was disposed of at " & ex_time & "." & vbCrLf & vbCrLf, True)
                           End If
                           IPAddr = reply.Address.ToString()
                           objExcel.Cells(y, 1) = sel.Name
                           objExcel.Cells(y, 2) = IPAddr
                           objExcel.Cells(y, 3) = commodel
                           objExcel.Cells(y, 4) = comuser
                           objExcel.Cells(y, 5) = "DAT Version Number: " & mAV
                           objExcel.Cells(y, 6) = "DAT Date: " & mAD
                           y = y + 1
                           IPAddr = Nothing
                           reply = Nothing
                           commodel = Nothing
                           comuser = Nothing
                           sel = Nothing
                           Thread.Sleep(5)
                       Catch ex As Exception

                       End Try