tech.guitarrapc.cóm

Technical updates

PowerShellでファイアウォールの設定を有効化してみる

さて、せっかくFirewallネタ + Windows RT (高級置時計) の記事も書いたので、サーバー設定自動化手法の一例としてFirewall設定をPowerShellで行ってみましょう。 バッチの頃を知っている人にとっては目から鱗の簡単さです。 このためにC#を書くとか言う人がいたら、ちょっと待って欲しいです。 ようは「使いどころ」なわけですよ。その労力はもっと他で使ってくだされ~

Firewallの状態確認

概要は、前回の記事を見てください。
PowerShellでWindows 8やWindows Server 2012のFirewall状態を取得する
今回は、そうですね……リモートデスクトップの有効化とか同でしょうか? では、まず設定の有効状態を確認しましょう。 この時、DisplayNameパラメータの利用は非推奨です。 何故なら、Languageの設定に引っ張られるので、言語によって(Englishや日本語)名称が変わります。 例えば英語ならこうなります。
Get-NetFirewallRule -DisplayName "Remote Desktop*" | Select DisplayName, Enabled
日本語ならこうです。
Get-NetFirewallRule -DisplayName "リモート*デスクトップ*" | Select DisplayName, Enabled
こんなことでifやswitchを書きますか?そんなバカげた話はありません。 大人しくNameを使えばいいのです。
Name                    : RemoteDesktop-UserMode-In-UDP
ID                      : RemoteDesktop-UserMode-In-UDP
Group                   : @FirewallAPI.dll,-28752
Platform                : {}
LSM                     : False
DisplayName             : リモート デスクトップ - ユーザー モード (UDP 受信)
Enabled                 : False
Profile                 : Any
Direction               : Inbound
Action                  : Allow
EdgeTraversalPolicy     : Block
PrimaryStatus           : OK
Status                  : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus       : NotApplicable
PolicyStoreSourceType   : Local
Caption                 :
Description             : RDP トラフィックを許可するためのリモート デスクトップ サービスの受信規則です。[UDP 3389]
ElementName             : @FirewallAPI.dll,-28776
InstanceID              : RemoteDesktop-UserMode-In-UDP
CommonName              :
PolicyKeywords          :
PolicyDecisionStrategy  : 2
PolicyRoles             :
ConditionListType       : 3
CreationClassName       : MSFT|FW|FirewallRule|RemoteDesktop-UserMode-In-UDP
ExecutionStrategy       : 2
Mandatory               :
PolicyRuleName          :
Priority                :
RuleUsage               :
SequencedActions        : 3
SystemCreationClassName :
SystemName              :
DisplayGroup            : リモート デスクトップ
LocalOnlyMapping        : False
LooseSourceMapping      : False
Owner                   :
Platforms               : {}
PolicyStoreSource       : PersistentStore
Profiles                : 0
RuleGroup               : @FirewallAPI.dll,-28752
StatusCode              : 65536
PSComputerName          :
CimClass                : root/standardcimv2:MSFT_NetFirewallRule
CimInstanceProperties   : {Caption, Description, ElementName, InstanceID...}
CimSystemProperties     : Microsoft.Management.Infrastructure.CimSystemProperties
つまりこうです。(見やすいようにList表示しています。)
Get-NetFirewallRule -Name "RemoteDesktop**" | Select DisplayName, Enabled | Format-List
これで日本語など環境に合わせた言語で状態が出力されます。
DisplayName : リモート デスクトップ - ユーザー モード (TCP 受信)
Enabled     : False

DisplayName : リモート デスクトップ - ユーザー モード (UDP 受信)
Enabled     : False

Firewallの状態変更

Getがあるなら?そうSetがあるのです。
Set-NetFirewallRule
あとは皆大好きパイプで渡すだけです。
Get-NetFirewallRule -Name "RemoteDesktop**" | Set-NetFirewallRule -enabled true
どうですか、このPipe Orientedなお手軽簡単応用も楽勝な感じ (ドヤァ Functionで値に応じて処理を分ければそれでもう終わりです。 初期でセットする要素があるなら、全部渡せば簡単完了です。 え?ファンクション寄越せ?眠いのでコメントでリクエストくれれば書きます ((