How can you set a time limit for a PowerShell script to run for?

前端 未结 6 953
再見小時候
再見小時候 2021-01-05 15:36

I want to set a time limit on a PowerShell (v2) script so it forcibly exits after that time limit has expired.

I see in PHP they have commands like set_time_limit an

6条回答
  •  心在旅途
    2021-01-05 15:56

    I know this is an old post, but I have used this in my scripts.

    I am not sure if its the correct use of it, but the System.Timers.Timer that George put up gave me an idea and it seems to be working for me.

    I use it for servers that sometimes hang on a WMI query, the timeout stops it getting stuck. Instead of write-host I then output the message to a log file so I can see which servers are broken and fix them if needed.

    I also don't use a guid I use the servers hostname.

    I hope this makes sense and helps you.

    $MyScript = {
                  Get-WmiObject -ComputerName MyComputer -Class win32_operatingsystem
                }
    
    $JobGUID = [system.Guid]::NewGuid()
    
    $elapsedEventHandler = {
        param ([System.Object]$sender, [System.Timers.ElapsedEventArgs]$e)
    
        ($sender -as [System.Timers.Timer]).Stop()
        Unregister-Event -SourceIdentifier $JobGUID
        Write-Host "Job $JobGUID removed by force as it exceeded timeout!"
        Get-Job -Name $JobGUID | Remove-Job -Force
    }
    
    $timer = New-Object System.Timers.Timer -ArgumentList 3000 #just change the timeout here
    Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action $elapsedEventHandler -SourceIdentifier $JobGUID
    $timer.Start()
    
    Start-Job -ScriptBlock $MyScript -Name $JobGUID
    

提交回复
热议问题