v0.9.12#247
Conversation
…rADSite, and Get-AbrADTrust scripts for consistency. Update Invoke-AsBuiltReport.Microsoft.AD to use Write-AbrPSObject for improved output handling.
- Replace [System.Collections.ArrayList] with [System.Collections.Generic.List[object]]
across 60+ files (168 instances), eliminating boxing overhead and non-generic usage
- Remove unnecessary | Out-Null from .Add() calls since Generic List.Add() returns void
- Add [CmdletBinding()] to 6 functions missing it: ConvertTo-ADCanonicalName,
ConvertTo-ADObjectName, Get-ADExchangeServer, Get-ADObjectSearch,
Invoke-CommandWithTimeout, Invoke-DcDiag
- Normalize [cmdletBinding()] → [CmdletBinding()] casing (Get-WinADLastBackup)
- Update [OutputType([System.Collections.ArrayList])] → [OutputType([System.Collections.Generic.List[object]])]
in 6 section info functions
- Replace catch { Out-Null } with catch { $null } for correct suppression semantics
- Replace Write-Host with Write-PScriboMessage in Private functions:
Get-AbrDomainSection, Get-AbrDNSSection, Show-AbrDebugExecutionTime
- Remove redundant Write-Host execution-time block from Get-AbrADCAAIA
(already handled by Show-AbrDebugExecutionTime)
- Clean up boolean comparisons: replace -eq $true/-eq $false/-ne $true with
direct boolean expressions in Get-AbrADSecurityAssessment, Get-AbrADDomainObject,
Get-WinADForestDetail, Get-WinADDuplicateSPN, Get-AbrDiagCertificateAuthority,
Get-AbrADDFSHealth
- Replace string concatenation with + with string interpolation in
Get-RequiredModule, Get-AbrADKerberosAudit, Get-AbrADDCRoleFeature, Get-AbrADDFSHealth
- Add -PathType Container/Leaf to all Test-Path calls in New-AbrADDiagram,
Get-AbrDiagrammer, Get-AbrADGPO, Get-AbrADSite
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ction for improved logging and PowerShell best practices - Updated Get-AbrADReportBrief to include company information (name, contact, email) in the report overview. - Changed the collection of domain and report scope information to use [System.Collections.Generic.List[object]] instead of [System.Collections.ArrayList]. - Replaced Write-PScriboMessage with Write-Host for logging domain collection messages in Get-AbrDNSSection and Get-AbrDomainSection for consistency.
…sistency; update module dependencies in Invoke-AsBuiltReport.Microsoft.AD.ps1
…sing a default status value
…sion requirement to 7.4 - Updated PowerShell module version in AsBuiltReport.Microsoft.AD.psd1 to 7.4. - Incremented version number to 0.9.12 in multiple scripts for consistency. - Updated version notes in scripts to reflect the new version.
…prove maintainability.
…tionality with new icons
…ation - Introduced Get-AbrADReplicationInfo function to gather Active Directory replication details and build a diagram using Psgraph. - Introduced Get-AbrADSitesInfo function to extract and visualize Active Directory sites information. - Updated Get-AbrDiagReplication to utilize the new Get-AbrADReplicationInfo function for improved replication data handling. - Enhanced diagram generation in Get-AbrADForest, Get-AbrADSite, Get-AbrADTrust, and Get-AbrDomainSection functions with better aspect ratio handling and page breaks. - Commented out the Get-AbrADDCDiag call in Get-AbrDomainSection for potential future use.
…omain diagnostics
… and module structure
- Deleted unused functions: Get-AbrADCARoot, Get-AbrADCASecurity, Get-AbrADCASubordinate, Get-AbrADCASummary, Get-AbrADCATemplate, Get-AbrPKISection. - Updated Get-AbrADDFSHealth to include 'Offline' in replication status. - Removed references to the PSPKI module from Invoke-AsBuiltReport.Microsoft.AD. - Updated CHANGELOG.md to reflect the removal of functions and module upgrades. - Updated README.md to specify PowerShell 7.4+ as the minimum requirement.
There was a problem hiding this comment.
PSScriptAnalyzer found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
There was a problem hiding this comment.
Pull request overview
Release v0.9.12 updates the AsBuiltReport.Microsoft.AD module with new AD reporting capabilities (incl. authentication policy/silo reporting and replication diagramming), removes the non-functional PKI section, and refactors parts of the internal tooling/report pipeline to align with updated module structure and PowerShell 7.4+ requirements.
Changes:
- Adds new tool/helper functions and refactors many report generators to use
List[object]instead ofArrayList, plus additional CmdletBinding/logging adjustments. - Introduces/updates diagramming assets and a new replication diagram, and updates diagram path validation/icon handling.
- Updates documentation, tests, changelog, manifest/config defaults, and CI workflow to reflect v0.9.12 (and removal of PSPKI install).
Reviewed changes
Copilot reviewed 87 out of 117 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| Todo.md | Updates project TODO list item. |
| Tests/LocalizationData.Tests.ps1 | Updates localization test paths for new module layout. |
| README.md | Updates stated minimum PowerShell version (7.4+). |
| CHANGELOG.md | Finalizes v0.9.12 changelog date and entries. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Test-WinRM.ps1 | Adds WinRM test helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Test-ComputerPort.ps1 | Adds TCP/UDP port testing helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Show-AbrDebugExecutionTime.ps1 | Switches execution-time output to PScribo logging and adjusts catch blocks. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Invoke-CommandWithTimeout.ps1 | Adds [CmdletBinding()] to timeout wrapper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-WinADLastBackup.ps1 | Normalizes CmdletBinding casing. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-WinADForestDetail.ps1 | Refines RODC filtering and removes stray output. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-WinADDuplicateSPN.ps1 | Simplifies boolean checks. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-WinADDuplicateObject.ps1 | Adjusts catch blocks to avoid Out-Null. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-WinADDFSHealth.ps1 | Normalizes CmdletBinding casing. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ValidPSSession.ps1 | Version bump and removes Out-Null from .Add() calls. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ValidDCfromDomain.ps1 | Adds helper to pick a reachable DC for a domain. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ValidCIMSession.ps1 | Version bump and removes Out-Null from .Add() calls. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-RequiredModule.ps1 | Updates version and version-string formatting. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-RequiredFeature.ps1 | Version bump. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-DCWinRMState.ps1 | Removes Out-Null from .Add() calls. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ComputerSplit.ps1 | Adds helper to split local vs remote computer targets. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ComputerADDomain.ps1 | Adds helper to get current domain via .NET. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-CimData.ps1 | Adds CIM data retrieval helper for local/remote scenarios. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ADObjectSearch.ps1 | Adds CmdletBinding and refactors to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-ADObjectList.ps1 | Refactors filter/object collection to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Copy-DictionaryManual.ps1 | Adds dictionary deep-clone helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-TextYN.ps1 | Adds boolean-to-Yes/No conversion helper using translations. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-OperatingSystem.ps1 | Adds OS/version normalization helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-HashToYN.ps1 | Adds hashtable-to-Yes/No conversion helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-FileSizeString.ps1 | Adds file-size formatting helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-EmptyToFiller.ps1 | Adds empty-to-filler conversion helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-ADObjectName.ps1 | Adds CmdletBinding and refactors to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertTo-ADCanonicalName.ps1 | Adds CmdletBinding and refactors to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/ConvertFrom-DistinguishedName.ps1 | Adds DN parsing/conversion helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Convert-TimeToDay.ps1 | Adjusts catch behavior. |
| AsBuiltReport.Microsoft.AD/Src/Private/Tools/Convert-IpAddressToMaskLength.ps1 | Adds subnet mask length conversion helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Invoke-DcDiag.ps1 | Adds CmdletBinding and version bump. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-ADExchangeServer.ps1 | Refactors role list collection to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrForestSection.ps1 | Version bump. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrDomainSection.ps1 | Version bump and adjusts domain controller sub-sections (incl. dcdiag call change). |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrDNSSection.ps1 | Version bump and tweaks host output formatting. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrDHCPinAD.ps1 | Refactors collections to List[object] and updates catches. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADTrust.ps1 | Refactors collections to List[object] and updates diagram aspect ratio helper usage. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADSitesInventoryInfo.ps1 | Refactors to List[object] and updates OutputType. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADSiteReplication.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADSecurityAssessment.ps1 | Refactors collections to List[object] and simplifies boolean filters. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADSCCM.ps1 | Refactors collections to List[object] and adjusts catches. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADReportBrief.ps1 | Adds company info in brief and removes CA scope entry; refactors to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADOU.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADKerberosAudit.ps1 | Refactors collections to List[object] and adjusts SID string construction. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADInfrastructureService.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADHardening.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADFSMO.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADForest.ps1 | Refactors collections to List[object] and updates diagram aspect ratio helper usage. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADExchange.ps1 | Refactors collections to List[object] and adjusts catches. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDuplicateSPN.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDuplicateObject.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDomainLastBackup.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDomain.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDNSZone.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDNSInfrastructure.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDFSHealth.ps1 | Refactors collections to List[object] and fixes Sysvol table name formatting. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDCRoleFeature.ps1 | Refactors collections to List[object] and adjusts string concatenation. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADDCDiag.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrADAuthenticationPolicy.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-PieChart.ps1 | Removes unused pie chart helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-ColumnChart.ps1 | Removes unused column chart helper. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrPKISection.ps1 | Removes PKI section orchestrator. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCATemplate.ps1 | Removes CA template reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCASummary.ps1 | Removes CA summary reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCASubordinate.ps1 | Removes subordinate CA reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCASecurity.ps1 | Removes CA security reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCARoot.ps1 | Removes root CA reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCAKeyRecoveryAgent.ps1 | Removes CA KRA reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCACryptographyConfig.ps1 | Removes CA crypto config reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCACRLSetting.ps1 | Removes CA CRL settings reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Get-AbrADCAAIA.ps1 | Removes CA AIA reporting function. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/New-AbrADDiagram.ps1 | Updates diagram version and strengthens path validation; adjusts icon pathing. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Images.ps1 | Adds centralized image filename map. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/icons/Forrest_Root.png | Adds diagram icon asset. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/icons/DomainController.png | Adds diagram icon asset. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/icons/DMAD_Logo.png | Adds diagram icon asset. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/icons/ADDomain.png | Adds diagram icon asset. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagTrust.ps1 | Version bump. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagSiteInventory.ps1 | Refactors collections to List[object]. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagSite.ps1 | Version bump. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagReplication.ps1 | Adds/updates replication diagram rendering and localized legend text. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagrammer.ps1 | Refactors diagram type collection and strengthens export path check. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagForest.ps1 | Version bump. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrDiagCertificateAuthority.ps1 | Simplifies boolean checks for CA grouping. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrADTrustInfo.ps1 | Refactors to List[object] and updates OutputType. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrADSitesInfo.ps1 | Refactors to List[object] and updates OutputType. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrADReplicationInfo.ps1 | Refactors to List[object] and simplifies derived fields. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrADForestInfo.ps1 | Refactors to List[object] and updates OutputType. |
| AsBuiltReport.Microsoft.AD/Src/Private/Diagram/Get-AbrADCaInfo.ps1 | Refactors to List[object] and updates OutputType. |
| AsBuiltReport.Microsoft.AD/AsBuiltReport.Microsoft.AD.psm1 | Updates dot-sourcing/export logic for new subfolder structure. |
| AsBuiltReport.Microsoft.AD/AsBuiltReport.Microsoft.AD.psd1 | Bumps module version, enforces PS 7.4, removes PSPKI dependency, updates diagram module version. |
| AsBuiltReport.Microsoft.AD/AsBuiltReport.Microsoft.AD.json | Adds default language and removes CA InfoLevel. |
| .github/workflows/Release.yml | Removes PSPKI install step and keeps required module installs. |
Comments suppressed due to low confidence (2)
AsBuiltReport.Microsoft.AD/Src/Private/Tools/Get-RequiredModule.ps1:38
$RequiredModulecan be$nullwhen the module isn't installed, but the code immediately dereferences$RequiredModule.Version.*, which will throw before the intended "required" error message. Add an explicit null check for$RequiredModule(or check.Count) before building$ModuleVersion.
AsBuiltReport.Microsoft.AD/Src/Private/Report/Get-AbrDomainSection.ps1:83Get-AbrADDCDiaghas been commented out, which prevents DCDiag results from ever being collected/rendered even when$HealthCheck.DomainController.Diagnosticis enabled. If this is temporary, gate it behind an option/InfoLevel and keep the call active; otherwise update the health check/report logic (and release notes) to reflect the removal.
| @@ -1 +1 @@ | |||
| - [x] Fix dcdiag section | |||
| - [] Add AS-Rep Roasting | |||
There was a problem hiding this comment.
Todo item formatting is not valid Markdown task list syntax (currently - []). Use the standard checkbox format (- [ ] or - [x]) so it renders correctly in GitHub and supports task list tracking.
[0.9.12] - 2026-04-02
🧰 Added
Get-AbrADAuthenticationPolicy)🔃 Changed
0.9.120.3.04.4.0and readability across various best practice descriptions related to Active Directory configurations
Improve localization strings for English and Spanish, and handle missing infrastructure scenarios in Exchange, SCCM, and DHCP sections
🐛 Fixed
❌ Removed