2012-07-05 32 views
9

セットアッププログラムでnetsh advfirewall firewallコマンドを使用してWindowsファイアウォールルールを追加しています。システムがWindowsファイアウォールを無効にしている場合、私のコードはエラーメッセージを出しています。ウィンドウのファイアウォールが有効かどうかを確認するには

コマンドを実行する前に、ウィンドウのファイアウォールの状態を確認する必要があります。netsh advfirewall firewallを追加してください。つまり、ファイアウォールが無効になっている場合は、ルールを追加する必要はありません。

ウィンドウのレジストリ値 "EnableFirewall"を使用して、ファイアウォールが有効かどうかを確認しています。

ます。HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Servicesの\ SharedAccess \パラメータ\ FirewallPolicy \ StandardProfile

私はこれが正しい方法であることを確認していません。ドメインファイアウォールプロファイル(?)もあります。

ありがとうございます。

+0

私は私からそれを見つけることができると思いますレジストリ値HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ SharedAccess \ Parameters。 – JChan

+1

Windowsファイアウォールだけがアクティブでないことを覚えておいてください。 –

答えて

8

もう1つの方法は、netshを使用して、ファイアウォールが有効かどうかを確認することです。コマンドnetsh advfirewall show private|public|domainを実行します。状態をオン/オフにします。

+7

Win7プロで動作しません。何がうまくいったのは 'netsh advfirewall show currentprofile'でした。 – Macke

+0

コマンドは** 'netsh advfirewall show all state' **です。** 'all' **を**' private' **または** 'public' **または**' domain' **に置き換えることができます** – Paul

0

私はこれに初めてですが、どのように私は詳細を取得するためにregクエリを使用しました。

これをコマンドラインで入力してEnterキーを押します。

reg query \\IP_Address\HEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile 

私は自分の作品でこれを使用していましたが、以下のコマンドも使用していました。

reg query \\ip_address\path 
+0

レジストリパスからHKEYに文字 'K'がありません。それは6文字の変更よりも小さいので、私は編集できません。 – voidmain

2

Invoke-Command -ComputerName <servername> -Credential <username> -ScriptBlock {[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$env:COMPUTERNAME).OpenSubKey("System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile").GetValue("EnableFirewall")}

1手段が有効になって。

+1

ControlSetではなく、CurrentControlSetを照会する必要があります。 –

0

私が引き継ぐ環境のために、似たようなことをしなければなりませんでした。私は以下の3つのプロファイルすべての状態を確認するために使用しました。

invoke-command -computername $computer -scriptblock { 
    try{ get-netfirewallprofile | select name,enabled } 
    catch{ netsh advfirewall show all state } 
} 

tryブロックは、サーバー2012またはWindows 8以降のシステムで動作します。それが捕捉されるコマンドレットを持たないというエラーが発生し、エラーを返すのではなく失敗した場合は、情報を表示するためにnetshを使用することに戻ります。

これはサーバー2008 R2、2012 R2、および2016でこれを使用して良好な結果を得ました。それがあなたのために働くことを望みます!

-2
$Compliance = 'Non-Compliant' 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Domain' -and $_.Enabled -eq 'True'} 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Public' -and $_.Enabled -eq 'True'} 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Private' -and $_.Enabled -eq 'True'} 
if ($Check) {$Compliance = 'Compliant'} 
$Compliance 
+0

このコードスニペットをご利用いただき、ありがとうございます。 [適切な説明は、長期的な価値を大幅に改善する](// meta.stackexchange.com/q/114762/206345)_why_これは問題の良い解決策であり、今後の読者にとって他の同様の質問。あなたの前提を含め、あなたの答えを[編集]して説明を加えてください。 – gunr2171