我已经得到了删除旧的临时文件的脚本,并在以下情况下完美的作品:PowerShell脚本作为计划任务
- 从控制台主机
- 从PowerShell的ISE
- 从运行命令。换句话说,开始>>运行。输入
powershell.exe -file C:\Users\<userprofile>\Delete-TempFiles.ps1
但我想将它设置为预定任务,因为它可能需要一些时间才能完成。我的理解是,如果一个命令在运行行工作,那么我只需将该命令复制到Task Scheduler中的适当字段。即,“操作”选项卡下的“程序/脚本”文本框。调度程序将'powershell.exe'后面的措辞移动到'Arguments'字段,并且一切都应该很好。 So saith Ed Wilson, Scripting Guy。
但东西坏了。当定期推出,该脚本从文本文件中获取服务器名称,每个服务器上检查临时文件夹,并删除旧文件,就像这样:
Get-ChildItem -Path \\$server\C$\Windows\Temp -File | Where-Object {$_.LastAccessTime -lt $cutoffdate} | Remove-Item -Recurse
在每一个我测试服务器,至少东西被发现,按预期删除。但是,当我设置计划任务时,会找到/删除零个文件。
一些故障排除后,我发现,当我点击开始>>运行>> PowerShell中,它会打开我的用户配置文件,但是当计划任务启动PowerShell的,它打开C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe
。因为我的脚本是为了假设我的源文件在我的配置文件中编写的,所以PS找不到它。我认为填写计划任务中的“开始”文本框将意味着PowerShell将在该文件夹中打开,但我猜不是。
为了解决这个问题,我在我的脚本(ick)中对源文件的位置进行了硬编码,并且将Set-Location C:\Users\<userprofile>
放在我的脚本的顶部。但是这并没有改变任何东西。
我也尝试了以下行动:
powershell -noprofile -noexit -executionpolicy bypass -file C:\Users\<userprofile>\Delete-TempFolders.ps1
同样,当启动一个任务正常工作,除了它无法找到或删除任何旧的临时文件的脚本。我根本找不到它失败的地方。
运行的计划任务是什么用户? – briantist
@ briantist - 约90%的计划任务问题就在那里。 – EBGreen
@EBGreen是的,特别是当涉及UNC路径时。 – briantist