PowerShell: プロセスを再起動するスクリプト

ある日リモートデスクトップをしていたら、急にリモートデスクトップ越しのファイルコピーができなくなりました。調べてみると、rdpclip.exe の再起動で事象が解消することがあるそうです。実際に試してみると、確かに rdpclip.exe の再起動後、正常になりました。 

始めはタスクマネージャから rdpclip.exe の再起動をしていたのですが、なんだか、最近は、1週間に 1回は起こっているように感じられるので、スクリプトを作成してみました。

 

工夫したところは、他のプロセスの再起動もできるように、スクリプトの引数にプロセス名を受けられるようにしたことです。引数なしで実行すると、デフォルト値として $process_name に指定されている rdpclip.exe を再起動します。

 

注意点は、引数に渡されたプロセス名を -match で部分一致させている点です。他のプロセス名の一部分に含まれる文字列を指定すると、予期せぬプロセスを停止してしまうことがありえます。

param(
[String]$process_name="rdpclip.exe"
)

Get-WmiObject Win32_Process | ?{$_.CommandLine -match $process_name} | %{
Stop-Process $_.Handle
Start-Process $_.Path
Write-Output($_.Path)
}