Dar*_*tux 1 windows powershell active-directory sysvol windows-server-2012-r2
我正在开发用于活动目录监控的 sysvol 检查脚本。完成了在给定域中的所有域控制器上检查与 sysvol 连接的脚本。作为其中的一部分,我正在做以下检查
Start-Job -sb "(Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds"
Run Code Online (Sandbox Code Playgroud)
这将返回以毫秒为单位的时间;不幸的是,由于明显的原因,即使 sysvol 无法访问,它也会返回时间,并且与可访问相比,它甚至更快。
我的问题是当我收到工作时,有没有办法找出工作是否有错误?因为测量命令并没有给出全貌。如果有任何其他关于此的问题,请告诉我。
首先,我不明白你的语法。我在 Windows 10 上运行 PS v5,你的代码片段甚至没有运行,因为你输入的Start-Job是一个字符串,而不是一个脚本块。而-sb不是一个可以接受的别名/速记-ScriptBlock我。
但谁知道呢,也许这在 PS v4 中是合法的。这不是重点。
你应该添加-ErrorAction Stop到您的dir/ gci/ get-childitemcmdlet,以便它,如果它失败,产生了“终止”的错误。
看,这是我没有指定的工作-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
Run Code Online (Sandbox Code Playgroud)
我不知道这份工作到底是成功还是失败了。无论作业是否成功,作业的状态都会从 Running 变为 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
Run Code Online (Sandbox Code Playgroud)
现在您看到同一个作业进入失败状态。你现在知道你的工作失败了。此外,如果您要保存作业的结果
PS C:\> $Result = Receive-Job $MyJob
Run Code Online (Sandbox Code Playgroud)
$Result 如果作业失败,则为 null。
如果要存储作业中发生的特定错误,请尝试以下操作:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |