WUGDataDeviceDiscovery

Bostwick.WUG.WUGDataDeviceDiscovery (Discovery)

This discovery finds all unique devices in a WUG system

Element properties:

TargetBostwick.WUG.WUGSQLServerClass
EnabledTrue
Frequency3600
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Bostwick.WUG.WUGSQLAccessAccount

Source Code:

<Discovery ID="Bostwick.WUG.WUGDataDeviceDiscovery" Target="Bostwick.WUG.WUGSQLServerClass" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Bostwick.WUG.WUGDevice">
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="DeviceKey"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="DeviceType"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="DeviceID"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="HostName"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="Name"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="WUGServer"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="IPAddress"/>
<Property TypeID="Bostwick.WUG.WUGDevice" PropertyID="WUGNotes"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider" RunAs="Bostwick.WUG.WUGSQLAccessAccount">
<IntervalSeconds>3600</IntervalSeconds>
<SyncTime/>
<ScriptName>WUG_DEVICE_AND_MONITOR_DISCOVERY.ps1</ScriptName>
<ScriptBody><Script>
param(
[string]$SourceId,
[string]$ManagedEntityId,
[string]$TargetComputer,
[string]$WUGDataSource,
[string]$WUGServer
)

$Domain = "."+([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).name
$oAPI = new-object -comObject "MOM.ScriptAPI"
$Discovery = $oAPI.CreateDiscoveryData(0, $SourceId, $ManagedEntityId)

function Get-DatabaseData {
[CmdletBinding()]
param (
[string]$connectionString,
[string]$query,
[switch]$isSQLServer
)
#Credit for Function goes to Don Jones
#url
#https://technet.microsoft.com/en-us/magazine/hh855069.aspx
if ($isSQLServer) {
Write-Verbose 'in SQL Server mode'
$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection
} else {
Write-Verbose 'in OleDB mode'
$connection = New-Object -TypeName System.Data.OleDb.OleDbConnection
}
$connection.ConnectionString = $connectionString
$command = $connection.CreateCommand()
$command.CommandText = $query
if ($isSQLServer) {
$adapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $command
} else {
$adapter = New-Object -TypeName System.Data.OleDb.OleDbDataAdapter $command
}
$SQLdataset = New-Object -TypeName 'System.Data.DataSet'
$adapter.Fill($SQLdataset)|out-null
$SQLdataset.Tables[0]
}

Function Create-DeviceDiscoveryData {
param($deviceData)

$texttohash = $devicedata.DeviceID.tostring() +"_"+$devicedata.WUGServer.ToUpper()
$hasher = new-object System.Security.Cryptography.SHA1Cng
$toHash = [System.Text.Encoding]::UTF8.GetBytes($TextToHash)
$hashByteArray = $hasher.ComputeHash($toHash)
$sb = New-Object System.Text.StringBuilder
foreach ($byte in $hashByteArray) {
$sb.Append($byte.ToString('x2')) | Out-Null
}

$device_KEY = ($sb.ToString()).substring(0,20)

$Instance = ''
$Instance = $Discovery.CreateClassInstance("$MPElement[Name='Bostwick.WUG.WUGDevice']$")
$Instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $deviceData.name)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/DeviceType$", $deviceData.DEVICETYPE)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/DeviceID$", $deviceData.DeviceID)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/HostName$", $deviceData.HOSTNAME)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/Name$", $deviceData.name)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/WUGServer$", $deviceData.WUGServer)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/DeviceKey$", $device_KEY)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/IPAddress$", $deviceData.IPADDRESS)
$Instance.AddProperty("$MPElement[Name='Bostwick.WUG.WUGDevice']/WUGNotes$", $deviceData.Notes)
$Instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $TargetComputer)
$Discovery.AddInstance($Instance)

}



$sqlQuery1 = "SELECT Device.sDisplayName AS name, NetworkInterface.sNetworkName AS HOSTNAME, DeviceType.sDisplayName AS DEVICETYPE, '$WUGServer' AS WUGServer,
NetworkInterface.sNetworkAddress AS IPADDRESS, Device.nDeviceID AS DeviceID,Device.sNote AS Notes
FROM Device INNER JOIN
DeviceType ON Device.nDeviceTypeID = DeviceType.nDeviceTypeID INNER JOIN
NetworkInterface ON Device.nDeviceID = NetworkInterface.nDeviceID AND Device.nDefaultNetworkInterfaceID = NetworkInterface.nNetworkInterfaceID"



$sqlData1 =Get-DatabaseData -query $sqlQuery1 -isSQLServer -connectionString $WUGDataSource

foreach($device in $sqlData1){
Create-DeviceDiscoveryData -deviceData $device
}





$discovery




</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>SourceId</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>ManagedEntityId</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>TargetComputer</Name>
<Value>$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>WUGDataSource</Name>
<Value>$Target/Property[Type='Bostwick.WUG.WUGSQLServerClass']/WUGDataSource$</Value>
</Parameter>
<Parameter>
<Name>WUGServer</Name>
<Value>$Target/Property[Type='Bostwick.WUG.WUGSQLServerClass']/WUGServer$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>