Обработка правил брандмауэра Windows с помощью PowerShell 2 - PullRequest
1 голос
/ 07 июня 2019

У меня есть код PowerShell для управления правилами брандмауэра Windows, если установлена ​​версия PowerShell 4+. Но мне нужно выполнить эти команды на серверах Windows с PowerShell 2. Все, что я прочитал, указывает на то, что я должен использовать Netshadvfirewall, но мне не удалось найти правильный способ использовать его для нужных мне целей.

Ниже приведены 5 команд PowerShell, которые мне нужно преобразовать в команды PowerShell 2:

  • Get-NetFirewallRule
  • Get-NetFirewallAddressFilter
  • Get-NetFirewallPortFilter
  • Remove-NetFirewallRule
  • New-NetFirewallRule

Текущий код, который работает в PowerShell 4 +

$RuleName = 'Test Rule Name'
$IPAddress = '1.1.1.1'
$Port = 127
$LocLocation = 'C:\temp\Firewall.log'

$FireWallRule = (Get-NetFirewallRule  -DisplayName "$RuleName" -ErrorAction SilentlyContinue)
if ($null -ne $FireWallRule) {
  $FirewallRuleIP = ($FirewallRule | Get-NetFirewallAddressFilter).RemoteAddress
  $FirewallRulePort = ($FirewallRule | Get-NetFirewallPortFilter).LocalPort

  # Is the existing firewall rule correctly configured?
  if ($FirewallRule.Direction -eq "Inbound" -and $FirewallRule.Action -eq "Allow" -and $FirewallRule.Enabled -eq "true" -and $FirewallRuleIP -eq $IPAddress -and $FirewallRulePort -eq $Port) {
    $Message = "Firewall rule $RuleName already exists and is configured correctly with:  Direction:Inbound, Action:Allow, Protocol:TCP, RemoteAddress:$IPAddress, LocalPort:$Port"
  }
  else {
    Remove-NetFirewallRule  -DisplayName "$RuleName" | Out-Null
    New-NetFirewallRule -DisplayName "$RuleName" -Direction Inbound -Action Allow -Protocol TCP -RemoteAddress $IPAddress -LocalPort $Port | Out-Null
    $Message = "Firewall rule $RuleName was misconfigured.  It was deleted and recreated with:  Direction:Inbound, Action:Allow, Protocol:TCP, RemoteAddress:$IPAddress, LocalPort:$Port"
  }
}

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Я думаю, что это будет работать для перевода:

$RuleName = 'Test Rule Name'
$IPAddress = '1.1.1.1'
$Port = 127
$LocLocation = 'C:\temp\Firewall.log'
$FireWallRule = $null

$FireWallRule = netsh advfirewall firewall show rule $RuleName
if ($FireWallRule -match "Rule Name") {
    $FireWallRuleIP = ($FireWallRule | Select-String -Pattern "^RemoteIP:.*?([0-9a-z].+$)").Matches |
        Foreach-Object { $_.groups[1].Value }
    $FirewallRulePort = ($FireWallRule | Select-String -Pattern "^LocalPort:.*?([0-9a-z].+$)").Matches |
        Foreach-Object { $_.groups[1].Value }
    $FireWallRuleDirection = ($FireWallRule | Select-String -Pattern "^Direction:.*?([0-9a-z].+$)").Matches |
        Foreach-Object { $_.groups[1].Value }
    $FireWallRuleAction = ($FireWallRule | Select-String -Pattern "^Action:.*?([0-9a-z].+$)").Matches |
        Foreach-Object { $_.groups[1].Value }
    $FirewallRuleEnabled = ($FireWallRule | Select-String -Pattern "^Enabled:.*?([0-9a-z].+$)").Matches |
        Foreach-Object { $_.groups[1].Value }

    if ($FirewallRuleDirection -eq "In" -and $FirewallRuleAction -eq "Allow" -and $FirewallRuleEnabled -eq "Yes" -and $FirewallRuleIP -like "$IPAddress*" -and $FirewallRulePort -eq $Port) {
            $Message = "Firewall rule $RuleName already exists and is configured correctly with:  Direction:Inbound, Action:Allow, Protocol:TCP, RemoteAddress:$IPAddress, LocalPort:$Port"
    }
        else {
            $null = netsh advfirewall firewall delete rule $RuleName
            $null = netsh advfirewall firewall add rule name=$RuleName dir=in protocol=TCP localport=$Port RemoteIP=$IPAddress action=allow
            $Message = "Firewall rule $RuleName was misconfigured.  It was deleted and recreated with:  Direction:Inbound, Action:Allow, Protocol:TCP, RemoteAddress:$IPAddress, LocalPort:$Port"
    }
}
0 голосов
/ 08 июня 2019

Команды, которые я нашел, решают мою проблему:

  1. Чтобы получить правило брандмауэра: NetSH AdvFirewall Firewall show rule name=$RuleName
  2. Чтобы добавить правило брандмауэра: NetSH AdvFirewall Firewall Add Rule Name=$RuleName Dir=in Action=Allow Program=Any Enable=Yes RemoteIP=$IPAddress Protocol=TCP LocalPort=$Port
  3. Чтобы удалить правило брандмауэра: NetSH AdvFirewall Firewall Delete Rule Name=$RuleName

Решение было найдено по ссылке, указанной @JeffZeitlin в комментариях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...