[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] VBS的SWbemObjectPath.IsSingleton属性怎么理解?[已解决]

本帖最后由 czjt1234 于 2013-3-11 09:17 编辑

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394239(v=vs.85).aspx
这里指明Win32_OperatingSystem is a singleton class. To get the single instance, use "@" for the key
  1. Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  2. Set objSWbemServices = objSWbemLocator.ConnectServer()
  3. Set objSWbemObject = objSWbemServices.Get("Win32_OperatingSystem")
  4. Msgbox objSWbemObject.Path_.IsSingleton
  5. Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_OperatingSystem")
  6. For Each objSWbemObject In objSWbemObjectSet
  7.     Msgbox objSWbemObject.Path_.IsSingleton
  8. Next
复制代码
怎么都显示False?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

QQ 20147578

我又构建了一个代码验证该属性,设置一个新的类的该属性为True
但是该类还是能设置2个实例

难道这个属性不是标志该类只有一个实例?

  1. Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  2. Set objSWbemServices = objSWbemLocator.ConnectServer()
  3. Set objSWbemObject = objSWbemServices.Get()           '获取一个空类的实例
  4. objSWbemObject.Path_.Class = "NewClass"               '设置类名
  5. objSWbemObject.Properties_.Add "Property01", 8        '为这个类添加一个字符串属性
  6. objSWbemObject.Properties_("Property01").Qualifiers_.Add "key", True  '设定一个主键属性
  7. Set objSWbemObjectPath = objSWbemObject.Put_()        '更新该类到WMI中,同时返回一个SWbemObjectPath对象
  8. Msgbox "IsSingleton:" & objSWbemObjectPath.IsSingleton 'False
  9. objSWbemObjectPath.SetAsSingleton()
  10. Msgbox "IsSingleton:" & objSWbemObjectPath.IsSingleton 'True
  11. Set objSWbemObject = objSWbemServices.Get("NewClass")
  12. Set objNewInst = objSWbemObject.SpawnInstance_()      '为这个类增加一个实例
  13. objNewInst.Property01 = "New00"                       '设置实例的属性值
  14. Set objNewInst1 = objSWbemObject.SpawnInstance_()     '为这个类再增加一个实例
  15. objNewInst1.Property01 = "New01"                      '设置实例的属性值
  16. objNewInst.Put_()                                     '更新该类到WMI中
  17. objNewInst1.Put_()
  18. Set objSWbemObjectSet = objSWbemServices.InstancesOf("NewClass")
  19. Msgbox "这个类有 " & objSWbemObjectSet.Count & " 个实例"
  20. objSWbemObject.Delete_()                              '删除这个类
复制代码

QQ 20147578

TOP

楼主这次打算花多少个小时弄明白?

TOP

本帖最后由 czjt1234 于 2013-3-11 07:16 编辑

SetAsClass
SetAsSingleton

在msdn和百度和google里都搜了,没有这2个方法的代码示例

只能自己猜

所以IsSingleton的意思也凭感觉去凭空捏造

QQ 20147578

TOP

搞定,简单的示例一下
  1. strPath = "\\a\b\c\d:e.f='g'"
  2. 'strPath = "IIsWebServer='W3SVC/1180970907'"   '尝试更换字符串查看变化
  3. Set objSWbemObjectPath = CreateObject("WbemScripting.SWbemObjectPath")
  4. objSWbemObjectPath.Path = strPath
  5. 'objSWbemObjectPath.SetAsClass()       '去掉行首的'查看变化,按类名的标准,格式化字符串
  6. 'objSWbemObjectPath.SetAsSingleton()   '去掉行首的'查看变化,按实例名=@的标准,格式化字符串
  7. Msgbox "Authority      " & vbTab & objSWbemObjectPath.Authority       & vbCrLf & _
  8.        "Class          " & vbTab & objSWbemObjectPath.Class           & vbCrLf & _
  9.        "IsClass        " & vbTab & objSWbemObjectPath.IsClass         & vbCrLf & _
  10.        "IsSingleton    " & vbTab & objSWbemObjectPath.IsSingleton     & vbCrLf & _
  11.        "Locale         " & vbTab & objSWbemObjectPath.Locale          & vbCrLf & _
  12.        "Namespace      " & vbTab & objSWbemObjectPath.Namespace       & vbCrLf & _
  13.        "ParentNamespace" & vbTab & objSWbemObjectPath.ParentNamespace & vbCrLf & _
  14.        "Path           " & vbTab & objSWbemObjectPath.Path            & vbCrLf & _
  15.        "Relpath        " & vbTab & objSWbemObjectPath.Relpath         & vbCrLf & _
  16.        "Server         " & vbTab & objSWbemObjectPath.Server          & vbCrLf & _
  17.        "DisplayName    " & vbTab & objSWbemObjectPath.DisplayName
  18. Set objSWbemNamedValueSet = objSWbemObjectPath.Keys
  19. For Each objSWbemNamedValue In objSWbemNamedValueSet
  20.     Msgbox "Name:" & objSWbemNamedValue.Name &vbCrLf & _
  21.            "Value:" & objSWbemNamedValue.Value
  22. Next
  23. 'objSWbemNamedValue.Name 表示.之后=之前的字符串
  24. 'objSWbemNamedValue.Value 表示''之间的字符串
复制代码

QQ 20147578

TOP

返回列表