AzureScout
2.8.0
Minimum PowerShell version
7.0
Installation Options
Owners
Copyright
(c) 2026 Hybrid Cloud Solutions. All rights reserved.
Package Details
Author(s)
- Kristopher Turner
Tags
Azure AzureScout Discovery Inventory Assessment CAF WAF WellArchitected CloudAdoptionFramework LandingZone Governance AZSC EntraID Resources ARM Graph Reporting Excel PowerBI
Functions
Start-AZSCAdvisoryJob Start-AZSCPolicyJob Start-AZSCSecCenterJob Start-AZSCSubscriptionJob Wait-AZSCJob Build-AZSCDiagramSubnet Set-AZSCDiagramFile Start-AZSCDiagramJob Start-AZSCDiagramNetwork Start-AZSCDiagramOrganization Start-AZSCDiagramSubscription Start-AZSCDrawIODiagram Invoke-AzureScout Test-AZSCPermissions Start-AZSCWizard Invoke-ScoutAssessment Test-ScoutPermission Invoke-ScoutPipeline Get-ScoutInventoryDrift Get-ScoutCostAnomaly Get-ScoutIacGap Import-ScoutConfig Export-ScoutConfig
PSEditions
Dependencies
This module has no dependencies.
Release Notes
v2.8.0 -- Collection actually happens once. A default assessment collect now issues 4 Azure Resource Graph queries instead of 35 (AB#5648, Epic AB#5638). v2.7.0 shipped the single-pass collection functions but nothing called them -- outside tests the only reference to any of them was a comment -- so the round-trip count was unchanged. They are now the real path. Both numbers were re-derived by counting invocations against a stub in place of Search-AzGraph, and both are pinned by hard count assertions in tests/Collect.SinglePassInversion.Tests.ps1, because a query count with no test regresses silently within a release. It is 4 rather than 1 for stated reasons: three raw tables (resourcecontainers, resources, networkresources) plus sqlDefenderPricing, which reads SecurityResources and genuinely cannot be served from inventory. The inventory extraction path stays at 8 queries because those are eight DISTINCT ARG tables -- resourcecontainers, resources, networkresources, SupportResources, recoveryservicesresources, desktopvirtualizationresources, advisorresources and retirements -- not filters over one table; merging them would drop datasets. What changed there is ownership rather than count: one paging implementation instead of two. Modules/Private/Extraction/Invoke-AZTIInventoryLoop.ps1 -- the legacy paging, batching and retry engine -- is DELETED, and a test asserts both that the file is absent and that no AST command node anywhere in Modules/ or src/ still calls it. Start-AZTIGraphExtraction is reduced to a shim that builds no query text and issues no ARG call; its resource-group, tag and management-group filter clauses moved into Get-ScoutRawInventory reproducing the legacy if/elseif precedence exactly, each with its own test. FIXED, and it would have shipped as a blank report section invisible to 2144 passing tests: the raw pass omits the tags column unless asked, while the collect contract aggregates its top-level tags key from subscriptions[*].tags, so the inverted path returned an empty tags array for every estate. The internal raw call now requests tags, with a regression test. STATED TRADE-OFFS, not yet measured: the raw pass carries the full properties bag where the typed queries carried narrow projections, so on a large estate the number of 1000-row pages can rise even as the query count falls; and -Categories no longer reduces what is fetched, only what is shaped. Use -Source TypedQueries as the escape hatch for a narrow single-category collect -- that path is unchanged at 35 queries and remains fully supported. STILL NOT DONE, deliberately not claimed: the non-ARG half of AB#5648. Get-ScoutApiResources, Get-ScoutVmQuotas, Get-ScoutVmSkuDetails and Get-ScoutCostInventory remain dead code, and a live run still uses the v1 implementations for ARM REST resources, VM quota and SKU lookups, and Cost Management. The round-trip numbers above say nothing about those. Live-verified against a real tenant: 5:11 runtime, 124 resources, 438 Excel rows, 42 worksheets, 452 security advisories, zero leftover background jobs, and one collector failing (Management/ManagementGroups, an environment and permissions issue rather than a code defect). v2.7.0 -- Second phase of the engine rebuild (Epic AB#5638): the reporting layer moves out of Modules/, Excel COM is gone entirely, the first collector category becomes declarative data, and a single-pass collection layer lands. REPORTING (AB#5662): all 26 inventory report renderers moved from Modules/Private/Reporting/ to src/report/renderers/inventory/ and src/report/renderers/inventory/style/, renamed so the file name matches the function it defines -- the legacy AZTI-file / AZSC-function mismatch is gone. Function names are unchanged, so no call site changed behaviour. Build-AZTIExcelComObject.ps1 is DELETED: chart styling now runs on EPPlus/ImportExcel only, through the new Build-AZSCExcelChartStyle. Excel COM was why -Lite defaulted to true and why the module surfaced a raw 0x80040154 REGDB_E_CLASSNOTREG on every machine and CI runner without Excel installed; no live COM call remains anywhere in src/, Modules/ or tests/. Verified against a live tenant: a 42-worksheet workbook built with no Excel present, SecurityCenter carrying 489 rows. NOTE: the EPPlus chart styling is an approximation of the former COM styling, documented in the function .NOTES. DECLARATIVE COLLECTORS (AB#5656): the 13 Databases collectors are now data -- manifests/collectors/Databases/*.psd1 -- interpreted at runtime by Invoke-ScoutDeclarativeCollector, with Get-ScoutCollector extended to report HasDeclarativeDefinition and DefinitionPath rather than adding a second discovery mechanism. Each definition is pinned by an equivalence test that runs the original imperative collector and the declarative definition over the same input and compares the processed rows key-by-key and the written .xlsx cell-by-cell, under both -IncludeTags states. Writing that test found two defects in the interpreter that would have silently changed shipped reports: tag columns were appended rather than inserted, so every tagged worksheet came out with its last three columns reordered (all 13 collectors add their trailing column after the tag block); and ResourceTypes was applied as a membership test rather than a grouping, so RedisCache lost the ordering its original produced by concatenating redis then redisenterprise. Both are fixed, and a definition naming a column that does not exist is now a load-time error rather than a silent fallback. An AST audit of all 176 collectors ships as docs/design/collector-audit.md: 115 of the remaining 163 are mechanically convertible, 48 stay hand-written (29 make live cmdlet calls, 20 do cross-resource joins, 10 never filter $Resources, 2 are unimplemented). COLLECTION (AB#5639): src/collect/ gains Get-ScoutRawInventory, Get-ScoutApiResources, Get-ScoutCostInventory, Get-ScoutVmQuotas and Get-ScoutVmSkuDetails, plus an AST-derived resource-type map covering 128 ARM types, 17 cognitive-services kinds and the VM quota/SKU pseudo-types. One raw pass satisfies 34 of the 35 collect queries; sqlDefenderPricing reads SecurityResources and genuinely cannot be served from inventory. THIS IS CAPABILITY ONLY -- nothing in the product calls these functions yet, so the run still reaches Resource Graph as many times as it did in v2.6.0. Inverting the pipeline onto this layer is AB#5648 and is not in this release. Do not read this entry as "collection is now single-pass"; it is not. FIXED: an unbound [string[]] parameter is $null and @($null).Count is 1, not 0, so the subscription-resolution branch in Invoke-Collect gated on .Count -eq 0 never fired on the default path -- the subscription list was never derived from resourcecontainers and every later table degraded to one un-batched tenant-wide call with none of the documented per-batch isolation. The existing test passed either way because it asserted only the container count; the regression test now asserts the actual -Subscription argument. This is the same @($null).Count class that emptied the Excel loop in v2.6.0. KNOWN, UNCHANGED: Management/ManagementGroups fails on every live run with "missing mandatory parameters: GroupName" -- environment and permissions, not a code defect. RedisCache exports a blank Resource Group column and SQLMI a blank ActiveDirectoryOnlyAuthentication column, both blank in every shipped release; the declarative definitions reproduce them faithfully rather than diverge from the imperative path. Identity/IdentityProviders and Identity/SecurityDefaults are still written against a registration API that exists only as a test mock and have never produced a row. Full history for every earlier release is in CHANGELOG.md: https://github.com/thisismydemo/azure-scout/blob/main/CHANGELOG.md
FileList
- AzureScout.nuspec
- .mcp.json
- tests\Collect.RawInventory.Tests.ps1
- docs\.vitepress\config.ts
- docs\.vitepress\dist\vp-icons.css
- src\report\renderers\Export-JsonEvidence.ps1
- docs\.vitepress\dist\assets\permissions.md.BlwcmYUh.js
- action.yml
- tests\Collect.Resilience.Tests.ps1
- docs\design\arg-round-trips.md
- docs\design\decisions\declarative-collectors.md
- src\report\renderers\Export-Pdf.ps1
- docs\.vitepress\dist\assets\permissions.md.BlwcmYUh.lean.js
- AGENTS.md
- tests\Collect.SinglePassInversion.Tests.ps1
- docs\design\assessment-registry.md
- docs\design\decisions\deterministic-pipeline.md
- src\report\renderers\Export-PowerBi.ps1
- docs\.vitepress\dist\assets\prerequisites.md.CPumnyyj.js
- tests\Collect.VmQuotaSku.Tests.ps1
- docs\design\collector-audit.md
- docs\design\decisions\pptx-renderer.md
- src\report\renderers\Export-Pptx.ps1
- docs\.vitepress\dist\assets\prerequisites.md.CPumnyyj.lean.js
- AzureScout.psd1
- tests\CollectorCollapse.Tests.ps1
- docs\design\enhancement-spec.md
- manifests\collectors\Databases\CosmosDB.psd1
- src\report\renderers\Export-React.ps1
- docs\.vitepress\dist\assets\roadmap.md.Bo_E33gv.js
- AzureScout.psm1
- tests\CollectorStrictMode.Tests.ps1
- docs\design\master-plan.md
- manifests\collectors\Databases\MariaDB.psd1
- src\report\renderers\Export-Word.ps1
- docs\.vitepress\dist\assets\roadmap.md.Bo_E33gv.lean.js
- CHANGELOG.md
- tests\Compute.Module.Tests.ps1
- docs\design\task-list.md
- manifests\collectors\Databases\MySQL.psd1
- src\report\templates\report-react.html.template
- docs\.vitepress\dist\assets\style.Dqn0XUs4.css
- CLAUDE.md
- tests\Connect-AZSCLoginSession.Tests.ps1
- docs\images\azurescout-banner.svg
- manifests\collectors\Databases\MySQLflexible.psd1
- src\report\templates\report.html.template
- docs\.vitepress\dist\assets\testing.md.C87polMA.js
- CODE_OF_CONDUCT.md
- tests\Containers.Module.Tests.ps1
- docs\images\azurescout-icon.svg
- manifests\collectors\Databases\POSTGRE.psd1
- tests\test-output\pptx-debug2\assessment_deck.pptx
- docs\.vitepress\dist\assets\testing.md.C87polMA.lean.js
- CONTRIBUTING.md
- tests\CostInventoryResilience.Tests.ps1
- src\analyze\Get-ScoutCostAnomaly.ps1
- manifests\collectors\Databases\POSTGREFlexible.psd1
- tests\test-output\word-forcefail\assessment_report.docx
- docs\.vitepress\dist\assets\troubleshooting.md.SFFm5ZO8.js
- CREDITS.md
- tests\Databases.Module.Tests.ps1
- src\analyze\Get-ScoutIacGap.ps1
- manifests\collectors\Databases\RedisCache.psd1
- docs\.vitepress\dist\assets\app.CwWebgDC.js
- docs\.vitepress\dist\assets\troubleshooting.md.SFFm5ZO8.lean.js
- LICENSE
- tests\DeclarativeCollectorEquivalence.Tests.ps1
- src\assess\Compare-Benchmark.ps1
- manifests\collectors\Databases\SQLDB.psd1
- docs\.vitepress\dist\assets\ari-differences.md.Cb_Th-cn.js
- docs\.vitepress\dist\assets\usage.md.DmIvj64a.js
- package-lock.json
- tests\DeterministicPipeline.Tests.ps1
- src\assess\Export-ScoutConfig.ps1
- manifests\collectors\Databases\SQLMI.psd1
- docs\.vitepress\dist\assets\ari-differences.md.Cb_Th-cn.lean.js
- docs\.vitepress\dist\assets\usage.md.DmIvj64a.lean.js
- package.json
- tests\DevOps.Module.Tests.ps1
- src\assess\Import-ScoutConfig.ps1
- manifests\collectors\Databases\SQLMIDB.psd1
- docs\.vitepress\dist\assets\arm-modules.md.C_qcXDJs.js
- docs\.vitepress\dist\assets\validation-matrix.md.BQkM45QU.js
- README.md
- tests\Diagram.Tests.ps1
- src\assess\Invoke-Assessment.ps1
- manifests\collectors\Databases\SQLPOOL.psd1
- docs\.vitepress\dist\assets\arm-modules.md.C_qcXDJs.lean.js
- docs\.vitepress\dist\assets\validation-matrix.md.BQkM45QU.lean.js
- RELEASES.md
- tests\DocsVersionSync.Tests.ps1
- src\assess\Test-ScoutPermission.ps1
- manifests\collectors\Databases\SQLSERVER.psd1
- docs\.vitepress\dist\assets\assessment-permissions.md.UbCl--yg.js
- docs\.vitepress\dist\design\assessment-registry.html
- Modules\Public\InventoryModules\Databases\RedisCache.ps1
- SECURITY.md
- tests\FixtureAnonymity.Tests.ps1
- src\collect\ConvertFrom-ScoutInventory.ps1
- manifests\collectors\Databases\SQLVM.psd1
- docs\.vitepress\dist\assets\assessment-permissions.md.UbCl--yg.lean.js
- docs\.vitepress\dist\design\enhancement-spec.html
- Modules\Public\InventoryModules\Databases\SQLDB.ps1
- SUPPORT.md
- tests\GetAZSCSafeProperty.Tests.ps1
- src\collect\Get-ScoutApiResources.ps1
- Modules\Private\Extraction\Get-AZTIAPIResources.ps1
- docs\.vitepress\dist\assets\assessment-prerequisites.md.BHwlMT3n.js
- docs\.vitepress\dist\design\master-plan.html
- Modules\Public\InventoryModules\Databases\SQLMI.ps1
- testResults.xml
- tests\GraphExtraction.StrictMode.Tests.ps1
- src\collect\Get-ScoutCostInventory.ps1
- Modules\Private\Extraction\Get-AZTICostInventory.ps1
- docs\.vitepress\dist\assets\assessment-prerequisites.md.BHwlMT3n.lean.js
- docs\.vitepress\dist\design\task-list.html
- Modules\Public\InventoryModules\Databases\SQLMIDB.ps1
- .ado\azure-pipelines.yml
- tests\Hybrid.Module.Tests.ps1
- src\collect\Get-ScoutRawInventory.ps1
- Modules\Private\Extraction\Get-AZTIManagementGroups.ps1
- docs\.vitepress\dist\assets\assessment.md.CT5KGI9O.js
- Modules\Private\Extraction\ResourceDetails\Get-AZTIVMQuotas.ps1
- Modules\Public\InventoryModules\Databases\SQLPOOL.ps1
- .codex\config.toml
- tests\Identity.Module.Tests.ps1
- src\collect\Get-ScoutVmQuotas.ps1
- Modules\Private\Extraction\Get-AZTISubscriptions.ps1
- docs\.vitepress\dist\assets\assessment.md.CT5KGI9O.lean.js
- Modules\Private\Extraction\ResourceDetails\Get-AZTIVMSkuDetails.ps1
- Modules\Public\InventoryModules\Databases\SQLSERVER.ps1
- .github\CODEOWNERS
- tests\Integration.Module.Tests.ps1
- src\collect\Get-ScoutVmSkuDetails.ps1
- Modules\Private\Extraction\Start-AZTIDevOpsExtraction.ps1
- docs\.vitepress\dist\assets\authentication.md.UmOF430R.js
- Modules\Public\InventoryModules\AI\AIFoundryHubs.ps1
- Modules\Public\InventoryModules\Databases\SQLVM.ps1
- .github\copilot-instructions.md
- tests\Invoke-AZSCGraphRequest.Tests.ps1
- src\collect\Invoke-Collect.ps1
- Modules\Private\Extraction\Start-AZTIEntraExtraction.ps1
- docs\.vitepress\dist\assets\authentication.md.UmOF430R.lean.js
- Modules\Public\InventoryModules\AI\AIFoundryProjects.ps1
- Modules\Public\InventoryModules\Hybrid\ArcDataControllers.ps1
- config\scout.config.json
- tests\Invoke-AzureScout.Tests.ps1
- src\ingest\Import-AdvisorScores.ps1
- Modules\Private\Extraction\Start-AZTIGraphExtraction.ps1
- docs\.vitepress\dist\assets\automation.md.DsR73Kai.js
- Modules\Public\InventoryModules\AI\AppliedAIServices.ps1
- Modules\Public\InventoryModules\Hybrid\ArcExtensions.ps1
- docs\ari-differences.md
- tests\IoT.Module.Tests.ps1
- src\ingest\Import-AzGovViz.ps1
- Modules\Private\Main\Clear-AZTICacheFolder.ps1
- docs\.vitepress\dist\assets\automation.md.DsR73Kai.lean.js
- Modules\Public\InventoryModules\AI\AzureAI.ps1
- Modules\Public\InventoryModules\Hybrid\ArcGateways.ps1
- docs\arm-modules.md
- tests\Management.Module.Tests.ps1
- src\ingest\Import-Governance.ps1
- Modules\Private\Main\Clear-AZTIMemory.ps1
- docs\.vitepress\dist\assets\azure-devops.md.CgZWt8Se.js
- Modules\Public\InventoryModules\AI\BotServices.ps1
- Modules\Public\InventoryModules\Hybrid\ArcKubernetes.ps1
- docs\assessment-permissions.md
- tests\ModuleUpdate.Tests.ps1
- src\ingest\Invoke-ArgQueryPack.ps1
- Modules\Private\Main\Connect-AZTILoginSession.ps1
- docs\.vitepress\dist\assets\azure-devops.md.CgZWt8Se.lean.js
- Modules\Public\InventoryModules\AI\ComputerVision.ps1
- Modules\Public\InventoryModules\Hybrid\ArcResourceBridge.ps1
- docs\assessment-prerequisites.md
- tests\Monitor.Module.Tests.ps1
- src\pipeline\Get-ScoutCollector.ps1
- Modules\Private\Main\Get-AZSCSafeProperty.ps1
- docs\.vitepress\dist\assets\azurescout-banner.DJlfmmEw.svg
- Modules\Public\InventoryModules\AI\ContentModerator.ps1
- Modules\Public\InventoryModules\Hybrid\ArcServerOperationalData.ps1
- docs\assessment.md
- tests\Networking.Module.Tests.ps1
- src\pipeline\Get-ScoutCollectorDefinition.ps1
- Modules\Private\Main\Get-AZTICollectedValue.ps1
- docs\.vitepress\dist\assets\category-filtering.md.Dq9FDl_w.js
- Modules\Public\InventoryModules\AI\ContentSafety.ps1
- Modules\Public\InventoryModules\Hybrid\ARCServers.ps1
- docs\authentication.md
- tests\New-SyntheticSampleReport.ps1
- src\pipeline\Invoke-ScoutCollector.ps1
- Modules\Private\Main\Get-AZTIGraphToken.ps1
- docs\.vitepress\dist\assets\category-filtering.md.Dq9FDl_w.lean.js
- Modules\Public\InventoryModules\AI\CustomVision.ps1
- Modules\Public\InventoryModules\Hybrid\ArcSites.ps1
- docs\automation.md
- tests\OutputFormat.Tests.ps1
- src\pipeline\Invoke-ScoutDeclarativeCollector.ps1
- Modules\Private\Main\Get-AZTIUnsupportedData.ps1
- docs\.vitepress\dist\assets\category-reference.md.CZd97g45.js
- Modules\Public\InventoryModules\AI\FaceAPI.ps1
- Modules\Public\InventoryModules\Hybrid\ArcSQLManagedInstances.ps1
- docs\azure-devops.md
- tests\PermissionAudit.Tests.ps1
- src\pipeline\Invoke-ScoutProcessing.ps1
- Modules\Private\Main\Invoke-AZTIGraphRequest.ps1
- docs\.vitepress\dist\assets\category-reference.md.CZd97g45.lean.js
- Modules\Public\InventoryModules\AI\FormRecognizer.ps1
- Modules\Public\InventoryModules\Hybrid\ArcSQLServers.ps1
- docs\category-filtering.md
- tests\Pipeline.NonTerminatingErrors.Tests.ps1
- src\pipeline\Write-ScoutCacheFile.ps1
- Modules\Private\Main\Invoke-AZTIPermissionAudit.ps1
- docs\.vitepress\dist\assets\category-structure.md.6rzJgrck.js
- Modules\Public\InventoryModules\AI\HealthInsights.ps1
- Modules\Public\InventoryModules\Hybrid\Clusters.ps1
- docs\category-reference.md
- tests\Pipeline.Tests.ps1
- src\report\Export-Report.ps1
- Modules\Private\Main\Invoke-AZTISubscriptionContext.ps1
- docs\.vitepress\dist\assets\category-structure.md.6rzJgrck.lean.js
- Modules\Public\InventoryModules\AI\ImmersiveReader.ps1
- Modules\Public\InventoryModules\Hybrid\GalleryImages.ps1
- docs\category-structure.md
- tests\Private.Extraction.Tests.ps1
- src\report\Get-ScoutDrift.ps1
- Modules\Private\Main\Set-AZTIFolder.ps1
- docs\.vitepress\dist\assets\changelog.md.L2KaGTsV.js
- Modules\Public\InventoryModules\AI\MachineLearning.ps1
- Modules\Public\InventoryModules\Hybrid\LogicalNetworks.ps1
- docs\changelog.md
- tests\Private.Main.Tests.ps1
- src\report\Get-ScoutInventoryDrift.ps1
- Modules\Private\Main\Set-AZTIReportPath.ps1
- docs\.vitepress\dist\assets\changelog.md.L2KaGTsV.lean.js
- Modules\Public\InventoryModules\AI\MLComputes.ps1
- Modules\Public\InventoryModules\Hybrid\MarketplaceGalleryImages.ps1
- docs\contributing.md
- tests\Private.Processing.Tests.ps1
- tests\datadump\sample-collect.json
- Modules\Private\Main\Start-AZTIExtractionOrchestration.ps1
- docs\.vitepress\dist\assets\contributing.md.CK2QKaMZ.js
- Modules\Public\InventoryModules\AI\MLDatasets.ps1
- Modules\Public\InventoryModules\Hybrid\StorageContainers.ps1
- docs\coverage-table.md
- tests\Private.Reporting.Tests.ps1
- tests\datadump\sample-report.json
- Modules\Private\Main\Start-AZTIProcessOrchestration.ps1
- docs\.vitepress\dist\assets\contributing.md.CK2QKaMZ.lean.js
- Modules\Public\InventoryModules\AI\MLDatastores.ps1
- Modules\Public\InventoryModules\Hybrid\VirtualMachines.ps1
- docs\credits.md
- tests\Public.Functions.Tests.ps1
- tests\fixtures\captured-networkresources.json
- Modules\Private\Main\Start-AZTIReporOrchestration.ps1
- docs\.vitepress\dist\assets\coverage-table.md.Ihe0LJwa.js
- Modules\Public\InventoryModules\AI\MLEndpoints.ps1
- Modules\Public\InventoryModules\Identity\AdminUnits.ps1
- docs\entra-modules.md
- tests\Report.Drift.Tests.ps1
- tests\fixtures\captured-resourcecontainers.json
- Modules\Private\Main\Test-AZSCModuleUpdate.ps1
- docs\.vitepress\dist\assets\coverage-table.md.Ihe0LJwa.lean.js
- Modules\Public\InventoryModules\AI\MLModels.ps1
- Modules\Public\InventoryModules\Identity\AppRegistrations.ps1
- Modules\Public\InventoryModules\Monitor\MonitorWorkbooks.ps1
- docs\folder-structure.md
- tests\Report.EChartsDashboard.Tests.ps1
- tests\fixtures\captured-resources.json
- Modules\Private\Main\Test-AZTIManagementGroupAccess.ps1
- docs\.vitepress\dist\assets\credits.md.2Bpf50FU.js
- Modules\Public\InventoryModules\AI\MLPipelines.ps1
- Modules\Public\InventoryModules\Identity\ConditionalAccess.ps1
- Modules\Public\InventoryModules\Monitor\Outages.ps1
- docs\github-actions.md
- tests\Report.Excel.Tests.ps1
- tests\fixtures\captured-subscriptions.json
- Modules\Private\Main\Test-AZTIPS.ps1
- docs\.vitepress\dist\assets\credits.md.2Bpf50FU.lean.js
- Modules\Public\InventoryModules\AI\OpenAIAccounts.ps1
- Modules\Public\InventoryModules\Identity\CrossTenantAccess.ps1
- Modules\Public\InventoryModules\Monitor\ResourceDiagnosticSettings.ps1
- docs\index.md
- tests\Report.InventoryDrift.Tests.ps1
- tests\fixtures\collector-audit.json
- Modules\Private\Main\Write-AZTIRunLog.ps1
- docs\.vitepress\dist\assets\design_assessment-registry.md.DdlEM88G.js
- Modules\Public\InventoryModules\AI\OpenAIDeployments.ps1
- Modules\Public\InventoryModules\Identity\DirectoryRoles.ps1
- Modules\Public\InventoryModules\Monitor\ScheduledQueryRules.ps1
- docs\output.md
- tests\Report.JsonEvidence.Tests.ps1
- tests\fixtures\CollectorStrictMode.baseline.json
- Modules\Private\Processing\Invoke-AZTIDrawIOJob.ps1
- docs\.vitepress\dist\assets\design_assessment-registry.md.DdlEM88G.lean.js
- Modules\Public\InventoryModules\AI\SearchIndexes.ps1
- Modules\Public\InventoryModules\Identity\Domains.ps1
- Modules\Public\InventoryModules\Monitor\SmartDetectorAlertRules.ps1
- docs\overview.md
- tests\Report.Pdf.Tests.ps1
- tests\fixtures\databases-collector-input.json
- Modules\Private\Processing\Start-AZTIExtraJobs.ps1
- docs\.vitepress\dist\assets\design_decisions_pptx-renderer.md.DOVFrzr_.js
- Modules\Public\InventoryModules\AI\SearchServices.ps1
- Modules\Public\InventoryModules\Identity\Groups.ps1
- Modules\Public\InventoryModules\Monitor\SubscriptionDiagnosticSettings.ps1
- docs\parameters.md
- tests\Report.PowerBi.Tests.ps1
- tests\fixtures\edge-case-defender-assessment-subscription-scope.json
- Modules\Public\InventoryModules\Module-template.tpl
- docs\.vitepress\dist\assets\design_decisions_pptx-renderer.md.DOVFrzr_.lean.js
- Modules\Public\InventoryModules\AI\SpeechService.ps1
- Modules\Public\InventoryModules\Identity\IdentityProviders.ps1
- Modules\Public\InventoryModules\Monitor\Workspaces.ps1
- docs\permissions.md
- tests\Report.Pptx.Tests.ps1
- tests\fixtures\edge-case-empty-collections.json
- Modules\Public\PublicFunctions\Invoke-AzureScout.ps1
- docs\.vitepress\dist\assets\design_enhancement-spec.md.CXd2dCco.js
- Modules\Public\InventoryModules\AI\TextAnalytics.ps1
- Modules\Public\InventoryModules\Identity\Licensing.ps1
- Modules\Public\InventoryModules\Networking\ApplicationGateways.ps1
- docs\prerequisites.md
- tests\Report.React.Tests.ps1
- tests\fixtures\edge-case-mixed-resources-missing-fields.json
- Modules\Public\PublicFunctions\Start-AZSCWizard.ps1
- docs\.vitepress\dist\assets\design_enhancement-spec.md.CXd2dCco.lean.js
- Modules\Public\InventoryModules\AI\Translator.ps1
- Modules\Public\InventoryModules\Identity\ManagedIdentities.ps1
- Modules\Public\InventoryModules\Networking\AzureFirewall.ps1
- docs\roadmap.md
- tests\Report.Word.Tests.ps1
- tests\fixtures\edge-case-no-timestamps.json
- Modules\Public\PublicFunctions\Test-AZTIPermissions.ps1
- docs\.vitepress\dist\assets\design_master-plan.md.jBXjAp0u.js
- Modules\Public\InventoryModules\Analytics\Databricks.ps1
- Modules\Public\InventoryModules\Identity\ManagedIds.ps1
- Modules\Public\InventoryModules\Networking\BastionHosts.ps1
- docs\testing.md
- tests\RunIsolation.Tests.ps1
- docs\.vitepress\dist\404.html
- src\assess\benchmarks\alz-reference.json
- docs\.vitepress\dist\assets\design_master-plan.md.jBXjAp0u.lean.js
- Modules\Public\InventoryModules\Analytics\DataExplorerCluster.ps1
- Modules\Public\InventoryModules\Identity\NamedLocations.ps1
- Modules\Public\InventoryModules\Networking\Connections.ps1
- docs\troubleshooting.md
- tests\RunLog.Tests.ps1
- docs\.vitepress\dist\ari-differences.html
- src\assess\engine\Get-RuleSet.ps1
- docs\.vitepress\dist\assets\design_task-list.md.BTyj6qed.js
- Modules\Public\InventoryModules\Analytics\EvtHub.ps1
- Modules\Public\InventoryModules\Identity\PIMAssignments.ps1
- Modules\Public\InventoryModules\Networking\ExpressRoute.ps1
- docs\usage.md
- tests\Security.Module.Tests.ps1
- docs\.vitepress\dist\arm-modules.html
- src\assess\engine\Get-Score.ps1
- docs\.vitepress\dist\assets\design_task-list.md.BTyj6qed.lean.js
- Modules\Public\InventoryModules\Analytics\Purview.ps1
- Modules\Public\InventoryModules\Identity\RiskyUsers.ps1
- Modules\Public\InventoryModules\Networking\Frontdoor.ps1
- docs\validation-matrix.md
- tests\Start-AZSCEntraExtraction.Tests.ps1
- docs\.vitepress\dist\assessment-permissions.html
- src\assess\engine\Invoke-Rule.ps1
- docs\.vitepress\dist\assets\entra-modules.md.CwxRzRTJ.js
- Modules\Public\InventoryModules\Analytics\Streamanalytics.ps1
- Modules\Public\InventoryModules\Identity\SecurityDefaults.ps1
- Modules\Public\InventoryModules\Networking\LoadBalancer.ps1
- manifests\assessments.psd1
- tests\Storage.Module.Tests.ps1
- docs\.vitepress\dist\assessment-prerequisites.html
- src\assess\engine\Resolve-JsonPath.ps1
- docs\.vitepress\dist\assets\entra-modules.md.CwxRzRTJ.lean.js
- Modules\Public\InventoryModules\Analytics\Synapse.ps1
- Modules\Public\InventoryModules\Identity\SecurityPolicies.ps1
- Modules\Public\InventoryModules\Networking\NATGateway.ps1
- scripts\Build-TaskList.ps1
- tests\StrictModeMemberEnumeration.Tests.ps1
- docs\.vitepress\dist\assessment.html
- src\assess\rules\caf.ai.yaml
- docs\.vitepress\dist\assets\folder-structure.md.CcZOIHri.js
- Modules\Public\InventoryModules\Compute\AvailabilitySets.ps1
- Modules\Public\InventoryModules\Identity\ServicePrincipals.ps1
- Modules\Public\InventoryModules\Networking\NetworkInterface.ps1
- scripts\ConvertTo-ScoutCollectorDefinition.ps1
- tests\Test-AZSCPermissions.Tests.ps1
- docs\.vitepress\dist\authentication.html
- src\assess\rules\caf.analytics.yaml
- docs\.vitepress\dist\assets\folder-structure.md.CcZOIHri.lean.js
- Modules\Public\InventoryModules\Compute\AVD.ps1
- Modules\Public\InventoryModules\Identity\Users.ps1
- Modules\Public\InventoryModules\Networking\NetworkSecurityGroup.ps1
- scripts\Export-ScoutFixture.ps1
- tests\Test-ExcelFromDataDump.ps1
- docs\.vitepress\dist\automation.html
- src\assess\rules\caf.billing.yaml
- docs\.vitepress\dist\assets\github-actions.md.B8A-w4KF.js
- Modules\Public\InventoryModules\Compute\AVDApplicationGroups.ps1
- Modules\Public\InventoryModules\Integration\APIM.ps1
- Modules\Public\InventoryModules\Networking\NetworkWatchers.ps1
- scripts\Get-CollectorResourceTypeMap.ps1
- tests\Test-PowerBIFromDataDump.ps1
- docs\.vitepress\dist\azure-devops.html
- src\assess\rules\caf.containers.yaml
- docs\.vitepress\dist\assets\github-actions.md.B8A-w4KF.lean.js
- Modules\Public\InventoryModules\Compute\AVDApplications.ps1
- Modules\Public\InventoryModules\Integration\ServiceBUS.ps1
- Modules\Public\InventoryModules\Networking\PrivateDNS.ps1
- scripts\Invoke-CollectorAudit.ps1
- tests\Test-PptxFromDataDump.ps1
- docs\.vitepress\dist\category-filtering.html
- src\assess\rules\caf.databases.yaml
- docs\.vitepress\dist\assets\index.md.DHnGeftI.js
- Modules\Public\InventoryModules\Compute\AVDAzureLocal.ps1
- Modules\Public\InventoryModules\IoT\IOTHubs.ps1
- Modules\Public\InventoryModules\Networking\PrivateEndpoint.ps1
- scripts\Test-BoardConformance.ps1
- tests\TESTING.md
- docs\.vitepress\dist\category-reference.html
- src\assess\rules\caf.governance.yaml
- docs\.vitepress\dist\assets\index.md.DHnGeftI.lean.js
- Modules\Public\InventoryModules\Compute\AVDScalingPlans.ps1
- Modules\Public\InventoryModules\Management\AdvisorScore.ps1
- Modules\Public\InventoryModules\Networking\PublicDNS.ps1
- src\Invoke-ScoutAssessment.ps1
- tests\UnifiedEntryPoint.Tests.ps1
- docs\.vitepress\dist\category-structure.html
- src\assess\rules\caf.hybrid.yaml
- docs\.vitepress\dist\assets\inter-italic-cyrillic-ext.r48I6akx.woff2
- Modules\Public\InventoryModules\Compute\AVDSessionHosts.ps1
- Modules\Public\InventoryModules\Management\AllSubscriptions.ps1
- Modules\Public\InventoryModules\Networking\PublicIP.ps1
- src\Invoke-ScoutPipeline.ps1
- tests\Web.Module.Tests.ps1
- docs\.vitepress\dist\changelog.html
- src\assess\rules\caf.identity.yaml
- docs\.vitepress\dist\assets\inter-italic-cyrillic.By2_1cv3.woff2
- Modules\Public\InventoryModules\Compute\AVDWorkspaces.ps1
- Modules\Public\InventoryModules\Management\AutomationAccounts.ps1
- Modules\Public\InventoryModules\Networking\RouteTables.ps1
- src\README.md
- tests\Write-ScoutProgress.Tests.ps1
- docs\.vitepress\dist\contributing.html
- src\assess\rules\caf.integration.yaml
- docs\.vitepress\dist\assets\inter-italic-greek-ext.1u6EdAuj.woff2
- Modules\Public\InventoryModules\Compute\CloudServices.ps1
- Modules\Public\InventoryModules\Management\Backup.ps1
- Modules\Public\InventoryModules\Networking\TrafficManager.ps1
- src\Write-ScoutProgress.ps1
- .ai\mcp\mcp-servers.md
- docs\.vitepress\dist\coverage-table.html
- src\assess\rules\caf.iot.yaml
- docs\.vitepress\dist\assets\inter-italic-greek.DJ8dCoTZ.woff2
- Modules\Public\InventoryModules\Compute\VirtualMachine.ps1
- Modules\Public\InventoryModules\Management\CustomRoleDefinitions.ps1
- Modules\Public\InventoryModules\Networking\VirtualNetwork.ps1
- tests\AI.Module.Tests.ps1
- .ai\memory\COMMANDS.md
- docs\.vitepress\dist\credits.html
- src\assess\rules\caf.management.yaml
- docs\.vitepress\dist\assets\inter-italic-latin-ext.CN1xVJS-.woff2
- Modules\Public\InventoryModules\Compute\VirtualMachineScaleSet.ps1
- Modules\Public\InventoryModules\Management\DevOpsAgentPools.ps1
- Modules\Public\InventoryModules\Networking\VirtualNetworkGateways.ps1
- tests\Analytics.Module.Tests.ps1
- .ai\memory\DECISIONS.md
- docs\.vitepress\dist\entra-modules.html
- src\assess\rules\caf.network.yaml
- docs\.vitepress\dist\assets\inter-italic-latin.C2AdPX0b.woff2
- Modules\Public\InventoryModules\Compute\VMDisk.ps1
- Modules\Public\InventoryModules\Management\DevOpsPipelines.ps1
- Modules\Public\InventoryModules\Networking\VirtualWAN.ps1
- tests\Analyze.CostAnomaly.Tests.ps1
- .ai\memory\GOTCHAS.md
- docs\.vitepress\dist\folder-structure.html
- src\assess\rules\caf.platformauto.yaml
- docs\.vitepress\dist\assets\inter-italic-vietnamese.BSbpV94h.woff2
- Modules\Public\InventoryModules\Compute\VMOperationalData.ps1
- Modules\Public\InventoryModules\Management\DevOpsProjects.ps1
- Modules\Public\InventoryModules\Networking\vNETPeering.ps1
- tests\Analyze.IacGap.Tests.ps1
- .ai\memory\PROJECT_CONTEXT.md
- docs\.vitepress\dist\github-actions.html
- src\assess\rules\caf.resourceorg.yaml
- docs\.vitepress\dist\assets\inter-roman-cyrillic-ext.BBPuwvHQ.woff2
- Modules\Public\InventoryModules\Compute\VMWare.ps1
- Modules\Public\InventoryModules\Management\DevOpsRepositories.ps1
- Modules\Public\InventoryModules\Security\DefenderAlerts.ps1
- tests\Assessment.Collect.Tests.ps1
- .ai\state\CURRENT_TASK.md
- docs\.vitepress\dist\hashmap.json
- src\assess\rules\caf.security.yaml
- docs\.vitepress\dist\assets\inter-roman-cyrillic.C5lxZ8CY.woff2
- Modules\Public\InventoryModules\Containers\AKS.ps1
- Modules\Public\InventoryModules\Management\DevOpsServiceConnections.ps1
- Modules\Public\InventoryModules\Security\DefenderAssessments.ps1
- tests\Assessment.Config.Tests.ps1
- .ai\state\HANDOFF.md
- docs\.vitepress\dist\index.html
- src\assess\rules\caf.storage.yaml
- docs\.vitepress\dist\assets\inter-roman-greek-ext.CqjqNYQ-.woff2
- Modules\Public\InventoryModules\Containers\ARO.ps1
- Modules\Public\InventoryModules\Management\LighthouseDelegations.ps1
- Modules\Public\InventoryModules\Security\DefenderPricing.ps1
- tests\Assessment.Engine.Tests.ps1
- .ai\state\OPEN_QUESTIONS.md
- docs\.vitepress\dist\output.html
- src\assess\rules\caf.web.yaml
- docs\.vitepress\dist\assets\inter-roman-greek.BBVDIX6e.woff2
- Modules\Public\InventoryModules\Containers\ContainerApp.ps1
- Modules\Public\InventoryModules\Management\MaintenanceConfigurations.ps1
- Modules\Public\InventoryModules\Security\DefenderSecureScore.ps1
- tests\Assessment.Governance.Tests.ps1
- .github\ISSUE_TEMPLATE\bug_report.md
- docs\.vitepress\dist\overview.html
- src\assess\rules\waf.cost.yaml
- docs\.vitepress\dist\assets\inter-roman-latin-ext.4ZJIpNVo.woff2
- Modules\Public\InventoryModules\Containers\ContainerAppEnv.ps1
- Modules\Public\InventoryModules\Management\ManagementGroups.ps1
- Modules\Public\InventoryModules\Security\Vault.ps1
- tests\Assessment.IoT.Tests.ps1
- .github\ISSUE_TEMPLATE\feature_request.md
- docs\.vitepress\dist\parameters.html
- src\assess\rules\waf.operational.yaml
- docs\.vitepress\dist\assets\inter-roman-latin.Di8DUHzh.woff2
- Modules\Public\InventoryModules\Containers\ContainerGroups.ps1
- Modules\Public\InventoryModules\Management\PolicyComplianceStates.ps1
- Modules\Public\InventoryModules\Storage\NetApp.ps1
- tests\Assessment.PermissionAudit.Tests.ps1
- .github\ISSUE_TEMPLATE\question-.md
- docs\.vitepress\dist\permissions.html
- src\assess\rules\waf.performance.yaml
- docs\.vitepress\dist\assets\inter-roman-vietnamese.BjW4sHH5.woff2
- Modules\Public\InventoryModules\Containers\ContainerRegistries.ps1
- Modules\Public\InventoryModules\Management\PolicyDefinitions.ps1
- Modules\Public\InventoryModules\Storage\StorageAccounts.ps1
- tests\Assessment.ReportReturn.Tests.ps1
- .github\policies\resourceManagement.yml
- docs\.vitepress\dist\prerequisites.html
- src\assess\rules\waf.reliability.yaml
- docs\.vitepress\dist\assets\output.md.DBTTBDCu.js
- Modules\Public\InventoryModules\Databases\CosmosDB.ps1
- Modules\Public\InventoryModules\Management\PolicySetDefinitions.ps1
- Modules\Public\InventoryModules\Web\APPServicePlan.ps1
- tests\AzureScout.Tests.ps1
- .github\PULL_REQUEST_TEMPLATE\documentation.md
- docs\.vitepress\dist\roadmap.html
- src\assess\rules\waf.security.yaml
- docs\.vitepress\dist\assets\output.md.DBTTBDCu.lean.js
- Modules\Public\InventoryModules\Databases\MariaDB.ps1
- Modules\Public\InventoryModules\Management\RecoveryVault.ps1
- Modules\Public\InventoryModules\Web\APPServices.ps1
- tests\CategoryFiltering.Tests.ps1
- .github\workflows\azure-inventory.yml
- docs\.vitepress\dist\testing.html
- src\assess\rules\waf.storage.yaml
- docs\.vitepress\dist\assets\overview.md.zZ63s-bh.js
- Modules\Public\InventoryModules\Databases\MySQL.ps1
- Modules\Public\InventoryModules\Management\ReservationRecom.ps1
- Modules\Public\PublicFunctions\Diagram\Build-AZTIDiagramSubnet.ps1
- tests\Collect.ApiResources.Tests.ps1
- .github\workflows\ci.yml
- docs\.vitepress\dist\troubleshooting.html
- src\report\renderers\Export-EChartsDashboard.ps1
- docs\.vitepress\dist\assets\overview.md.zZ63s-bh.lean.js
- Modules\Public\InventoryModules\Databases\MySQLflexible.ps1
- Modules\Public\InventoryModules\Management\SupportTickets.ps1
- Modules\Public\PublicFunctions\Diagram\Set-AZTIDiagramFile.ps1
- tests\Collect.CostInventory.Tests.ps1
- .github\workflows\documentation.yml
- docs\.vitepress\dist\usage.html
- src\report\renderers\Export-Excel.ps1
- docs\.vitepress\dist\assets\parameters.md.YtXdSKPK.js
- Modules\Public\InventoryModules\Databases\POSTGRE.ps1
- Modules\Public\InventoryModules\Monitor\ActionGroups.ps1
- Modules\Public\PublicFunctions\Diagram\Start-AZTIDiagramJob.ps1
- .github\workflows\stale.yml
- docs\.vitepress\dist\validation-matrix.html
- src\report\renderers\Export-Html.ps1
- docs\.vitepress\dist\assets\parameters.md.YtXdSKPK.lean.js
- Modules\Public\InventoryModules\Databases\POSTGREFlexible.ps1
- Modules\Public\InventoryModules\Monitor\ActivityLogAlertRules.ps1
- Modules\Public\PublicFunctions\Diagram\Start-AZTIDiagramNetwork.ps1
- Modules\Public\InventoryModules\Monitor\AppInsights.ps1
- Modules\Public\PublicFunctions\Diagram\Start-AZTIDiagramOrganization.ps1
- Modules\Public\InventoryModules\Monitor\AppInsightsAvailabilityTests.ps1
- Modules\Public\PublicFunctions\Diagram\Start-AZTIDiagramSubscription.ps1
- Modules\Public\InventoryModules\Monitor\AppInsightsContinuousExport.ps1
- Modules\Public\PublicFunctions\Diagram\Start-AZTIDrawIODiagram.ps1
- Modules\Public\InventoryModules\Monitor\AppInsightsProactiveDetection.ps1
- Modules\Public\PublicFunctions\Jobs\Start-AZTIAdvisoryJob.ps1
- Modules\Public\InventoryModules\Monitor\AppInsightsWebTests.ps1
- Modules\Public\PublicFunctions\Jobs\Start-AZTIPolicyJob.ps1
- Modules\Public\InventoryModules\Monitor\AppInsightsWorkItems.ps1
- Modules\Public\PublicFunctions\Jobs\Start-AZTISecCenterJob.ps1
- Modules\Public\InventoryModules\Monitor\AutoscaleSettings.ps1
- Modules\Public\PublicFunctions\Jobs\Start-AZTISubscriptionJob.ps1
- Modules\Public\InventoryModules\Monitor\DataCollectionEndpoints.ps1
- src\report\renderers\inventory\Build-AZSCAdvisoryReport.ps1
- Modules\Public\InventoryModules\Monitor\DataCollectionRules.ps1
- src\report\renderers\inventory\Build-AZSCCostManagementReport.ps1
- Modules\Public\InventoryModules\Monitor\LAWorkspaceLinkedServices.ps1
- src\report\renderers\inventory\Build-AZSCMonitorReport.ps1
- Modules\Public\InventoryModules\Monitor\LAWorkspaceSavedSearches.ps1
- src\report\renderers\inventory\Build-AZSCPolicyReport.ps1
- Modules\Public\InventoryModules\Monitor\LAWorkspaceSolutions.ps1
- src\report\renderers\inventory\Build-AZSCQuotaReport.ps1
- Modules\Public\InventoryModules\Monitor\MetricAlertRules.ps1
- src\report\renderers\inventory\Build-AZSCSecCenterReport.ps1
- Modules\Public\InventoryModules\Monitor\MonitorMetricsIngestion.ps1
- src\report\renderers\inventory\Build-AZSCSecurityOverviewReport.ps1
- Modules\Public\InventoryModules\Monitor\MonitorPrivateLinkScopes.ps1
- src\report\renderers\inventory\Build-AZSCSubsReport.ps1
- src\report\renderers\inventory\Build-AZSCUpdateManagerReport.ps1
- src\report\renderers\inventory\Export-AZSCAsciiDocReport.ps1
- src\report\renderers\inventory\Export-AZSCJsonReport.ps1
- src\report\renderers\inventory\Export-AZSCMarkdownReport.ps1
- src\report\renderers\inventory\Export-AZSCPowerBIReport.ps1
- src\report\renderers\inventory\New-AZSCPowerBITemplate.ps1
- src\report\renderers\inventory\Start-AZSCExcelExtraData.ps1
- src\report\renderers\inventory\Start-AZSCExcelJob.ps1
- src\report\renderers\inventory\Start-AZSCExtraReports.ps1
- docs\.vitepress\dist\assets\chunks\@localSearchIndexroot.aGGM7vkd.js
- docs\.vitepress\dist\assets\chunks\framework.il0noOp3.js
- docs\.vitepress\dist\assets\chunks\theme.BsI9enTO.js
- docs\.vitepress\dist\assets\chunks\VPLocalSearchBox.DK5qlxOH.js
- docs\.vitepress\dist\design\decisions\pptx-renderer.html
- src\report\renderers\inventory\style\Build-AZSCDashboardTabs.ps1
- src\report\renderers\inventory\style\Build-AZSCExcelChart.ps1
- src\report\renderers\inventory\style\Build-AZSCExcelChartStyle.ps1
- src\report\renderers\inventory\style\Build-AZSCExcelInitialBlock.ps1
- src\report\renderers\inventory\style\Out-AZSCReportResults.ps1
- src\report\renderers\inventory\style\Retirement.kql
- src\report\renderers\inventory\style\Start-AZSCExcelCustomization.ps1
- src\report\renderers\inventory\style\Start-AZSCExcelOrdening.ps1
- src\report\renderers\inventory\style\Support.json
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 2.11.0 | 8 | 7/26/2026 |
| 2.10.0 | 5 | 7/26/2026 |
| 2.9.0 | 6 | 7/26/2026 |
| 2.8.0 (current version) | 5 | 7/26/2026 |
| 2.7.0 | 5 | 7/26/2026 |
| 2.6.0 | 5 | 7/26/2026 |
| 2.5.3 | 4 | 7/25/2026 |
| 2.5.2 | 6 | 7/25/2026 |
| 2.5.1 | 4 | 7/25/2026 |
| 2.5.0 | 5 | 7/25/2026 |
| 2.4.0 | 4 | 7/25/2026 |
| 2.3.0 | 6 | 7/25/2026 |
| 2.2.0 | 4 | 7/24/2026 |
| 2.1.0 | 5 | 7/24/2026 |
| 2.0.1 | 5 | 7/23/2026 |
| 2.0.0 | 3 | 7/23/2026 |
| 1.0.0 | 48 | 2/25/2026 |