lordmilko / PrtgAPI

C#/PowerShell interface for PRTG Network Monitor
MIT License
301 stars 37 forks source link

Library,LibraryNode,Notification Templates #306

Closed schoenm1 closed 1 year ago

schoenm1 commented 1 year ago

What's going on?

Hi @lordmilko I try in a first step, to get data from a library, check if library node with tag filtering exist and check if NotificationTemplate is linked to Library. If this is successfull, the 2nd would be to create this three types witch PRTGApi. At moment, getting library and library node data is working. Even the Rawdata Property "libtagfilter_"

$AllLibrariesAndNodes = Get-Object -Type Library
$AllLibraries = $AllLibrariesAndNodes | Where-Object {$_.ParentID -le 0}
$AllLibrariesNodes = $AllLibrariesAndNodes | Where-Object {$_.ParentID -gt 0}
[...]
$ThisLibraryNode | Get-ObjectProperty -RawProperty "libtagfilter_"

All Notification Action I can parse Get-NotificationAction. But I would not get the data, if a Notification is linked to a library. Even with Development View in Firefox i could not see the POST data to find out the rawparam. Is there a way to get the data screenshot)? https://myserver.domain.com/library.htm?id=50475&tabid=4 image

PS C:\Users\user> Get-PrtgClient  -Diagnostic
PSVersion      : 5.1.17763.2931
PSEdition      : Desktop
OS             : Microsoft Windows 10 Enterprise LTSC
PrtgAPIVersion : 0.9.17
Culture        : de-CH
CLRVersion     : .NET Framework 4.8 (528049)
PrtgVersion    : 22.3.78.1873
PrtgLanguage   : english.lng

Due Dilligance

lordmilko commented 1 year ago

Libraries aren't really supported by PrtgAPI, but you can try using the Get-NotificationTrigger cmdlet against the library. You should be able to do Get-Trigger -Id <libraryId> or something

schoenm1 commented 1 year ago

unfortunately, the Get-NotificationTrigger (Get-Trigger) ist not working with Get-Object (which I have to use for 'Library' and 'LibraryNode' Object). Get-NotificationTrigger is working well for Devices (Get-Devices) Working (with Get-Device):

PS C:\Users\user> Get-Device -id 40 | Get-Trigger * -verbose
VERBOSE: Get-NotificationTrigger: Synchronously executing request https://myserver.domain.com/api/table.xml?id=40&content=triggers&columns=content,objid&username=prtgadmin&passhash=***********

Type      ObjectId SubId Inherited ParentId Latency Condition Threshold Unit       OnNotificationAction
----      -------- ----- --------- -------- ------- --------- --------- ----       --------------------
State     40       1     False     40       60      Equals    Down                 None
State     40       2     False     40       36256   Equals    Down                 None
State     40       1     True      0        600     Equals    Warning              E-Mail suppor@domain.com
State     40       2     True      0        600     Equals    Down                 E-Mail suppor@domain.com

But for inherit from Library, the command to get Trigger from Library is not working, independent if the id is a 'Device' or 'Library'.

PS C:\Users\user> Get-Object -id 50475 | Get-NotificationTrigger * -verbose
Get-NotificationTrigger : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters
that take pipeline input.
At line:1 char:24
+ Get-Object -id 50475 | Get-NotificationTrigger * -verbose
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (TEST-Library:PSObject) [Get-NotificationTrigger], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,PrtgAPI.PowerShell.Cmdlets.GetNotificationTrigger
lordmilko commented 1 year ago

As stated you need to do Get-NotificationTrigger -Id 50475 as the Get-NotificationTrigger cmdlet does not have a parameter set that allows specifying a simple PrtgObject as pipeline input

schoenm1 commented 1 year ago

Get-NotificationTrigger -Id 50475 is not working. ID 50475 is a Library and not a Sensor/Device/Group/Probe Even if I add 50475 as param, the Get-NotificationTrigger ask again for Object Input.

Get-NotificationTrigger -Id 50475
cmdlet Get-NotificationTrigger at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Object: 50475
Get-NotificationTrigger : Cannot bind parameter 'Object'. Cannot convert the "50475" value of type "System.String" to type "PrtgAPI.SensorOrDeviceOrGroupOrProbe".
At line:1 char:1
+ Get-NotificationTrigger -Id 50475
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-NotificationTrigger], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,PrtgAPI.PowerShell.Cmdlets.GetNotificationTrigger

Get-Object -id 50475
Name         Id    Type
----         --    ----
TEST-Library 50475 Library
lordmilko commented 1 year ago

Apologies, I believe the correct command should actually be

Get-NotificationTrigger -ObjectId 50475
schoenm1 commented 1 year ago

I can not get any NotificationTrigger for a Library.

Get-Object -id 50475 | fl *

Id          : 50475
ParentId    : -6
Name        : TEST-Library
Tags        :
DisplayType : Library
Type        : Library
Active      : True

Get-NotificationTrigger -ObjectId 50475 -verbose
VERBOSE: Get-NotificationTrigger: Synchronously executing request
https://prtg.domain.com/api/table.xml?id=50475&content=triggers&columns=content,objid&username=username&passhash=***

With Get-Help Get-NotificationTrigger -full I see, that the parameter 'Object' should be . As far as I understand, I can give 'Object' or 'ObjectID' as parameter. But when 'Object' is not allowed to be the type 'Library', should this be possible for 'ObjectID'?

lordmilko commented 1 year ago

It's executing the correct API call so based on this it would appear it's not possible to retrieve notification triggers using the normal notification trigger API