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.