使用 PowerShell 有条件地重新启动远程计算机上的服务

使用 PowerShell 有条件地重新启动远程计算机上的服务

由于这是在生产环境中,因此如果没有沙箱就很难进行测试。我知道如何获取我的列表并进行筛选。计算机存储在 GW.txt 中

GWs.txt

cgwaib209
cgwaib208
cgwmib208
cgwaob207
cgwaob206
cgwaob205
cgwaib201
cgwmib201
cgwaob202
cgwaob203

Get-Content .\GWs.txt | ForEach-Object { if ($_ -match $regex){Get-Service -ComputerName $_ | where {($_.Name -like "Cell Gateway Service*")-and ($_.Status -eq "Running")}}}

我知道如何重启本地服务

Get-Service -Name "Gaming*" | Restart-Service -PassThru

但是管道能适用于远程管道吗或者我需要嵌套循环?

答案1

您可以将文件中的计算机名称放入数组中,然后使用调用命令并将数组传递给参数,并使用参数-ComputerName运行Get-Service条件逻辑,将命令的处理传递给每台迭代机器。-ScriptBlock-AsJob

$cred = Get-Credential "domain\administrator" 
$Machines = Get-Content .\GWs.txt;

Invoke-Command -ComputerName $Machines -ScriptBlock { Process {
    Get-Service | ? {$_.Name -like "Cell Gateway Service*" -and $_.Status -eq "Running"} | Restart-Service -Force -Passthru
    }
} -AsJob -Credential $cred  

使用Invoke-Command参数-AsJob会在远程系统上将命令作为后台作业执行,然后对列表中的每个后续服务器执行相同的操作。


支持资源

-ScriptBlock scriptblock

要运行的命令。

将命令括在花括号中{ }以创建脚本块。此参数是必需的。

默认情况下,命令中的任何变量都会在远程计算机上进行评估。要在命令中包含局部变量,请-ArgumentList在 PowerShell 3.0+ 中使用或使用前缀$using:在局部变量之前例如通过 { echo $using:mylocalVar }

相关内容