Public/03_Services/Get-VBDHCPInformation.ps1
|
# ============================================================ # FUNCTION : Get-VBDHCPInformation # VERSION : 1.0.2 # CHANGED : 10-04-2026 -- Initial VB-compliant release # AUTHOR : Vibhu Bhatnagar # PURPOSE : Collect comprehensive DHCP server configuration # ENCODING : UTF-8 with BOM # ============================================================ <# .SYNOPSIS Collects comprehensive DHCP server configuration including scopes, reservations, and DNS settings. .DESCRIPTION Get-VBDHCPInformation gathers detailed DHCP server configuration data for both IPv4 and IPv6 from local or remote servers. Returns structured objects containing scope information, server options, reservations, and DNS settings. .PARAMETER ComputerName Target DHCP server(s). Defaults to local machine. Accepts pipeline input. Supports multiple servers and fully-qualified domain names. .PARAMETER Credential Alternate credentials for remote DHCP server access. Required for servers in different domains. .EXAMPLE Get-VBDHCPInformation Retrieves DHCP configuration from the local server. .EXAMPLE Get-VBDHCPInformation -ComputerName DHCP-SRV01 Retrieves DHCP configuration from remote server DHCP-SRV01. .EXAMPLE 'DHCP-SRV01','DHCP-SRV02' | Get-VBDHCPInformation -Credential (Get-Credential) Retrieves DHCP configuration from multiple servers using pipeline input. .OUTPUTS [PSCustomObject]: One object per server with properties ComputerName, IPv4Scopes, IPv4Options, IPv4Reservations, IPv6Scopes, IPv6Options, IPv6Reservations, IPv4DnsSettings, IPv6DnsSettings, Status, CollectionTime .NOTES Version : 1.0.2 Author : Vibhu Bhatnagar Modified : 10-04-2026 Category : Services #> function Get-VBDHCPInformation { [CmdletBinding()] param( [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [Alias('Name', 'Server', 'Host')] [string[]]$ComputerName = $env:COMPUTERNAME, [PSCredential]$Credential ) process { foreach ($computer in $ComputerName) { try { # Step 1 -- Build parameter hashtable for remote commands $InvokeParams = @{ ComputerName = $computer ErrorAction = 'SilentlyContinue' } if ($Credential) { $InvokeParams.Credential = $Credential } # Step 2 -- Determine if local or remote execution if ($computer -eq $env:COMPUTERNAME) { # Step 3 -- Collect IPv4 DHCP information $IPv4Scopes = Get-DhcpServerv4Scope @InvokeParams $IPv4Options = Get-DhcpServerv4OptionValue @InvokeParams $IPv4Reservations = @() if ($IPv4Scopes) { foreach ($scope in $IPv4Scopes) { $IPv4Reservations += Get-DhcpServerv4Reservation @InvokeParams -ScopeId $scope.ScopeId } } # Step 4 -- Collect IPv6 DHCP information $IPv6Scopes = Get-DhcpServerv6Scope @InvokeParams $IPv6Options = $null $IPv6Reservations = @() if ($IPv6Scopes) { $IPv6Options = Get-DhcpServerv6OptionValue @InvokeParams foreach ($scope in $IPv6Scopes) { $IPv6Reservations += Get-DhcpServerv6Reservation @InvokeParams -ScopeId $scope.ScopeId } } # Step 5 -- Collect DNS settings $IPv4DnsSettings = Get-DhcpServerv4DnsSetting @InvokeParams $IPv6DnsSettings = Get-DhcpServerv6DnsSetting @InvokeParams } else { # Step 6 -- Remote execution via Invoke-Command $RemoteResult = Invoke-Command -ComputerName $computer -Credential $Credential -ScriptBlock { $IPv4Scopes = Get-DhcpServerv4Scope -ErrorAction SilentlyContinue $IPv4Options = Get-DhcpServerv4OptionValue -ErrorAction SilentlyContinue $IPv4Reservations = @() if ($IPv4Scopes) { foreach ($scope in $IPv4Scopes) { $IPv4Reservations += Get-DhcpServerv4Reservation -ScopeId $scope.ScopeId -ErrorAction SilentlyContinue } } $IPv6Scopes = Get-DhcpServerv6Scope -ErrorAction SilentlyContinue $IPv6Options = $null $IPv6Reservations = @() if ($IPv6Scopes) { $IPv6Options = Get-DhcpServerv6OptionValue -ErrorAction SilentlyContinue foreach ($scope in $IPv6Scopes) { $IPv6Reservations += Get-DhcpServerv6Reservation -ScopeId $scope.ScopeId -ErrorAction SilentlyContinue } } $IPv4DnsSettings = Get-DhcpServerv4DnsSetting -ErrorAction SilentlyContinue $IPv6DnsSettings = Get-DhcpServerv6DnsSetting -ErrorAction SilentlyContinue [PSCustomObject]@{ IPv4Scopes = $IPv4Scopes IPv4Options = $IPv4Options IPv4Reservations = $IPv4Reservations IPv6Scopes = $IPv6Scopes IPv6Options = $IPv6Options IPv6Reservations = $IPv6Reservations IPv4DnsSettings = $IPv4DnsSettings IPv6DnsSettings = $IPv6DnsSettings } } $IPv4Scopes = $RemoteResult.IPv4Scopes $IPv4Options = $RemoteResult.IPv4Options $IPv4Reservations = $RemoteResult.IPv4Reservations $IPv6Scopes = $RemoteResult.IPv6Scopes $IPv6Options = $RemoteResult.IPv6Options $IPv6Reservations = $RemoteResult.IPv6Reservations $IPv4DnsSettings = $RemoteResult.IPv4DnsSettings $IPv6DnsSettings = $RemoteResult.IPv6DnsSettings } # Step 7 -- Return success object [PSCustomObject]@{ ComputerName = $computer IPv4Scopes = $IPv4Scopes IPv4Options = $IPv4Options IPv4Reservations = $IPv4Reservations IPv6Scopes = $IPv6Scopes IPv6Options = $IPv6Options IPv6Reservations = $IPv6Reservations IPv4DnsSettings = $IPv4DnsSettings IPv6DnsSettings = $IPv6DnsSettings Status = 'Success' CollectionTime = (Get-Date).ToString('dd-MM-yyyy HH:mm:ss') } } catch { # Step 8 -- Return error object [PSCustomObject]@{ ComputerName = $computer IPv4Scopes = $null IPv4Options = $null IPv4Reservations = $null IPv6Scopes = $null IPv6Options = $null IPv6Reservations = $null IPv4DnsSettings = $null IPv6DnsSettings = $null Error = $_.Exception.Message Status = 'Failed' CollectionTime = (Get-Date).ToString('dd-MM-yyyy HH:mm:ss') } } } } } |