目次

DHCPサーバ設定をPowerShellで行う

今までnetshコマンドを使ってDHCPサーバの制御を行っていたのですが、いつの間にかnetshでのDHCPサポートは将来削除されるかもしれませんよー!と警告が出るようになっていたので、将来削除されちゃっても良いようにPowerShellでやってみようかと。
なお、作業には管理者権限が必要なので、PowerShellのプロンプトを起動する時やスクリプトを実行する時には管理者権限に昇格するように!

モジュール

PowerShellでDHCPサーバを制御する為にはDhcpServerモジュールが必要です。

PS C:\Windows\system32> Import-Module DhcpServer

とりあえず、処理を行う前に実行しとけばおk。
モジュール内にあるコマンドも確認しておくと良い。

PS C:\Windows\system32> Get-Command -Module DhcpServer

ついでに出てきたコマンドの詳細を知りたい場合は

Get-Help コマンド

Get-Help コマンド -examples

ってすると幸せになれます。

スコープを作成する

書式

Add-DhcpServerv4Scope -StartRange 開始IP -EndRange 終了IP -SubnetMask サブネットマスクIP -Name "名前" -State InActive

PS C:\Windows\system32> Add-DhcpServerv4Scope -StartRange 192.168.1.50 -EndRange 192.168.1.60 -SubnetMask 255.255.255.0 -Name "サンプルスコープ" -State InActive

他にもいろいろオプション付けられるけど、とりあえずこのくらいかと。
-StateオプションはActiveにしておくとスコープ作成直後から有効になってしまうので、スコープの作成後にオプションを設定したりするのであれば、一旦InActiveにして非アクティブ状態で作成されるようにしておくと良い。

スコープIDを確認する

スコープを作成すると、その後でオプションの設定時等にやたらとスコープIDを入力するシーンが出てくる。
IDと言っても生成したスコープのネットワークアドレスなんだけど、それを一覧で確認したい場合はGet-DhcpServerv4Scopeコマンドで参照できる

PS C:\Windows\system32> Get-DhcpServerv4Scope
ScopeId         SubnetMask      Name            State    StartRange      EndRange        LeaseDuration
-------         ----------      ----            -----    ----------      --------        -------------
192.168.1.0     255.255.255.0   サンプルスコープ InActive  192.168.1.50    192.168.1.60    8.00:00:00

スコープにオプションを設定する

よくあるオプション

各スコープにDNSサーバやゲートウェイを設定するってのはよくあると思います。

DNSサーバを追加する
PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10
PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10 -Force

DNSサーバは設定時に実際にDNSサービスが稼働しているかどうかの有効性確認が行われます。
-Forceオプションをつけるとこの有効性確認をキャンセル(というか有効じゃなくても強制的に設定)できます。
まだDNSが構築される前などではつけると良いかと。
なお、DNSサーバを複数設定する場合は、設定値をカンマ区切りで並べてください。

PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10,192.168.1.11
ゲートウェイを設定する

ネットワークの設定ではよく(デフォルト)ゲートウェイデフォゲなどと言われますが、DHCPサーバではRouterという項目になります。

PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -Router 192.168.1.254
補足

勘の良い人ならもうわかってそうですが、上記のDNSやGatewayは一つにまとめて実行できます。

PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10,192.168.1.11 -Router 192.168.1.254

他にもDnsDomainや、WinsServerも同様に設定できるので、必要に応じて設定しましょう。

その他のオプション

DHCPについて良くご存知の方は上記のオプションの他にも様々なオプションがある事を知っているかと思います。
これらについては、オプションのIDを使って直接指定することで設定が可能です。

PS C:\Windows\system32> Set-DhcpServerV4OptionValue -OptionId オプションの番号 -Value "オプションの値" -ScopeId スコープID 

例えばNo12のホスト名だと、こんな感じになります。

PS C:\Windows\system32> Set-DhcpServerV4OptionValue -OptionId 12 -Value "client01" -ScopeId 192.168.1.0 

スコープを有効にする

最初のスコープ作成コマンドを使うと、-StateInActiveを指定しているので、スコープは非アクティブ状態になり、IPアドレスのリースが行われません。
スコープをアクティブにする場合は、下記のようにします。

PS C:\Windows\system32> Set-DhcpServerv4Scope -ScopeID 192.168.1.0 -State Active

IPアドレスを予約する

接続するクライアントのMACアドレスがわかっている場合、IPアドレスを予約することができます。
予約する場合のコマンドは下記の通り。
書式

PS C:\Windows\system32> Add-DhcpServerv4Reservation -ScopeId スコープID -IPAddress 予約するIPアドレス -ClientId MACアドレス(ハイフン区切り、大文字) -Name "名称" -Type Both

PS C:\Windows\system32> Add-DhcpServerv4Reservation -ScopeId 192.168.1.0 -IPAddress 192.168.1.50 -ClientId 08-00-27-00-40-6B -Name "client01" -Type Both

フェイルオーバー構成の設定をレプリケートする

Windows Server 2012 R2とかだと、2台のDHCPサーバを冗長構成(フェイルオーバー構成)にすることができます。
フェイルオーバー構成に設定した後、何らかの設定変更を行った場合、その変更された設定をフェイルオーバー構成の相手側に同期(レプリケート)する必要があります。
書式

PS C:\Windows\system32> Invoke-DhcpServerv4FailoverReplication -ScopeId スコープID

PS C:\Windows\system32> Invoke-DhcpServerv4FailoverReplication -ScopeId 192.168.1.0