diff --git a/AsBuiltReport.Fortinet.FortiGate.json b/AsBuiltReport.Fortinet.FortiGate.json index bf19fbd..f4c19e8 100644 --- a/AsBuiltReport.Fortinet.FortiGate.json +++ b/AsBuiltReport.Fortinet.FortiGate.json @@ -16,7 +16,7 @@ "InfoLevel": { "_comment_": "0 = Disabled, 1 = Enabled / Summary, 2 = Adv Summary", "FortiCare": 1, - "System": 1, + "System": 2, "Route": 1, "SDWAN": 1, "Firewall": 1, diff --git a/README.md b/README.md index 4ba2ba1..0f1b2c9 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ The table below outlines the default and maximum InfoLevel settings for each *Fo | Sub-Schema | Default Settings | Maximum Settings | |:----------:|------------------|------------------| | Forticare | 1 | 1 | -| System | 1 | 1 | +| System | 2 | 2 | | Route | 1 | 1 | | Firewall | 1 | 1 | | User | 2 | 2 | diff --git a/Src/Private/Get-AbrFgtSystem.ps1 b/Src/Private/Get-AbrFgtSystem.ps1 index 539c0a9..94257ea 100644 --- a/Src/Private/Get-AbrFgtSystem.ps1 +++ b/Src/Private/Get-AbrFgtSystem.ps1 @@ -44,13 +44,13 @@ function Get-AbrFgtSystem { } $OutObj = [pscustomobject]@{ - "Nom" = $info.'hostname' - "Alias" = $info.'alias' - "Recurring Reboot" = $reboot - "Port SSH" = $info.'admin-ssh-port' - "Port HTTP" = $info.'admin-port' - "Port HTTPS" = $info.'admin-sport' - "HTTPS Redirect" = $info.'admin-https-redirect' + "Nom" = $info.'hostname' + "Alias" = $info.'alias' + "Recurring Reboot" = $reboot + "Port SSH" = $info.'admin-ssh-port' + "Port HTTP" = $info.'admin-port' + "Port HTTPS" = $info.'admin-sport' + "HTTPS Redirect" = $info.'admin-https-redirect' } $TableParams = @{ @@ -319,6 +319,135 @@ function Get-AbrFgtSystem { } } + #DHCP Server + $dhcp_servers = Get-FGTSystemDHCPServer + + if ($dhcp_servers -and $InfoLevel.System -ge 1) { + Section -Style Heading3 'DHCP Server' { + $OutObj = @() + + foreach ($dhcp_server in $dhcp_servers) { + $OutObj += [pscustomobject]@{ + "id" = $dhcp_server.id + "Status" = $dhcp_server.status + "Interface" = $dhcp_server.interface + "Range" = "$($dhcp_server.'ip-range'.'start-ip')-$($dhcp_server.'ip-range'.'end-ip')" + "Netmask" = $dhcp_server.netmask + "Gateway" = $dhcp_server.'default-gateway' + } + } + + $TableParams = @{ + Name = "DHCP Server" + List = $false + ColumnWidths = 5, 11, 15, 35, 17, 17 + } + + if ($Report.ShowTableCaptions) { + $TableParams['Caption'] = "- $($TableParams.Name)" + } + + $OutObj | Table @TableParams + } + + if ($InfoLevel.System -ge 2) { + #DHCP Server detail + foreach ($dhcp_server in $dhcp_servers) { + Section -Style NOTOCHeading4 -ExcludeFromTOC "DHCP: $($dhcp_server.id) - $($dhcp_server.interface)" { + BlankLine + + $dns = ($dhcp_server.'dns-server1' -replace "0.0.0.0", "") + ($dhcp_server.'dns-server2' -replace "0.0.0.0", "") + ($dhcp_server.'dns-server3' -replace "0.0.0.0", "") + ($dhcp_server.'dns-server4' -replace "0.0.0.0", "") + $ntp = ($dhcp_server.'ntp-server1' -replace "0.0.0.0", "") + ($dhcp_server.'ntp-server2' -replace "0.0.0.0", "") + ($dhcp_server.'ntp-server3' -replace "0.0.0.0", "") + ($dhcp_server.'ntp-server4' -replace "0.0.0.0", "") + $OutObj = [pscustomobject]@{ + "id" = $dhcp_server.id + "Status" = $dhcp_server.status + "Lease Time" = $dhcp_server.'lease-time' + "Interface" = $dhcp_server.interface + "Start IP" = $dhcp_server.'ip-range'.'start-ip' + "End IP" = $dhcp_server.'ip-range'.'end-ip' + "Netmask" = $dhcp_server.netmask + "Gateway" = $dhcp_server.'default-gateway' + "DNS" = $dns + "Domain" = $dhcp_server.domain + "NTP" = $ntp + } + + $TableParams = @{ + Name = "DHCP $($dhcp_server.id) - $($dhcp_server.interface)" + List = $true + ColumnWidths = 25, 75 + } + + if ($Report.ShowTableCaptions) { + $TableParams['Caption'] = "- $($TableParams.Name)" + } + + $OutObj | Table @TableParams + } + } + + #DHCP Server Reservation + if ($dhcp_servers.'reserved_address') { + Section -Style NOTOCHeading4 -ExcludeFromTOC "DHCP Server Reserved Address" { + $OutObj = @() + foreach ($reserved_address in ($dhcp_servers.'reserved-address')) { + $OutObj += [pscustomobject]@{ + "id" = $reserved_address.id + "IP" = $reserved_address.ip + "MAC" = $reserved_address.mac + "Action" = $reserved_address.action + } + } + + $TableParams = @{ + Name = "DHCP Server Reserved Address" + List = $false + ColumnWidths = 5, 35, 35, 25 + } + + if ($Report.ShowTableCaptions) { + $TableParams['Caption'] = "- $($TableParams.Name)" + } + + $OutObj | Table @TableParams + } + } + + #DHCP Leases (from Monitoring) => no yet Get-FGTMonitorDHCP cmdlet on PowerFGT... + $dhcp_leases = (Invoke-FGTRestMethod -uri api/v2/monitor/system/dhcp).results + + if ($dhcp_leases) { + Section -Style NOTOCHeading4 -ExcludeFromTOC "DHCP Leases" { + $OutObj = @() + foreach ($dhcp_lease in $dhcp_leases) { + $OutObj += [pscustomobject]@{ + "IP" = $dhcp_lease.ip + "MAC" = $dhcp_lease.mac + "Hostname" = $dhcp_lease.hostname + "Status" = $dhcp_lease.status + "Reserved" = $dhcp_lease.reserved + "Expire Time" = ( Get-Date -UnixTimeSeconds $dhcp_lease.expire_time) + } + } + + $TableParams = @{ + Name = "DHCP Server Reserved Address" + List = $false + ColumnWidths = 19, 19, 24, 8, 11, 18 + } + + if ($Report.ShowTableCaptions) { + $TableParams['Caption'] = "- $($TableParams.Name)" + } + + $OutObj | Table @TableParams + } + } + + } + + } + # Fetch HA Configuration $haConfig = Get-FGTSystemHA $haPeers = Get-FGTMonitorSystemHAPeer