web-dev-qa-db-ja.com

PowerShellでの失敗後にサービスの自動再起動を構成する方法

Windowsシステムのサービスコンソールには、障害が発生した場合にサービスのアクションを構成するための[回復]タブがあります。

enter image description here

これをPowerShellで構成するにはどうすればよいですか?

2
Luke

現在、サービスの回復を管理するためのネイティブのPowerShellコマンドレットはありません。
ただし、サービスが失敗したときにサービスを自動再起動するには、SCを使用できます。
(PowerShellプロンプトでは、前に&を付け、フルネームを使用する必要がありますsc.exe

& sc.exe failure msftpsvc reset= 30 actions= restart/5000

公式ドキュメントはMicrosoft DocsSc Failure にあります

0
Luke

https://evotec.xyz/set-service-recovery-options-powershell/ からの抜粋

 function Set-ServiceRecovery{
    [alias('Set-Recovery')]
    param
    (
        [string] [Parameter(Mandatory=$true)] $ServiceDisplayName,
        [string] [Parameter(Mandatory=$true)] $Server,
        [string] $action1 = "restart",
        [int] $time1 =  30000, # in miliseconds
        [string] $action2 = "restart",
        [int] $time2 =  30000, # in miliseconds
        [string] $actionLast = "restart",
        [int] $timeLast = 30000, # in miliseconds
        [int] $resetCounter = 4000 # in seconds
    )
    $serverPath = "\\" + $server
    $services = Get-CimInstance -ClassName 'Win32_Service' -ComputerName $Server| Where-Object {$_.DisplayName -imatch $ServiceDisplayName}
    $action = $action1+"/"+$time1+"/"+$action2+"/"+$time2+"/"+$actionLast+"/"+$timeLast
    foreach ($service in $services){
        # https://technet.Microsoft.com/en-us/library/cc742019.aspx
        $output = sc.exe $serverPath failure $($service.Name) actions= $action reset= $resetCounter
    }
}
Set-ServiceRecovery -ServiceDisplayName "Pulseway" -Server "MAIL1"
2
batistuta09