2015-09-09 6 views
0

У меня есть Windows MSC (консоль Microsoft Management Console), которая должна заканчиваться через 30 минут, потому что основная память с очень большими плагинами.Программа начинается и заканчивается через 30 минут

  1. Я запустить сценарий Powershell
  2. PowerShell открыть MMC
  3. через 30 минут PowerShell должна быть прекращена ММС

Как это работает?

+1

Зачем вам нужно, чтобы этот плагин работал так долго, и почему нельзя использовать/уменьшать использование памяти? Исправьте основную причину, не используйте ее. – alroc

ответ

1
$p = Start-Process mmc -PassThru; 

$time = (Get-Date).AddMinutes(30); 

while ($true) 
{ 
    Start-Sleep -Seconds 3; #or Millseconds 

    if ($time -lt (Get-Date)) 
    { 
    if (-not $p.HasExited) 
    { 
     $p.Kill(); 
    } 

    break; 
    } 
} 

Thx для комментариев.

+2

Цикл не требуется, и в этом случае будет потребляться слишком много циклов процессора. Просто используйте 'start-sleep -seconds 1800' между' start-process' и 'end-process' – alroc

+0

@alroc. По моему опыту спящие короткие интервалы в цикле до тех пор, пока фиксированное конечное время не будет более надежным, чем спящее одно увеличенное количество время. '$ time = (Get-Date) .AddMinutes (30); do {Start-Sleep -Millseconds 200} до ((Get-Date) -gt $ time) ' –

+2

' Stop-Process -Name mmc' будет без разбора прекращать все процессы с этим именем, что может быть нежелательно. Лучше начать такой процесс: '$ p = Start-Process mmc -PassThru'. Таким образом, у вас есть дескриптор этого конкретного процесса и он может завершить его через '$ p.Kill()' после истечения таймера. –

0

В качестве альтернативы я бы предложил другой вид петли, чем тот, который был предложен @MrDywar.

$p = Start-Process mmc -PassThru 

$expiration = (Get-Date).AddMinutes(30) 

do { 
    Start-Sleep -Milliseconds 200 
} until ($p.HasExited -or (Get-Date) -gt $expiration) 

if (-not $p.HasExited) { $p.Kill() } 

Это позволяет избежать разрушений из бесконечного цикла, а также без разбора продолжающегося в течение заданного периода времени (даже когда процесс завершился до того, как таймер истек).

Смежные вопросы