![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Скрипт для удаленного сброса клиента службы Автоматического обновления |
|
PowerShell - [решено] Скрипт для удаленного сброса клиента службы Автоматического обновления
|
Новый участник Сообщения: 1 |
Добрый день, пишется скрипт для удаленного сброса клиентов. Пишется на powershell, в данный момент возникла проблема с тем, что выходят ошибки при доступе к удаленному реестру для сброса ключей. Служба останавливается и запускается успешно.
Привожу код самого скрипта: ######################################################################################################################### # WSUSClientRemoteReset.ps1 PowerShell shs 20100218 # # Скрипт, дистаннционно выполняющий действия, описанные в kb903262, над компьютерами, согласно заданного списка # Список компьютеров, который скрипт загружает из файла .\NoWSUS.txt, может быть сформирован при помощи скрипта WSUSAD-Compare.ps1, # и представляет из себя список FQDN-имен компьютеров (одна строка - одно имя) ######################################################################################################################### cls ######################################################################################################################### ### Объявляем вспомогательные функции ######################################################################################################################### # #Функция возращает true, если заданный хост пингуется и false - в противном случае function Test-Host ($Name) { $ping = new-object System.Net.NetworkInformation.Ping trap {Write-Verbose "Ошибка пинга"; $False; continue} if ($ping.send($Name).Status -eq "Success" ) { $True } else { $False } } ######################################################################################################################### # # Начало скрипта # ######################################################################################################################### ### Загружаем в переменную список компьютеров из файла .\NoWSUS.txt, ### попутно получая короткое имя компьютера из его FQDN### $noInWSUS = gc .\NoWSUS.txt| foreach{($_ -replace " ") -replace "\..+$"} #Обработаем полученный список $noInWSUS| where{Test-Host $_}|foreach{` $CompName = $_ Write-Host "`n`n$CompName" #Подлкючаемся к службе Автоматического обновления (wuauserv) (далее по тексту - служба) на удаленной машине [System.Reflection.Assembly]::LoadWithPartialName('system.serviceprocess') $wuauserv=new-Object System.ServiceProcess.ServiceController('wuauserv',$CompName) #Инициализация флага успешной остановки службы $Stopped=$true #Если служба не остановлена, то остановливаем ее if ($wuauserv.Status -ne "Stopped") { try { #Останавливаем службу $wuauserv.Stop() #Ожидаем остановки службы в течении заданного таймаута $wuauserv.WaitForStatus('Stopped',(new-timespan -seconds 10)) } catch { # если в течение отведенного таймаута служба не остановилась, то сообщим об этом... "On $CompName wuauserv service failed to stop...`n" # ...и установим флаг успешной остановки службы в состояние $false $Stopped=$false } } # если служба была успешно остановлена, то # выполняем действия, указанные в kb903262 if ($Stopped) { # #Удаляем ключи реестра, согласно http://support.microsoft.com/kb/903262 $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $CompName) $regKey= $reg.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate",$true) $regKey.DeleteValue("SusClientId") $regKey.DeleteValue("SusClientIdValidation") $regKey.DeleteValue("PingID") $regKey.DeleteValue("AccountDomainSid") #Инициализация флага успешного запуска службы Автоматического обновления (wuauserv) $Started=$true # try { #Запускаем службу Автообновления $wuauserv.Start() #Ожидаем запуска службы в течении заданного таймаута $wuauserv.WaitForStatus('Running',(new-timespan -seconds 10)) } catch { # если в течение отведенного таймаута служба не стартовала, то сообщим об этом... "На $CompName службу wuauserv запустить не удалось...`n" # ...и установим флаг успешного запуска службы в состояние $false $Started=$false } # если служба Автоматического обновления была успешно запущенна, то # выполняем действия, указанные в kb903262 if ($Started) { #Ждем 5 секунд Start-Sleep -Seconds 5 #принудительное применение политики (на всякий случай, лучше перебдеть) "Запускаем принудительное обновление политики..." $RemoteProcess=([wmiclass]"\\$CompName\root\cimv2:Win32_Process").create("cmd /c gpupdate /force") "...код возврата запуска - $($RemoteProcess.ReturnValue), ID запущеного процесса - $($RemoteProcess.ProcessId)`n" #Ждем 30 секунд Start-Sleep -Seconds 30 "Выполняем wuauclt /resetauthorization /detectnow" #выполняем wuauclt /resetauthorization /detectnow, согласно http://support.microsoft.com/kb/903262 $RemoteProcess=([wmiclass]"\\$CompName\root\cimv2:Win32_Process").create("cmd /c wuauclt /resetauthorization /detectnow") "...код возврата запуска - $($RemoteProcess.ReturnValue), ID запущеного процесса - $($RemoteProcess.ProcessId)`n" } } } Исключение при вызове "OpenRemoteBaseKey" с "2" аргументами: "Не найден сетевой путь. " E:\WSUSClientRemoteReset.ps1:61 знак:3 + $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $CompN ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IOException Невозможно вызвать метод для выражения со значением NULL. E:\WSUSClientRemoteReset.ps1:62 знак:3 + $regKey= $reg.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpd ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. E:\WSUSClientRemoteReset.ps1:63 знак:3 + $regKey.DeleteValue("SusClientId") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. E:\WSUSClientRemoteReset.ps1:64 знак:3 + $regKey.DeleteValue("SusClientIdValidation") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. E:\WSUSClientRemoteReset.ps1:65 знак:3 + $regKey.DeleteValue("PingID") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. E:\WSUSClientRemoteReset.ps1:66 знак:3 + $regKey.DeleteValue("AccountDomainSid") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull |
|
Отправлено: 10:21, 26-01-2015 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Начиная с Windows Vista на клиентских ОС служба удаленный реестр отключена по умолчанию. Для выполнения скрипта, данная служба должна быть запущена. Статус службы можно посмотреть через Get-Service:
|
Отправлено: 10:44, 26-01-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - скрипт автоматического создания exe загрузчика для файла | negativ26r | Программирование и базы данных | 3 | 16-11-2014 03:07 | |
Любой язык - Скрипт для автоматического копирования | SFlash | Скриптовые языки администрирования Windows | 0 | 18-03-2013 16:25 | |
Любой язык - скрипт для автоматического реконнекта | bmp1 | Скриптовые языки администрирования Windows | 1 | 09-07-2010 12:01 | |
Программа для автоматического обновления файлов. | tsv91 | Хочу все знать | 2 | 27-06-2009 05:00 | |
Службы - Настройка службы автоматического обновления драйверов | Simlion | Microsoft Windows Vista | 3 | 24-09-2007 17:21 |
|