2015-07-31 19 views
6

Tôi đã có danh sách 10-15 dịch vụ mà tôi thường xuyên cần khởi động lại trên 6 máy chủ. Tôi có một kịch bản mà các cuộc gọi một danh sách các dịch vụ, sau đó gọi một danh sách các máy chủ, và sau đó dừng lại tất cả các dịch vụ:Dừng & Khởi động lại Dịch vụ Từ xa Sử dụng Dịch vụ Đặt

$Services = Get-Content -Path "C:\Powershell\Services.txt" 
$Machines = Get-Content -Path "C:\Powershell\Machines.txt" 
Get-Service -Name $Services -ComputerName $Machines | Set-Service -Status Stopped 

sau đó tôi có một kịch bản riêng biệt để bắt đầu họ lên một lần nữa:

$Services = Get-Content -Path "C:\Powershell\Services.txt" 
$Machines = Get-Content -Path "C:\Powershell\Machines.txt" 
Get-Service -Name $Services -ComputerName $Machines | Set-Service -Status Running 

Tôi đã kiểm tra xung quanh và dường như không thể tìm cách đưa điều này vào một tập lệnh duy nhất. Theo tôi hiểu, Set-Service chỉ có khả năng Stop, Start & Tạm ngừng dịch vụ, không khởi động lại chúng cùng một lúc.

Bất kỳ ý tưởng nào? Tôi có thể thiếu một cái gì đó hoàn toàn rõ ràng.

+1

là bất cứ điều gì đặc biệt ngăn cản bạn chỉ đơn giản là sử dụng [ 'Restart-Service'] (https://technet.microsoft.com/en-us/library/ hh849823.aspx)? –

+0

@AnsgarWiechers - Khi tôi đọc điều này, tôi giả định OP cần dịch vụ dừng lại trong một thời gian dài để thực hiện một số hoạt động cần dịch vụ dừng lại. –

+0

@ rory.ap Ngay cả khi đó bạn sẽ sử dụng 'Stop-Service' và' Start-Service'. Đó là 'Set-Service' có thể được (ab) được sử dụng để dừng và bắt đầu dịch vụ là ngẫu nhiên, và có những cạm bẫy đối với nó. –

Trả lời

7

Để khởi động lại dịch vụ chỉ cần sử dụng Restart-Service:

$Services = Get-Content -Path "C:\Powershell\Services.txt" 
$Machines = Get-Content -Path "C:\Powershell\Machines.txt" 
Get-Service -Name $Services -ComputerName $Machines | Restart-Service 
0

Bạn có thể thử lệnh lót đơn này:

Get-Content .\services.txt | %{Get-WmiObject -Class Win32_Service -ComputerName (Get-Content .\computers.txt) -Filter "Name='$_'"} | %{$_.StopService()}; Get-Content .\services.txt | %{Get-WmiObject -Class Win32_Service -ComputerName (Get-Content .\computers.txt) -Filter "Name='$_'"} | %{$_.StartService()} 
0

Tôi với Ansgar, điều này sẽ làm việc

$Services = Get-Content -Path "C:\Powershell\Services.txt" 
$Machines = Get-Content -Path "C:\Powershell\Machines.txt" 
foreach ($service in $services){ 
    foreach ($computer in $Machines){ 
    Invoke-Command -ComputerName $computer -ScriptBlock{ 
    Restart-Service -DisplayName $service} 
    } 
} 

nó là một chút lộn xộn nhưng sẽ cho bạn một điểm khởi đầu

Xin lỗi tôi quên mất thời gian để giải thích những gì đang xảy ra, vì vậy bạn nhập mỗi tài liệu txt của bạn và sau đó nó sẽ xử lý cho từng dịch vụ và mỗi máy tính và khởi động lại dịch vụ.

Các vấn đề liên quan