Functions/Find-PRTGObject.ps1
function Find-PRTGObject { <# .Synopsis Find-PRTGObject .DESCRIPTION Find objects from sensortree by various criteria .NOTES Author: Andreas Bellstedt .LINK https://github.com/AndiBellstedt/PoShPRTG .EXAMPLE Find-PRTGObject -ByTAGName "Server" Find-PRTGObject -ByTAGName "Template_*" -IncludeInherited Find-PRTGObject -ByTAGName "Template_*", "Server" .EXAMPLE Find-PRTGObject -ByStatus "Warning" Find-PRTGObject -ByStatus 'Paused by User', "Down" .EXAMPLE Find-PRTGObject -BySensorType POP3 Find-PRTGObject -BySensorType POP3, DNS #> [CmdletBinding(DefaultParameterSetName='Default', SupportsShouldProcess=$false, ConfirmImpact='Low')] Param( [Parameter(Mandatory=$true, ParameterSetName='ByTAGName')] [string[]]$ByTAGName, [Parameter(Mandatory=$false, ParameterSetName='ByTAGName')] [switch]$CaseSensitive, [Parameter(Mandatory=$false, ParameterSetName='ByTAGName')] [switch]$IncludeInherited, [Parameter(Mandatory=$true, ParameterSetName='ByStatus')] [ValidateSet("Unknown","Scanning","Up","Warning","Down","No Probe","Paused by User","Paused by Dependency","Paused by Schedule","Unusual","Not Licensed", "Paused Until")] [string[]]$ByStatus, [Parameter(Mandatory=$true, ParameterSetName='BySensorType')] [ValidateSet('Cloud HTTP', 'Cloud Ping', 'Serverzustand', 'DNS', 'VMWare Hostserver Hardware-Zustand (SOAP)', 'VMware Hostserver Leistung (SOAP)', 'Exchange Sicherung (Powershell)', 'Exchange Datenbank (Powershell)', 'Exchange Datenbank DAG (Powershell)', 'Exchange Postfach (Powershell)', 'Exchange Nachrichtenwarteschlange (Powershell)', 'Programm/Skript', 'Programm/Skript (Erweitert)', 'Datei-Inhalt', 'Ordner', 'FTP', 'Green IT', 'HTTP', 'HTTP (Erweitert)', 'Hyper-V Freigegebenes Clustervolume', 'IMAP', 'Windows Updates Status (Powershell)', 'Leistungsindikator IIS Anwendungspool', 'Ping', 'POP3', 'Port', 'Zustand der Probe', 'Active Directory Replikationsfehler', 'Windows Druckwarteschlange', 'WSUS-Statistiken', 'RDP (Remote Desktop)', 'Freigaben-Speicherplatz', 'SMTP', 'SNMP Prozessorlast', 'SNMP (Benutzerdef.)', 'SNMP-Zeichenfolge', 'SNMP Dell EqualLogic Physikalischer Datenträger', 'SNMP Dell PowerEdge Physikalischer Datenträger', 'SNMP SonicWALL Systemzustand', 'SNMP Dell PowerEdge Systemzustand', 'SNMP Plattenplatz', 'SNMP-Bibliothek', 'SNMP Linux Durchschnittl. Last', 'SNMP Linux Speicherinfo', 'SNMP Linux Physikalischer Datenträger', 'SNMP Speicher', 'SNMP QNAP Logischer Datenträger', 'SNMP QNAP Physikalischer Datenträger', 'SNMP QNAP Systemzustand', 'SNMP RMON', 'SNMP-Datenverkehr', 'SNMP-Laufzeit', 'SNTP', 'SSL-Sicherheitsüberprüfung', 'SSL-Zertifikatssensor', 'Systemzustand', 'SNMP-Trap-Empfänger', 'VMware Virtual Machine (SOAP)', 'VMware Datastore (SOAP)', 'Ereignisprotokoll (Windows API)', 'WMI Sicherheits-Center', 'WMI Laufwerkskapazität (mehrf.)', 'WMI Ereignisprotokoll', 'WMI Exchange Transportwarteschlange', 'Hyper-V Virtuelle Maschine', 'Hyper-V Host Server', 'Hyper-V Virtuelles Speichergerät', 'Windows IIS-Anwendung', 'WMI Logischer Datenträger E/A BETA', 'WMI Arbeitsspeicher', 'WMI Netzwerkadapter', 'WMI Auslagerungsdatei', 'Windows Physikalischer Datenträger E/A BETA', 'Windows Prozess', 'Windows Prozessorlast', 'WMI Dienst', 'WMI Freigabe', 'WMI Microsoft SQL Server 2012', 'WMI Terminaldienste (Windows 2008+)', 'Windows Systemlaufzeit', 'WMI UTC-Zeit', 'WMI Wichtige Systemdaten (v2)', 'WMI Datenträger')] [String[]]$BySensorType, # sensortree from PRTG Server [Parameter(Mandatory=$false)] [ValidateNotNullOrEmpty()] [xml]$SensorTree = $global:PRTGSensorTree ) Begin { $Local:logscope = $MyInvocation.MyCommand.Name $StatusMapping = @{ "Unknown" = 1 "Scanning"= 2 "Up" =3 "Warning" = 4 "Down"= 5 "No Probe" = 6 "Paused by User" = 7 "Paused by Dependency" = 8 "Paused by Schedule" = 9 "Unusual" = 10 "Not Licensed" = 11 "Paused Until" = 12 } $SensorTypeMapping = @{ 'Cloud HTTP' = 'cloudhttp' 'Cloud Ping' = 'cloudping' 'Serverzustand' = 'corestate' 'DNS' = 'dns' 'VMWare Hostserver Hardware-Zustand (SOAP)' = 'esxserverhealthsensorextern' 'VMware Hostserver Leistung (SOAP)' = 'esxserversensorextern' 'Exchange Sicherung (Powershell)' = 'exchangepsbackup' 'Exchange Datenbank (Powershell)' = 'exchangepsdatabase' 'Exchange Datenbank DAG (Powershell)' = 'exchangepsdatabasedag' 'Exchange Postfach (Powershell)' = 'exchangepsmailbox' 'Exchange Nachrichtenwarteschlange (Powershell)' = 'exchangepsmailqueue' 'Programm/Skript' = 'exe' 'Programm/Skript (Erweitert)' = 'exexml' 'Datei-Inhalt' = 'filecontent' 'Ordner' = 'folder' 'FTP' = 'ftp' 'Green IT' = 'green' 'HTTP' = 'http' 'HTTP (Erweitert)' = 'httpadvanced' 'Hyper-V Freigegebenes Clustervolume' = 'hypervcsvdiskfree' 'IMAP' = 'imap' 'Windows Updates Status (Powershell)' = 'lastwindowsupdate' 'Leistungsindikator IIS Anwendungspool' = 'pciisapppool' 'Ping' = 'ping' 'POP3' = 'pop3' 'Port' = 'port' 'Zustand der Probe' = 'probestate' 'Active Directory Replikationsfehler' = 'ptfadsreplfailurexml' 'Windows Druckwarteschlange' = 'ptfprintqueue' 'WSUS-Statistiken' = 'ptfwsusstatistics' 'RDP (Remote Desktop)' = 'remotedesktop' 'Freigaben-Speicherplatz' = 'smbdiskspace' 'SMTP' = 'smtp' 'SNMP Prozessorlast' = 'snmpcpu' 'SNMP (Benutzerdef.)' = 'snmpcustom' 'SNMP-Zeichenfolge' = 'snmpcustomstring' 'SNMP Dell EqualLogic Physikalischer Datenträger' = 'snmpdellequallogicphysicaldisk' 'SNMP Dell PowerEdge Physikalischer Datenträger' = 'snmpdellphysicaldisk' 'SNMP SonicWALL Systemzustand' = 'snmpdellsonicwallsystemhealth' 'SNMP Dell PowerEdge Systemzustand' = 'snmpdellsystemhealth' 'SNMP Plattenplatz' = 'snmpdiskfree' 'SNMP-Bibliothek' = 'snmplibrary' 'SNMP Linux Durchschnittl. Last' = 'snmplinuxloadavg' 'SNMP Linux Speicherinfo' = 'snmplinuxmeminfo' 'SNMP Linux Physikalischer Datenträger' = 'snmplinuxphysicaldisk' 'SNMP Speicher' = 'snmpmemory' 'SNMP QNAP Logischer Datenträger' = 'snmpqnaplogicaldisk' 'SNMP QNAP Physikalischer Datenträger' = 'snmpqnapphysicaldisk' 'SNMP QNAP Systemzustand' = 'snmpqnapsystemhealth' 'SNMP RMON' = 'snmprmon' 'SNMP-Datenverkehr' = 'snmptraffic' 'SNMP-Laufzeit' = 'snmpuptime' 'SNTP' = 'sntp' 'SSL-Sicherheitsüberprüfung' = 'ssl' 'SSL-Zertifikatssensor' = 'sslcertificate' 'Systemzustand' = 'systemstate' 'SNMP-Trap-Empfänger' = 'udptrap' 'VMware Virtual Machine (SOAP)' = 'vcenterserverextern' 'VMware Datastore (SOAP)' = 'vmwaredatastoreextern' 'Ereignisprotokoll (Windows API)' = 'winapieventlog' 'WMI Sicherheits-Center' = 'wmiantivirus' 'WMI Laufwerkskapazität (mehrf.)' = 'wmidiskspace' 'WMI Ereignisprotokoll' = 'wmieventlog' 'WMI Exchange Transportwarteschlange' = 'wmiexchangetransportqueues' 'Hyper-V Virtuelle Maschine' = 'wmihyperv' 'Hyper-V Host Server' = 'wmihypervserver' 'Hyper-V Virtuelles Speichergerät' = 'wmihypervvirtualstoragedevice' 'Windows IIS-Anwendung' = 'wmiiis' 'WMI Logischer Datenträger E/A BETA' = 'wmilogicaldiskv2' 'WMI Arbeitsspeicher' = 'wmimemory' 'WMI Netzwerkadapter' = 'wminetwork' 'WMI Auslagerungsdatei' = 'wmipagefile' 'Windows Physikalischer Datenträger E/A BETA' = 'wmiphysicaldiskv2' 'Windows Prozess' = 'wmiprocess' 'Windows Prozessorlast' = 'wmiprocessor' 'WMI Dienst' = 'wmiservice' 'WMI Freigabe' = 'wmishare' 'WMI Microsoft SQL Server 2012' = 'wmisqlserver2012' 'WMI Terminaldienste (Windows 2008+)' = 'wmiterminalservices2008' 'Windows Systemlaufzeit' = 'wmiuptime' 'WMI UTC-Zeit' = 'wmiutctime' 'WMI Wichtige Systemdaten (v2)' = 'wmivitalsystemdata' 'WMI Datenträger' = 'wmivolume' } } Process { switch ($PsCmdlet.ParameterSetName) { 'ByTAGName' { if($CaseSensitive -and (-not $IncludeInherited)) { foreach($TagName in $ByTAGName) { Write-Log -LogText "Search casesensitive only in 'tags'-property for $TagName in SensorTree" -LogType Query -LogScope $Local:logscope -NoFileStatus -DebugOutput New-Variable -Name result -Force -Confirm:$false -Debug:$false -Verbose:$false -WhatIf:$false $result = $SensorTree.SelectNodes("/prtg/sensortree/nodes/group//*[contains(tags,'$($TagName.Replace('*',''))')]") Write-Output (Set-TypesNamesToPRTGObject -PRTGObject $result) } } else { Write-Log -LogText "Search method: caseinsensitive" -LogType Info -LogScope $Local:logscope -NoFileStatus -DebugOutput New-Variable -Name objects -Force -Confirm:$false -Debug:$false -Verbose:$false -WhatIf:$false $Objects = Get-PRTGObject -SensorTree $SensorTree -Verbose:$false foreach($Object in $Objects) { foreach($TagName in $ByTAGName) { if($IncludeInherited) { Write-Log -LogText "Search caseinsensitive for $TagName in 'tagsAll'-property" -LogType Info -LogScope $Local:logscope -NoFileStatus -DebugOutput if($Object.tagsAll) { if($Object.tagsAll.split(' ') -like $TagName) { Write-Output $Object } } } else { Write-Log -LogText "Search caseinsensitive for $TagName in 'tags'-property" -LogType Info -LogScope $Local:logscope -NoFileStatus -DebugOutput if($Object.tags) { if($Object.tags.split(' ') -like $TagName) { Write-Output $Object } } } } } } } 'ByStatus' { foreach($Status in $ByStatus) { Write-Log -LogText "Searching for objects by staus $Status" -LogType Query -LogScope $Local:logscope -NoFileStatus -DebugOutput New-Variable -Name result -Force -Confirm:$false -Debug:$false -Verbose:$false -WhatIf:$false $result = $SensorTree.SelectNodes("/prtg/sensortree/nodes/group//*[status_raw=$($StatusMapping."$Status")]") Write-Output (Set-TypesNamesToPRTGObject -PRTGObject $result) } } 'BySensorType' { foreach($SensorType in $BySensorType) { Write-Log -LogText "Searching for objects by type $SensorType" -LogType Query -LogScope $Local:logscope -NoFileStatus -DebugOutput New-Variable -Name result -Force -Confirm:$false -Debug:$false -Verbose:$false -WhatIf:$false $result = $SensorTree.SelectNodes("/prtg/sensortree/nodes/group//*[sensortype='$("$SensorType")']") Write-Output (Set-TypesNamesToPRTGObject -PRTGObject $result) } } } } End { } } |