dsclibrary/modules/MyDSCResources/xDHCPServer/xDHCPServer.DSC.Schema.psm1
Configuration DHCP { Param ( # Domain Admin Password [Parameter(Mandatory = $true)] [System.String] $DomainAdminPassword, # Local Admin Password [Parameter(Mandatory = $true)] [System.String] $LocalAdminPassword, # Domain Name [Parameter(Mandatory = $true)] [System.String] $DomainName, # Scope Options to add [Parameter(AttributeValues)] [hashtable] $ScopeOptions, # Scopes to create [Parameter(AttributeValues)] [hashtable] $Scopes, # Scope Reservations [Parameter(AttributeValues)] [hashtable] $Reservations ) Import-DscResource -ModuleName 'PSDesiredStateConfiguration' Import-DscResource -ModuleName xDHCPServer -ModuleVersion 2.0.0.0 # Assemble the Local Admin Credentials if ($LocalAdminPassword) { [PSCredential]$LocalAdminCredential = New-Object System.Management.Automation.PSCredential ("Administrator", (ConvertTo-SecureString $LocalAdminPassword -AsPlainText -Force)) } if ($DomainAdminPassword) { [PSCredential]$DomainAdminCredential = New-Object System.Management.Automation.PSCredential ("$DomainName\Administrator", (ConvertTo-SecureString $DomainAdminPassword -AsPlainText -Force)) } WindowsFeature DHCPInstall { Ensure = "Present" Name = "DHCP" } Script DHCPAuthorize { PSDSCRunAsCredential = $DomainAdminCredential SetScript = { Add-DHCPServerInDC } GetScript = { Return @{ 'Authorized' = (@(Get-DHCPServerInDC | Where-Object { $_.IPAddress -In (Get-NetIPAddress).IPAddress }).Count -gt 0); } } TestScript = { Return (-not (@(Get-DHCPServerInDC | Where-Object { $_.IPAddress -In (Get-NetIPAddress).IPAddress }).Count -eq 0)) } DependsOn = '[WindowsFeature]DHCPInstall' } $count = 0 foreach ($Scope in $Scopes) { $count++ xDhcpServerScope "Scope$count" { Ensure = 'Present' ScopeId = $Scope.Name IPStartRange = $Scope.Start IPEndRange = $Scope.End Name = $Scope.Name SubnetMask = $Scope.SubnetMask State = 'Active' LeaseDuration = '00:08:00' AddressFamily = $Scope.AddressFamily } } $count = 0 foreach ($Reservation in $Reservations) { $count++ xDhcpServerReservation "Reservation$count" { Ensure = 'Present' ScopeID = $Reservation.ScopeId ClientMACAddress = $Reservation.ClientMACAddress IPAddress = $Reservation.IPAddress Name = $Reservation.Name AddressFamily = $Reservation.AddressFamily } } $count = 0 foreach ($ScopeOption in $ScopeOptions) { $count++ xDhcpServerOption "ScopeOption$count" { Ensure = 'Present' ScopeID = $ScopeOption.ScopeId DnsDomain = $DomainName DnsServerIPAddress = $ScopeOption.DNServerIPAddress Router = $ScopeOption.Router AddressFamily = $ScopeOption.AddressFamily } } } |