ObjectNotFound exception from long running ZervicePoint PowerShell Management commands
Problem
When executing certain time consuming commands (such as Get-ZPProcess to get all the processes in a store) you may receive an ObjectNotFound exception.
Console output typically looks like the following
PS > Get-ZPProcess
Get-ZPProcess : One or more errors occurred.
At line:1 char:1
+ Get-ZPProcess
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [Get-ZPProcess], ObjectNotFoundException
+ FullyQualifiedErrorId : Zipper.ZervicePoint.WebApi.PowerShell.GetZPProcessCommand
Cause
The ZervicePoint PowerShell Management commands utilize the System.Net.Http.HttpClient class when sending requests to the ZervicePoint API Web. By default the HttpClient class waits a maximum of 100 seconds before the request times out.
To determine if this is the cause of the problem, use any of the following methods
Method 1
Directly after receiving the error, examine the $error object to find out what the inner exception is.
PS > $error[0].Exception.InnerException
A task was canceled.
If the result of the above command is "A task was canceled" then you're experiencing a timeout.
Method 2
Use the MeasureCommand command to determine how long the command runs before the exception is thrown.
PS > Measure-Command -Expression { Get-ZPProcess }
Days : 0
Hours : 0
Minutes : 1
Seconds : 40
Milliseconds : 5
Ticks : 1000057594
TotalDays : 0.00115747406712963
TotalHours : 0.0277793776111111
TotalMinutes : 1.66676265666667
TotalSeconds : 100.0057594
TotalMilliseconds : 100005.7594
If the TotalSeconds property of the returned TimeSpan object is 100 or more then you're experiencing a timeout.
Solution
To solve the issue try increasing the maximum wait time by specifying the number of seconds (or a TimeSpan object) in the -RequestTimeOut optional parameter:
PS > Get-ZProcess -RequestTimeOut 300
The above command will wait a maximum of 300 seconds (5 minutes) for the response to arrive.