Làm cách nào để tự động khởi động lại ứng dụng / quy trình bị lỗi hoặc bị đóng với PowerShell?

0
50

Hãy tìm hiểu cách sử dụng PowerShell để kiểm tra xem một ứng dụng hoặc quy trình cụ thể có đang chạy hay không; cách khởi động lại nó tự động trong trường hợp gặp sự cố, nếu người dùng vô tình đóng nó hoặc nó bắt đầu ngốn một lượng lớn bộ nhớ (rò rỉ bộ nhớ).

Trước đó, chúng tôi đã hướng dẫn cách quản lý các quy trình của Windows bằng PowerShell. Để đảm bảo nếu quá trình notepad.exe đang chạy và khởi động lại nó, bạn có thể sử dụng tập lệnh bên dưới:

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

Bạn có thể tự động khởi động lại quá trình nếu nó không phản hồi (bị treo) hoặc nếu nó bắt đầu sử dụng quá nhiều bộ nhớ (trong ví dụ này là hơn 1000 MB):

$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:Windowsnotepad.exe
}

Sử dụng PowerShell for vòng lặp, bạn có thể tạo một vòng lặp vô tận bắt đầu một quá trình, kiểm tra cứ sau 60 giây nếu nó đang chạy và khởi động lại nó nếu cần:

for(;;){
try{
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:Windowsnotepad.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:Windowsnotepad.exe}
}
catch    {    }
Start-sleep -s 60
}

Powershell Check Proccess is Running

Nếu bạn muốn kiểm tra trạng thái của một quá trình trên máy tính từ xa, bạn có thể sử dụng lệnh này:

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

Để bắt đầu một quá trình từ xa, bạn có thể sử dụng lệnh ghép ngắn Invoke-Command:

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

Bạn có thể chạy tập lệnh PowerShell này dưới dạng tập lệnh đăng nhập GPO khi đăng nhập người dùng.

Sau đó, lưu mã PowerShell vào tệp có đuôi * .PS1. Bạn có thể ký tập lệnh bằng chữ ký điện tử, thay đổi cài đặt chính sách Thực thi PowerShell hoặc chạy tập lệnh với tùy chọn –ExecutionPolicy Bypass

  • Tên tệp: %windir%System32WindowsPowerShellv1.0powershell.exe
  • Các tùy chọn đang chạy: -windowstyle hidden -ExecutionPolicy Bypass –Noprofile -file %~dp0CheckProcess.ps1

Bạn cũng có thể chạy tập lệnh PS1 theo lịch trình bằng Trình lập lịch tác vụ. Sử dụng các tùy chọn chạy giống nhau. Bạn cũng có thể chỉ định tài khoản người dùng mà bạn muốn chạy quy trình.

$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

Hoặc bạn có thể chạy tập lệnh PowerShell này dưới dạng dịch vụ Windows.

Nếu ứng dụng đang chạy không cần tương tác với người dùng, tốt hơn nên chạy nó như một dịch vụ. Sau đó, bạn sẽ có thể quản lý nó thông qua services.msc tiêu chuẩn hoặc bằng PowerShell. Windows được tích hợp sẵn tính năng khởi động lại dịch vụ hoặc bạn có thể khởi động lại dịch vụ bị treo như sau.

Dịch từ: http://woshub.com/restart-crashed-closed-program-with-powershell/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây