Having issues. When I run the following script on a system outside of PRTG, everything works as expected:
param ( [string] $UserName = "username!", [string] $Pass = "password!" ) $Pass = ConvertTo-SecureString $Pass -AsPlainText -Force $cred = New-Object Management.Automation.PSCredential ($UserName, $Pass) $R = Invoke-RestMethod -Uri "http://WEBSERVER" -Method Get -UseBasicParsing -Credential $cred | Select-Object "messages*"
The expected return looks like this:
messages_persistent : 0 messages_unacknowledged_ram : 0 messages_ready_ram : 0 messages_ram : 0 messages_unacknowledged_details : @{rate=0.6} messages_unacknowledged : 0 messages_ready_details : @{rate=0.0} messages_ready : 0 messages_details : @{rate=0.6} messages : 0
It returns as a PSObject.
When I run this same script in PRTG, I get the following error:
sensors\EXEXML\Get-ProdMessages.ps1:7 char:9 + $cred = New-Object Management.Automation.PSCredential ($UserName, $Pa ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [New-Object], MethodExcept ion + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power Shell.Commands.NewObjectCommand Invoke-RestMethod : {"error":"Unauthorized","reason":"\"Unauthorized\"\n"} At C:\Program Files (x86)\PRTG Network Monitor\custom sensors\EXEXML\Get-ProdMessages.ps1:9 char:6 + $R = Invoke-RestMethod -Uri "WEBSERVER ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt pWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe ll.Commands.InvokeRestMethodCommand
What can I do to get this to work?
Article Comments
They are predefined within the script itself, at least at this time...
Thanks for responding!
Feb, 2019 - Permalink
Interesting thing, I switched the PS1 to this:
param ( [string] $user = "user1", [string] $Pass = "password1" ) $pair = "$($user):$($pass)" $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair)) $basicAuthValue = "Basic $encodedCreds" $Headers = @{ Authorization = $basicAuthValue } $R = Invoke-RestMethod -Uri "http://WEBSERVER" -Method Get -UseBasicParsing -Headers $Headers | Select-Object "messages*"
Tested in the PowerShell console, it works fine. In PRTG, I get the following:
Invoke-RestMethod : {"error":"Object Not Found","reason":"\"Not Found\"\n"} At C:\Program Files (x86)\PRTG Network Monitor\custom sensors\EXEXML\Get-ProdMessages.ps1:12 char:6 + $R = Invoke-RestMethod -Uri "http://WEBSERVER ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt pWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe ll.Commands.InvokeRestMethodCommand
Feb, 2019 - Permalink
Well, I ran into two things...
One, the Internet Explorer First Run Wizard needed to be run or configured to be disabled via GPO.
The other issue was that I was running into an escape character problem. The actual URL has %2F in it - something you wouldn't know since I neutered the info in the link for the example above.
Using this solution: https://stackoverflow.com/a/30927141 and a little JSON conversion magic has done the trick for me. I'm able to now return data for the custom sensor!
Feb, 2019 - Permalink
Hi there,
How do you fill the parameters from within PRTG or are these predefined in the script itself?
Best regards.
Feb, 2019 - Permalink