暂停Powershell脚本并恢复

时间:2014-07-22 23:29:07

标签: powershell resume

我有一个脚本,它当前从csv中提取文件位置,并使用ForEach-Object循环将文件上传到数据库。

我想要它做的是上传1000个文件,然后能够暂停循环并稍后从文件1001恢复。

我不想使用Start-Sleep命令,因为我不希望脚本在设定的时间后自动恢复。

这是一次性交易,所以我宁愿不将其转换为工作流程。

有没有人有任何想法可以用什么命令或cmdlet来实现这个目标?

EDIT1:

感谢您的快速回复。对不起伙计们,我对此非常陌生,请耐心等待。

如果有办法打破脚本然后稍后从同一行恢复,那么Read-Host命令将是完美的。

3 个答案:

答案 0 :(得分:1)

你有没有看过pause

For ($i=1; $i -lt 2000; $i++)  {

    if ($i -eq 1001)
    {
         pause
    }
    Write-Host $i
}

答案 1 :(得分:1)

我是这样做的:

$i = 0;
foreach ($file in (Get-ChildItem $path_to_directory)) {
  # Code to upload the file referenced by $file
  if (++$i -eq 1000) {
    Write-Host -NoNewLine '1000 files have been uploaded. Press capital "C" to continue uploading the remaining files...'
    do {
    } until (($Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyUp').Character) -ceq 'C')
  }
}

使用暂停,正如Bluecakes的回答中所建议的那样,是一个非常好的解决方案。这种方法的优点是它可以为您提供更多控制。 暂停始终需要 Enter 键并始终为您提供相同的提示Press Enter to continue...:,这样您就可以根据自己的喜好定义两者。

更重要的是,我个人更喜欢在我自己的脚本中这样做的原因是你可以防止意外按键。在我的例子中,我将所需的击键作为大写字母C,这样你就不太可能意外地继续。

但是,如果您不关心其中的任何内容,只想快速简单地说出来,那么暂停就是您所需要的。

答案 2 :(得分:-1)

这些方面的东西对你有用......

For ($i=1; $i -lt 50; $i++)  {

    if ($i -eq 10)
    {
        $input = Read-Host "Should I continue Y/N"
        if ($input -eq "N")
        {
           break
        }
    }
    Write-Host $i
}