Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell로 충돌하거나 닫힌 앱/프로세스를 어떻게 자동으로 다시 시작합니까?

특정 응용 프로그램이나 프로세스가 실행 중인지 확인하기 위해 PowerShell을 사용하는 방법을 알아보겠습니다. 충돌이 발생한 경우, 사용자가 실수로 닫았거나 많은 양의 메모리를 소모하기 시작한 경우(메모리 누수) 자동으로 다시 시작하는 방법.


이전에 PowerShell을 사용하여 Windows 프로세스를 관리하는 방법을 보여주었습니다. notepad.exe 프로세스가 실행 중인지 확인하고 다시 시작하려면 아래 스크립트를 사용할 수 있습니다.

If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}

프로세스가 응답하지 않거나(정지 중) 너무 많은 메모리를 사용하기 시작한 경우(이 예에서는 1000MB 이상) 프로세스를 자동으로 다시 시작할 수 있습니다.

$proc = Get-Process -Name notepad| Sort-Object -Property ProcessName -Unique
If (($proc.Responding -eq $false) –or ($proc.WorkingSet -GT 1000000*1024)} {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:\Windows\notepad.exe
}

PowerShell 사용 for 루프를 사용하면 프로세스를 시작하고 60초마다 실행 중인지 확인하고 필요한 경우 다시 시작하는 무한 루프를 만들 수 있습니다.

for(;;){
try{
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe}
$proc = Get-Process -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue
If (!$proc -or ($proc.Responding -eq $false) –or ($proc.WorkingSet -GT 200000*1024)) {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:\Windows\notepad.exe}
}
catch    {    }
Start-sleep -s 60
}

PowerShell로 충돌하거나 닫힌 앱/프로세스를 어떻게 자동으로 다시 시작합니까?

원격 컴퓨터의 프로세스 상태를 확인하려면 다음 명령을 사용할 수 있습니다.

$proc = Get-Process -ComputerName WKS-NYC211 -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue

프로세스를 원격으로 시작하려면 Invoke-Command cmdlet을 사용할 수 있습니다.

Invoke-Command -ComputerName WKS-NYC211 -Credential $Cred -ScriptBlock {Start-Process C:\Windows\notepad.exe -wait -verb runas;}

이 PowerShell 스크립트는 사용자 로그온 시 GPO 로그온 스크립트로 실행할 수 있습니다.

그런 다음 확장명이 *.PS1인 파일에 PowerShell 코드를 저장합니다. 디지털 서명으로 스크립트에 서명하거나, PowerShell 실행 정책 설정을 변경하거나, –ExecutionPolicy Bypass를 사용하여 스크립트를 실행할 수 있습니다. 옵션.

  • 파일 이름:%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • 실행 옵션:-windowstyle hidden -ExecutionPolicy Bypass –Noprofile -file %~dp0CheckProcess.ps1

작업 스케줄러를 사용하여 일정에 따라 PS1 스크립트를 실행할 수도 있습니다. 동일한 실행 옵션을 사용합니다. 프로세스를 실행할 사용자 계정을 지정할 수도 있습니다.

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-windowstyle hidden -ExecutionPolicy Bypass -file %windir%\CheckProcess.ps1"
$Trigger= New-ScheduledTaskTrigger -AtLogon
$Principal=New-ScheduledTaskPrincipal -UserId "jsmith" -LogonType Interactive
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Principal $Principal
Register-ScheduledTask -TaskName "Check Notepad Process" -InputObject $Task

또는 이 PowerShell 스크립트를 Windows 서비스로 실행할 수 있습니다.

실행 중인 앱이 사용자와 상호 작용할 필요가 없다면 서비스로 실행하는 것이 좋습니다. 나중에 표준 services.msc를 통해 관리할 수 있습니다. 콘솔 또는 PowerShell로. Windows에는 서비스를 다시 시작하는 기능이 내장되어 있거나 다음과 같이 끊긴 서비스를 다시 시작할 수 있습니다.