Hello,
I am having a similar error and would like to ask why the script abandons and returns "Object not in collection"
It's also writing out a text file.
I am having a similar error and would like to ask why the script abandons and returns "Object not in collection"
It's also writing out a text file.
Code:
str_boxname = WScript.Arguments( 0 )
const HKEY_LOCAL_MACHINE = &H80000002
DIM var_IPS
DIM var_Domain
DIM var_SERVERNAME
DIM var_VERSION
DIM var_OS
DIM var_OSVersion
DIM var_OSSP
DIM var_FDQN
DIM var_InstanceName
DIM var_port
DIM var_connection
DIM var_isCluster
var_SERVERNAME = f_servername(str_boxname)
var_Domain = f_DOMAIN(var_SERVERNAME)
var_OS = f_OS(var_SERVERNAME)
var_OSVersion = f_OSVersion(var_SERVERNAME)
var_OSSP = f_OSSP(var_SERVERNAME)
var_IPS = f_IPS(var_SERVERNAME)
var_FDQN = f_fdqn(var_SERVERNAME)
var_CLUSTER = f_CLUSTER(var_SERVERNAME)
OutputFile="c:\temp\" & "EPinventory." & var_SERVERNAME
Set oFSO = CreateObject("Scripting.FilesyStemObject")
Set ofile = ofso.createTextFile(OutputFile, True)
Set StdOut = WScript.StdOut
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & str_boxname & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server"
strValueName = "InstalledInstances"
oReg.CheckAccess HKEY_LOCAL_MACHINE, strKeyPath, KEY_QUERY_VALUE, bHasAccessRight
If bHasAccessRight = True Then
ofile.writeline CHR(34)&"DBTYPE"&CHR(34)&"|"&CHR(34)&"DBNAME"&CHR(34)&"|"&CHR(34)&"VERSION"&CHR(34)&"|"&CHR(34)&"INSTANCENAME"&CHR(34)&"|"&CHR(34)&"SERVERNAME"&CHR(34)&"|"&CHR(34)&"INSTANCEIPS"&CHR(34)&"|"&CHR(34)&"PORT"&CHR(34)&"|"&CHR(34)&"DOMAIN"&CHR(34)&"|"&CHR(34)&"OS"&CHR(34)&"|"&CHR(34)&"OSVERSION"&CHR(34)&"|"&CHR(34)&"OSPATCHLEVEL"&CHR(34)&"|"&CHR(34)&"FDQN"&CHR(34)&"|"&CHR(34)&"IPS"&CHR(34)&"|"&CHR(34)&"CLUSTERINFO" &CHR(34)
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,arrValues
For Each RegInstanceName In arrValues
var_InstanceName = f_Instance(var_SERVERNAME,RegInstanceName)
var_Port = f_port(var_SERVERNAME, RegInstanceName )
var_Connection = f_connection(var_SERVERNAME,RegInstanceName )
Set oServer = CreateObject("SQLDMO.SQLServer")
oServer.LoginSecure = True
if var_iscluster = 1 then
oServer.Connect var_Connection & "," & var_port
else
oServer.Connect var_Connection
var_CLUSTER = "no cluster info found"
end if
var_version = mid(oServer.VersionString,29,10)
For nDatabase = 1 to oServer.Databases.Count
ofile.writeline CHR(34) & "MSSQLSRV" & CHR(34) & "|" _
& CHR(34) & mid(Ucase(oServer.Databases(nDatabase).Name),1,32) & CHR(34) & "|" _
& CHR(34) & var_version & CHR(34) & "|" _
& CHR(34) & Ucase(var_InstanceName) & CHR(34) & "|" _
& CHR(34) & Ucase(var_SERVERNAME) & CHR(34) & "|" _
& CHR(34) & "*" & CHR(34) & "|" _
& CHR(34) & var_Port & CHR(34) & "|" _
& CHR(34) & Ucase(var_Domain) & CHR(34) & "|" _
& CHR(34) & Ucase(var_OS) & CHR(34) & "|" _
& CHR(34) & var_OSVersion & CHR(34) & "|" _
& CHR(34) & Ucase(var_OSSP) & CHR(34) & "|" _
& CHR(34) & Ucase(var_FDQN) & CHR(34) & "|" _
& CHR(34) & mid(var_IPS,1,128) & CHR(34) & "|" _
& CHR(34) & var_CLUSTER & CHR(34)
Next
Set oServer = Nothing
Next
Else
ofile.writeline "NO_INSTANCE_FOUND"
End If
Set oFSO = Nothing
'---------------------------------------------------------------------------------------------------------------------
function f_Instance(strComputer, Installed_Instance)
Const KEY_QUERY_VALUE = &H0001
Const HKEY_LOCAL_MACHINE = &H80000002
if Installed_Instance = "MSSQLSERVER" then
var_InstanceName = strComputer
var_isCluster = 0
else
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\MICROSOFT\Microsoft SQL Server\" & Installed_Instance & "\Cluster"
oReg.CheckAccess HKEY_LOCAL_MACHINE, strKeyPath, KEY_QUERY_VALUE,bHasAccessRight
If bHasAccessRight = True Then
oReg.GetExpandedStringValue HKEY_LOCAL_MACHINE, strKeyPath, "ClusterName", strValue
var_InstanceName = strValue & "\" & Installed_Instance
var_isCluster = 1
Else
var_InstanceName = strComputer & "\" & Installed_Instance
var_isCluster = 0
End If
end if
f_Instance = var_InstanceName
end function
'---------------------------------------------------------------------------------------------------------------------
'IPS
function f_IPS (strComputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True",,48)
For Each objItem in colItems
If isNull(objItem.IPAddress) or trim(Join(objItem.IPAddress)) = "" or trim(Join(objItem.IPAddress)) = "0.0.0.0" Then
var_IPS = var_IPS
Else
var_IPS = var_IPS & Join(objItem.IPAddress) & ","
End If
Next
f_IPS = mid(var_IPS,1,len(var_IPS)-1)
end function
'---------------------------------------------------------------------------------------------------------------------
'RETURNS FDQN
function f_FDQN (strComputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True ",,48)
For Each objItem in colItems
if trim(objItem.DNSHostName) <> "" then
f_FDQN = objItem.DNSHostName
end if
Next
end function
'---------------------------------------------------------------------------------------------------------------------
'RETURNS THE DOMAIN
function f_DOMAIN (strComputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_ComputerSystem",,48)
For Each objItem in colItems
f_DOMAIN = objItem.Domain
Next
end function
'---------------------------------------------------------------------------------------------------------------------
'Returns the Operating System
function f_OS(strcomputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_OperatingSystem",,48)
For Each objItem in colItems
f_OS = objItem.Caption
Next
end function
'---------------------------------------------------------------------------------------------------------------------
'Returns the OS Version
function f_OSVersion(strcomputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_OperatingSystem",,48)
For Each objItem in colItems
f_OSVersion = objItem.Version
Next
end function
'---------------------------------------------------------------------------------------------------------------------
function f_OSSP(strcomputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_OperatingSystem",,48)
For Each objItem in colItems
f_OSSP = objItem.CSDVersion
Next
end function
'---------------------------------------------------------------------------------------------------------------------
'RETURNS THE SERVERNAME
function f_servername(strComputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48)
For Each objItem in colItems
f_servername = objItem.Name
Next
end function
'---------------------------------------------------------------------------------------------------------------------
'RETURNS THE CLUSTER NAME
function f_CLUSTER(strComputer)
f_CLUSTER = ""
end function
'---------------------------------------------------------------------------------------------------------------------
'CONNECTION STRING
function f_connection(strComputer, par_InstanceIp)
Const KEY_QUERY_VALUE = &H0001
Const HKEY_LOCAL_MACHINE = &H80000002
var_connection = ""
if par_InstanceIp = "MSSQLSERVER" then
var_connection = strComputer
else
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\MICROSOFT\Microsoft SQL Server\" & par_InstanceIp & "\Cluster"
oReg.CheckAccess HKEY_LOCAL_MACHINE, strKeyPath, KEY_QUERY_VALUE,bHasAccessRight
If bHasAccessRight = True Then
f_instanceIp strComputer, par_instanceIp, var_connection
Else
var_connection = strComputer & "\" & par_InstanceIp
End If
end if
f_connection = var_connection
end function
'---------------------------------------------------------------------------------------------------------------------
'RETURNS THE PORT NUMBER
function f_port(strComputer,sInstance)
Const HKEY_LOCAL_MACHINE = &H80000002
if sInstance = "MSSQLSERVER" THEN
sComputer = strComputer
sKey = "SOFTWARE\MICROSOFT\MSSQLServer\MSSQLServer\Supersocketnetlib\Tcp"
else
sComputer = strComputer
instance = sInstance
sKey = "SOFTWARE\MICROSOFT\Microsoft SQL Server\"+instance+"\MSSQLServer\Supersocketnetlib\Tcp"
end if
sMethod = "GetStringValue"
hTree = HKEY_LOCAL_MACHINE
sValue = "TcpPort"
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//"&sComputer&"/root/default:StdRegProv")
Set oMethod = oRegistry.Methods_(sMethod)
Set oInParam = oMethod.inParameters.SpawnInstance_()
oInParam.hDefKey = hTree
oInParam.sSubKeyName = sKey
oInParam.sValueName = sValue
Set oOutParam = oRegistry.ExecMethod_(sMethod, oInParam)
f_port = Cstr(oOutParam.Properties_("sValue"))
end function
'---------------------------------------------------------------------------------------------------------------------
function F_InstanceIP(strComputer, Installed_Instance, var_connection)
Const KEY_QUERY_VALUE = &H0001
Const HKEY_LOCAL_MACHINE = &H80000002
var_connection = ""
Set oRegIp=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPathIp = "SOFTWARE\Microsoft\Microsoft SQL Server\" & Installed_Instance & "\Cluster"
oRegIp.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPathIp, "ClusterIpAddr", IParrValues
For Each strValue In IParrValues
var_connection = var_connection & strvalue
Next
set oRegIp = nothing
f_instanceip = var_connection
end function