В качестве администратора баз данных SQL Server вам часто могут попросить предоставить список разработческих SQL-серверов, продукционных SQL-серверов или других типов SQL-серверов. Для выполнения этого запроса вам необходимо иметь список серверов под рукой. К счастью, большинство серверов зарегистрированы в Enterprise Manager, что позволяет получить эту информацию.
В этой статье мы рассмотрим, как воспользоваться Windows Scripting Host и VBScript для чтения реестра и перечисления всех SQL-серверов, зарегистрированных в Enterprise Manager.
Предварительные требования
- На машине, где мы выполняем скрипт, установлен SQL Server 2000 Client, и большинство серверов уже зарегистрированы в Enterprise Manager.
- VBScript и WSH должны иметь возможность выполняться на клиентской машине.
Шаг 1: Создание папки
Создайте папку с именем “Scan” на диске C (C:\Scan).
Шаг 2: Загрузка и сохранение VB Script
Загрузите предоставленный ниже VB Script и сохраните его как “C:\Scan\scanEM.vbs”.
'Сохраните этот файл в c:\scan\scanEM.vbs
'Выполните его в командной строке
'Создано: MAK
'Дата: 18 марта 2005 года
Set objArgs = WScript.Arguments
GroupName = objArgs(0)
mySkey = "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\SQLEW\Registered Servers X" & "\" & GroupName
Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKCU = &H80000001 'HKEY_CURRENT_USER
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Const HKU = &H80000003 'HKEY_USERS
Const HKCC = &H80000005 'HKEY_CURRENT_CONFIG
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const DELETE = &H10000
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oReg = GetObject("winmgmts:!root/default:StdRegProv")
Function EnumKey(Key, SubKey)
Dim Ret()
oReg.EnumKey Key, SubKey, sKeys
ReDim Ret(UBound(sKeys))
For Count = 0 To UBound(sKeys)
Ret(Count) = sKeys(Count)
Next
EnumKey = Join(Ret, vbCrLf)
End Function
Function EnumValues(Key, SubKey)
Dim Ret()
oReg.EnumValues Key, SubKey, sKeys, iKeyType
ReDim Ret(UBound(sKeys))
For Count = 0 To UBound(sKeys)
Select Case iKeyType(Count)
Case REG_SZ
oReg.GetStringValue Key, SubKey, sKeys(Count), sValue
Ret(Count) = sKeys(Count) & "," & "REG_SZ" & "," & sValue
Case REG_EXPAND_SZ
oReg.GetExpandedStringValue Key, SubKey, sKeys(Count), sValue
Ret(Count) = sKeys(Count) & "," & "REG_EXPAND_SZ" & "," & sValue
Case REG_BINARY
oReg.GetBinaryValue Key, SubKey, sKeys(Count), aValue
Ret(Count) = sKeys(Count)
Case REG_DWORD
oReg.GetDWORDValue Key, SubKey, sKeys(Count), lValue
Ret(Count) = sKeys(Count) & "," & "REG_DWORD" & "," & lValue
Case REG_MULTI_SZ
oReg.GetMultiStringValue Key, SubKey, sKeys(Count), sValue
Ret(Count) = sKeys(Count) & "," & "REG_MULTI_SZ" & "," & Join(sValue, "")
End Select
Next
EnumValues = Join(Ret, vbCrLf)
End Function
После сохранения скрипта вы можете выполнить его в командной строке.
Следуя этим шагам, вы сможете получить список всех SQL-серверов, зарегистрированных в Enterprise Manager. Эта информация может быть полезна для различных задач, таких как мониторинг свободного места на диске или инвентаризация аппаратного обеспечения и информации об ОС на всех SQL-серверах.
Спасибо за прочтение этой статьи. Мы надеемся, что она поможет вам в ваших задачах по администрированию SQL Server.