Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скрипт для проверки версии ОС

Ответить
Настройки темы
[решено] Скрипт для проверки версии ОС

Пользователь


Сообщения: 144
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: HFShak
Дата: 31-01-2012
Добрый день!

Народ, помогите написать функцию для чтения информации о версии ос из wmi.

Я пробовал написать, но не знаю синтаксиса, у меня выдаются пустые значения...

Код: Выделить весь код
Func _showmeos($PC)
	
	$oWMI=ObjGet("winmgmts:\\" & $PC & "\root\CIMV2")
	$osinfo=$oWMI.Get("Win32_OperatingSystem")
	ConsoleWrite ("$oWMI = " & $oWMI & @CR & "$oProcessColl = " & $oProcessColl & @CR)
  
EndFunc

Отправлено: 15:57, 30-01-2012

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата HFShak:
помогите написать функцию для чтения информации о версии ос из wmi »
Чем не устраивают существующие макросы (@OSVersion, @OSType)?

И куски кода следует заключать в соответствующий тег.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 17:43, 30-01-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 144
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Чем не устраивают существующие макросы (@OSVersion, @OSType)? »
Они разве показывают информацию на удаленной машине?

Отправлено: 09:09, 31-01-2012 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


HFShak,
Код: Выделить весь код
; Generated by AutoIt ScriptOMatic

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$OutputTitle = ""
$Output = ""
$OutputTitle &= "Computer: " & $strComputer & @CRLF
$OutputTitle &= "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
        $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) Then
    Local $Object_Flag = 0
    For $objItem In $colItems
        $Object_Flag = 1
        $Output &= "BootDevice: " & $objItem.BootDevice & @CRLF
        $Output &= "BuildNumber: " & $objItem.BuildNumber & @CRLF
        $Output &= "BuildType: " & $objItem.BuildType & @CRLF
        $Output &= "Caption: " & $objItem.Caption & @CRLF
        $Output &= "CodeSet: " & $objItem.CodeSet & @CRLF
        $Output &= "CountryCode: " & $objItem.CountryCode & @CRLF
        $Output &= "CreationClassName: " & $objItem.CreationClassName & @CRLF
        $Output &= "CSCreationClassName: " & $objItem.CSCreationClassName & @CRLF
        $Output &= "CSDVersion: " & $objItem.CSDVersion & @CRLF
        $Output &= "CSName: " & $objItem.CSName & @CRLF
        $Output &= "CurrentTimeZone: " & $objItem.CurrentTimeZone & @CRLF
        $Output &= "DataExecutionPrevention_32BitApplications: " & $objItem.DataExecutionPrevention_32BitApplications & @CRLF
        $Output &= "DataExecutionPrevention_Available: " & $objItem.DataExecutionPrevention_Available & @CRLF
        $Output &= "DataExecutionPrevention_Drivers: " & $objItem.DataExecutionPrevention_Drivers & @CRLF
        $Output &= "DataExecutionPrevention_SupportPolicy: " & $objItem.DataExecutionPrevention_SupportPolicy & @CRLF
        $Output &= "Debug: " & $objItem.Debug & @CRLF
        $Output &= "Description: " & $objItem.Description & @CRLF
        $Output &= "Distributed: " & $objItem.Distributed & @CRLF
        $Output &= "EncryptionLevel: " & $objItem.EncryptionLevel & @CRLF
        $Output &= "ForegroundApplicationBoost: " & $objItem.ForegroundApplicationBoost & @CRLF
        $Output &= "FreePhysicalMemory: " & $objItem.FreePhysicalMemory & @CRLF
        $Output &= "FreeSpaceInPagingFiles: " & $objItem.FreeSpaceInPagingFiles & @CRLF
        $Output &= "FreeVirtualMemory: " & $objItem.FreeVirtualMemory & @CRLF
        $Output &= "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
        $Output &= "LargeSystemCache: " & $objItem.LargeSystemCache & @CRLF
        $Output &= "LastBootUpTime: " & WMIDateStringToDate($objItem.LastBootUpTime) & @CRLF
        $Output &= "LocalDateTime: " & WMIDateStringToDate($objItem.LocalDateTime) & @CRLF
        $Output &= "Locale: " & $objItem.Locale & @CRLF
        $Output &= "Manufacturer: " & $objItem.Manufacturer & @CRLF
        $Output &= "MaxNumberOfProcesses: " & $objItem.MaxNumberOfProcesses & @CRLF
        $Output &= "MaxProcessMemorySize: " & $objItem.MaxProcessMemorySize & @CRLF
        $Output &= "Name: " & $objItem.Name & @CRLF
        $Output &= "NumberOfLicensedUsers: " & $objItem.NumberOfLicensedUsers & @CRLF
        $Output &= "NumberOfProcesses: " & $objItem.NumberOfProcesses & @CRLF
        $Output &= "NumberOfUsers: " & $objItem.NumberOfUsers & @CRLF
        $Output &= "Organization: " & $objItem.Organization & @CRLF
        $Output &= "OSLanguage: " & $objItem.OSLanguage & @CRLF
        $Output &= "OSProductSuite: " & $objItem.OSProductSuite & @CRLF
        $Output &= "OSType: " & $objItem.OSType & @CRLF
        $Output &= "OtherTypeDescription: " & $objItem.OtherTypeDescription & @CRLF
        $Output &= "PlusProductID: " & $objItem.PlusProductID & @CRLF
        $Output &= "PlusVersionNumber: " & $objItem.PlusVersionNumber & @CRLF
        $Output &= "Primary: " & $objItem.Primary & @CRLF
        $Output &= "ProductType: " & $objItem.ProductType & @CRLF
        $Output &= "QuantumLength: " & $objItem.QuantumLength & @CRLF
        $Output &= "QuantumType: " & $objItem.QuantumType & @CRLF
        $Output &= "RegisteredUser: " & $objItem.RegisteredUser & @CRLF
        $Output &= "SerialNumber: " & $objItem.SerialNumber & @CRLF
        $Output &= "ServicePackMajorVersion: " & $objItem.ServicePackMajorVersion & @CRLF
        $Output &= "ServicePackMinorVersion: " & $objItem.ServicePackMinorVersion & @CRLF
        $Output &= "SizeStoredInPagingFiles: " & $objItem.SizeStoredInPagingFiles & @CRLF
        $Output &= "Status: " & $objItem.Status & @CRLF
        $Output &= "SuiteMask: " & $objItem.SuiteMask & @CRLF
        $Output &= "SystemDevice: " & $objItem.SystemDevice & @CRLF
        $Output &= "SystemDirectory: " & $objItem.SystemDirectory & @CRLF
        $Output &= "SystemDrive: " & $objItem.SystemDrive & @CRLF
        $Output &= "TotalSwapSpaceSize: " & $objItem.TotalSwapSpaceSize & @CRLF
        $Output &= "TotalVirtualMemorySize: " & $objItem.TotalVirtualMemorySize & @CRLF
        $Output &= "TotalVisibleMemorySize: " & $objItem.TotalVisibleMemorySize & @CRLF
        $Output &= "Version: " & $objItem.Version & @CRLF
        $Output &= "WindowsDirectory: " & $objItem.WindowsDirectory & @CRLF
        If MsgBox(1, "WMI Output", $Output) = 2 Then ExitLoop
        $Output = ""
    Next
    If $Object_Flag = 0 Then MsgBox(1, "WMI Output", $OutputTitle)
