需要OS名称,然后需要版本

时间:2012-11-01 13:39:52

标签: vbscript

我需要检索操作系统名称,例如“Windows 2003”,然后检索操作系统版本,这将是“服务器标准版”。

我有这个脚本

Set colItems = objWMISrvc.ExecQuery("SELECT * FROM Win32_OperatingSystem"
For Each objOperatingSystem in colItems
   strOSName = objOperatingSystem.Caption
Next

这使strOSName成为“Windows 2003 Server Standard Edition”或我在“Microsoft Windows 7 Professional”中开发的系统。

我有办法将这两个方面分开吗?如果这是有道理的......

1 个答案:

答案 0 :(得分:2)

由于营销在版本控制方面有发言权,我怀疑你能为所有Windows版本找到一个普遍适用的策略。对于给出的示例,我将从RegExp开始:

Option Explicit

Function qq(s) : qq = """" & s & """" : End Function

Dim aVers : aVers = Array( _
    "Windows 2003 Server Standard Edition" _
  , "Microsoft Windows 7 Professional" _
)
Dim reVers : Set reVers = New RegExp
reVers.Pattern = "^(\D+\d+) (.*)$"
Dim sVers
For Each sVers In aVers
    Dim oMTS : Set oMTS = reVers.Execute(sVers)
    WScript.Echo Join(Array( _
       qq(sVers), qq(oMTS(0).SubMatches(0)), qq(oMTS(0).SubMatches(1)) _
    ), vbCrLf)
Next

输出:

"Windows 2003 Server Standard Edition"
"Windows 2003"
"Server Standard Edition"
"Microsoft Windows 7 Professional"
"Microsoft Windows 7"
"Professional"

处理例如“Microsoft Windows XP [版本5.1.2600]”你必须修改模式(但是自定义RegExp模式比修改包含大量InStr()和Mid()调用的函数更好。

已添加 / cf。评语)

模式“^(\ D + \ d +)(。*)$”查找:

  1. ^字符串的开头
  2. (开始第一次捕获/分组
  3. \ D +序列(1个或多个)非数字
  4. \ d +数字化序列
  5. )结束第一次捕获/组
  6. < - 看!一片空白!
  7. (开始第二次捕获/组
  8. 。*(可能为空)字符序列,但vbLf
  9. 除外
  10. )结束第二次捕获/组
  11. $ end of string