【问题标题】:How to prevent PowerShell script from immediate close when the timer event is run?运行计时器事件时如何防止 PowerShell 脚本立即关闭?
【发布时间】:2018-09-10 22:05:35
【问题描述】:

我正在尝试编写一个 PowerShell 脚本供我自己使用,以便在 Windows 启动时运行它,因此它会逐渐增加音量。当我复制脚本并将其粘贴到 PowerShell 窗口中并单击 Enter 时它运行良好,但当我将脚本内容保存在 .ps1 文件中并从上下文中使用 PowerShell 运行它时它不起作用菜单。它立即关闭,不会等到间隔的条件完成。

$timer = New-Object Timers.Timer

$iter = 0;

$action = {
  $iter += 1;
  Write-Host "Interval: $iter";
  if ($iter -eq 10) {
    Unregister-Event thetimer;
    pause;
  }
} 
$timer.Interval = 1000  #3 seconds

Register-ObjectEvent -InputObject $timer -EventName elapsed –SourceIdentifier thetimer -Action $action

$timer.Start()

我简化了脚本。我应该使用什么命令以及在哪里挂起脚本直到间隔事件完成?

【问题讨论】:

    标签: powershell intervals


    【解决方案1】:

    计时器脚本块中的pause 命令不会影响您启动计时器的父进程。

    要在计时器结束之前保持父窗口打开,您可以添加一个循环检查作业状态:

    ...
    $timer.Start()
    
    do {
        Start-Sleep -Milliseconds 100
        $job = Get-Job -Name 'thetimer'
    } while ($job.State -in 'NotStarted', 'Running')
    

    【讨论】:

    • 要保持父窗口打开,我会使用Wait-Event
    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多