通过wmi检测系统补丁输出问题?【已解决】
本帖最后由 tianya1631 于 2010-4-11 11:35 编辑下面是通过wmi获取系统已安装补丁的代码,现在问题是这样的:
当$objItem.HotFixID = file 1 时 $objItem.ServicePackInEffec = kbxxxxxx
当$objItem.HotFixID = kbxxxxxx 时$objItem.ServicePackInEffec = spxxx
我怎么让他全部生成kbxxxxxx写入到记事本中,谢谢了!PS:我的粗心和理解错误,没有把问题表述清楚,在此谢谢afan版主的热心帮助。$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
Global $kb = '',$id = ''
$Output=""
$Output = $Output & "Computer: " & $strComputer& @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_QuickFixEngineering", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$ID = $ID&' '& $objItem.HotFixID &@CRLF
$kb = $kb&' '& $objItem.ServicePackInEffect &@CRLF
Next
;MsgBox(0,'',$ID)
;MsgBox(0,'',$kb)
FileWriteLine('fix.txt',$ID&@CRLF)
;FileWriteLine('fix.txt',$kb&@CRLF)
Else
Msgbox(0,"WMI 输出","No WMI Objects Found for class: " & "Win32_QuickFixEngineering" )
Endif
你是只要 kbxxxxxx ,其它的不要还是?我咋看得这么晕 本帖最后由 tianya1631 于 2010-4-11 00:15 编辑
回复 2# afan
呵呵,我只要KbXXXX补丁名称 ,现在就是怎么能把显示的file 1 也显示对应的kbXXXX名称。
file 1 与 KbXXXX 既是对应关系,你还转 file 1 干什么呢,只取KbXXXX不就完了 回复 4# afan
因为有2种情况存在:
1.当$objItem.HotFixID = file 1 时其对应的 $objItem.ServicePackInEffec = kbxxxxxx
2. 当$objItem.HotFixID = kbxxxxxx 时其对应的$objItem.ServicePackInEffec = spxxx
怎么让他全部都输出kbxxxxxx ,中间应该要加个判断,就是不知道怎么去加
下面是源wmi代码:$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer& @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_QuickFixEngineering", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "HotFixID: " & $objItem.HotFixID & @CRLF
$Output = $Output & "ServicePackInEffect: " & $objItem.ServicePackInEffect & @CRLF
if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI 输出","No WMI Objects Found for class: " & "Win32_QuickFixEngineering" )
Endif 素这个意思?Dim $colItems, $strComputer = "localhost", $id
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_QuickFixEngineering", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
For $objItem In $colItems
If $objItem.HotFixID <> 'File 1' Then $id &= $objItem.HotFixID & @CRLF
Next
FileWrite('fix.txt', $id & @CRLF)
Else
MsgBox(0, "WMI 输出", "No WMI Objects Found for class: " & "Win32_QuickFixEngineering")
EndIf 回复 6# afan
你这个也是只能获取一部分 file 1对应的kbxxxx没有获取到。可能还是我没有描述清楚,$objItem.HotFixID和$objItem.ServicePackInEffect都能获取到相同数量的补丁,是对应的,但都获取不全kbxxxx,要把2个获取到的互补取,才能得到完整的kbxxxx。
下面图片是各自获取到的值,之间是对应关系。 搞的头都晕了。。。
回复 7# tianya1631
你再仔细对对,应该是全的,可能顺序不一样,你可以核对无重复的总数。 回复 8# afan
核对过了,还是不全的,获取到的只是$objItem.HotFixID获取的kbxxxx,而当$objItem.HotFixID
获取到的值为file 1时,其对应的$objItem.ServicePackInEffect获取到的kbxxxx,没有输出来。 Dim $colItems, $strComputer = "localhost", $id
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_QuickFixEngineering", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
For $objItem In $colItems
If $objItem.HotFixID = 'File 1' Then
$id &= $objItem.ServicePackInEffect & @CRLF
Assign('_' & $objItem.ServicePackInEffect, 0)
ElseIf Not IsDeclared('_' & $objItem.HotFixID) Then
$id &= $objItem.HotFixID & @CRLF
EndIf
Next
FileWrite('fix.txt', $id & @CRLF)
Else
MsgBox(0, "WMI 输出", "No WMI Objects Found for class: " & "Win32_QuickFixEngineering")
EndIf 回复 10# afan
实在不好意思,我又仔细的核对一遍,我发现我错了,原来他们两个获取到的是有重复的,不是一一对应的关系。麻烦Afan版主了。 感谢Afan版本 谢谢分享!! 学习中,谢谢哈
页:
[1]