Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Узнать версию удаленной OS

#windows #bat #powershell


Есть удаленный компьютер, под какой-то версией Windows (начиная с WinXP Home и заканчивая
Win10). Компьютер не входит в домен, но на нем установлен RAdmin Server.

Нужно определить версию и редакцию ОС.

Т.к. компьютеров много (~300), то нужно что-то автоматизированное.

Пробовал

(Get-WmiObject Win32_OperatingSystem -computer "Имя компа").name


но для недоменных компьютеров возвращает "Отказано в доступе (E_ACCESSDENIED)"

Может можно как-то заскриптовать работу с RAdmin?

Update

Удалось автоматизировать вход на удаленную машину через Radmin Telnet. Теперь вопрос
- как получить редакцию ОС?

ver


возвращает

Microsoft Windows XP [Версия 5.1.2600]


а нужно еще редакцию Home или Professional

PowerShell на XP не установлен
    


Ответы

Ответ 1



wmic os get Caption,CSDVersion /value или (но у меня systeminfo думает ну очень долго) systeminfo | findstr /B /C:"OS Name" /C:"OS Version" Источник: https://www.windows-commandline.com/find-windows-os-version-from-command/

Ответ 2



Полный ответ выглядит так (решение на JScript) Запускаем RadminViewer в режиме telnet var proc = WshShell.Exec('radmin.exe /connect:' + host + ' /telnet'); Ждем какое-то время и через SendKeys вбиваем логин и пароль соединения WScript.Sleep(1000); WshShell.AppActivate(proc.ProcessID); WshShell.SendKeys("user{TAB}"); WshShell.SendKeys("pass{ENTER}"); если в системе существует и третья и вторая версия Radmin (которая не требует имени пользователя), то можно использовать такой код WshShell.AppActivate(proc.ProcessID); // Три Shift+Tab WshShell.SendKeys("+{TAB}+{TAB}+{TAB}"); // Если у нас вторая версия, то мы стоим на поле для ввода пароля WshShell.SendKeys("pass"); // Переместились на предыдущий контрол WshShell.SendKeys("+{TAB}"); // для второй версии мы попали на кнопку "Отмена", для третьей на поле для ввода пароля WshShell.SendKeys("pass"); // Переместились на предыдущий контрол WshShell.SendKeys("+{TAB}"); // для второй версии мы попали на кнопку "OK", для третьей на поле для ввода логина WshShell.SendKeys("user"); WshShell.SendKeys("{ENTER}"); Делаем паузу на установку соединения и на удаленной машине формируем bat-файл WScript.Sleep(1000); WshShell.AppActivate(proc.ProcessID); // Получение информации и сохранение ее в info.data cmd('echo systeminfo ^> info.data >> info.bat'); // На WinXP Home нет файла systeminfo, поэтому если вызов завершился неудачно cmd('if errorlevel 1 ( >> ' + cmdFile); // скачиваем его с FTP сервера cmd('echo ftp -s:get.ftp -n ' + ftpServer + ' >> info.bat'); cmd('echo expand systeminfo.cab systeminfo.exe >> ' + cmdFile); cmd('echo systeminfo ^> ' + datFile + ' >> ' + cmdFile); cmd('del systeminfo.exe >> ' + cmdFile); cmd('del systeminfo.cab >> ' + cmdFile); cmd(')>> ' + cmdFile); // Сжимаем полученный файл cmd('echo makecab info.data info.data.cab >> info.bat'); // И отправляем его с удаленной машины по FTP cmd('echo ftp -s:info.ftp -n ' + ftpServer + ' >> info.bat'); Формируем набор команд для скачивания файла с FTP cmd('echo USER ftp_user ftp_pass >> get.ftp'); cmd('echo GET systeminfo.cab >> get.ftp'); cmd('echo QUIT >> get.ftp'); Формируем набор команд для закачивания файла на FTP cmd('echo USER ftp_user ftp_pass >> info.ftp'); cmd('echo PUT info.data.cab >> info.ftp'); cmd('echo QUIT >> info.ftp'); Запускаем полученный bat-файл cmd("info.bat"); И закрываем сессию cmd("exit"); Функция cmd() определена так function cmd(command) { WshShell.SendKeys(command.replace(/[\^%+~\(\)]/g, "{$&}") + "{ENTER}"); WScript.Sleep(100); } Единственный минус метода - невозможность получить статус соединения от radmin С учетом того обстоятельства, что команды systeminfo нет в редакциях WinXP Home и его приходится заливать вручную, целесообразнее написать свою утилиту, которая скачается с FTP сервера и выполнит все необходимые манипуляции

Комментариев нет:

Отправить комментарий