2012-11-01 53 views
0

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

我有此脚本

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

这使得strOSName为“Windows 2003 Server标准版”或者我开发的系统,“微软Windows 7专业版”上。

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

回答

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()调用的函数更好)。

ADDED/cf。评论)

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

  1. ^字符串的开始
  2. (初开始捕获/组
  3. \ d +序列(1或多个)非数字
  4. \ d + digitis
  5. 的序列)结束第一捕获/组
  6. < - 看!一片空白!
  7. (开始第二捕获/组
  8. 。*(可能为空)字符除了vbLf
  9. 序列)结束第二捕捉/组串
+0

  • $年底。这真是棒极了。我知道一些正则表达式,但我没有看到你的模式在做什么。我的意思是,它的工作,这是伟大的,但我只是好奇。 – envinyater

  • +0

    我有一个批处理文件,这样做。我会建议看看PowerShell的最佳方式。 – Jeff

    相关问题