找回密码
 加入
搜索
查看: 6539|回复: 13

[AU3基础] 通过wmi检测系统补丁输出问题?【已解决】

  [复制链接]
发表于 2010-4-10 23:49:38 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-4-11 00:06:16 | 显示全部楼层
你是只要 kbxxxxxx ,其它的不要还是?我咋看得这么晕
 楼主| 发表于 2010-4-11 00:12:07 | 显示全部楼层
本帖最后由 tianya1631 于 2010-4-11 00:15 编辑

回复 2# afan

呵呵,我只要KbXXXX补丁名称 ,现在就是怎么能把显示的file 1 也显示对应的kbXXXX名称。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-11 00:14:51 | 显示全部楼层
file 1 与 KbXXXX 既是对应关系,你还转 file 1 干什么呢,只取KbXXXX不就完了
 楼主| 发表于 2010-4-11 00:21:23 | 显示全部楼层
回复 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
发表于 2010-4-11 00:32:36 | 显示全部楼层
素这个意思?
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
 楼主| 发表于 2010-4-11 00:52:27 | 显示全部楼层
回复 6# afan
你这个也是只能获取一部分 file 1对应的kbxxxx没有获取到。可能还是我没有描述清楚,$objItem.HotFixID和$objItem.ServicePackInEffect都能获取到相同数量的补丁,是对应的,但都获取不全kbxxxx,要把2个获取到的互补取,才能得到完整的kbxxxx。

下面图片是各自获取到的值,之间是对应关系。 搞的头都晕了。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-11 01:09:11 | 显示全部楼层
回复 7# tianya1631


    你再仔细对对,应该是全的,可能顺序不一样,你可以核对无重复的总数。
 楼主| 发表于 2010-4-11 01:22:42 | 显示全部楼层
回复 8# afan

核对过了,还是不全的,获取到的只是$objItem.HotFixID获取的kbxxxx,而当$objItem.HotFixID
获取到的值为file 1时,其对应的$objItem.ServicePackInEffect获取到的kbxxxx,没有输出来。
发表于 2010-4-11 01:26:27 | 显示全部楼层
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
 楼主| 发表于 2010-4-11 01:30:49 | 显示全部楼层
回复 10# afan

实在不好意思,我又仔细的核对一遍,我发现我错了,原来他们两个获取到的是有重复的,不是一一对应的关系。麻烦Afan版主了。
发表于 2010-4-11 08:06:22 | 显示全部楼层
感谢Afan版本
发表于 2010-4-11 09:53:13 | 显示全部楼层
谢谢分享!!
发表于 2012-7-19 17:37:46 | 显示全部楼层
学习中,谢谢哈
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 08:04 , Processed in 0.085965 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表