【PowerShell】DHCP サーバーを構成する

この投稿は PowerShell Advent Calendar 2013 に参加しています。

※投稿遅れてごめんなさい!!!!


https://technet.microsoft.com/ja-jp/windowsserver/jj649374.aspx

Windows PowerShell を使用すれば、Windows Server 上にインストールするサービスの構成も自動化することができます。

ただ、その中でちょっと面倒なのが DHCP サーバーです。

サーバーマネージャーで DHCPサーバーをインストールし、DHCPマネージャーで構成するには、以下の手順が必要です。

  1. DHCP サーバーをインストールする

  2. サーバーマネージャー上にフラグた立つので、「DHCP 構成を完了する」を実行

    • DHCP サーバー管理の委任用にセキュリティグループ(DHCP Administrators、DHCP Users)を作成する
    • DHCP サーバーをActive Directory で承認する
  3. DHCP サービスのバインディングを設定する

  4. スコープを構成する

これらをWindows PowerShell に置き換えると以下のようになります。

  1. Add-WindowsFeature dhcp -IncludeManagementTools -IncludeAllSubFeature

  2. 「DHCP 構成を完了する」というコマンドレットが用意されていないので、以下のコマンドを実行します。

    • Netsh dhcp add SecurityGroups

      残念ながら、Netsh dhcp add SecurityGroup に相当するコマンドレットが存在せず、ここだけはDOSコマンドを使うことになります(少し悔しい)。または、New-ADGroup コマンドレットを使用して、ここにセキュリティグループを作ってあげるという手もありますが….

    • Add-DHCPServerInDC -DnsName <DNSドメイン名>

      DNS ドメイン名には contoso.com のような文字列を指定します。

  3. Set-DHCPServerV4Binding -InterfaceAlias “NIC の名前” -BindingState $True

    -InterfaceName に指定するのは DHCP サーバーをバインドするネットワークカードの名前です。名前を調べるには、Get-NetAdapter コマンドレットで表示される Name プロパティを確認してください。

    このコマンドレットでは IPv4 アドレスをリースするための設定をしていますが、Set-DhcpServerv6Binding コマンドレットを使用すれば IPv6 用の設定も行えます。

  4. スコープを構成するには 2つのコマンドレットを実行しなければなりません

    はじめに、スコープのレンジを設定します。このとき、-State でスコープをアクティブにすることができますが、このままでは設定が足りないため中途半端にリースされる可能性があります。よって、作成時には -State を InActive としましょう。

    Add-DHCPServerV4Scope -StartRange 192.168.0.10 -EndRange 192.168.0.20 -SubnetMask 255.255.255.0 -Name “スコープ1” -State InActive

    スコープを作成すると、ScopeID という一意のIDが割り振られます。ScopeID を確認するには、以下のコマンドレットを使用します。

    Get-DHCPServerV4Scope

    ScopeID がわかったら、今度はスコープに DNS サーバー の設定を追加します。

    Set-DhcpServerV4OptionValue -ScopeID 192.168.0.0 -DnsServer 192.168.0.1

    このとき、DNS サーバーの有効性がチェックされます。もし DNS サーバーがまだ存在していない場合等には、 -Force オプションを使用して設定を強制することもできます。

    最後に、以下のようにスコープの State を Active に変更し、アドレスのリースを行えるようにします。

    Set-DhcpServerv4Scope -ScopeID 192.168.0.0 -State Active

以上で設定は完了なのですが、Windows PowerShell から構成を行った場合、ちょっとした問題が出ることがあります。それが、以下です。

そうなのです。こいつが消えてくれないことがあるのです。害はありませんが、ちょっと鬱陶しいですね。。。

そこで、対応が完了しているフラグがどうしても消えない場合には、以下のようなコマンドを最後に実行しましょう。

Set-ItemProperty –Path registry::HKLM\SOFTWARE\Microsoft\ServerManager\Roles\12 –Name ConfigurationState –Value 2

「HKLM\SOFTWARE\Microsoft\ServerManager\Roles」配下には、サーバーにインストールされている役割が列挙されており、その直下の数字が各役割の管理番号になっているようです。つまり、「12」というのはDHCP サーバーを示しています。ConfigurationState = 2 が「構成完了」を意味しています。