Public/FTLInformation/Get-PiHoleLogWebserver.ps1
|
function Get-PiHoleLogWebserver { <# .SYNOPSIS Get webserver log content .DESCRIPTION Request content from the log of the embedded CivetWeb HTTP server. Every response includes a NextID; pass it back as -NextID on your next call to only get lines added since then, making periodic polling for new log lines easy without checking for duplicates. .PARAMETER PiHoleServer The URL to the PiHole Server, for example "http://pihole.domain.com:8080", or "http://192.168.1.100" .PARAMETER Password The API Password you generated from your PiHole server .PARAMETER NextID Only return log lines added after this ID (returned as NextID on a previous call). Omit to get the full available log .PARAMETER IgnoreSsl Set to $true to skip SSL certificate validation .PARAMETER RawOutput This will dump the response instead of the formatted object .EXAMPLE Get-PiHoleLogWebserver -PiHoleServer "http://pihole.domain.com:8080" -Password "your-app-password" #> [CmdletBinding(HelpUri = 'https://ftl.pi-hole.net/master/docs/#get-/logs/webserver')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "Password")] param ( [Parameter(Mandatory = $true)] [System.URI]$PiHoleServer, [Parameter(Mandatory = $true)] [string]$Password, [Nullable[int]]$NextID, [bool]$IgnoreSsl = $false, [bool]$RawOutput = $false ) try { $Sid = Request-PiHoleAuth -PiHoleServer $PiHoleServer -Password $Password -IgnoreSsl $IgnoreSsl $Uri = "$($PiHoleServer.OriginalString)/api/logs/webserver" if ($PSBoundParameters.ContainsKey('NextID')) { $Uri += "?nextID=$NextID" } $Params = @{ Headers = @{sid = $($Sid) } Uri = $Uri Method = "Get" SkipCertificateCheck = $IgnoreSsl ContentType = "application/json" } $Response = Invoke-RestMethod @Params if ($RawOutput) { Write-Output $Response } else { $Log = foreach ($Item in $Response.log) { [PSCustomObject]@{ Timestamp = (Convert-PiHoleUnixTimeToLocalTime -UnixTime $Item.timestamp).LocalTime Message = $Item.message Priority = $Item.prio } } $Object = [PSCustomObject]@{ Log = $Log NextID = $Response.nextID Pid = $Response.pid File = $Response.file } Write-Output $Object } } catch { Write-Error -Message $_.Exception.Message } finally { if ($Sid) { Remove-PiHoleCurrentAuthSession -PiHoleServer $PiHoleServer -Sid $Sid -IgnoreSsl $IgnoreSsl } } } |