[英]powershell: Changing start type of services on a windows 7 machine
[英]Powershell - Start ordered sequence of services
我需要啟動一個有序的服務序列,我需要在嘗試啟動下一個服務之前啟動並運行每個服務,我怎樣才能在 Powershell 中實現這一點? 我怎么能等到停止呢?
謝謝,
DD
請勿手動執行此操作(無論腳本語言如何)。 在服務之間定義適當的依賴關系,Windows將以正確的順序啟動/停止它們。 您可以使用sc
實用程序定義依賴項:
sc config Svc2 depend= Svc1
如果一項服務應依賴於一個以上的其他服務,則可以使用正斜杠來分隔從屬服務:
sc config Svc5 depend= Svc3/Svc4
請注意, =
后面必須有一個空格,且不得在前跟一個空格。
如果您有服務名稱列表(例如數組),則foreach服務:
關鍵可能是處理#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.