Как я могу использовать netsh, чтобы найти правило, используя шаблон

10

Мне интересно, сталкивался ли кто-нибудь в Microsoft с такой ситуацией, когда он не может вспомнить название правила! Принимает только 1 имя и не соответствующий шаблона объекта не доступен на Netsh , чтобы помочь найти правила с помощью шаблона , как или с помощью шоу , и можно перечислить все правила , но я не смог найти прочный командную строку Grep инструмент для окон.
netsh advfirewall firewall show rule"SQL*"^SQL.+$
name=all

Я хочу быть в состоянии выполнить команду как это:

netsh advfirewall firewall show rule name=sql*

Это возможно?

Ахиллес
источник
1
быстрый ответ будет: netsh advfirewall firewall show rule name=all | find "SQL"; но результат и контроль не так удовлетворительны, как это должно быть. Это довольно грязно и даже хуже, с учетом регистра ...
Ахиллес
думаю, что следующая ссылка может помочь blogs.technet.com/b/jamesone/archive/2009/02/18/…
Тони Рот
Использование Powershell - это еще один вариант; да. но что, если вы хотите сделать это на удаленной машине? Можно ли оставить удаленные порты для PS открытыми и иметь IDS / IPS, как у меня с BvSsshServer? Я ищу что-то доступное в родной командной строке Windows.
Ахилл
Кажется, что можно защитить PS с помощью SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Ахилл
Я обнаружил , что при использовании /Iс FINDкомандой, я могу уклониться от проблемы с учетом регистра; но результат все еще грязный ...
Ахиллес

Ответы:

10

В PowerShell запустите:

$fw=New-object -comObject HNetCfg.FwPolicy2    
$fw.rules | findstr /i "whaturlookingfor"

еще лучше:

$fw.rules | select name | select-string "sql"
Тони Рот
источник
1
$ fw.rules | where-object {$ _. Включено -eq $ true -and $ _. Direction -eq 1} Помогло мне прийти к этому (входящий включен).
Bratch
1
далее вы можете выбрать только определенные свойства правила. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Дэн Притц
1
Я запутался, это должно быть запущено в приглашении netsh? Или какая-то другая среда?
Jjxtra
Это должно быть выполнено в приглашении PowerShell или как часть сценария PowerShell (.ps1). New-Objectкомандлет PowerShell, обеспечивающий доступ к более старому COM API, сохраняя при этом синтаксис PowerShell и структуру объектов.
BaseZen
4

Это лучшее, что я мог сделать. Кто-нибудь знает, как продвинуться дальше? Как удалить / вычесть имя правила из результатов?

netsh advfirewall firewall show rule name=all | find "Rule Name:" | find "NameLookingFor"
Бен
источник
3

В Windows 10 при выполнении я получаю предупреждение о netsh advfirewallтом, что будущие версии Windows могут больше не поддерживать эту функцию и вместо этого следует использовать PowerShell. К счастью, то, что хотел сделать OP, легко в PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

У меня было более 1000 правил брандмауэра, которые были созданы исполняемым файлом со случайным именем, который я хотел удалить. Следующая команда сделала это легко:

Remove-NetFirewallRule -DisplayName "*mongod.exe"

bcody
источник
2

Вы можете попробовать Select-String :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
Лоул Г.
источник
1
Пожалуйста, не понижайте рейтинг, не проверив, что вы находитесь в необходимых условиях для работы этого решения.
Лоул Г.
1

Без PowerShell вы можете просто использовать регулярные выражения с findstr:

netsh advfirewall firewall show rule name=all | findstr /R "sql.*"
SDK
источник
0

По общему признанию, это - ответ на вопрос, но комментарий затеняет суть.

Это также по общему признанию отвечает на немного другой вопрос: как я могу не использовать netshи все еще находить правила? :-)

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

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

Последнее предостережение о том, что мутации должны выполняться с правами администратора там, где не требуется чтение.

(New-Object -ComObject HNetCfg.FwPolicy2).rules |
    Where-Object { $_.Name -match '^SQL.+$' } |
    ForEach-Object { Write-Output "Checking $($_.Name)"
      if ( $_.Enabled ) { Write-Output "$($_.Name) already enabled" }
      else { Write-Output "$($_.Name) enabled"; $_.Enabled = $true }
    }                                                              
BaseZen
источник