powershell - 使用Set-Service远程停止和重新启动服务

标签 powershell service

我列出了通常需要在6台服务器上重新启动的10到15个服务。我有一个脚本,该脚本调用服务列表,然后调用服务器列表,然后停止所有服务:

$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

然后,我还有另一个单独的脚本来重新启动它们:
$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

我检查了一下,似乎找不到一种将其放入单个脚本的方法。据我了解,Set-Service仅具有停止,启动和暂停服务的功能,而不能同时重新启动它们。

有任何想法吗?我可能会错过一些完全显而易见的东西。

最佳答案

要重新启动服务,只需使用 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

由于根据注释,PowerShell v6已从*-Service cmdlet中删除了对远程访问的支持,因此在运行v6或更高版本时,需要诉诸Invoke-Command进行远程执行,如下所示:
Invoke-Command -Computer $Machines -ScriptBlock {
    Get-Service -Name $using:Services -ErrorAction SilentlyContinue |
        Restart-Service
}

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

另一个选择是WMI:
$fltr = ($Services | ForEach-Object { 'Name="{0}"' -f $_ }) -join ' or '
Get-WmiObject Win32_Service -Computer $Machines -Filter $fltr | ForEach-Object {
    $_.StopService()
    $_.StartService()
}

关于powershell - 使用Set-Service远程停止和重新启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31749844/

相关文章:

java - Rijndael 256 加密 : Java and . NET 不匹配

powershell - 父PowerShell控制台似乎可以控制子PowerShell控制台I/O

linux - 如何在 debian 中启动服务?

powershell - 自定义页面布局仅在本地服务器上有效

powershell - powershell中的&符号是什么意思?

Powershell - 从文件导入数据

Android:如何在两个 Activity 之间进行通信

c++ - 服务崩溃加载dll

android - 从服务调用prepareAsync()后MediaPlayer回调不会触发

android - 谁是服务的 "client"- 上下文或 ServiceConnection?