Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellを使用してクラッシュまたはクローズしたアプリ/プロセスを自動的に再起動する方法は?

特定のアプリケーションまたはプロセスが実行されているかどうかを確認するためにPowerShellを使用する方法を学びましょう。クラッシュした場合、ユーザーが誤って閉じた場合、または大量のメモリを消費し始めた場合(メモリリーク)に自動的に再起動する方法。


以前、PowerShellを使用してWindowsプロセスを管理する方法を示しました。 notepad.exeプロセスが実行されていることを確認して再起動するには、次のスクリプトを使用できます。

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

プロセスが応答しない(ハングしている)場合、またはプロセスが大量のメモリ(この例では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:\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コマンドレットを使用できます。

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

このPowerShellスクリプトは、ユーザーログオン時にGPOログオンスクリプトとして実行できます。

次に、PowerShellコードを*.PS1拡張子の付いたファイルに保存します。デジタル署名を使用してスクリプトに署名したり、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には、サービスを再起動する機能が組み込まれています。または、次のように、ハングしたサービスを再起動できます。


  1. PowerShellまたはWevtutilを使用してWindowsイベントログをクリアする方法

    場合によっては、コンピューターまたはサーバー上のWindowsイベントログからすべてのエントリを削除する必要があります。もちろん、イベントビューアのコンソールGUIからシステムログをクリアすることもできます— Eventvwr.msc (クリアするログを右クリックして、ログのクリアを選択します。 )。ただし、Vista以降、Windowsはさまざまなシステムコンポーネントに数十のログを使用しており、イベントビューアでそれらすべてを手動でクリアするには時間がかかります。コマンドプロンプトからログをクリアする方がはるかに簡単です: PowerShellを使用する または組み込みのコンソールツー

  2. Androidアプリをプログラムで「再起動」するにはどうすればよいですか?

    いくつかの状況があり、プログラムでアプリケーション全体を再起動する必要があります。この例は、Androidアプリをプログラムで「再起動」する方法を示しています。 ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。 ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。 <?xml version = "1.0" encoding = "utf-8"?> &l