我正在执行的脚本片段:
$reader = $managementgroupobj.GetMonitoringPerformanceDataReader()
while ($reader.Read()) // << Error in this line.
{
$perfData = $reader.GetMonitoringPerformanceData()
$valueReader = $perfData.GetValueReader($starttime,$endtime)
while ($valueReader.Read())
{
$perfValue = $valueReader.GetMonitoringPerformanceDataValue()
}
}
这里,$managementgroupobj
是 class 的一个实例ManagementGroup
。
$starttime
15 分钟到 1 小时的差异$endtime
取决于同一脚本的最后一次执行。
该片段长时间成功收集数据的性能。但随后,它突然抛出以下错误:
“请求的阅读器无效。阅读器不存在或已过期”
[ log_level=WARN pid=2716 ] Execute command 'get-scomallperfdata' failed. The requested reader was not valid. The reader either does not exist or has expired.
at GetSCOMPerformanceData, E:\perf\scom_command_loader.ps1: line 628
at run, E:\perf\scom_command_loader.ps1: line 591
at <ScriptBlock>, E:\perf\scom_command_loader.ps1: line 815
at <ScriptBlock>, <No file>: line 1
at <ScriptBlock>, <No file>: line 46
at Microsoft.EnterpriseManagement.Common.Internal.ServiceProxy.HandleFault(String methodName, Message message)
at Microsoft.EnterpriseManagement.Common.Internal.EntityObjectsServiceProxy.GetObjectsFromReader(Guid readerId, Int32 count)
at Microsoft.EnterpriseManagement.Common.DataReader.Read()
at CallSite.Target(Closure , CallSite , Object )
- 上述错误的原因是什么。?
- 如果能了解 PerformanceDataReader 的机制就好了。
笔记:
- 它在出错之前获取的数据量是 100k+。获取这些数据花了将近一个小时。
- 我认为可能的问题是它必须获取的数据量,它可能是一种 TimoutException。
- 如果我对上面提到的两个问题至少有一些了解,那就太好了。
谢谢。