Показать полную графическую версию : Сбор информации на удаленных ПК
Добрый день!
Народ помогите написать скрипт, который сможет удаленно собирать информацию о версии windows 7 (к примеру "Windows 7 x32 Enterprise (Single User) V6.01 Build 7601 Service Pack 1") на удаленных ПК. Список ПК будет в .txt файле.
И есть ли такая возможно запуска службы удаленный реестр на этих же ПК?
Данный о версии системы находятся в:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
"CSDVersion" = Service Pack 1
"CurrentBuild" = 7601
"ProductName" = Windows 7 Enterprise
Написал вот такой скрипт на сбор информации о версии W7, но если служба удаленный реестр потушена, то все плохо...
Кто подскажет как можно удаленно запустить службу удаленный реестр или откуда (возможно из файла?) можно достать информации о версии w7?
TrayTip ("Status", "Выберите файл", 5, 1)
Opt ( "TrayAutoPause", 0)
$open = FileOpenDialog("Выберите файл", @DesktopDir & "\AUTOIT", "Текстовый документ (*.txt)", 1)
If @error = 1 Then Exit
$file = FileOpen ($open, 0)
FileDelete ("check_version_os.txt")
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$P = Ping ( $line, 10) ; Провека доступности узла посредсвом ICMP запросов
If $P = 0 Then
$a = "Недоступен"
FileWrite ("check_office_log.txt", $line&@TAB&"="&@TAB&$a&@CRLF)
EndIf
If $P > 0 Then
$ProductName = RegRead("\\"&$line&"\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName")
$CurrentBuild = RegRead("\\"&$line&"\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuild")
$CSDVersion = RegRead("\\"&$line&"\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CSDVersion")
FileWrite ("check_version_os.txt", $line&@TAB&"="&@TAB&$ProductName&@TAB&"="&@TAB&$CurrentBuild&@TAB&"="&@TAB&$CSDVersion&@CRLF)
EndIf
Wend
TrayTip ("Status", "Завершено", 3, 1)
FileClose($file)
FileClose($open)
Народ, помогите написать 2 функции...
Обе работают с програмой: "sc"
1. Первая состоит из 3-х переменных: _function_1 ($pc_name, $service_name, $tipe)
1.1. Сперва проверяет тип запуска службы и если тип запуска = "$tipe" ( вот так: "sc \\$pc_name config $service_name start= $tipe" ), то выход.
1.2. Если тип запуска службы не равен "$tipe", то она выставляет меняет её значение на "$tipe" и выходит.
2. Вторая состоит из 3-х переменных: _function_2 ($pc_name, $service_name, $action)
2.1. Cверяет совпадает статус службы с $action (запуск, стоп) , если да то выход.
2.2. Если нет, то функция запускает, останавливает ($action равен или stop или start) нужную службу ($service_name) на заданном ПК ($pc_name).
Запуск службы на удаленном пк происходит через команду sc \\pc start RemoteRegistry
HFShak, не проще ли и надёжней использовать технологию Wbem (она же в простонародье WMI) для сбора потребных сведений с удалённых машин?
Спасибо. А можно какой-нибудь пример скрипта сбора информации с удаленной машины?
HFShak, в принципе, практически любой WSH скрипт, использующий Wbem, может быть с лёгкостью переписан на AutoIt. Здесь я приводить примеры не буду, ибо Вы можете легко найти их непосредственно в Русском сообществе AutoIt (http://autoit-script.ru/): WMI site:http://autoit-script.ru - Поиск в Google (http://www.google.ru/search?q=WMI+site%3Ahttp%3A%2F%2Fautoit-script.ru) (тамошний родной поиск работает только после регистрации).
Спасибо, нашел похожие темы на удаленный запуск служб.
Есть один момент, который надо исправить, я не знаю, как это сделать...
Как сделать так, чтобы скрипт проверял тип запуска службы на удаленном ПК и если она соответствует $sServiceName, то он переходил в следующему по списку ПК?
И если вдруг нету доступа к удаленно машине, он не прерывал скрипт а так же переходил в следующему оп списку ПК и делал запись об этом событии в log.txt...
Вот сам код:
$open = FileOpenDialog("Выберите файл", @DesktopDir & "\AUTOIT", "Текстовый документ (*.txt)", 1)
If @error = 1 Then Exit
$file = FileOpen ($open, 0)
FileDelete ("run_services.txt")
$iCounterSuccess = 0
$iCounterError = 0
$sChangeMode = "Automatic" ; режимы запуска: "Manual", "Automatic", "Disabled"
$sServiceName = "RemoteRegistry"
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$P = Ping ( $line, 10) ; Провека доступности узла посредсвом ICMP запросов
If $P = 0 Then
$a = "Недоступен"
$iCounterError = $iCounterError + 1
FileWrite ("run_services.txt", $line & @TAB & "=" & @TAB & $a & @CRLF)
EndIf
If $P > 0 Then
$a = "Доступен"
$objWMIService = ObjGet("winmgmts:\\" & $line & "\root\CIMV2")
$objShare = $objWMIService.Get("Win32_Service.Name='" & $sServiceName & "'") ; переменной присваивается имя службы
$objInParam = $objShare.Methods_("ChangeStartMode").inParameters.SpawnInstance_()
$objInParam.Properties_.Item("StartMode") = $sChangeMode ; переменной присваивается тип запуска службы
$objOutParams = $objWMIService.ExecMethod("Win32_Service.Name='" & $sServiceName & "'", "ChangeStartMode", $objInParam)
FileWrite ("run_services.txt", $line & @TAB & "=" & @TAB & $a & @TAB & "=" & @TAB & $sServiceName & @TAB & "=" & @TAB & $sServiceName & @CRLF)
$iCounterSuccess = $iCounterSuccess + 1
EndIf
WEnd
FileWrite ("run_services.txt", "Количество доступных ПК "&@TAB&@TAB&"="&@TAB&$iCounterSuccess&@CRLF)
FileWrite ("run_services.txt", "Количество недоступных ПК"&@TAB&@TAB&"="&@TAB&$iCounterError&@CRLF)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.