我们有一些脚本使用 PowerShell 作为我们应用程序的一部分创建计划作业。最近在测试它们时,我注意到其中一些总是立即失败,并且没有产生任何输出(它们甚至没有出现在Get-Job
列表中)。
经过多天的调整,我们设法将其隔离到任何设置为每周运行的作业中。下面是一个脚本,它创建了两个做同样事情的作业。当我们在我们的域上运行它,并提供域用户的凭据,然后强制这两个作业在任务计划程序 GUI 中运行(右键单击 -> 运行),每日运行正常(0x0 结果),每周运行失败(0x41306)。
注意:如果我不提供 -Credential 参数,这两项工作都可以正常工作。仅当任务是每周一次并且以此域用户身份运行时,作业才会失败。
我找不到关于为什么会发生这种情况的信息,也找不到任何原因它会在每周工作中表现不同。任务计划程序中的“历史记录”选项卡几乎没有有用的信息,只有“任务因用户请求而停止”和“任务终止”,两者都没有有用的信息:
任务计划程序终止了“\Microsoft\Windows\PowerShell\ScheduledJobs\Test1”任务的“{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}”实例。任务计划程序停止了任务 "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" 的实例 "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}" 作为用户 "MyDomain\SomeUser" 的请求。
这是怎么回事?为什么每周任务的运行方式不同,我该如何解决这个问题?
这是 Windows Server 2008 R2 上的 PowerShell v3。我无法在本地重现此内容,但我没有以与我们的生产域中相同的方式设置用户(我正在处理此问题,但我想尽快发布此内容,希望有人知道发生了什么!)。
Import-Module PSScheduledJob
$Action =
{
"Executing job!"
}
$cred = Get-Credential "MyDomain\SomeUser"
# Remove previous versions (to allow re-running this script)
Get-ScheduledJob Test1 | Unregister-ScheduledJob
Get-ScheduledJob Test2 | Unregister-ScheduledJob
# Create two identical jobs, with different triggers
Register-ScheduledJob "Test1" -ScriptBlock $Action -Credential $cred -Trigger (New-JobTrigger -Weekly -At 1:25am -DaysOfWeek Sunday)
Register-ScheduledJob "Test2" -ScriptBlock $Action -Credential $cred -Trigger (New-JobTrigger -Daily -At 1:25am)
编辑:按照 snover 的建议添加到 Connect:
编辑:来自 Jeff Hicks 的一些附加信息
我使用您的代码在运行 PS v3 的 2008 R2 机器上创建了相同的作业。这两个作业都使用 Start-Job 从 PowerShell 运行良好。但是在 GUI 中,我在每周工作中遇到了同样的错误。
我在 Windows 8 上得到了相同的结果。有些东西告诉任务服务中止。我测试了其他一些设置,但它们没有效果。我查看了所有我能想到的日志,它们显示的只是作业开始、PowerShell 加载以及任务调度程序取消。
我之前将每周任务重置为今天运行,但它仍然失败。我还测试了一个每周执行的任务,而不是 PowerShell,它运行得很好。
我将每周工作更改为使用与当前用户相同的帐户,并且运行良好。将其更改回另一个帐户,它再次失败。我不知道触发器和帐户之间的相关性。