Войти

Показать полную графическую версию : [решено] Скрипт для проверки версии ОС


HFShak
30-01-2012, 15:57
Добрый день!

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

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

Func _showmeos($PC)

$oWMI=ObjGet("winmgmts:\\" & $PC & "\root\CIMV2")
$osinfo=$oWMI.Get("Win32_OperatingSystem")
ConsoleWrite ("$oWMI = " & $oWMI & @CR & "$oProcessColl = " & $oProcessColl & @CR)

EndFunc

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

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

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

madmasles
31-01-2012, 12:56
HFShak,
; Generated by AutoIt ScriptOMatic

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

$OutputTitle = ""
$Output = ""
$OutputTitle &= "Computer: " & $strComputer & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
$OutputTitle &= "==========================================" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
$objWMIService = ObjGet (http://www.autoitscript.com/autoit3/docs/functions/ObjGet.htm)("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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


Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) WMIDateStringToDate($dtmDate)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) (StringMid (http://www.autoitscript.com/autoit3/docs/functions/StringMid.htm)($dtmDate, 5, 2) & "/" & _
StringMid (http://www.autoitscript.com/autoit3/docs/functions/StringMid.htm)($dtmDate, 7, 2) & "/" & StringLeft (http://www.autoitscript.com/autoit3/docs/functions/StringLeft.htm)($dtmDate, 4) _
& " " & StringMid (http://www.autoitscript.com/autoit3/docs/functions/StringMid.htm)($dtmDate, 9, 2) & ":" & StringMid (http://www.autoitscript.com/autoit3/docs/functions/StringMid.htm)($dtmDate, 11, 2) & ":" & StringMid (http://www.autoitscript.com/autoit3/docs/functions/StringMid.htm)($dtmDate, 13, 2))
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>WMIDateStringToDate
ScriptOmatic.au3 (http://www.autoitscript.com/forum/topic/10534-wmi-scriptomatic-tool-for-autoit/page__st__80__p__788892#entry788892)

Creat0R
31-01-2012, 13:56
Они разве показывают информацию на удаленной машине? »
А где указано что нужно получать информацию на удалённой машине?

HFShak
31-01-2012, 14:13
Спасибо, очень полезный скрипт.
Скажите, а что это за переменные:

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20

И что означает:

colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly) »


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

madmasles
31-01-2012, 15:07
И что означает »
WMI (http://social.msdn.microsoft.com/search/en-us?query=wmi&x=11&y=17)

HFShak
31-01-2012, 15:19
Отличная ссылка. Читаю...

Вот пример:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa393866(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 ( ... )

Iska
31-01-2012, 15:40
HFShak, что для WSH, что для AutoIt данный запрос абсолютно одинаков.

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

Iska
31-01-2012, 18:27
HFShak, судя по всему, причина в неудачном подключении к удалённой машине в предыдущей строке скрипта:
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")

А причин тому может быть множество, например: VBScript: почему не работают скрипты WMI? (http://forum.script-coding.com/viewtopic.php?id=738).

HFShak
01-02-2012, 09:05
А как-нибудь можно сделать, чтобы он пропускал такую машину?, просто с другими скрипт работает нормально, а после ошибки сразу останавливается.

kaster
01-02-2012, 09:17
If IsObj($objWMIService) Then
; нужные действия
EndIf

HFShak
01-02-2012, 09:49
Спасибо, работает




© OSzone.net 2001-2012