Мне интересно, попадал ли кто-нибудь в Microsoft когда-либо в ситуацию, когда они не могли вспомнить название правила!
В netsh advfirewall firewall show rule
принимает только 1 имя, и в netsh нет возможности сопоставления с образцом, чтобы помочь найти правило с использованием такого образца, как "SQL*"
или ^SQL.+$
используя шоу и name=all
можно перечислить все правила, но мне не удалось найти надежного инструмента grep для командной строки для Windows.
Я хочу иметь возможность запускать такую команду:
netsh advfirewall firewall show rule name=sql*
Это возможно?
В PowerShell запустите:
$fw=New-object -comObject HNetCfg.FwPolicy2
$fw.rules | findstr /i "whaturlookingfor"
еще лучше:
$fw.rules | select name | select-string "sql"
Это лучшее, что я мог сделать. Кто-нибудь знает, как это сделать? Например, удалить / вычесть имя правила из результатов?
netsh advfirewall firewall show rule name=all | find "Rule Name:" | find "NameLookingFor"
В Windows 10 я получаю предупреждение при выполнении netsh advfirewall
, говоря, что будущие версии Windows могут больше не поддерживать эту функцию, и вместо этого следует использовать PowerShell. К счастью, то, что хотел сделать OP, легко в PowerShell:
Get-NetFirewallRule -DisplayName "SQL*"
У меня было более 1000 правил брандмауэра, которые были созданы исполняемым файлом со случайным именем, который я хотел удалить. Следующая команда упростила это:
Remove-NetFirewallRule -DisplayName "*mongod.exe"
Можешь попробовать Выбрать строку:
netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
Без PowerShell вы можете просто использовать регулярное выражение с findstr:
netsh advfirewall firewall show rule name=all | findstr /R "sql.*"
По общему признанию, это грубый ответ, но комментарий затемнит суть.
По общему признанию, это также отвечает на несколько другой вопрос: как я могу не использовать netsh
и все еще находишь правила? :-)
Я думаю, что лучше придерживаться идиомы PowerShell, если вы уже там, и можете использовать возможность полного сопоставления с образцом включая регулярные выражения в нем.
Ради этого я включил некоторые условные выражения и изменения, чтобы показать, как все конструкции PowerShell могут быть встроены в блоки функционального стиля.
Последнее предостережение, что мутации должны выполняться с правами администратора там, где as reads не требуется.
(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 }
}