我有一个手动很好的脚本。但是,当我在任务计划程序中安排它时,脚本永远不会结束,因此下次尝试运行时,它会失败,因为先前的实例仍在运行。脚本本身需要几秒钟才能完成第一次或手动运行。这是脚本:
$source = "\\server1\upload"
$destination = "\\server2\upload"
$logfile = "c:\Scripts\fileMover\log.txt"
$table = Get-ChildItem $source -include *
foreach ($file in $table){
$filename = $file.FullName
#write-host $filename
try
{
move-item -LiteralPath $filename -destination $destination -force
$body = "Successfully moved $filename to $destination"
$subject = "fileMover Succeeded"
}
catch
{
$body = "Failed to move $filename to $destination"
$subject = "fileMover Failed"
}
finally
{
$body | out-file $logfile -append -width 1000 -encoding ascii
Send-MailMessage -To "filemoverconfirmations@domain.com" -From "uploader@domain.com" -Subject $subject -SmtpServer "10.1.10.1" -Body $body
exit
}
}
exit
使用以下设置安排脚本:
作为一种解决方法,我将任务配置为在1分钟后自动停止。但是,我担心在某些情况下 - 例如大量大文件 - 脚本可能会在完全完成之前被终止。
脚本需要每2分钟运行一次。
答案 0 :(得分:2)
对于“启动程序”操作,将 powershell
列为“程序/脚本”,并在“添加参数(可选)”框中输入要运行的脚本的路径。
如果您尝试通过将 PowerShell 脚本直接列为“程序/脚本”来“运行”它,该操作永远不会完成,因为记事本是与 .ps1
扩展名关联的默认应用程序(帮助用户避免意外运行 PowerShell 脚本),因此它会在后台在记事本中打开脚本,而不是执行它。记事本永远不会自行关闭。
答案 1 :(得分:1)
这听起来很傻,但我最初遇到了与其他答案中详述的相同的问题 - 尝试直接运行 .ps1
脚本而不是通过 powershell.exe
。自从我看到记事本打开后,我就解决了那部分,但在纠正我的错误后,它仍然报告 Running。
答案 2 :(得分:0)
尝试直接执行Powershell
文件时遇到此问题。执行Program\script: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
并将脚本作为参数输入。
“计划的任务操作”标签:
-command & 'E:\PowerShell_scripts\Script_name.ps1’
添加参数(可选):
runtime