簡體   English   中英

Powershell - 啟動有序的服務序列

[英]Powershell - Start ordered sequence of services

我需要啟動一個有序的服務序列,我需要在嘗試啟動下一個服務之前啟動並運行每個服務,我怎樣才能在 Powershell 中實現這一點? 我怎么能等到停止呢?

謝謝,

DD

請勿手動執行此操作(無論腳本語言如何)。 在服務之間定義適當的依賴關系,Windows將以正確的順序啟動/停止它們。 您可以使用sc實用程序定義依賴項:

sc config Svc2 depend= Svc1

如果一項服務應依賴於一個以上的其他服務,則可以使用正斜杠來分隔從屬服務:

sc config Svc5 depend= Svc3/Svc4

請注意, =后面必須有一個空格,且不得在前跟一個空格。

如果您有服務名稱列表(例如數組),則foreach服務:

  1. 獲取其狀態
  2. 如果沒有運行,則啟動它
  3. 延遲循環,檢查其狀態,直到運行

關鍵可能是處理#3的所有可能性 ,包括服務失敗。

但是大綱將類似於(不處理錯誤情況):

$serviceNames | Foreach-Object -Process {
  $svc = Get-Service -Name $_
  if ($svc.Status -ne 'Running') {
    $svc.Start()
    while ($svc.Status -ne 'Running') {
      Write-Output "Waiting for $($svc.Name) to start, current status: $($svc.Status)"
      Start-Sleep -seconds 5
    }
  }
  Write-Output "$($svc.Name) is running"
}

Get-Service返回System.ServiceProcess.ServiceController的實例,該實例處於“活動”狀態-指示服務的當前狀態,而不僅是創建該實例時的狀態。

類似的停止過程將用“停止”代替“運行”,用“停止”代替“開始”調用。 並且,大概顛倒了服務列表的順序。

停止服務

$ServiceNames = Get-Service | where {($_.Name -like "YourServiceNameHere*")-and ($_.Status -eq "Running")}
 Foreach-Object {$_.(Stop-Service $serviceNames)}

啟動服務

$ServiceNames = Get-Service | where {($_.Name -like "YourServiceNameHere*")-and ($_.Status -ne "Running")}
Foreach-Object {$_.(Start-Service $ServiceNames)}

啟動和等待順序

[array]$Services = 'svc1', 'svc2', 'svc3'

$Services | foreach {
    start-service $_
    (get-service $_).WaitForStatus('Running')
}

可能不需要等待狀態。 我沒有可以測試服務速度慢的系統。

停下來按順序等待

[array]$Services = 'svc1', 'svc2', 'svc3'
[array]::Reverse($Services)

$Services | stop-service

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM