我正在使用sysvol检查脚本进行活动目录监视。 完成在给定域中的所有域控制器上检查sysvol连接的脚本。 作为这一部分,我正在做下面的检查
Start-Job -sb "(Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds"
这将返回以毫秒为单位的时间; 不幸的是,由于显而易见的原因,即使sysvol是无法访问的,它的返回时间甚至比它可访问的还快。
我的问题是,当我收到工作,有没有办法找出工作是否有错误? 因为测量指令并没有给出全貌。 如果还有其他问题,请告诉我。
首先,我不明白你的语法。 我在Windows 10上运行PS v5,你的代码片段甚至没有运行,因为你给Start-Job
一个string,而不是脚本块。 而-sb
对于我来说不是一个可接受的别名/简写的-ScriptBlock
。
但是谁知道呢,也许这在PS v4中是合法的。 这是重点。
您应该将-ErrorAction Stop
添加到您的dir
/ gci
/ get-childitem
cmdlet,以便在失败时生成“终止”错误。
看,这里是我没有指定的工作-ErrorAction Stop
:
PS C:\> $MyJob = Start-Job -ScriptBlock { (Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds } PS C:\> $MyJob.State Running PS C:\> $MyJob.State Completed
我不知道这个工作是成功还是失败。 无论工作是否成功,工作的状态只是从“跑步”到“完成”。
现在让我们再次尝试一个终止错误:
PS C:\> $MyJob = Start-Job -ScriptBlock { (Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies -ErrorAction Stop}).Milliseconds } PS C:\> $MyJob.State Running PS C:\> $MyJob.State Failed
现在你看到相同的工作进入失败状态。 你现在知道你的工作失败了。 另外,如果你要保存工作的结果
PS C:\> $Result = Receive-Job $MyJob
如果作业失败, $Result
将为空。
如果要存储作业中发生的特定错误,请尝试以下操作:
PS C:\> Receive-Job $MyJob -ErrorVariable Result PS C:\> $Result Cannot find path '\\\sysvol\\Policies' because it does not exist. + CategoryInfo : ObjectNotFound: (\\\sysvol\\Policies:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand + PSComputerName : localhost