我们有一些使用PowerShell创build计划作业的脚本,作为我们应用程序的一部分。 当最近testing它们时,我注意到它们中的一些总是立即失败,并且没有产生输出(它们甚至不出现在Get-Job列表中)。
经过多天的调整,我们已经设法将它隔离到每周运行的任何工作。 下面是创build两个完全相同的工作的脚本。 当我们在我们的域上运行这个,并提供一个域用户的凭据,然后强制两个作业运行在任务计划程序GUI(右键单击 – >运行),每天运行正常(0x0结果),每周失败(0x41306)。
注意:如果我不提供-Credential参数,两个工作都可以正常工作。 如果任务是每周两次,并且以该域用户身份运行,则作业只会失败。
我找不到为什么会发生这种情况的信息,也没有想到任何每周工作会有不同的performance。 “任务计划程序”中的“历史”选项卡几乎没有任何有用信息,只是“由于用户请求而停止任务”和“任务已终止”,两者都没有有用的信息:
任务计划程序终止“\ Microsoft \ Windows \ PowerShell \ ScheduledJobs \ Test1”任务的“{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}”实例。 任务计划程序按用户“MyDomain \ SomeUser”的请求停止任务“\ Microsoft \ Windows \ PowerShell \ ScheduledJobs \ Test1”的实例“{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}”。
这是怎么回事? 为什么每周任务的运行方式不同,我怎么能find这个问题?
这是Windows Server 2008 R2上的PowerShell v3。 我一直无法在本地重现这一点,但我没有一个用户在我们的生产领域中设置相同的方式(我正在这个工作,但我希望张贴这个ASAP希望有人知道发生了什么!)。
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)
我只是自己想出了这个,所以这里是我发现的。
在poweshell文档中,我发现了以下内容:
Get-ScheduledJob只获取当前用户使用Register-ScheduledJob cmdlet创build的预定作业。
http://technet.microsoft.com/en-us/library/hh849784.aspx
这样做的影响是,如果使用用户“A”创build作业,然后运行脚本尝试使用用户“B”访问它们,则会引发错误,指出找不到作业。
由于相同的脚本添加了两个预定作业,所以会话/当前用户凭据中的差异可能不是这种情况。
我会交换你删除和添加每个工作的顺序,先处理日常工作,然后处理每周的工作。 如果没有改变,那么它是作业参数,而不是在调度程序状态引擎中可能未初始化的错误。