'*************************************************************************
' ScriptName: Microsoft.Windows.Server.DNS.Zone.Discovery
'
' Purpose: DNS Server Zone Discovery
'
' File: Microsoft.Windows.Server.DNS.Zone.Discovery.vbs
'*************************************************************************
Option Explicit
SetLocale("en-us")
Dim strSourceId, strManagedEntityId, strTargetComputer, strZoneName, wmiNamespaceString, wmiQueryString, junkVar
Dim strQueryOrder, zoneTypeString, dynamicType, strDataFile, colSOA, objSOA, colZones2
Dim ix, strMS, strSOA, nameServers
Dim boolIsActivated
Dim oAPI, oDiscoveryData, objWMIService, colitems, objItem, lInst, oReg, regVal, objItemIndex, initial, zoneCount, initialPercent, finalPercent, oArgs
strSourceId = "$MPElement$"
strManagedEntityId = "$Target/Id$"
strTargetComputer = "$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$"
wmiNamespaceString = "winmgmts://./root/MicrosoftDNS"
wmiQueryString = "SELECT * FROM MicrosoftDNS_Zone WHERE ZoneType <> 4"
Set oArgs = WScript.Arguments
If (oArgs.Count = 2) Then
initialPercent= CInt(oArgs(0))
finalPercent= CInt(oArgs(1))
End If
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oDiscoveryData = oAPI.CreateDiscoveryData(0, strSourceId, strManagedEntityId)
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
ON ERROR RESUME NEXT
set objWMIService = GetObject(wmiNamespaceString)
If Err.Number <> 0 Then
Call ReturnDiscovery
End If
set colitems = objWMIService.ExecQuery(wmiQueryString)
zoneCount=colitems.count
If Err.Number <> 0 Then
Call ReturnDiscovery
End If
If ( zoneCount = 0 ) Then
Call ReturnDiscovery
End If
ON ERROR GOTO 0
If((CInt(zoneCount) < 10) AND (CInt(initialPercent) = 0)) Then
initial= 1
Else
If(CInt(zoneCount) >= 10) Then
initial = CInt((initialPercent/100*zoneCount)+1)
zoneCount = CInt((finalPercent/100*zoneCount))
Else
initial=0
zoneCount=-1
End If
End If
For objItemIndex=(CInt(initial)) To (CInt(zoneCount))
Set objItem=colitems.ItemIndex(objItemIndex-1)
If Not IsNull(objItem.Name) Then
If Trim(LCase(objItem.Name)) = "globalnames" Then
If (oReg.GetDWordValue(&H80000002, "SYSTEM\CurrentControlSet\Services\DNS\Parameters", "EnableGlobalNamesSupport", regVal) <> 0) Then
boolIsActivated = CBool("False")
Else
If CInt(regVal) = 1 Then
boolIsActivated = CBool("True")
Else
boolIsActivated = CBool("False")
End If
End If
If (oReg.GetDWordValue(&H80000002, "SYSTEM\CurrentControlSet\Services\DNS\Parameters", "GlobalNamesQueryOrder", regVal) <> 0) Then
strQueryOrder = "Local Zone First"
Else
If CInt(regVal) = 1 Then
strQueryOrder = "Local Zone First"
Else
strQueryOrder = "Global Zone First"
End If
End If
Set lInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.Server.DNS.Zone.Global']$")
call lInst.AddProperty("$MPElement[Name='Microsoft.Windows.Server.DNS.Zone.Global']/IsActivated$", boolIsActivated)
call lInst.AddProperty("$MPElement[Name='Microsoft.Windows.Server.DNS.Zone.Global']/QueryOrder$", strQueryOrder)
Else
Set lInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.Server.DNS.Zone']$")
End If
select case cint(objItem.ZoneType)
case 1
zoneTypeString="Primary"
case 2
zoneTypeString="Secondary"
case 3
zoneTypeString="Stub"
case Else
zoneTypeString="Unknown"
end select
select case cint(objItem.AllowUpdate)
case 0
dynamicType="None"
case 1
dynamicType="Secure and NonSecure"
case 2
dynamicType="Secure Only"
case Else
dynamicType="Other"
end select
strDataFile = "null"
If not IsNull(objItem.DataFile) Then
strDataFile = objItem.DataFile
End If
If Not IsNull(objItem.MasterServers) Then
strMS=""
For ix = 0 To UBound(objItem.MasterServers)
strMS=strMS & objItem.MasterServers(ix) & " "
Next
End If
Set colSOA = objWMIService.ExecQuery("Select * from MicrosoftDNS_SOAType Where ContainerName = '" & objItem.Name & "'")
For Each objSOA In colSOA
If Right(objSOA.PrimaryServer,1) = "." Then
strSOA = Left(objSOA.PrimaryServer,Len(objSOA.PrimaryServer)-1)
Else
strSOA = objSOA.PrimaryServer
End If
exit for
Next
nameServers=""
Set colZones2 = objWMIService.ExecQuery("Select nshost from MicrosoftDNS_nstype Where ContainerName = '" & objItem.containername & "'" & " and domainname='" & objItem.Name & "'" & " and dnsservername='" & objItem.dnsservername & "'" )
nameServers = GetNameServers(colZones2)
Function GetNameServers(ZonesColl)
Dim DataList, objTmpZone
Set DataList = CreateObject("ADOR.Recordset")
DataList.Fields.Append "nshost", 200, 255
DataList.Open
For Each objTmpZone In ZonesColl
DataList.AddNew
DataList("nshost") = objTmpZone.nshost
DataList.Update
Next
DataList.Sort = "nshost"
If DataList.EOF Then
GetNameServers = ""
Exit Function
End If
DataList.MoveFirst
Do Until DataList.EOF
nameServers=nameServers & DataList.Fields.Item("nshost") & " "
DataList.MoveNext
Loop
DataList.Close
Set DataList = Nothing
GetNameServers = nameServers
End Function</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>