Длительные скрипты PowerShell зависает - PullRequest
3 голосов
/ 08 июля 2010

Уважаемые пользователи PowerShell SO,

Мы используем длительный скрипт PowerShell для выполнения множества мелких операций, которые могут занимать очень много времени. Примерно через 30 минут сценарии заморозились. Мы смогли запустить сценарии снова, нажав Ctrl-C, что заставило сценарии возобновить выполнение вместо того, чтобы убивать процесс.

Существует ли какой-либо тайм-аут или механизм, препятствующий длительному запуску скриптов в PowerShell?

Спасибо за вашу помощь.

Ответы [ 4 ]

2 голосов
/ 07 ноября 2017

У меня была эта проблема из-за плохой привычки.Если вы выделите немного текста внутри консоли PowerShell, журналы сценариев останавливаютсяУбедитесь, что ничего не выбрано после запуска большого скрипта:)

0 голосов
/ 10 апреля 2019

Попробуйте мой скрипт таймера уничтожения.Просто измените переменную $ScriptLocation на скрипт, который вы хотите запустить.Затем этот скрипт будет работать как фоновое задание, в то время как текущие окна отслеживают таймер.По истечении этого времени текущее окно уничтожит фоновое задание и запишет все в журналы.

    Start-Transcript C:\Transcriptlog-Cleanup.txt #write log to this location
$p = Get-Process  -Id $pid | select -Expand id  # -Expand selects the string from the object id out of the current process.
Write-Host $p
$BJName = "Clean-up-script"   #Define Background job name

$startTime = (Get-Date) # set start time
$startTime
$expiration = (Get-Date).AddMinutes(2)#program expires at this time
# you could change the expiration time by changing (Get-Date).AddSeconds(20) to (Get-Date).AddMinutes(10)or to hours or whatever you like


#-----------------
#Timer update function setup
function UpdateTime
   {
    $LeftMinutes =   ($expiration) - (Get-Date) | Select -Expand minutes  # sets minutes left to left time
    $LeftSeconds =   ($expiration) - (Get-Date) | Select -Expand seconds  # sets seconds left to left time


    #Write time to console
    Write-Host "------------------------------------------------------------------" 
    Write-Host "Timer started at     :  "  $startTime
    Write-Host "Current time         :  "  (Get-Date)
    Write-Host "Timer ends at        :  "  $expiration
    Write-Host "Time on expire timer :  "  $LeftMinutes "Minutes" $LeftSeconds "Seconds"
    Write-Host "------------------------------------------------------------------" 
    }

    #get background job info and remove the it afterwards + print info
function BJManager   
    {
       Receive-Job -Name $BJName  #recive background job results
       Remove-Job -Name $BJName -Force #remove job
       Write-Host "Retrieving Background-Job info and Removing Job..."
    }
#-----------------
$ScriptLocation = "C:\\Local-scripts\Windows-Server-CleanUp-Script-V2.4(Beta).ps1"  #change this Var for different kind of script locations

Start-Job -Name $BJName -FilePath $ScriptLocation #start this script as background job
# dont start job in the loop.
do{   #start loop

   Write-Host "Working"#start doing other script stuff
   Start-Sleep -Milliseconds 5000  #add delay to reduce spam and processing power
   UpdateTime #call upadate function to print time

   Get-Job -Name $BJName  | select Id, State ,Location , Name
        if((Get-Job).State -eq "Failed")
            {
                BJManager
            }
        elseif((Get-Job).State -eq "Completed")
            {
                BJManager
            }

 }
until ($p.HasExited -or (Get-Date) -gt $expiration) #check exit time

Write-Host "Timer Script Finished"
Get-Job -Name $BJName  | select Id, State ,Location , Name
UpdateTime

BJManager

Start-Sleep -Milliseconds 5000 #give it some time to write to log
Stop-Transcript
Start-Sleep -Milliseconds 5000 #give it some time to stop the logging before killing process
if (-not $p.HasExited) { Stop-Process -ID $p -PassThru } # kill process after time expires
0 голосов
/ 06 декабря 2012

попытайтесь добавить процентное вычисление в ваш скрипт .. чтобы вы могли определить, сколько времени потребуется для завершения ...

0 голосов
/ 23 июля 2010

У меня не было ответов на этот вопрос после очень долгого времени.Я собираюсь предположить, что это было что-то не так с моим сценарием или замораживанием дочерней нити.Если это не так, пожалуйста, ответьте.

...