Esta investigação retorna o número de endereços livres, pendentes e em uso para o escopo especificado em um conjunto de propriedades. Essa investigação é usada para verificar limites de endereço para monitoramento de disponibilidade, bem como converter essas métricas em contadores de desempenho que podem ser apresentadas em gráfico ou armazenadas no data warehouse.
<ProbeActionModuleType ID="Microsoft.Windows.DHCPServer.Library.Probe.ScopeMonitor" Accessibility="Internal" RunAs="Microsoft.Windows.DHCPServer.Library.ActionAccount" Batching="false" PassThrough="false">
<Configuration>
<xsd:element name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element name="TargetComputer" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="Script" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>DHCPScopeMonitoring.vbs</ScriptName>
<Arguments>"$Config/TargetComputer$"</Arguments>
<ScriptBody><Script>
' Copyright (c) Microsoft Corporation. All rights reserved.
' Microsoft Windows DHCP Server Library Scope Monitoring
'
' Returns a property bag containing the number of free, inuse, and pending IP addresses in the specified scope / superscope.
'
' Parameters - TargetComputer The FQDN of the computer targeted by the script.
Sub Main()
Dim objLogFile, fso, oArgs, objLog, objDataColl, oRegex
Dim strLogStream, strScopeName, sPattern, TargetComputer
Dim strFreeCount, strInUseCount, strPendCount, strIsDisabled
Dim i
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set oArgs = WScript.Arguments
If oArgs.Count <> 1 Then
ThrowErrorAndExit "Usage: " & DHCP_SCRIPTNAME & "<target computer FQDN>"
End If
' Read all data to the registry. GetScriptStateKeyPath returns a 'safe' registry path to write data to/read data from.
' Registry key is ACL'ed with 'Creator Owner' meaning if you create it you alone (plus Admins) can read it.
Dim sRegPath
sRegPath = "HKLM\" & oAPI.GetScriptStateKeyPath("DHCP") & "\ScopePerfData"
On Error Resume Next
strLogStream = oShell.RegRead(sRegPath)
If Err.number <> 0 Then
Call oAPI.LogScriptEvent(DHCP_SCRIPTNAME, DHCP_WARNINGEVENTNUMBER, SCOM_WARNING, _
"RegRead failed with Error = " & Err.number & ". Description = " & Err.Description & vbCrLf & _
"Normally it means that corresponding workflow has not yet populated data for the first time.")
End If
On Error Goto 0
' Parse all needed lines using Regex.
Set oRegex = New RegExp
oRegex.Global = True
oRegex.Multiline = True
oRegex.IgnoreCase = True
oRegex.Pattern = sPattern
Set objDataColl = oRegex.Execute(strLogStream)
Dim oPropertyBag
Set oPropertyBag = oAPI.CreateTypedPropertyBag(SCOM_PB_PERFDATA)
'Call oAPI.LogScriptEvent(DHCP_SCRIPTNAME, DHCP_TRACEEVENTNUMBER, SCOM_INFORMATIONAL, "Registry data at """ & sRegPath & """ has " & objDataColl.count & " lines.")
For i = 0 to objDataColl.count - 1
strScopeName = CStr(objDataColl(i).SubMatches(1))
strFreeCount = CStr(objDataColl(i).SubMatches(2))
strInUseCount = CStr(objDataColl(i).SubMatches(3))
strPendCount = CStr(objDataColl(i).SubMatches(4))
strIsDisabled = CStr(objDataColl(i).SubMatches(5))
strIsDisabled = Left(strIsDisabled,Len(strIsDisabled)-1)
Call oPropertyBag.AddValue(strScopeName & "/" & "Free", strFreeCount)
' IncludeDisabled property
If strIsDisabled = "1" Then
Call oPropertyBag.AddValue(strScopeName & "/" & "Disabled", "1")
Else
Call oPropertyBag.AddValue(strScopeName & "/" & "Disabled", "0")
End If
Call oPropertyBag.AddValue(strScopeName & "/" & "InUse", strInUseCount)
Call oPropertyBag.AddValue(strScopeName & "/" & "Pending", strPendCount)
Next
oAPI.AddItem(oPropertyBag)
oAPI.ReturnItems
End Sub
Sub ThrowErrorAndExit(Message)
Call oAPI.LogScriptEvent(DHCP_SCRIPTNAME, DHCP_ERROREVENTNUMBER, SCOM_ERROR, Message)
WScript.Quit
End Sub