2013-01-16 23 views
-3

任何人都可以通過vbscript(使用WMI)找到已安裝的SQL Server版本。我有一個方案,可以在一臺機器上安裝SQL Server 2008 R2或SQL Server 2012。使用WMI查找SQL Server版本的VBScript

+3

你嘗試過什麼?你有沒有搜索過這樣的腳本?如果安裝了*兩個*版本(通常是這種情況),或者沒有版本(例如2005或2008)或者根本沒有SQL Server,你想要做什麼? –

+0

我試過Google搜索..無法找到一個..我的場景是 - 一個和唯一的版本將被安裝。 2008或2012. – Subhasis

+2

你不可能非常努力地嘗試。我搜索了「vbscript wmi查找sql​​ server版本」,這是第一次點擊:https://groups.google.com/forum/?fromgroups=#!topic/microsoft.public.scripting.wsh/MNtfPYXZhIA –

回答

2

the first Google search result here基於代碼:

Dim WMI, Col, Prod, Q 
Set WMI = GetObject("WinMgmts:") 
Q = "Select * FROM Win32_Product WHERE Vendor = " & _ 
    "'Microsoft Corporation' AND Name LIKE 'SQL Server%Database Engine Services'" 
Set Col = WMI.ExecQuery(Q) 
For Each Prod in Col 
    if left(Prod.version, 3) = "11." then 
    msgbox "SQL Server 2012 was found!" & vbCrLf & prod.version 
    elseif left(Prod.version, 4) = "10.5" then 
    msgbox "SQL Server 2008 R2 was found!" & vbCrLf & prod.version 
    end if 
Next 
Set Col = Nothing 
Set WMI = Nothing 

注意WMI是不是這樣做的最快方法。你有沒有考慮直接檢查註冊表而不是通過WMI?

UPDATE給出使用註冊表,而不是OP的解決方案,並與假設的2008R2或2012年正是一個可以安裝:

RegKey2012 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _ 
      "Microsoft SQL Server\MSSQL11.MSSQLSERVER\" 
If RegKeyExists(RegKey2012) Then 
    WScript.StdOut.Write("2012") 
Else 
    WScript.StdOut.Write("2008R2") 
End If 

Function RegKeyExists(Key) 
    Dim oShell, entry 
    On Error Resume Next 
    Set oShell = CreateObject("WScript.Shell") 
    entry = oShell.RegRead(Key) 
    If Err.Number <> 0 Then 
    Err.Clear 
    RegKeyExists = False 
    Else 
    Err.Clear 
    RegKeyExists = True 
    End If 
End Function 
+0

thx for排序腳本...我需要在安裝程序中添加腳本,所以我可以使用任何方法...你是否建議去註冊表路線更好... – Subhasis

+1

@Subhasis註冊表可能會更好,是。不僅WMI因VBScript而出名,而且它也非常容易出現各種權限和其他問題 - 我遇到過很多WMI剛破壞的機器。 –

+0

這似乎是工作 – Subhasis