netshを使用してパターンを使用するルールを検索するにはどうすればよいですか


10

マイクロソフトの誰かがルールの名前を思い出せない状況に陥ったことはないかと思います。のみ受け付け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"。しかし、出力と制御は本来あるべきほどには満足できません。大文字と小文字を区別して、やや乱雑で、さらに悪いことに...
アキレス


Powershellの使用は別のオプションです。はい。しかし、これをリモートマシンで実行したい場合はどうでしょうか。PSのリモートポートを開いたままにして、BvSsshServerと同じようにIDS / IPSを使用することはできますか?Windowsのネイティブコマンドプロンプトで使用できるものを探しています。
アキレス

SSLを使用してPSをセキュリティで保護することができるようです:technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles

/Iwith 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 {$ _。Enabled -eq $ true -and $ _。Direction -eq 1}は、これに到達するのに役立ちました(受信が有効)。
2014年

1
さらに、ルールの特定のプロパティのみを選択できます。 $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts、2015年

1
私は混乱しています、これはnetshプロンプトで実行するためのものですか?または他の環境?
jjxtra

これは、PowerShellプロンプトで実行するか、PowerShell(.ps1)スクリプトの一部として実行する必要があります。New-ObjectPowerShell構文とオブジェクト構造を保持しながら、はるかに古い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"


2

Select-Stringを試すことができます:

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

1
このソリューションが機能するために必要な条件にあることを確認せずに反対票を投じないでください。
Loul G. 2015

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.