我正在嘗試擴展我編寫的腳本(並從用戶那裏獲得幫助)。它是一個Windows PowerShell腳本,可將IP添加到Windows防火牆上的遠程地址列表中。更改Windows防火牆遠程地址的腳本,排除localsubnets的規則
我想讓它排除遠程地址已經指定爲「LocalSubnet」的任何防火牆規則。
這是我到目前爲止,目前當我用write-host而不是實際的命令運行它時,它什麼都不顯示。
#This script will update remote address rules with the specified IP scope(s)
$displayname = read-host "Enter firewall rule display name"
$name = Get-NetFirewallRule -DisplayName $displayname |Where-Object {$_.Direction -eq "Inbound"}
$exclusion = Get-NetFirewallRule -DisplayName $displayname |Get-NetFirewallAddressFilter
$ips = @()
do {
$input = (Read-Host "Please enter IP address")
if ($input -ne '') {$ips += $input}
}
until ($input -eq '')
foreach ($r in $name)
{
foreach ($e in $exclusion){
if ($e.remoteaddress -NotMatch "LocalSubnet") {continue}
#Set-NetFirewallRule -DisplayName $r.DisplayName -RemoteAddress $ips
write-host $r.Displayname $ips
}
}
我迷失在嵌套循環......我甚至需要嵌套循環嗎?我嘗試了一段時間,做循環以及無濟於事。
@Matt - 謝謝!這是正確的腳本。
#This script will update remote address rules with the specified IP scope(s)
$displayname = read-host "Enter firewall rule display name"
$rules = Get-NetFirewallRule -DisplayName $displayname | Where-Object {$_.Direction -eq "Inbound" -and ($_ | Get-NetFirewallAddressFilter).RemoteAddress -ne "LocalSubnet" }
$ips = @()
do {
$answer = (Read-Host "Please enter IP address")
if ($answer -ne '') {$ips += $answer}
}
until ($answer -eq '')
foreach ($rule in $rules)
{
#Set-NetFirewallRule -DisplayName $r.DisplayName -RemoteAddress $ips
write-host $rule.Displayname $ips
}
哎呀抓到一個拼寫錯誤,我現在得到輸出。但它看起來只是循環遍歷它們而不管「LocalSubnet」上的NotMatch。 – Nov2009
看起來我正在獲取入站和出站規則修復腳本。認爲它仍然沒有處理嵌套循環。 – Nov2009
因此,您正在更新'$ name'中遠程地址不是LocalSubnet的所有'$ r'? – Matt