ここには、自家製のWindowsサービスがいくつかあります。そのうちの1つは、要求されたときに常に停止するとは限らないという点で問題があります。時々「停止」状態でスタックします。
PowerShellを使用して、そのPIDを取得し、Stop-Processコマンドレットを使用して関連するプロセスを強制終了していますが、それも機能していません。
代わりに、System.ServiceProcess.ServiceController.Name
明らかに私たちのサービスではないという名前のサービスについてのメッセージを受け取りますが、それが参照するPIDはそうです。
これが私たちのサービスを停止させるために私たちがしていることです。まず、Get-Serviceコマンドレットを使用します。
$ServiceNamePID = Get-Service -ComputerName $Computer | where { ($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and $_.Name -eq $ServiceName}
次に、そのServiceNamePIDを使用して、PIDを取得し、それをStop-Processコマンドレットで使用します。
$ServicePID = (get-wmiobject win32_Service -ComputerName $Computer | Where { $_.Name -eq $ServiceNamePID.Name }).ProcessID
Stop-Process $ServicePID -force
Cannot find a process with the process identifier XYZ
これは、タスクマネージャーによると、実際にはPID XYZがサービスの正しいプロセスIDである場合に、Stop-Processコマンドレットがしゃがむときです。誰かが以前にこのような問題を見たことがありますか?