Active Directory sysvol使用Powershell作业检查脚本

我正在使用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