我的 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 而不是映射驱动器。