如何在同一时间添加两个true时间?

时间:2019-01-03 04:23:34

标签: powershell

我想一直运行附加到文件的函数,但是我也想添加第二个true,同时每10秒运行x个东西,但是我该如何处理呢?

我尝试做<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select class="custom_select" name="customSelect1" id="customSelect1"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> <select class="custom_select" name="customSelect2" id="customSelect2"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> <select class="custom_select" name="customSelect3" id="customSelect3"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select>,但是我很幸运。

while($true){while ($true) {
    write-host 'do stuff...'
    Start-Sleep -Seconds 60
} }

我希望我的第一个while为true时将每个日志永久地附加到文件中,但是我也想在true的同时保持每十秒运行到第二个日志,但是我该怎么做?

3 个答案:

答案 0 :(得分:1)

两个操作都有单独的脚本。一个具有无限while循环的循环具有延迟,并将其称为后台作业。

$AppendJob = Start-Job -FilePath c:\Temp\FirstWhile.ps1 -Name AppenJob
$DelayJob = Start-Job -FilePath c:\Temp\SecondWhile.ps1 -Name DelayJob

答案 1 :(得分:1)

尚未提及的另一种可能的解决方案是保持主循环并为10秒的“循环”注册一个计时器事件。

$timer = new-object timers.timer 
$action = {
        # Edit me... put whatever you want to be done every 10 seconds here instead.
        write-host "Timer Elapse Event: $(get-date -Format ‘HH:mm:ss’)" -ForegroundColor Cyan
        } 

$timer.Interval = 10000 #10 seconds  
Register-ObjectEvent -InputObject $timer -EventName elapsed –SourceIdentifier '10secTimer' -Action $action 
$timer.start()


while ($true) {
    Write-Host 'Append to file...'
    Start-Sleep -Seconds 3
}


#to stop run 
$timer.stop() 
#cleanup 
Unregister-Event 10secTimer

您还可以使用一个while循环并利用Stopwatch对象检查何时经过10秒钟,然后执行另一项操作。

$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'
$StopWatch.Start()

while ($true) {
    Write-Host 'Do stuff...' -ForegroundColor Cyan
    Write-Host "$($StopWatch.Elapsed.Seconds) seconds elapsed"
    Start-Sleep -Milliseconds 1000

    if ($StopWatch.Elapsed.Seconds -ge 10) {

        # Put everything for your 10 seconds here.
        Write-Host 'Do other stuff...' -ForegroundColor Green

        $StopWatch.Reset()
        $StopWatch.Start()
    }

}
$StopWatch.Stop()

要回答“两个同时为真”,如果您想像示例一样使用2 While循环,则需要在内部循环中添加一个break语句返回外循环。

while ($true) {
    Write-Host 'Outer loop...'
    Start-Sleep -Seconds 3

    While ($true) {
        Write-Host 'Inner loop...'
        break; # If you don't break, you'll never exit the inner loop.
       }
}

答案 2 :(得分:0)

使用modulus operator %,除以数字后将计算提醒:

PS > 5 % 2
1

=> 5/2 = 4休息1

PS > 250 % 250
0

在您的函数中使用$I++跟踪执行频率,并将if%一起使用 每10秒执行一次(10秒/ 0.040秒= 250)

$I = 0
$I++
If (($I % 250) -eq 0) { do x }