Restart-Service (recursively)

Restart-Service (recursively)

http://bsonposh.com/archives/545

I often need to restart services on multiple machines and one of the biggest issues is the dependent services that also need to be restarted. I finally found time to write a script that will recursively stop and start dependent services.

Parameters:

  • ServiceName: Name of the Service to restart (REQUIRED)
  • Server: Name of the Server to restart the service on (Default is local server)
  • Verbose: Enable verbose output

More Info:
System.ServiceProcess.ServiceController

Restart-Service


Param ( $ServiceName = $ (throw ‘$ServiceName is Required’ ),
      $Server = $Env:ComputerName,
      [ Switch ] $Verbose )

 

$VerbosePreference = "Continue"

[system.Reflection.Assembly]::LoadWithPartialName("System.ServiceProcess") | out-Null

$ErrorActionPreference = "SilentlyContinue"

Write-Verbose " – ServiceName = $ServiceName"
Write-Verbose " – Server = $Server"

function Get-Dependents{
    Param([System.ServiceProcess.ServiceController]$MasterService)
    Write-Verbose "   + Getting Dependent Services for $($MasterService.Name)"
    foreach($dependent in $MasterService.DependentServices)
    {
        Write-Verbose "     – Found Dependent Service [$($dependent.Name)]"
        $dependent
        Get-Dependents $dependent
    }
}

Write-Verbose " – Getting Service [$ServiceName]"
$Service = New-Object System.ServiceProcess.ServiceController($ServiceName,$Server)

Write-Verbose " – Getting Dependent Services"
$DependentServices = Get-Dependents $Service

Write-Verbose " + Stopping [$ServiceName] and dependent Services"
$Service.Stop()

Write-Verbose "   – Waiting for Service to Stop"
$Service.WaitForStatus("Stopped",(new-object system.TimeSpan(0,0,20)))

Write-Verbose " + Starting [$ServiceName]"
$Service.Start()

Write-Verbose "   – Waiting for Service to Start"
$Service.WaitForStatus("Running",(new-object system.TimeSpan(0,0,20)))

foreach($dependent in $DependentServices )
{
    $dependent.Refresh()
    if($dependent.status -eq "Stopped")
    {
        $dependent.Start()
        $dependent.WaitForStatus("Running",(new-object system.TimeSpan(0,0,5)))
    }
}
$Service.Refresh()
$Service
$Service.DependentServices

Trackback this post | Feed on Comments to this post

转载于:https://www.cnblogs.com/shineqiujuan/archive/2011/03/22/1990947.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值