PowerShell脚本未在计划任务上运行

我一直在尝试设置一个PowerShell脚本作为Windows Server 2012 R2服务器上的计划任务的一部分运行。 如果我从GUI手动执行脚本,脚本将运行,但是除了一个尝试从任务运行脚本之外的所有尝试都失败了。

经过一些故障排除后,我发现如果将任务设置为“仅在用户login时运行”,并执行任务,则运行良好。 它popup一个PowerShell窗口,运行脚本,并closures自己。 看来我正走在正确的轨道上,我可能已经把问题缩小到了什么问题上,但是我不知道该从哪里出发。 很显然,无论我是否login,我都希望脚本执行。

以防万一,这里是我正在运行的脚本:

Get-ChildItem C:\somefolder -Recurse| Where-Object{$_.PsIsContainer}| Sort-Object CreationTime -desc| Select-Object -Skip 3| Remove-Item -Force 

我从哪里可以看到? 我已经能够以这种方式从服务器2008运行PowerShell脚本没有问题,但我似乎无法破解这一个。

编辑:对于任务设置启动程序的行动,并在程序/脚本下,我有“powershell”,然后“。\ myscript.ps1”的争论,然后“C:\”开始。

你可以尝试运行以下内容:

 powershell -noprofile -noexit -executionpolicy bypass -file C:\path\script.ps1 

还要检查:get-executionpolicy设置为RemoteSigned

另外检查“运行用户是否login。

最后想出了这一个:

问题原来是,我试图在networking驱动器上操纵的东西。 我学到的是,即使已经在Windows中映射了驱动器,也必须将驱动器作为脚本的一部分进行取消映射和重新映射 ,以便通过PowerShell脚本以非交互方式处理文件。

这是我添加到我的PowerShell脚本,以使其工作:

 $secpasswd = ConvertTo-SecureString "YourPassword" -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ("username", $secpasswd) Remove-PSDrive –Name “Z” New-PSDrive –Name “Z” –PSProvider FileSystem –Root “\\192.168.XX\backup” –Persist -Credential $mycreds 

有一些凭证被caching,当您login时会发生,但是当您通过任务pipe理器运行相同的脚本时不会使用凭据。

非常感谢这个问题的所有答案,这真的帮助我终于想出了这个问题,希望这能帮助别人。

最后需要注意的是,同样的方法也适用于batch file以及同一台服务器上。

您是否尝试过更改DC上pipe理员的UAC设置? (最好通过GPO来做到这一点)有3个不同的选项需要修改,以便在Sheduled Task中使用Powershel脚本。 这3个UAC策略设置可以在计算机configuration >> 策略 >> Windows设置 >> 安全设置 >> 本地策略 >> 安全选项 : – 用户帐户控制 :用于构buildipipe理员帐户的pipe理员审批模式( 未定义 ) – 用户帐户控制 :以pipe理员审批模式( 禁用 )运行所有pipe理员 – 用户帐户控制 :pipe理员批准模式下pipe理员的提升提示的行为( 不提示提升 )configuration它们,使UAC在计划任务使用pipe理员特权帐户执行

您可以select“计划任务”configuration中的“常规”选项中的选项“ 每当用户被启用或不启动时运行 ”。