Public/Helper/New-CWMDebugReport.ps1
function New-CWMDebugReport { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSShouldProcess', '', Justification = 'No impact')] [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( $Hash = $true ) if (!$script:CWMServerConnection) { $ErrorMessage = @() $ErrorMessage += 'Not connected to a Manage server.' $ErrorMessage += '--> $CWMServerConnection variable not found.' $ErrorMessage += "----> Run 'Connect-CWM' to initialize the connection before issuing other CWM cmdlets." Write-Error ($ErrorMessage | Out-String) return } try { $SysInfo = Get-CWMSystemInfo -ErrorAction Stop } catch { $SysInfo = 'error' } $DebugOutput = @{ CWMServerConnection = @{ Server = $script:CWMServerConnection.Clone() Headers = $script:CWMServerConnection.Headers.Clone() 'api-current-version' = $script:CWMServerConnection.'api-current-version' } ModuleVersion = (Get-Module 'ConnectWiseManageAPI').Version CWMSystemInfo = $SysInfo OS = [System.Environment]::OSVersion.Version PowerShell = $PSVersionTable.PSVersion Errors = $Error[0..4] } # Hash sensitive information so that it can be shared if ($Hash) { Function Get-StringHash([String]$String, $HashName = 'MD5') { $StringBuilder = New-Object System.Text.StringBuilder [System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String)) | ` ForEach-Object { [Void]$StringBuilder.Append($_.ToString('x2')) } $StringBuilder.ToString() } $DebugOutput.CWMServerConnection.Server = Get-StringHash $DebugOutput.CWMServerConnection.Server $DebugOutput.CWMServerConnection.Headers.Authorization = Get-StringHash $DebugOutput.CWMServerConnection.Headers.Authorization $DebugOutput.CWMServerConnection.Headers.ClientID = Get-StringHash $DebugOutput.CWMServerConnection.Headers.ClientID } $DebugOutput | ConvertTo-Json -Depth 99 | Out-String } |