Else
    MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_OperatingSystem")
EndIf


Func WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & "/" & _
            StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
             & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndFunc   ;==>WMIDateStringToDate
ScriptOmatic.au3
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:56, 31-01-2012 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата HFShak:
Они разве показывают информацию на удаленной машине? »
А где указано что нужно получать информацию на удалённой машине?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:56, 31-01-2012 | #5


Пользователь


Сообщения: 144
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, очень полезный скрипт.
Скажите, а что это за переменные:

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20

И что означает:
Цитата madmasles:
colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly) »

В частоности, что делает "ExecQuery", что такое "WQL" и почему складываются две переменные?

Отправлено: 14:13, 31-01-2012 | #6


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата HFShak:
И что означает »
WMI
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:07, 31-01-2012 | #7


Пользователь


Сообщения: 144
Благодарности: 0

Профиль | Отправить PM | Цитировать


Отличная ссылка. Читаю...

Вот пример:

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Почему в C++ или в vbs запрос выглядет так:
objWbemObjectSet = SWbemServices.ExecQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)


А в autoit так :
colItems = $objWMIService.ExecNotificationQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)


Есть где нибудь описание именно для autoit типа:

.ExecQuery ( ...)
.Get ( ... )

Отправлено: 15:19, 31-01-2012 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


HFShak, что для WSH, что для AutoIt данный запрос абсолютно одинаков.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:40, 31-01-2012 | #9


Пользователь


Сообщения: 144
Благодарности: 0

Профиль | Отправить PM | Цитировать


Почему может возникать вот такая ошибка?
Запуская скрип выше (ScriptOmatic.au3), на одном ПК работает нормально, на другом пишет:
(13) : ==> Variable must be of type "Object".:
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$colItems = $objWMIService^ ERROR

Отправлено: 17:43, 31-01-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скрипт для проверки версии ОС

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Скрипт для проверки пинга Hunterus Скриптовые языки администрирования Windows 9 28-12-2011 12:19
CMD/BAT - Нужна помошь:скрипт для проверки изменения размера папки, с перезапуском программы abezze Скриптовые языки администрирования Windows 0 20-12-2011 16:43
CMD/BAT - Скрипт для проверки почты spartak-21rus Скриптовые языки администрирования Windows 1 29-03-2010 10:30
Скрипт для проверки списка пользователей и их удаление из AD alex_frog Microsoft Windows NT/2000/2003 0 22-07-2009 13:16
Скрипт для проверки пользователя ($) Mike-os Вебмастеру 7 25-11-2005 18:27




 
Переход