Отключите все ненужные правила Windows Firewall с помощью PowerShell - PullRequest
0 голосов
/ 11 апреля 2020

В моем Windows Брандмауэре я создал определенные правила, которые дают мне больше контроля над моим P C. Но мои правила стали несколько бесполезными, поскольку Windows и другие приложения продолжают добавлять правила, которые мне не нужны.
Я пытался предотвратить это, но единственный способ, который я нашел, - это использовать сторонний инструмент, такой как Tinywall, который не совсем то, что я ищу.

Итак, чтобы исправить это, я хочу создать сценарий PowerShell, который будет отключать и переименовывать все правила, которые не добавляются меня. Таким образом, я могу легко ими управлять.

Правила, которые я добавил, могут быть легко распознаны, потому что все они начинаются с определенных слов.
В этом случае, давайте предположим, что это начинается с 'Образец XYZ 'или' Образец AB C '.

  • Образец XYZ - Windows Обновление
  • Образец AB C - MP C -H C
  • Образец AB C - Firefox
  • Пример XYZ - Windows Новости

Пока что это то, что я сделал.

В этой части сценарий отфильтрует все созданные мной правила, а затем отключит и заблокирует все остальные правила.
К моему удивлению, это работает, как и ожидалось.

# This will get all firewall rules
$NR = Get-NetFirewallRule  

# This will exclude all the rules added by the user
$NR = $NR | Where-Object DisplayName -NotMatch "Sample ABC"  
$NR = $NR | Where-Object DisplayName -NotMatch "Sample XYZ"  

# Disable all other rules that are not added by the user
$NR | Set-NetFirewallRule -Enabled False

# Set rules' action to block
$NR | Set-NetFirewallRule -Action Block

Это те части, которые не работают.

Задача: добавить пользовательское слово в начало правил 'отображаемое имя
Пример. Если имя правила - «Microsoft Photos», оно будет переименовано в «IDWTFR - Microsoft Photos».

# Add a custom word to the beginning of the rules' display name
# Custom word = 'IDWTFR - '
# Attempt 01: Fail
$NR | Set-NetFirewallRule -DisplayName "IDWTFR - " + $NR.DisplayName

# Attempt 02: Fail
$NR = $NR | ForEach-Object -MemberName DisplayName "IDWTFR - " + $NR.DisplayName | Set-NetFirewallRule

Задача: Добавить нежелательные правила в группу под названием «Правила нежелательной почты».

# Add to a group
# Attempt 01: Fail
$NR | Set-NetFirewallRule -DisplayGroup "Junk Rules"


Чтобы пояснить это немного, это краткое изложение того, чем я являюсь пытаюсь сделать.
+-----------------------------+---------------------------+----------------+----------------+----------------+-------------+
|          Rule Name          |       New Rule Name       |     Group      |     Action     |     Status     | Created by  |
+-----------------------------+---------------------------+----------------+----------------+----------------+-------------+
| Sample XYZ - Windows Update | Same as before            | Same as before | Same as before | Same as before | User        |
| Sample ABC - MPC-HC         | Same as before            | Same as before | Same as before | Same as before | User        |
| Sample ABC - Firefox        | Same as before            | Same as before | Same as before | Same as before | User        |
| Sample XYZ - Windows News   | Same as before            | Same as before | Same as before | Same as before | User        |
| Microsoft Photos            | IDWTFR - Microsoft Photos | Junk Rules     | Block          | Disable        | Not by user |
| App Installer               | IDWTFR - App Installer    | Junk Rules     | Block          | Disable        | Not by user |
| Feedback Hub                | IDWTFR - Feedback Hub     | Junk Rules     | Block          | Disable        | Not by user |
| Microsoft Edge              | IDWTFR - Microsoft Edge   | Junk Rules     | Block          | Disable        | Not by user |
+-----------------------------+---------------------------+----------------+----------------+----------------+-------------+


Я новичок в PowerShell, поэтому любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 12 апреля 2020

Поскольку это ваш особый вариант использования, для него будет непросто выполнить проверку без создания среды, максимально приближенной к тому, что вы здесь показываете. Я не в состоянии сделать это.

Тем не менее, если посмотреть на то, что вы сказали, что сделали, вот вариант рефакторинга, который стоит попробовать. Немного рефакторинг (опять не проверено)

# Get all firewall rule name, and filter out the named rules
Get-NetFirewallRule | 
Where-Object -Property Name -notlike 'Sample ABC|Sample XYZ' | 
ForEach {
    # Disable all other rules that are not added by the user
    Set-NetFirewallRule -Name $PSItem.DisplayGroup -Enabled False

    # Set rules' action to block
    $PSItem.DisplayName | 
    Set-NetFirewallRule -Action Block

    # Rename firewall rule
    If ($PSItem.DisplayName -like '*Microsoft*')
    {Rename-NetFirewallRule -Name $PSItem.DisplayName -NewName "IDWTFR-$($PSitem.DisplayName)"}

    # Create new firewall group
    $PSItem.Group = 'JunkRules' | 
    Set-NetFirewallRule -NewDisplayName $PSItem.DisplayName
}
...