Merged
Conversation
## [2.0.0] - Unreleased ### Added - Modular architecture: each report section is now a dedicated private function (`Get-AbrVSphere*`) - Internationalization (i18n) support via `Language/` `.psd1` files (`en-US`, `en-GB`, `es-ES`, `fr-FR`, `de-DE`) - Pester test suite (`AsBuiltReport.VMware.vSphere.Tests.ps1`, `LocalizationData.Tests.ps1`, `Invoke-Tests.ps1`) - GitHub Actions Pester workflow (`.github/workflows/Pester.yml`) ### Changed - Complete module rewrite for improved maintainability and extensibility - Module source now uses nested folder structure (`AsBuiltReport.VMware.vSphere/`) - Requires `AsBuiltReport.Core` >= 1.6.2 - `CompatiblePSEditions` now explicitly declares `Desktop` and `Core` support
Convert VMware managed objects stored as PSCustomObject property values to plain strings (.Name or [string] cast) before passing to PScribo's Table cmdlet, preventing .NET's Dictionary<K,V>.Add() from throwing a duplicate-key exception when formatting TEXT output. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…123) - Guard against null LicenseAssignmentManager MoRef (Bug B) to prevent 'Index operation failed; the array index evaluated to null' crash - Replace broken reflection-based QueryAssignedLicenses call with direct method call and fix $_ out-of-scope bug in vCenter license path (Bug A) - Guard null/empty LicenseKey before masking in both VMHost and vCenter paths to avoid errors when no license is assigned (Bug C) - Wrap Get-License calls in try/catch in Get-AbrVSphereVMHostHardware and Get-AbrVSpherevCenter to prevent fatal propagation (Bug D) - Add LicenseError locale key to all five language files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a new NOTOCHeading5 subsection under each host's Hardware section displaying VID, DID, SVID, and SSID in lowercase hex for HCL validation. Uses PCI address mapping via Get-VMHostNetworkAdapter/Get-VMHostHba instead of VMkernelName (unpopulated on ESXi 8). Guards null PCI keys to handle software HBAs (iSCSI, software NVMe) without physical PCI addresses. Adds 7 new localisation keys to all 5 locale files (en-US, en-GB, es-ES, fr-FR, de-DE). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Guard Get-VsanDisk against a null VsanDiskGroup parameter, which occurs when an OSA cluster has no claimed disks. The cluster detail table now renders correctly; Disk Groups and Disks subsections are skipped when no disk groups exist. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace vpxd.certmgmt.certs.cn.* advanced settings reads with a direct TLS connection to port 443, returning the actual deployed certificate. Use SslStream with an explicit-parameter RemoteCertificateValidationCallback for reliable PS 5.1 and 7.x compatibility. Certificate status (VALID / EXPIRING_SOON / EXPIRING / EXPIRED) is computed from NotAfter vs the existing soft/hard threshold advanced settings. Fields removed: Country, Email, Locality, State, Organization, OrganizationUnit, Validity (VMCA template settings — not the live cert). Fields added: Subject, Issuer, ValidFrom, ValidTo, Thumbprint, CertStatus. All five locale files (en-US, en-GB, es-ES, fr-FR, de-DE) updated. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CompatiblePSEditions: Core only (Desktop removed) - PowerShellVersion minimum set to 7.4 per VMware PowerCLI requirement - PSEdition_Desktop tag removed from manifest - Pester: replace separate Desktop/Core assertions with a single 'Core only' check that also asserts Desktop is absent - README: add Broadcom PowerCLI Installation Guide link and PS 7.4 minimum requirement note - CHANGELOG: document as Changed (min version) and Removed (PS 5.1) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Move from .github/workflows/Dependabot.yml to .github/dependabot.yml. GitHub was parsing it as an Actions workflow (requiring on:/jobs:) instead of a Dependabot configuration file. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add ESXi Host TPM & Encryption section to Get-AbrVSphereVMHostSecurity - Reports TPM attestation status via ExtensionData.Config.TpmAttestation - Reports encryption mode, RequireSecureBoot, and RequireSignedVIBs via esxcli - Recovery keys sub-table gated behind ShowEncryptionKeys option (InfoLevel >= 3) - TpmAttestation healthcheck warns when TPM present but not attested - Add ShowEncryptionKeys option (default: false) to report JSON config - Add TpmAttestation healthcheck (default: true) to report JSON config - Add i18n keys to all 5 locale files (en-US, en-GB, es-ES, fr-FR, de-DE) - Update README.md options and healthcheck tables Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sub-functions (ClusterHA, ClusterProactiveHA, ClusterDRS, VMHostHardware, VMHostSystem, VMHostStorage, VMHostNetwork, VMHostSecurity) all share their parent's InfoLevel setting (Cluster or VMHost) rather than having their own dedicated JSON config key. Emitting "VMHost Network InfoLevel set to 3" implied a separate configurable setting that doesn't exist. InfoLevel messages are retained only in the 10 top-level functions that correspond directly to InfoLevel keys in the report JSON config. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
On ESXi 8.x, VMkernelName is no longer populated in the output of esxcli hardware.pci.list, causing the Where-Object filter in Get-PciDeviceDetail to return no devices and the section to be silently suppressed. Fix by adding an optional -VMHost parameter and building a PCI address to VMkernel name lookup map via the PowerCLI API (same pattern already used by the PCI Devices and I/O Device Identifiers sections). The VMkernelName field is used directly when present (ESXi < 8), with the address map as fallback (ESXi 8+). Also fix a secondary bug where $firmwareVersion and $driverVib were not reset between loop iterations, causing values from a previous device to bleed into the next device's output. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…IOC, VM Swap Location, and DSCluster SDRS improvements - Add Tags reporting to VMHost, Datastore, DSCluster, ResourcePool, Network (VDS), and VM sections - Add ESXi Host Certificate section (subject, issuer, validity dates, SHA-256 thumbprint) - Add VM Swap File Location section using Get-View with camelCase property paths - Expand Syslog section to include log directory, rotation count, and log size via esxcli - Add vSAN Services section (Performance, File, iSCSI, Deduplication, Encryption, Health) for both OSA and ESA code paths - Add VDS LACP section using ExtensionData instead of unavailable Get-VDLacpPolicy cmdlet - Add VDS NetFlow section and NIOC Resource Pools section - Fix NIOC pool limit integer comparison (was string '-1', now integer -1) - Add Cluster LCM and Cluster VUM as separate sub-section functions - Fix DSCluster SDRS rules, space/IO load balance config reporting - Update all 5 locale files (en-US, en-GB, es-ES, fr-FR, de-DE) with new keys Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Backup Schedule table shows status (Activated/Deactivated), recurrence with appliance timezone, backup location, data components (mapped from API part names to human-readable labels), and retention count - Backup Job History table shows 10 most recent jobs via GET /api/appliance/recovery/backup/job/details; columns: location, type, status, data transferred, duration (HH:MM:SS), end time - Healthcheck: Warning if schedule deactivated, Critical if job failed - Requires vSphere 7.0+ REST API; renders informational paragraph on older versions - Add Backup healthcheck key to AsBuiltReport.VMware.vSphere.json - Update all 5 locale files with new backup keys Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…to vCenter report - Add vCenter Server Backup Settings section (InfoLevel 3+) with Backup Schedule and Backup Job History subsections via REST API - Add Certificate healthcheck (Critical: EXPIRED/EXPIRING, Warning: EXPIRING_SOON) - Add Backup healthcheck (Warning: schedule deactivated, Critical: job failed) - Update report JSON with Certificate and Backup healthcheck defaults - Update README vCenter healthcheck table with Certificate and Backup rows - Update CHANGELOG with Certificate healthcheck entry - Add pre-release support to Release.yml (manifest Prerelease string, conditional tweet/bsky jobs) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…howTags options - Add vCenter resource/inventory summary tables at InfoLevel 1+ (#30) - Add Content Libraries section to vCenter report (InfoLevel 3+) - Add ShowRoles, ShowAlarms (#122), and ShowTags options - Gate tag reporting across all sections with ShowTags option - Use Convert-DataSize for memory/storage and library item sizes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
PSScriptAnalyzer results: Errors: [0], Warnings: [55], Information: [1]
|
Change dorny/test-reporter from java-junit to dotnet-nunit to match the NUnitXml format generated by Invoke-Tests.ps1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
PSScriptAnalyzer results: Errors: [0], Warnings: [55], Information: [1]
|
dorny/test-reporter@v1 only supports java-junit (JUnit XML) format; switch Invoke-Tests.ps1 output from NUnitXml to JUnitXml to match Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
PSScriptAnalyzer results: Errors: [0], Warnings: [55], Information: [1]
|
- Add matrix strategy across windows-latest, ubuntu-latest, macos-latest - Replace dorny/test-reporter with actions/upload-artifact (avoids XML format parsing issues; test results stored as downloadable artifacts) - Add Codecov code coverage upload (Windows only) - Add workflow_dispatch for manual runs - Revert output format to NUnitXml (JUnitXml change reverted) - Split module installs into separate named steps - Always use pwsh shell (PS5.1 not supported by this module) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
PSScriptAnalyzer results: Errors: [0], Warnings: [55], Information: [1]
|
Welcome to Codecov 🎉Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests. ℹ️ You can also turn on project coverage checks and project coverage reporting on Pull Request comment Thanks for integrating Codecov - We've got you covered ☂️ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces v2.0.0 — a complete rewrite of the module for improved maintainability, extensibility, and correctness.
Architecture
following a consistent begin/process/end pattern, replacing the single monolithic
Invoke-AsBuiltReport.VMware.vSphere.ps1 script
(AsBuiltReport.VMware.vSphere/) consistent with other AsBuiltReport modules
Internationalisation
de-DE)
localised
New sections and features
Storage free/used/total; VM and Host state counts)
(Include Summary InfoLevel 1 information #30)
healthcheck via REST API (vSphere 7.0+)
detail and items table at InfoLevel 4+
(option to remove "roles" from report #122), and
ShowTags options to gate optional sections
(Adding hardware identifier #126)
TpmAttestation healthcheck
(Record the TPM State of each node and if encryption enabled, backup the keys of each node into the report #101)
count, and log size
hardware support manager, and per-host compliance
configuration subsections
Encryption, Historical Health, Health Check)
Pool, VM, and VMHost sections
Bug fixes
(vSphere 8.0 U1c Build 22088981 - New-AsBuiltReport : Cannot bind argument to parameter 'Rows' because it is an empty collection. #111,
ESXi8 section PCI Devices Drivers & Firmware missing #127)
of the deployed TLS certificate
(Certificate Check points to wrong certificate #88)
claimed
(vSAN 8 ESA - "VsanDiskGroup" is empty #113)
(Insufficient user privileges to report ESXi host licensing #123)
Testing
structure, PSScriptAnalyzer), LocalizationData.Tests.ps1 (locale key consistency
across all 5 languages), Invoke-Tests.ps1
Related Issue
Closes #30,
#88,
#101,
#111,
#113,
#122,
#123,
#126,
#127
Motivation and Context
The original module was a single ~5,000-line script that had become difficult to
maintain, extend, and test. The v2.0.0 rewrite splits the report into discrete,
independently testable functions, adds multilingual output, and targets vSphere
8.0 exclusively — allowing several workarounds for older API behaviours to be
removed.
How Has This Been Tested?
consistency validated across all 5 language files
all sections
Install-Module AsBuiltReport.VMware.vSphere -AllowPrerelease
Screenshots (if appropriate):
Types of changes
Checklist: