我写了一个代码,这是检查防火墙规则从多个服务器。由于我们有很多服务器在这里,我想运行我的脚本并行这些服务器上。我的剧本还不错。我有510条防火墙规则。可悲的是,它总是将相同的510防火墙规则打印到每个服务器的export.txt中。
下面是我的代码:
$servers = @("server1","server2", "server3") #only 3 server for testing
$line = @"
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
"@
$cred = Get-Credential
Clear-Content -Path "c:\temp\export.txt" -Force
$servers | ForEach-Object -Parallel {
$error.Clear()
$session = New-PSSession -ComputerName $PSItem -Credential $using:cred -ErrorAction SilentlyContinue
if ($error) {
$CurrentServer = "The Server " + $PSItem + " is not reachable"
$CurrentServer | Out-File -FilePath "c:\temp\export.txt" -Append
$Errortext = $Error[0]
$Errortext | Out-File -FilePath "c:\temp\export.txt" -Append
$using:line | Out-File -FilePath "c:\temp\export.txt" -Append
$error.Clear()
} else {
$CurrentServer = "Firewall Rules for Server " + $PSItem
$Output = Invoke-Command -ScriptBlock {
$Values = Get-NetFirewallRule | Select-Object DisplayName
return $Values
}
$CurrentServer | Out-File -FilePath "c:\temp\export.txt" -Append
$Output | Out-File -FilePath "c:\temp\export.txt" -Append
$using:line | Out-File -FilePath "c:\temp\export.txt" -Append
}
}
有什么想法吗?:)
你好!
我尝试了很多与ForEach -并行。也尝试了一些与乔布斯,但没有得到一个结果。
我希望在export.txt中看到来自每台服务器的所有防火墙规则
1条答案
按热度按时间bq3bfh9z1#
啊比我想的要容易。只需要在Invoke-Command -Scriptblock的大括号}的末尾添加
-Session $session
:)