Expeliarmus

# Adjust the DHCP Server name as needed, or omit if running locally

$DhcpServer = 'YourDhcpServerName'

# We'll collect all CSV rows here

$Output = @()

# Get all scopes

$AllScopes = Get-DhcpServerv4Scope -ComputerName $DhcpServer

foreach ($scope in $AllScopes) {

# 1) SCOPE SECTION

# Row: "SCOPE" label in ColumnA

$Output += [PSCustomObject]@{

ColumnA = 'SCOPE'

ColumnB = ''

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# Name property

$Output += [PSCustomObject]@{

ColumnA = 'Name'

ColumnB = $scope.Name

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# SubnetMask

$Output += [PSCustomObject]@{

ColumnA = 'SubnetMask'

ColumnB = $scope.SubnetMask

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# ScopeId

$Output += [PSCustomObject]@{

ColumnA = 'ScopeId'

ColumnB = $scope.ScopeId

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# StartRange

$Output += [PSCustomObject]@{

ColumnA = 'StartRange'

ColumnB = $scope.StartRange

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# EndRange

$Output += [PSCustomObject]@{

ColumnA = 'EndRange'

ColumnB = $scope.EndRange

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# LeaseDuration

$Output += [PSCustomObject]@{

ColumnA = 'LeaseDuration'

ColumnB = $scope.LeaseDuration

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# State

$Output += [PSCustomObject]@{

ColumnA = 'State'

ColumnB = $scope.State

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# 2) EXCLUSIONS SECTION

# Label row

$Output += [PSCustomObject]@{

ColumnA = 'EXCLUSIONS'

ColumnB = ''

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# Header row for exclusions (ScopeId, StartRange, EndRange)

$Output += [PSCustomObject]@{

ColumnA = 'ScopeId'

ColumnB = 'StartRange'

ColumnC = 'EndRange'

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

$Exclusions = Get-DhcpServerv4ExclusionRange -ComputerName $DhcpServer -ScopeId $scope.ScopeId -ErrorAction SilentlyContinue

foreach ($excl in $Exclusions) {

$Output += [PSCustomObject]@{

ColumnA = $excl.ScopeId

ColumnB = $excl.StartRange

ColumnC = $excl.EndRange

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

}

# 3) ADDRESS LEASES SECTION

# Label row

$Output += [PSCustomObject]@{

ColumnA = 'ADDRESS LEASES'

ColumnB = ''

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# Header row for leases

$Output += [PSCustomObject]@{

ColumnA = 'IPAddress'

ColumnB = 'ScopeId'

ColumnC = 'HostName'

ColumnD = 'AddressState'

ColumnE = 'ClientType'

ColumnF = 'ClientId'

ColumnG = 'Description'

}

$Leases = Get-DhcpServerv4Lease -ComputerName $DhcpServer -ScopeId $scope.ScopeId -ErrorAction SilentlyContinue

foreach ($lease in $Leases) {

$Output += [PSCustomObject]@{

ColumnA = $lease.IPAddress

ColumnB = $lease.ScopeId

ColumnC = $lease.HostName

ColumnD = $lease.AddressState

ColumnE = $lease.ClientType

ColumnF = $lease.ClientId

ColumnG = $lease.Description

}

}

# 4) RESERVATIONS SECTION

# Label row

$Output += [PSCustomObject]@{

ColumnA = 'RESERVATIONS'

ColumnB = ''

ColumnC = ''

ColumnD = ''

ColumnE = ''

ColumnF = ''

ColumnG = ''

}

# Header row for reservations (IPAddress, ScopeId, AddressState, ClientId, Description)

$Output += [PSCustomObject]@{

ColumnA = 'IPAddress'

ColumnB = 'ScopeId'

ColumnC = 'AddressState'

ColumnD = 'ClientId'

ColumnE = 'Description'

ColumnF = ''

ColumnG = ''

}

$Reservations = Get-DhcpServerv4Reservation -ComputerName $DhcpServer -ScopeId $scope.ScopeId -ErrorAction SilentlyContinue

foreach ($resv in $Reservations) {

$Output += [PSCustomObject]@{

ColumnA = $resv.IPAddress

ColumnB = $resv.ScopeId

ColumnC = $resv.AddressState

ColumnD = $resv.ClientId

ColumnE = $resv.Description

ColumnF = ''

ColumnG = ''

}

}

# 5) Two rows of "#" in columns A–G to separate from next scope

$Output += [PSCustomObject]@{

ColumnA = '#'

ColumnB = '#'

ColumnC = '#'

ColumnD = '#'

ColumnE = '#'

ColumnF = '#'

ColumnG = '#'

}

$Output += [PSCustomObject]@{

ColumnA = '#'

ColumnB = '#'

ColumnC = '#'

ColumnD = '#'

ColumnE = '#'

ColumnF = '#'

ColumnG = '#'

}

}

# Finally, export the entire array to CSV

# Change the path if you like

$Output | Export-Csv -Path 'C:\Temp\DHCP_Export.csv' -NoTypeInformation

Next
Next

Blog Post Title One