4

有谁知道如何使用 WMI 在 VBScript 中获取 SQL Server 安装版本(不关心版本)?

我曾尝试使用注册表(但这需要您知道实例名称和 SQL Server 的版本。

我曾尝试使用 SQL 查询(但这要求您对数据库具有权限,并且我的进程使用的是 LOCAL 用户,而对 SQL Server DBMS 没有权限)。

所以,我只能使用 WQL 来查询 WMI。

我想我需要:

1) 查询 WMI 对象(哪一个)以获取实例名称。2) 然后,对于每个实例,查询另一个对象并从中获取版本。

我浏览了 Microsoft 文档,但找不到要使用的对象。

任何人都可以帮忙吗?

安静的莱尼

4

2 回答 2

2

感谢那。这是我创建的脚本。我希望它可以帮助其他人在我的位置:

Dim strValueName, strSKUName, strEdition, strVersion, strArchitecture 
Dim objWMI, objProp

On Error Resume Next
' First try SQL Server 2008/2008 R2:
Set objWMI = GetObject("WINMGMTS:\\.\root\Microsoft\SqlServer\ComputerManagement10")
If Err.Number <> 0 Then
    ' Next, try SQL Server 2005:
    Set objWMI = GetObject("WINMGMTS:\\.\root\Microsoft\SqlServer\ComputerManagement")
    If Err.Number <> 0 Then
        ' Next, try SQL Server 2012:
        Set objWMI = GetObject("WINMGMTS:\\.\root\Microsoft\SqlServer\ComputerManagement11")
    End If
End If


If Err.Number = 0 Then

    On Error Goto 0
    ' Go through the properties (which is just one) and find the name of the SKU.
    For Each objProp In objWMI.ExecQuery("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 AND (PropertyName = 'SKUNAME' OR PropertyName = 'VERSION')")
        If objProp.PropertyName = "SKUNAME" THEN
            strSKUName = objProp.PropertyStrValue
        Else
            strVersion = objProp.PropertyStrValue
        End If
    Next

    ' We do not want the number of bits, so chop it off!
    If Instr(strSKUName, " (") <> 0 Then
        strEdition = Left(strSKUName, Instr(strSKUName, " ("))
        strArchitecture = "64-bit"
    Else
        strEdition = strSKUName
        strArchitecture = "32-bit"
    End If


    WScript.Echo strEdition & " / " & strSKUName & " / " & strArchitecture

End If
于 2012-12-04T10:11:41.943 回答
2

从这里开始:如何:使用 VBScript 修改 SQL Server 服务高级属性

第一个样本:

set wmi = GetObject("WINMGMTS:\\.\root\Microsoft\SqlServer\ComputerManagement10")
for each prop in wmi.ExecQuery("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 AND PropertyName = 'VERSION'")
    WScript.Echo prop.ServiceName & " " & prop.PropertyName & ": " & prop.PropertyStrValue
next

似乎做你要求的。如果您使用的不是 2008 版,请选中“其他版本”。

于 2012-12-03T20:59:45.997 回答