powershell 使用Get-NetFirewallRule在多个服务器上使用ForEach-Object -Parallel

zdwk9cvp  于 2023-05-22  发布在  Shell
关注(0)|答案(1)|浏览(160)

我写了一个代码,这是检查防火墙规则从多个服务器。由于我们有很多服务器在这里,我想运行我的脚本并行这些服务器上。我的剧本还不错。我有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中看到来自每台服务器的所有防火墙规则

bq3bfh9z

bq3bfh9z1#

啊比我想的要容易。只需要在Invoke-Command -Scriptblock的大括号}的末尾添加-Session $session:)

相关问题