どうもミツシマです。


今回は、「ファイルとプリンターの共有」をコマンドにて有効化出来ないかを検証してみてました。


今回の検証環境は以下の通り
ActiveDirectory環境
DC:Windows Server2016
PC:Windows10 1809 (64bit)


「ファイルとプリンターの共有」を有効にするためにはWindowsファイルウォールを有効化すればいいみたいです。


<必要なファイアウォール>
・ファイルとプリンターの共有 (NB セッション受信) 
・ファイルとプリンターの共有 (NB-Session 送信) 
・ファイルとプリンターの共有 (SMB 受信)  
・ファイルとプリンターの共有 (SMB 送信)  
・ファイルとプリンターの共有 (NB 名受信)  
・ファイルとプリンターの共有 (NB 名送信)  
・ファイルとプリンターの共有 (NB データグラム受信) 
・ファイルとプリンターの共有 (NB データグラム送信) 
・ファイルとプリンターの共有 (Spooler Service - RPC) 
・ファイルとプリンターの共有 (スプーラー サービス - RPC-EPMAP)
・ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信) 
・ファイルとプリンターの共有 (エコー要求 - ICMPv4 送信) 
・ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信) 
・ファイルとプリンターの共有 (エコー要求 - ICMPv6 送信) 
・ファイルとプリンターの共有 (LLMNR UDP 受信)
・ファイルとプリンターの共有 (LLMNR UDP 送信)


「セキュリティが強化されたWindowsファイアウォール」にてグループが「ファイルとプリンターの共有」となっているファイアウォールを有効にしてあげればいいみたいです。
設定値がわかったのでいつもどおりスクリプトを作成してみました。

Domain-EnableShareFileFireWall.ps1
#ファイアウォールポリシーで「ネットワーク探索」(ドメインプロファイル)のみを取得
$NetDiscoveryRule = Get-NetFirewallRule | Where-Object {$_.DisplayGroup -eq "ファイルとプリンターの共有"}


#ルールを確認し該当のルールが無効であれば有効化する
foreach($Rule in $NetDiscoveryRule){

    If (($Rule.Profile -like "*Domain*") -or ($Rule.Profile -eq "Any")){
       
    $RuleStatus = $Rule.Enabled

    If ($RuleStatus -eq "True"){
    Write-Host $Rule.DisplayName'は有効です。'
            #Set-NetFirewallRule -InputObject $Rule -Enabled False
    }else{
            Write-Host $Rule.DisplayName'は無効です。ファイアウォールを有効化します。'
            Set-NetFirewallRule -InputObject $Rule -Enabled True
        }
    }
}



今回もドメインプロファイルのみ変更しようと考えましたが、「ファイルとプリンターの共有 (LLMNR UDP 受信) 」と「ファイルとプリンターの共有 (LLMNR UDP 送信) 」の初期状態がすべてのプロファイル(Any)で適用されていたので、止む無くこちらは全プロファイルで有効化しました。
※実際にSMBプロトコルをやり取りするポートではないので、これだけ有効になっていてもいいのかな〜と個人的に妥協しました。。。。。

そして、ADのスタートアップスクリプトで設定した場合の時間を測定してみました。
変更が必要な場合は1分半、変更が不要の場合には20秒程で完了していました。
※あくまで目安なので実運用で試す場合には事前検証必須です!!


ちなみにすべてのプロファイルで有効化する場合は以下の通り。
netsh advfirewall firewall set rule group="ファイルとプリンターの共有" new enable=Yes


いつもどおり最後はファイルのリンクを貼っておきます。
Domain-EnableShareFileFireWall.ps1

スポンサードリンク