Firewallネタ + Windows RTの記事も書いたので、サーバー設定自動化の一例としてFirewall設定をPowerShellで行ってみましょう。
バッチの頃を知っている人にとっては目から鱗の簡単さです。
このためにC#を書くとか言う人がいたら、ちょっと待って欲しいです。 ようは「使いどころ」なわけですよ。その労力はもっと他で使ってくだされ~
Firewallの状態確認
今回は、リモートデスクトップの有効化です。まず設定の有効状態を確認しましょう。
ファイアウォール状態の取得はGet-NetFirewallRule
で行えます。
DisplayNameパラメーターは言語設定に引っ張られで、Englishや日本語で名称が変わります。このため、DisplayNameを利用するのは注意です。
# 英語の例 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
Nameなら言語に依存せず表示が一定です。
PS> 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で値に応じて処理を分ければそれでもう終わりです。 初期でセットする要素があるなら、全部渡せば簡単完了です。