由于这是在生产环境中,因此如果没有沙箱就很难进行测试。我知道如何获取我的列表并进行筛选。计算机存储在 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 }