Задача внутри моего планировщика задач Windows заставит мой сервер перестать отвечать

896
John John

У меня есть следующий AppPoolActivation.ps1файл для вызова URL: -

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} $request = [System.Net.WebRequest]::Create("https://IPADDRESS***/") $response = $request.GetResponse() $response.Close() 

и я написал следующий app.batфайл для вызова вышеуказанного AppPoolActivation.ps1файла:

"%SYSTEMROOT%\system32\windowspowershell\v1.0\powershell.exe" -Command Start-Process "$PSHOME\powershell.exe" -Verb RunAs -ArgumentList "'-NoExit %~dp0\AppPoolActivation.ps1' 

Затем в моем планировщике задач Windows Server 2012 Windows я определяю ежедневную задачу, которая запускается каждые 15 минут в течение 1 дня, так что в основном она будет выполняться каждые 15 минут, и я определяю эту задачу для вызова файла .bat, как следовать:-

enter image description here

enter image description here

Теперь, когда я впервые определяю задачу, она работала хорошо около 5 часов, но я заметил, что через 10-12 часов сервер будет работать очень медленно, пока не перестанет отвечать, теперь я проверяю диспетчер задач на сервере и обнаруживаю, что там будет много экземпляров Windows Power Shell и консоли Windows, работающих следующим образом:

enter image description here

так может кто-нибудь посоветовать, как мне преодолеть эту проблему? Я имею в виду, почему будет много экземпляров Windows Power Shell и консоли Windows, работающей? и есть ли способ предотвратить это и предотвратить слишком медленную работу моего сервера из-за расписания задач? если учесть, что много лет назад на этом сервере я никогда не сталкивался с какими-либо проблемами, проблема началась, когда я создал эту задачу расписания ...

0

1 ответ на вопрос

1
beatcracker
"%SYSTEMROOT%\system32\windowspowershell\v1.0\powershell.exe" -Command Start-Process "$PSHOME\powershell.exe" -Verb RunAs -ArgumentList "'-NoExit %~dp0\AppPoolActivation.ps1' 

So you have a batch file, which starts powershell instance, which starts another powershell instance as Administrator, which executes AppPoolActivation.ps1 script?

Why wouldn't you just put PowerShell.exe in Program/Script field in Task Properties and use -ExecutionPolicy Bypass -File C:\T\AppPoolActivation.ps1 as argument? I doubt that you need to run PowerShell as admin to make web request. And if this issue would still persist, this will make debugging it way easier.

В начале я попробовал ваш подход к вызову .ps1 непосредственно из задачи, но он никогда не удался. Я думаю, что проблема связана с политикой, согласно которой мы не можем запускать сценарии PowerShell ,, теперь, что я сделал, я изменил текущий .bat файл, и я удаляю «-NoExit» из него, и теперь я не могу видеть повторяющиеся процессы внутри моего диспетчера задач, кажется -NoExit не завершит процесс после завершения сценария powershell, я думал, что -NoExit предотвратит процесс от закончился во время выполнения, но кажется, что это означает никогда не завершать процесс, даже после того, как он завершен. John John 8 лет назад 0
@JohnJohn Вы также можете обойти политику выполнения с помощью диспетчера задач. Смотрите обновленный ответ. `" кажется -NoExit не завершит процесс после завершения сценария powershell "` - да, см. [Справка командной строки PowerShell.exe] (https://technet.microsoft.com/en-us/library/hh847736.aspx ). beatcracker 8 лет назад 1