通过VBScript获取WMI安全设置

时间:2015-07-20 08:37:40

标签: vbscript wmi

我有这个代码(不仅仅是这个,但那是有问题的部分)

Dim objWMI : Set objWMI = GetObject("winmgmts:\\.\root")
Dim objSecuritySettings : Set objSecuritySettings = objWMI.Get("__SystemSecurity=@")
Dim objSD : objSecuritySettings.GetSecurityDescriptor(objSD)

为什么我没有收到objSD?
如果我运行脚本,当我尝试使用objSD.DACL或类似的东西时会返回错误:

  

找不到对象!

那么我的错误是什么?

其他奇怪的是,如果我像这样运行它:

Dim objSD : objSecuritySettings.GetSecurityDescriptor objSD

适用于Win7 ....但不适用于服务器2003或2012.
编辑:
我在WinServer 2008上进行了测试,它运行得很好(就像在Win7上一样)....那么为什么不在03和12上呢?

1 个答案:

答案 0 :(得分:0)

我无法在此处胜任(google for msdn "Scripting Security Descriptors - Microsoft",下载找到的第一个DOC):

option explicit
Dim iSD, intRet
Dim objWMI              : Set objWMI = GetObject("winmgmts:\\.\root")
Dim objSecuritySettings : Set objSecuritySettings = objWMI.Get("__SystemSecurity=@")
Dim objSD               :          objSecuritySettings.GetSecurityDescriptor(objSD)
Dim objSDa              : intRet = objSecuritySettings.GetSecurityDescriptor(objSDa)
Dim objSDx              : objSecuritySettings.GetSecurityDescriptor objSDx
Wscript.Echo "objSecuritySettings" _
  , VarType(objSecuritySettings), TypeName(objSecuritySettings) _
  , vbNewLine, "objSD ", VarType(objSD) , TypeName(objSD) _
  , vbNewLine, "objSDa", VarType(objSDa), TypeName(objSDa), intRet  _
  , vbNewLine, "objSDx", VarType(objSDx), TypeName(objSDx)

<强>输出

==>cscript D:\VB_scripts\SO\31512037.vbs
objSecuritySettings 9 SWbemObjectEx
 objSD  0 Empty
 objSDa 9 SWbemObjectEx 0
 objSDx 9 SWbemObjectEx

==>