2015-07-31 8 views
6

Ho una lista di 10-15 servizi che devo regolarmente riavviare su 6 server. Ho uno script che chiama un elenco dei servizi, poi chiama un elenco dei server, e poi si ferma tutti i servizi:Arresto e riavvio dei servizi in remoto tramite Set-Service

$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 

Ho poi avere un altro script separato per avviarli nuovamente:

$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 

Mi sono guardato attorno e non riesco a trovare un modo per inserirlo in un singolo copione. Come ho capito, Set-Service ha solo la capacità di interrompere, avviare i servizi di pausa &, non riavviarli contemporaneamente.

Qualche idea? Potrei mancare qualcosa di completamente ovvio.

+1

C'è qualcosa in particolare che impedisce di semplicemente usando [ 'Restart-Service'] (https://technet.microsoft.com/en-us/library/ hh849823.aspx)? –

+0

@AnsgarWiechers - Quando ho letto questo, ho ritenuto che l'OP necessitasse che il servizio venisse arrestato per un lungo periodo di tempo per eseguire alcune operazioni che richiedevano l'interruzione del servizio. –

+0

@ rory.ap Anche allora useresti 'Stop-Service' e' Start-Service'. Quel 'Set-Service' può essere (ab) usato per fermare e avviare i servizi è incidentale, e ci sono delle insidie. –

risposta

7

riavviare i servizi è sufficiente utilizzare 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

Si può provare questo singolo comando di linea:

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

io sono con Ansgar, questo dovrebbe funzionare

$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} 
    } 
} 

è un po 'disordinato, ma dovrebbe darvi un punto di partenza

Mi dispiace, ho dimenticato di prendermi del tempo per spiegare cosa sta succedendo, in modo da importare ciascuno dei tuoi documenti txt e poi elaborarli per ogni servizio e ogni computer e riavviare i servizi.

Problemi correlati