开始工作。在脚本块中调用另一个脚本(循环)。

问题描述 投票:0回答:1

我有另一个问题,我自己无法解决,即使使用搜索... ...

我有一个启动Robocopy的脚本作为工作,和第二个工作,观察这个脚本是否在运行,如果不运行,就发送电子邮件。现在我想加入监视脚本的部分来再次启动整个脚本。(循环)

& "$PSScriptRoot/Sync_Start&Watch.ps1"

Robocopy-工作。

Script_Block_Sync = {
    param ($rc_logfile, $rc_source, $rc_destination)
    robocopy $rc_source $rc_destination /MIR /SEC /SECFIX /COPYALL /m /r:5 /Mon:1 /Mot:1 /unilog:$rc_logfile
 }
Start-Job -Name Robocopy_Sync -ScriptBlock $Script_Block_Sync -ArgumentList $rc_logfile, $rc_source, $rc_destination

Watch_Job:

$Script_Block_Check = {
    param($MailParams, $mailbody_error, $PSScriptRoot)
    while ((Get-Process Robocopy).Responding) {Start-Sleep -Seconds 30}
    if (!(Get-Process Robocopy).Responding) {
        Send-MailMessage @MailParams -body $mailbody_error
        & "$PSScriptRoot\Sync_Start&Watch.ps1"
    }
}
Start-Job -Name Robocopy_Check -ScriptBlock $Script_Block_Check -ArgumentList $MailParams, $mailbody_error, $PSScriptRoot

我试过用$PSScriptRoot,用完整的路径和单独的$script变量。如果我只运行这一行(F8)或整个IF块(F8),脚本就会开始运行。如果不可能启动另一个脚本,也许是另一个启动脚本的工作?

知道我错过了什么,还是不可能?

谢谢你的帮助

最诚挚的问候

powershell powershell-5.0
1个回答
0
投票

经过一个星期的搜索和尝试多种变化,我找到了一个解决方案来获得想要的循环。虽然不是我真正想要的,但它是可行的。如果有人读到这里,并且有另一个或更好的想法,我们非常欢迎你!我的想法是,启动一个脚本,并将其作为我的工作。我的想法是,通过任务调度程序启动一个脚本,在后台启动所有的东西而不显示 "运行 "状态。

顺便说一下。 我的问题是,我忽略了一点,PS作业只在他们开始的会话中运行,所以如果我在PS ISE中测试脚本,一切都很好,但不是通过任务调度程序,因为如果脚本(会话)结束,在脚本中开始的作业也会结束。

所以为了得到一个循环,我使用了下面的代码。

while (!(Get-Process Robocopy).Responding) {
  $Script_Block {...}
  Start-Job -Name Robocopy -ScriptBlock $Script_Block
  Start-Sleep -Seconds 5
  while ((Get-Process Robocopy).Responding) {
    Start-Sleep -Seconds 60
  }
  Send-MailMessage ...

}
© www.soinside.com 2019 - 2024. All rights reserved.