使用Powershell设置远程服务的恢复选项?

时间:2012-02-13 20:37:33

标签: powershell service recovery

我很难让这个工作。希望有人可以帮助我!

我目前正在为服务开发Powershell部署脚本。安装服务后,我希望每次服务在0分钟后崩溃时将服务恢复选项设置为“重新启动服务”。

有没有人知道如何使用Powershell为远程机器设置这些选项?

5 个答案:

答案 0 :(得分:7)

您可以使用sc.exe编写powershell函数,如here所述。该函数看起来像:

function Set-Recovery{
    param
    (
        [string] 
        [Parameter(Mandatory=$true)]
        $ServiceName,

        [string]
        [Parameter(Mandatory=$true)]
        $Server
    )

    sc.exe "\\$Server" failure $ServiceName reset= 0 actions= restart/0 #Restart after 0 ms
}

您可以调用以下函数:

Set-Recovery -ServiceName "ServiceName" -Server "ServerName"

注意:您运行脚本的帐户必须具有远程服务器的管理员权限。

答案 1 :(得分:2)

如果是本地服务,您可以使用sc.exe但是您想要更改远程服务的设置。一种方法是使用远程注册表直接设置注册表项:

以下是您需要的设置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceShortName>    
Value Name                Data Type    Description
FailureActions            REG_BINARY   Configuration information for 1st, 2nd, and subsequent failures.

我要做的是按照您希望的方式设置服务恢复选项,然后阅读注册表值FailureActions

$actions = get-itemproperty hklm:\system\currentcontrolset\services\<ServiceShortName> | select -Expand FailureActions

然后将其序列化为磁盘以供日后使用:

$actions | Export-Clixml C:\actions.xml

准备好远程配置服务时,请重新读取FailureActions数据,连接到远程注册表并设置注册表项:

$actions2 | Import-Clixml C:\actions.xml
$key = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, "<RemoteComputerName>")
$key2 = $key.OpenSubKey('SYSTEM\CurrentControlSet\Services\<ServiceShortName>', $true)
$key2.SetValue('FailureActions', ([byte[]] $actions))

答案 2 :(得分:1)

Carbon库有一个非常全面的Install-Service cmdlet,可让您指定恢复操作,例如(改编自Install-Service doc page):

Install-Service -Name DeathStar -Path C:\ALongTimeAgo\InAGalaxyFarFarAway\DeathStar.exe -OnFirstFailure Restart -RestartDelay 10000

这将安装DeathStar服务,并在第一次失败后以10秒的延迟重新启动。

答案 3 :(得分:1)

我采取了@Mohammad Nadeem的想法,并在完全支持所有行动而不仅仅是主要行动的情况下扩展了它。我还使用显示名称作为服务而不是服务名称,因此提供参数更容易一些。

foreach (var file in Directory.GetFiles(@"./dlls", "*.dll"))

我创建了一篇关于它的博文:https://evotec.xyz/set-service-recovery-options-powershell/。我没有在重启服务的其他场景中测试过这个。可能需要一些工作来支持所有场景。

答案 4 :(得分:1)

请简化..

在powershell代码中使用最旧的sc.exe。更容易和更全面的功能。

sc.exe failure "ServiceName" actions= restart/180000/restart/180000/reboot/180000 reset= 86400;

重启,以毫秒为单位。最后一次重置,只需几秒钟。

(每次重启3分钟,重置1天)

再见!