さて、せっかく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で値に応じて処理を分ければそれでもう終わりです。
初期でセットする要素があるなら、全部渡せば簡単完了です。
え?ファンクション寄越せ?眠いのでコメントでリクエストくれれば書きます ((