为什么使用不同用户通过 PowerShell 创建的每周任务失败并显示错误 0x41306

Dan*_*eny 6 powershell scheduled-task windows-server-2008-r2 powershell-v3.0

我们有一些脚本可以使用 PowerShell 作为我们应用程序的一部分来创建计划作业。最近在测试它们时,我注意到其中一些总是立即失败,并且没有产生任何输出(它们甚至没有出现在Get-Job列表中)。

经过多天的调整,我们已经设法将它与任何设置为每周运行的作业隔离开来。下面是一个脚本,它创建两个完全相同的作业。当我们在我们的域上运行它,并提供域用户的凭据,然后强制两个作业在任务计划程序 GUI 中运行(右键单击 -> 运行),每天运行良好(0x0 结果),每周运行失败(0x41306)。

注意:如果我不提供 -Credential 参数,两个工作都可以正常工作。仅当任务是每周一次并且以此域用户身份运行时,作业才会失败。

我找不到有关为什么会发生这种情况的信息,也找不到任何原因它在每周工作中的表现会有所不同。Task Scheduler中的“History£”选项卡几乎没有任何有用的信息,只有“任务因用户请求而停止”和“任务终止”,两者都没有有用的信息:

任务计划程序终止了“\Microsoft\Windows\PowerShell\ScheduledJobs\Test1”任务的“{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}”实例。任务计划程序根据用户 "MyDomain\SomeUser" 的请求停止了任务 "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" 的实例 "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}"。

这是怎么回事?为什么每周任务的运行方式不同,我该如何解决这个问题?

这是 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)
Run Code Online (Sandbox Code Playgroud)

小智 -1

我必须自己解决这个问题,所以这就是我发现的。

在 powershell 文档中我发现了以下内容:

Get-ScheduledJob 仅获取当前用户使用 Register-ScheduledJob cmdlet 创建的计划作业。

http://technet.microsoft.com/en-us/library/hh849784.aspx

这样做的影响是,如果您使用用户“A”创建作业,然后运行尝试使用用户“B”访问它们的脚本,则会抛出错误,指出找不到该作业。