如何在powershell中按时间限制while循环

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

我有一个脚本,仅在特定服务运行后才启动进程。 这是一个试图改变其状态的循环。 我找不到如何按时间限制循环。


我被卡住的部分:

Get-Service

我尝试在网络上搜索信息但没有成功。

powershell loops time while-loop limit
4个回答
3
投票

#add Start button $button_start = New-Object System.Windows.Forms.Button $button_start.Location = New-Object System.Drawing.Size(25,70) $button_start.Size = New-Object System.Drawing.Size(240,32) $button_start.TextAlign = "MiddleCenter" $button_start.font = New-Object System.Drawing.Font("Segoe UI",14,[System.Drawing.FontStyle]::Regular) $button_start.BackColor = "seashell" $button_start.Text = "Start" $button_start.Add_Click({ #add statement while ((Get-Service -ComputerName $textBox_IP.text -ServiceName wscsvc).Status -ne "Running") { # Pause before next check Start-Sleep -Seconds 1 } #only then.. Start-Process -FilePath "C:\Users\username\Desktop\software.exe" -verb RunAs -ArgumentList $textBox_IP.text }) $Form_remoteControl.Controls.Add($button_start)

如果您想在服务仍未运行时跳过启动外部程序,请在返回的循环后添加另一个检查:

$limit = (Get-Date).AddMinutes(5) while (... -or (Get-Date) -le $limit) { Start-Sleep -Seconds 1 }



0
投票

if ((Get-Service ...).Status -ne "Running") { return }



0
投票
不要

在 Windows 窗体界面中使用任何轮询 Function StopService ($serv) { Write-Host "Config service " $serv " ..." $service = Get-Service $serv -ErrorAction SilentlyContinue if ($service) { if($service.status -eq "running") { write-host "Stop service" $serv Stop-Service $serv -Force # Wait until service is stopped (max. 1 minute) $acttime = 0 $waittime = 100 $maxtime = 60000 $TestService = Get-Service $serv While($TestService | Where-Object {$_.Status -eq 'Running'}) { Start-Sleep -m $waittime $acttime += $waittime if ($acttime -gt $maxtime) { write-host "ERROR: Service" $serv " could not be stopped!" -ForegroundColor Red return $False } } } else { write-host "Service already stopped!" -ForegroundColor Green return $True } } else { write-host "Service not installed" -ForegroundColor Green return $True } } 循环(使用

While
cmdlet)。它会停止您的界面以处理重要的表单事件,例如按钮单击等。
相反,我会通过创建计时器事件来预期 
Windows.Forms Timer 类
,并在特定时间段后采取适当的检查和操作(例如,根据服务状态创建新的 Start-Sleep)。
    


0
投票

但是,如果您坚持使用 sleep,即使 while 没有超时参数,jobs 也会有。

Start-Process

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