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