任务调度程序powershell脚本永远不会结束

时间:2016-05-10 14:55:04

标签: powershell task scheduler

我有一个手动很好的脚本。但是,当我在任务计划程序中安排它时,脚本永远不会结束,因此下次尝试运行时,它会失败,因为先前的实例仍在运行。脚本本身需要几秒钟才能完成第一次或手动运行。这是脚本:

$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

使用以下设置安排脚本:

  • 运行用户是否已登录(已授予用户帐户作为批处理程序权限登录)
  • 以最高权限运行
  • 每天触发2分钟
  • 操作:启动程序powershell -file c:\ Scripts \ upload.ps1

作为一种解决方法,我将任务配置为在1分钟后自动停止。但是,我担心在某些情况下 - 例如大量大文件 - 脚本可能会在完全完成之前被终止。

脚本需要每2分钟运行一次。

3 个答案:

答案 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