netsh를 사용하여 패턴을 사용하여 규칙을 찾는 방법


10

Microsoft의 누군가가 규칙의 이름을 기억할 수없는 상황에 처한 적이 있는지 궁금합니다.
netsh advfirewall firewall show rule만 수락 이름을 어떠한 패턴 매칭 기능은 같은 패턴을 사용하여 규칙을 찾을 수 있도록 netsh를 볼 수 없습니다 "SQL*"또는 ^SQL.+$
표시를 사용하여 name=all이 모든 규칙을 나열하는 것이 가능하지만 Windows 용 고체 명령 줄 그렙 도구를 찾을 수 없습니다.

다음과 같은 명령을 실행할 수 있기를 원합니다.

netsh advfirewall firewall show rule name=sql*

이것이 가능한가?


1
빠른 답변은 다음과 같습니다 netsh advfirewall firewall show rule name=all | find "SQL".; 그러나 출력과 제어는 만족스럽지 않습니다. 대소
Achilles


Powershell을 사용하는 것도 또 다른 옵션입니다. 예. 하지만 원격 컴퓨터에서이 작업을 수행하려면 어떻게해야합니까? PS 용 원격 포트를 열어두고 BvSsshServer와 같은 IDS / IPS를 가질 수 있습니까? Windows의 기본 명령 프롬프트에서 사용 가능한 것을 찾고 있습니다.
Achilles

SSL을 사용하여 PS를 보호 할 수있는 것 같습니다 : technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles

나는 명령 /I과 함께 사용 FIND하면 대소 문자를 구분할 수있는 문제를 피할 수 있다는 것을 알았습니다 . 하지만 결과는 여전히 지저분합니다 ...
Achilles

답변:


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 {$ _. Enabled -eq $ true-및 $ _. Direction -eq 1} 여기에 도달하는 데 도움이되었습니다 (인바운드 가능).
Bratch

1
또한 규칙의 특정 속성 만 선택할 수 있습니다. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts

1
혼란스러워, 이것은 netsh 프롬프트에서 실행되어야합니까? 아니면 다른 환경?
jjxtra

PowerShell 프롬프트에서 또는 PowerShell (.ps1) 스크립트의 일부로 실행해야합니다. New-ObjectPowerShell 구문과 개체 구조를 유지하면서 훨씬 오래된 COM API에 대한 액세스를 제공하는 PowerShell cmdlet입니다.
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"


2

Select-String을 시도 할 수 있습니다 .

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"

1
이 솔루션이 작동하는 데 필요한 조건에 있는지 확인하지 않은 상태에서 공감하지 마십시오.
Loul G.

1

PowerShell이 ​​없으면 findstr과 함께 정규식을 사용할 수 있습니다.

netsh advfirewall firewall show rule name=all | findstr /R "sql.*"

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 }
    }                                                              
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.