Stopping & Restarting Services Remotely Using Set-Service

I am with Ansgar, this should work

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

it is a little messy but should give you a starting point

Sorry I forgot to take time to explain what is going on, so you import each of your txt docs and then it will process for each service and each computer and restart the services.


To restart services simply use 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

Since according to the comments PowerShell v6 has removed support for remote access from the *-Service cmdlets you need to resort to Invoke-Command for remote execution when running v6 or newer, like this:

Invoke-Command -Computer $Machines -ScriptBlock {
    Get-Service -Name $using:Services -ErrorAction SilentlyContinue |
        Restart-Service
}

or like this:

Invoke-Command -Computer $Machines -ScriptBlock {
    Restart-Service $using:Services -ErrorAction SilentlyContinue
}

Another option would be WMI:

$fltr = ($Services | ForEach-Object { 'Name="{0}"' -f $_ }) -join ' or '
Get-WmiObject Win32_Service -Computer $Machines -Filter $fltr | ForEach-Object {
    $_.StopService()
    $_.StartService()
}