PowerShell 脚本从命令行运行,而不是从任务计划程序运行。为什么?

PowerShell 脚本从命令行运行,而不是从任务计划程序运行。为什么?

我的 PowerShell 脚本在命令行中有效,但在任务调度器。这是 PowerShell v1Windows 服务器 2008R2 企业版。

在命令行中输入:

c:\> powershell -File "C:\Program Files\mystuff\foo.ps1"

我的一行 PowerShell 脚本运行良好 - 它复制了最新的名为 *.bak 的文件。以下是脚本,希望有用:

gci X:\backups\*.bak | Sort-Object LastWriteTime -Descending | Select-Object -first 1 | foreach { xcopy $_ z:\backups\ }

我使用相同的命令创建了一个计划任务。脚本立即完成,结果代码为 0,但脚本实际上没有执行任何操作。

因此我尝试查看脚本的输出并将计划的操作更改为:

cmd /c powershell.exe -File "C:\Program Files\mystuff\foo.ps1" > c:\ps.log

现在我看到输出:“0 个文件已复制”

回到命令行再试一次,它仍然可以正常工作。

计划任务以与命令行相同的用户身份运行。是什么让它的行为有所不同?

答案1

我从使用 xcopy 切换到使用 Copy-Item,并收到更详细的错误消息。问题是 Z: 驱动器是映射网络驱动器 - 计划任务无法看到它。

答案2

在您的计划任务中,操作将只是“powershell”,参数将是“.\script.ps1”或“.\c:\scripts\script.ps1”。

如果您想记录所述 PS 脚本的活动,我建议您在脚本内部执行此操作,而不是像在 cmd.exe 中那样使用 >。

哦,抱歉,我误解了你的问题。使用 UNC 而不是映射驱动器。

相关内容