AzureScout
3.3.4
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 Test-ScoutPermission Invoke-ScoutPipeline Get-ScoutInventoryDrift Get-ScoutCostAnomaly Get-ScoutIacGap Import-ScoutConfig Export-ScoutConfig
PSEditions
Dependencies
This module has no dependencies.
Release Notes
v3.3.4 - One report, and it is the deliverable. Azure Scout produced six rendered report formats. A full multi-tenant render, read end to end rather than counted, found every one of them weak in a different way: a dashboard that drew its headers and no data, a maturity report scoring 10/10 with no explanation of what it measured, documents that never named which assessment they were, text drawn over text in the PDF, figures running off the slide, and a Word file that opened with a repair prompt. Six renderers maintained in parallel is WHY none of them reached deliverable quality. The React single-page report is now the product deliverable: one self-contained page hosting the inventory and every assessment behind an adaptive shell, whose navigation is built from what actually ran - an inventory-only run shows inventory, a full run shows inventory plus per-assessment detail. Each assessment answers three questions in order: what was run (scope, checks executed, and what was NOT assessed and why), what was found (findings with their evidence and real resource ids), and what to fix against CAF/WAF guidance. Every score is shown with its own arithmetic - numerator, denominator, and what was excluded as not-applicable - so a number can be checked rather than trusted; that is the direct answer to a maturity report claiming 10/10 while a landing-zone assessment of the same tenant scored 36%. Every other rendered format is ON HOLD: -OutputFormat All now renders the React report plus the machine-readable data exports. Json/JsonEvidence are deliberately NOT held - they are data, not documents, and the corpus harness and drift history read them. A held format asked for BY NAME warns, is skipped, and the React report renders anyway, so a run never returns an empty folder; the parameter still accepts every format name so existing scripts bind and get an explanation rather than a binding failure; and the default -OutputFormat moves from Html (itself now held) to React. The renderers are untouched and still tested - they are being rebuilt to generate FROM the React report rather than alongside it, so a document and the page it came from can no longer disagree, and lifting the hold is a one-line edit. Also: a cited Microsoft Learn guidance URL returned 404. The CAF Platform automation design area was cited as .../platform-automation-and-devops and stamped "verified 2026-08-01"; that URL 404s and the canonical page has no "and". Those citations are surfaced to the reader as the guidance for a finding, so the deliverable carried a dead link - and a verified-date stamp is no protection, because Microsoft renamed the page after the verification and nothing looked again. scripts/Test-ScoutGuidanceLinks.ps1 now HEADs every cited Learn URL across the rule files and reports each dead one with its file and line; it is a script rather than a Pester test on purpose, because it needs outbound network and a CI suite that fails when Microsoft has a bad afternoon is a suite people learn to ignore. 26 citations audited, this was the only rotted one. v3.3.3 - The corpus told the truth: five collection defects fixed, none visible from a green unit suite; every one was found by re-collecting eight real tenants into the banked corpus and refusing to explain away an empty dataset. The v3.3.2 Recovery Services vault fix never reached the collect result - the copy loop walks the typed-query keys and recoveryVaults has none, and the fallback guard tested a HASHTABLE's PSObject adapter (which exposes Keys/Values/Count, never the keys), so the branch was unconditionally dead; vaults now copy explicitly and a structural gate test fails if any shaped dataset is left without a hand-off. Export-Pptx defined a module-scope Get-ScoutProp that shadowed the collect walker of the same name, so every PRODUCT run read nested properties.* as null (subnets, TLS versions, retention days) while every dot-sourced harness probe passed - the defect that corrupted the banked corpus and mis-diagnosed three healthy collectors; the renderer helper is renamed and a test bans same-name module-scope functions. Management groups are collected for the first time in the product's history: the Resource Graph query never passed -UseTenantScope, so it returned zero rows everywhere - now 92 management groups across the eight reference tenants. security.defenderPlans was a hardcoded empty array from the day the contract was written, while the CAF and WAF security rules queried it for Standard-tier plans - they could never pass; plans are now collected per subscription over plain ARM REST with no Az.Security dependency, an unregistered Microsoft.Security provider stays quiet, and one live subscription banks 18 plans (4 Standard) where every prior run banked zero. Two assessment runs started within the same second no longer share one run folder - the second used to overwrite the first's artefacts and replace its drift-history record. The corpus itself is now a committed harness: per-tenant integrity checks at collection time, per-collector coverage verdicts offline - 36 collect keys proven working across 8 real tenants, 23 empty-everywhere each with a maintained explanation, 0 unexplained. v3.3.2 - Field fixes found by running against real customer tenants rather than fixtures. Az.Advisor could abort the Advisor sweep for an ENTIRE tenant and surface as a raw stack trace mid-run ("Expected { or [. Was String: The.") - a defect in Az.Advisor 3.0.0 meeting a plain-text Azure error, almost always Microsoft.Advisor not registered on that subscription. Scout cannot prevent it but now contains it: the try/catch is per subscription, each failure is named and translated, and a closing summary gives the Register-AzResourceProvider command that fixes it. A licence boundary is no longer reported as a permission denial: IdentityRiskyUser.Read.All reported DENIED on tenants that had already consented, but Identity Protection is an Entra ID P2 feature and without P2 the endpoint returns nothing however much consent it has - so the advice could never work, and since most tenants lack P2 the common case was being reported as an error. Scout now reads subscribedSkus and reports NOT LICENSED, naming the product; the affected collectors are still reported as Not assessed so the gap stays visible, and the check is three-state so a failed SKU lookup never softens a genuine denial. Recovery Services vaults are collected: management.recoveryVaults was hardcoded to an empty array, so no run in the product history ever reported a vault while backupProtectedItems returned rows - a child with no parent. Costs no extra Resource Graph round-trip because the vault lives in the ordinary resources table the raw pass already reads. A landing-zone audit now scores the landing zone: LandingZone declared caf.*, waf.* which swept in every workload rule set (AI, AVD, Azure Local, IoT, AVS), scoring 34 areas where the audit covers 14; the eight CAF design areas and five WAF pillars are enumerated and a new workload file cannot join by filename alone. Also: GovernanceReport was missing from -OutputFormat All so the CAF Govern maturity score never rendered on a default run; evidence truncation is now visible (a finding with 198 matches said 25 and looked identical to one with 26, rows now read "25 of 198 matched"); and the docs carry licence tiers plus both field errors. Known limitation: networking.subnets returns no rows - diagnosed, not shipped half-verified. v3.3.1 - Completes the two clauses v3.3.0 shipped as known limitations. Figures now embed in PowerPoint and PDF, not only Word: the deck places one figure per slide as a real picture part, and the PDF embeds them as image XObjects because PDF FlateDecode is zlib -- exactly what the rasteriser already produces -- so the raw pixels go in with no decode round trip, no JPEG and no new dependency, which retires the manual diagram.jpg drop-in as the only route. And the Power BI report pages now bind to the model: a visual container needs three serialised blobs (config, query and dataTransforms) and only config was written, so nothing told Power BI which field belonged in which well and it drew the frames empty, with no error anywhere in that path - the project was structurally valid and the visuals were simply unbound, which is why every file-shape assertion passed while the report was useless. All eleven visuals across the three pages now carry their query and field-well mapping. Verified by re-rendering all eight tenants offline from banked collect data: 29 artefacts each, 0 empty. See CHANGELOG.md for the full history.
FileList
- AzureScout.nuspec
- src\collect\Get-ScoutApiResources.ps1
- manifests\collectors\AI\MLEndpoints.psd1
- manifests\collectors\DevOps\DevOpsPipelines.psd1
- manifests\collectors\Integration\ServiceBUS.psd1
- manifests\collectors\Networking\Connections.psd1
- manifests\collectors\Web\NotificationHubs.psd1
- src\assess\rules\waf.performance.yaml
- AzureScout.psd1
- src\collect\Get-ScoutArmChildResource.ps1
- manifests\collectors\AI\MLModels.psd1
- manifests\collectors\DevOps\DevOpsProjects.psd1
- manifests\collectors\IoT\DefenderForIoT.psd1
- manifests\collectors\Networking\ExpressRoute.psd1
- manifests\collectors\Web\SignalR.psd1
- src\assess\rules\waf.reliability.yaml
- AzureScout.psm1
- src\collect\Get-ScoutCostInventory.ps1
- manifests\collectors\AI\MLPipelines.psd1
- manifests\collectors\DevOps\DevOpsRepositories.psd1
- manifests\collectors\IoT\DeviceProvisioningServices.psd1
- manifests\collectors\Networking\Frontdoor.psd1
- manifests\collectors\Web\SpringApps.psd1
- src\assess\rules\waf.security.yaml
- CHANGELOG.md
- src\collect\Get-ScoutDefenderPlanSweep.ps1
- manifests\collectors\AI\OpenAIAccounts.psd1
- manifests\collectors\DevOps\DevOpsServiceConnections.psd1
- manifests\collectors\IoT\DeviceUpdate.psd1
- manifests\collectors\Networking\LoadBalancer.psd1
- manifests\collectors\Web\StaticWebApps.psd1
- src\assess\rules\xr.crossresource.yaml
- LICENSE
- src\collect\Get-ScoutEntraQueryCatalog.ps1
- manifests\collectors\AI\OpenAIDeployments.psd1
- manifests\collectors\DevOps\DevTestLabs.psd1
- manifests\collectors\IoT\DigitalTwins.psd1
- manifests\collectors\Networking\NATGateway.psd1
- manifests\collectors\Web\WebPubSub.psd1
- src\pipeline\diagram\Build-ScoutDiagramSubnet.ps1
- README.md
- src\collect\Get-ScoutGovernanceDataset.ps1
- manifests\collectors\AI\SearchIndexes.psd1
- manifests\collectors\DevOps\LabServices.psd1
- manifests\collectors\IoT\IoTCentral.psd1
- manifests\collectors\Networking\NetworkInterface.psd1
- src\assess\benchmarks\alz-reference.json
- src\pipeline\diagram\Set-ScoutDiagramFile.ps1
- config\scout.config.json
- src\collect\Get-ScoutManagementGroups.ps1
- manifests\collectors\AI\SearchServices.psd1
- manifests\collectors\DevOps\LoadTesting.psd1
- manifests\collectors\IoT\IOTHubs.psd1
- manifests\collectors\Networking\NetworkSecurityGroup.psd1
- src\assess\engine\Get-GovernanceDomainScore.ps1
- src\pipeline\diagram\Start-ScoutDiagramJob.ps1
- manifests\assessments.psd1
- src\collect\Get-ScoutOperationalCollectorEnrichment.ps1
- manifests\collectors\AI\SpeechService.psd1
- manifests\collectors\DevOps\ManagedDevOpsPools.psd1
- manifests\collectors\IoT\Maps.psd1
- manifests\collectors\Networking\NetworkWatchers.psd1
- src\assess\engine\Get-MaturityLevel.ps1
- src\pipeline\diagram\Start-ScoutDiagramNetwork.ps1
- manifests\azure-provider-types.json
- src\collect\Get-ScoutOutageResource.ps1
- manifests\collectors\AI\TextAnalytics.psd1
- manifests\collectors\DevOps\PlaywrightTesting.psd1
- manifests\collectors\Management\AdvisorScore.psd1
- manifests\collectors\Networking\PrivateDNS.psd1
- src\assess\engine\Get-RuleSet.ps1
- src\pipeline\diagram\Start-ScoutDiagramOrganization.ps1
- src\Clear-AZTICacheFolder.ps1
- src\collect\Get-ScoutRawInventory.ps1
- manifests\collectors\AI\Translator.psd1
- manifests\collectors\General\Quotas.psd1
- manifests\collectors\Management\AllSubscriptions.psd1
- manifests\collectors\Networking\PrivateEndpoint.psd1
- src\assess\engine\Get-Score.ps1
- src\pipeline\diagram\Start-ScoutDiagramSubscription.ps1
- src\Clear-AZTIMemory.ps1
- src\collect\Get-ScoutSubscriptions.ps1
- manifests\collectors\Analytics\Databricks.psd1
- manifests\collectors\General\ReservationRecom.psd1
- manifests\collectors\Management\AutomationAccounts.psd1
- manifests\collectors\Networking\PublicDNS.psd1
- src\assess\engine\Get-ScoutComplianceScore.ps1
- src\pipeline\diagram\Start-ScoutDrawIoDiagram.ps1
- src\Connect-AZTILoginSession.ps1
- src\collect\Get-ScoutSubscriptionSecurityPolicySweep.ps1
- manifests\collectors\Analytics\DataExplorerCluster.psd1
- manifests\collectors\General\Reservations.psd1
- manifests\collectors\Management\Backup.psd1
- manifests\collectors\Networking\PublicIP.psd1
- src\assess\engine\Invoke-Rule.ps1
- src\pipeline\jobs\Start-ScoutAdvisoryJob.ps1
- src\Export-ScoutRawInventoryDump.ps1
- src\collect\Get-ScoutTenantWideResource.ps1
- manifests\collectors\Analytics\EvtHub.psd1
- manifests\collectors\General\ReservationUtilization.psd1
- manifests\collectors\Management\BackupInstances.psd1
- manifests\collectors\Networking\RouteTables.psd1
- src\assess\engine\Resolve-JsonPath.ps1
- src\pipeline\jobs\Start-ScoutPolicyJob.ps1
- src\Get-AZSCIdSegment.ps1
- src\collect\Get-ScoutVmQuotas.ps1
- manifests\collectors\Analytics\Purview.psd1
- manifests\collectors\General\SupportTickets.psd1
- manifests\collectors\Management\Budgets.psd1
- manifests\collectors\Networking\TrafficManager.psd1
- src\assess\engine\Resolve-RuleJoin.ps1
- src\pipeline\jobs\Start-ScoutSecCenterJob.ps1
- src\Get-AZSCSafeProperty.ps1
- src\collect\Get-ScoutVmSkuDetails.ps1
- manifests\collectors\Analytics\Streamanalytics.psd1
- manifests\collectors\Hybrid\ArcDataControllers.psd1
- manifests\collectors\Management\CustomRoleDefinitions.psd1
- manifests\collectors\Networking\VirtualNetwork.psd1
- src\assess\engine\Resolve-ScoutAssignedInitiative.ps1
- src\pipeline\jobs\Start-ScoutSubscriptionJob.ps1
- src\Get-AZTICollectedValue.ps1
- src\collect\Invoke-Collect.ps1
- manifests\collectors\Analytics\Synapse.psd1
- manifests\collectors\Hybrid\ArcExtensions.psd1
- manifests\collectors\Management\LighthouseDelegations.psd1
- manifests\collectors\Networking\VirtualNetworkGateways.psd1
- src\assess\rules\avs.workload.yaml
- src\report\renderers\Export-EChartsDashboard.ps1
- src\Get-AZTIGraphToken.ps1
- src\collect\Resolve-ScoutOrphanedRoleAssignment.ps1
- manifests\collectors\Compute\AvailabilitySets.psd1
- manifests\collectors\Hybrid\ArcGateways.psd1
- manifests\collectors\Management\MaintenanceConfigurations.psd1
- manifests\collectors\Networking\VirtualWAN.psd1
- src\assess\rules\caf.ai.yaml
- src\report\renderers\Export-Excel.ps1
- src\Get-AZTIUnsupportedData.ps1
- src\collect\Start-ScoutDevOpsExtraction.ps1
- manifests\collectors\Compute\AVD.psd1
- manifests\collectors\Hybrid\ArcKubernetes.psd1
- manifests\collectors\Management\ManagementGroups.psd1
- manifests\collectors\Networking\vNETPeering.psd1
- src\assess\rules\caf.analytics.yaml
- src\report\renderers\Export-GovernanceReport.ps1
- src\Get-ScoutGraphPermissionImpact.ps1
- src\collect\Start-ScoutEntraExtraction.ps1
- manifests\collectors\Compute\AVDApplicationGroups.psd1
- manifests\collectors\Hybrid\ArcResourceBridge.psd1
- manifests\collectors\Management\PolicyAssignments.psd1
- manifests\collectors\Security\AppComplianceAutomation.psd1
- src\assess\rules\caf.avslandingzone.yaml
- src\report\renderers\Export-Html.ps1
- src\Get-ScoutNewErrorCount.ps1
- src\collect\Start-ScoutGraphExtraction.ps1
- manifests\collectors\Compute\AVDApplications.psd1
- manifests\collectors\Hybrid\ArcServerOperationalData.psd1
- manifests\collectors\Management\PolicyComplianceStates.psd1
- manifests\collectors\Security\ApplicationSecurityGroups.psd1
- src\assess\rules\caf.billing.yaml
- src\report\renderers\Export-JsonEvidence.ps1
- src\Invoke-AZTIGraphRequest.ps1
- src\ingest\Import-AdvisorScores.ps1
- manifests\collectors\Compute\AVDAzureLocal.psd1
- manifests\collectors\Hybrid\ARCServers.psd1
- manifests\collectors\Management\PolicyDefinitions.psd1
- manifests\collectors\Security\ArtifactSigning.psd1
- src\assess\rules\caf.containers.yaml
- src\report\renderers\Export-Pdf.ps1
- src\Invoke-AZTIPermissionAudit.ps1
- src\ingest\Import-AzGovViz.ps1
- manifests\collectors\Compute\AVDScalingPlans.psd1
- manifests\collectors\Hybrid\ArcSites.psd1
- manifests\collectors\Management\PolicySetDefinitions.psd1
- manifests\collectors\Security\CloudHSM.psd1
- src\assess\rules\caf.databases.yaml
- src\report\renderers\Export-PowerBi.ps1
- src\Invoke-AZTISubscriptionContext.ps1
- src\ingest\Import-Governance.ps1
- manifests\collectors\Compute\AVDSessionHosts.psd1
- manifests\collectors\Hybrid\ArcSQLManagedInstances.psd1
- manifests\collectors\Management\RecoveryVault.psd1
- manifests\collectors\Security\ConfidentialLedger.psd1
- src\assess\rules\caf.govern.ai.yaml
- src\report\renderers\Export-PowerBiProject.ps1
- src\Invoke-AzureScout.ps1
- src\ingest\Import-ScoutCostInventory.ps1
- manifests\collectors\Compute\AVDWorkspaces.psd1
- manifests\collectors\Hybrid\ArcSQLServers.psd1
- manifests\collectors\Management\ResourceLocks.psd1
- manifests\collectors\Security\DdosProtectionPlans.psd1
- src\assess\rules\caf.govern.cm.yaml
- src\report\renderers\Export-Pptx.ps1
- src\Invoke-ScoutAssessmentCore.ps1
- src\ingest\Import-ScoutDevOpsCapability.ps1
- manifests\collectors\Compute\VirtualMachine.psd1
- manifests\collectors\Hybrid\Clusters.psd1
- manifests\collectors\Migration\AzureMigrateAssessments.psd1
- manifests\collectors\Security\DefenderAlerts.psd1
- src\assess\rules\caf.govern.dg.yaml
- src\report\renderers\Export-React.ps1
- src\Invoke-ScoutPipeline.ps1
- src\pipeline\Get-ScoutCollector.ps1
- manifests\collectors\Compute\VirtualMachineScaleSet.psd1
- manifests\collectors\Hybrid\GalleryImages.psd1
- manifests\collectors\Migration\AzureMigrateDiscoverySites.psd1
- manifests\collectors\Security\DefenderAssessments.psd1
- src\assess\rules\caf.govern.op.yaml
- src\report\renderers\Export-Word.ps1
- src\README.md
- src\pipeline\Get-ScoutCollectorDefinition.ps1
- manifests\collectors\Compute\VMDisk.psd1
- manifests\collectors\Hybrid\LogicalNetworks.psd1
- manifests\collectors\Migration\AzureMigrateProjects.psd1
- manifests\collectors\Security\DefenderPricing.psd1
- src\assess\rules\caf.govern.rc.yaml
- src\report\templates\report-react.html.template
- src\Set-AZTIFolder.ps1
- src\pipeline\Invoke-ScoutCollector.ps1
- manifests\collectors\Compute\VMOperationalData.psd1
- manifests\collectors\Hybrid\MarketplaceGalleryImages.psd1
- manifests\collectors\Migration\DatabaseMigrationServices.psd1
- manifests\collectors\Security\DefenderSecureScore.psd1
- src\assess\rules\caf.govern.rm.yaml
- src\report\templates\report.html.template
- src\Set-AZTIReportPath.ps1
- src\pipeline\Invoke-ScoutDeclarativeCollector.ps1
- manifests\collectors\Compute\VMWare.psd1
- manifests\collectors\Hybrid\StorageContainers.psd1
- manifests\collectors\Migration\DataBox.psd1
- manifests\collectors\Security\EntraDomainServices.psd1
- src\assess\rules\caf.govern.sc.yaml
- src\report\renderers\inventory\Build-AZSCAdvisoryReport.ps1
- src\Start-AZSCWizard.ps1
- src\pipeline\Invoke-ScoutDrawIoJob.ps1
- manifests\collectors\Containers\AKS.psd1
- manifests\collectors\Hybrid\VirtualMachines.psd1
- manifests\collectors\Migration\StackEdge.psd1
- manifests\collectors\Security\KeyVaultKeys.psd1
- src\assess\rules\caf.governance.yaml
- src\report\renderers\inventory\Build-AZSCCostManagementReport.ps1
- src\Start-AZTIExtractionOrchestration.ps1
- src\pipeline\Invoke-ScoutProcessing.ps1
- manifests\collectors\Containers\ARO.psd1
- manifests\collectors\Identity\AdminUnits.psd1
- manifests\collectors\Monitor\ActionGroups.psd1
- manifests\collectors\Security\KeyVaultSecrets.psd1
- src\assess\rules\caf.hybrid.yaml
- src\report\renderers\inventory\Build-AZSCMonitorReport.ps1
- src\Start-AZTIProcessOrchestration.ps1
- src\pipeline\Start-ScoutExtraJobs.ps1
- manifests\collectors\Containers\ContainerApp.psd1
- manifests\collectors\Identity\AppRegistrations.psd1
- manifests\collectors\Monitor\ActivityLogAlertRules.psd1
- manifests\collectors\Security\ManagedHSM.psd1
- src\assess\rules\caf.identity.yaml
- src\report\renderers\inventory\Build-AZSCPolicyReport.ps1
- src\Start-AZTIReporOrchestration.ps1
- src\pipeline\Write-ScoutCacheFile.ps1
- manifests\collectors\Containers\ContainerAppEnv.psd1
- manifests\collectors\Identity\ConditionalAccess.psd1
- manifests\collectors\Monitor\AppInsights.psd1
- manifests\collectors\Security\Sentinel.psd1
- src\assess\rules\caf.integration.yaml
- src\report\renderers\inventory\Build-AZSCQuotaReport.ps1
- src\Test-AZSCModuleUpdate.ps1
- src\report\Build-ScoutFigure.ps1
- manifests\collectors\Containers\ContainerGroups.psd1
- manifests\collectors\Identity\CrossTenantAccess.psd1
- manifests\collectors\Monitor\AppInsightsAvailabilityTests.psd1
- manifests\collectors\Security\Vault.psd1
- src\assess\rules\caf.iot.yaml
- src\report\renderers\inventory\Build-AZSCSecCenterReport.ps1
- src\Test-AZTIManagementGroupAccess.ps1
- src\report\Export-Report.ps1
- manifests\collectors\Containers\ContainerRegistries.psd1
- manifests\collectors\Identity\DirectoryRoles.psd1
- manifests\collectors\Monitor\AppInsightsProactiveDetection.psd1
- manifests\collectors\Security\WafPolicies.psd1
- src\assess\rules\caf.management.yaml
- src\report\renderers\inventory\Build-AZSCSecurityOverviewReport.ps1
- src\Test-AZTIPermissions.ps1
- src\report\Get-ScoutDrift.ps1
- manifests\collectors\Databases\CosmosDB.psd1
- manifests\collectors\Identity\Domains.psd1
- manifests\collectors\Monitor\AppInsightsWebTests.psd1
- manifests\collectors\Storage\BlobContainers.psd1
- src\assess\rules\caf.network.yaml
- src\report\renderers\inventory\Build-AZSCSubsReport.ps1
- src\Test-AZTIPS.ps1
- src\report\Get-ScoutInventoryDrift.ps1
- manifests\collectors\Databases\MariaDB.psd1
- manifests\collectors\Identity\Groups.psd1
- manifests\collectors\Monitor\AutoscaleSettings.psd1
- manifests\collectors\Storage\DiskEncryptionSets.psd1
- src\assess\rules\caf.platformauto.yaml
- src\report\renderers\inventory\Build-AZSCUpdateManagerReport.ps1
- src\Write-AZTIRunLog.ps1
- src\report\Get-ScoutReportSectionIndex.ps1
- manifests\collectors\Databases\MySQL.psd1
- manifests\collectors\Identity\Licensing.psd1
- manifests\collectors\Monitor\DataCollectionEndpoints.psd1
- manifests\collectors\Storage\EdgeHardwareCenter.psd1
- src\assess\rules\caf.resourceorg.yaml
- src\report\renderers\inventory\Export-AZSCAsciiDocReport.ps1
- src\Write-ScoutProgress.ps1
- manifests\collectors\AI\AIFoundryHubs.psd1
- manifests\collectors\Databases\MySQLflexible.psd1
- manifests\collectors\Identity\ManagedIdentities.psd1
- manifests\collectors\Monitor\DataCollectionRules.psd1
- manifests\collectors\Storage\ElasticSan.psd1
- src\assess\rules\caf.security.yaml
- src\report\renderers\inventory\Export-AZSCJsonReport.ps1
- manifests\specs\service-collectors.psd1
- manifests\collectors\AI\AIFoundryProjects.psd1
- manifests\collectors\Databases\POSTGREFlexible.psd1
- manifests\collectors\Identity\ManagedIds.psd1
- manifests\collectors\Monitor\LAWorkspaceLinkedServices.psd1
- manifests\collectors\Storage\FileShares.psd1
- src\assess\rules\caf.storage.yaml
- src\report\renderers\inventory\Export-AZSCMarkdownReport.ps1
- src\analyze\Get-ScoutCostAnomaly.ps1
- manifests\collectors\AI\AppliedAIServices.psd1
- manifests\collectors\Databases\RedisCache.psd1
- manifests\collectors\Identity\NamedLocations.psd1
- manifests\collectors\Monitor\LAWorkspaceSavedSearches.psd1
- manifests\collectors\Storage\LifecyclePolicies.psd1
- src\assess\rules\caf.web.yaml
- src\report\renderers\inventory\Export-AZSCPowerBIReport.ps1
- src\analyze\Get-ScoutIacGap.ps1
- manifests\collectors\AI\AzureAI.psd1
- manifests\collectors\Databases\SQLDB.psd1
- manifests\collectors\Identity\PIMAssignments.psd1
- manifests\collectors\Monitor\LAWorkspaceSolutions.psd1
- manifests\collectors\Storage\NetApp.psd1
- src\assess\rules\casa.security.yaml
- src\report\renderers\inventory\New-AZSCPowerBITemplate.ps1
- src\assess\Compare-Benchmark.ps1
- manifests\collectors\AI\BotServices.psd1
- manifests\collectors\Databases\SQLMI.psd1
- manifests\collectors\Identity\RiskyUsers.psd1
- manifests\collectors\Monitor\MetricAlertRules.psd1
- manifests\collectors\Storage\PartnerStorage.psd1
- src\assess\rules\compliance.initiative.yaml
- src\report\renderers\inventory\Start-AZSCExcelExtraData.ps1
- src\assess\Export-ScoutConfig.ps1
- manifests\collectors\AI\ComputerVision.psd1
- manifests\collectors\Databases\SQLMIDB.psd1
- manifests\collectors\Identity\RoleAssignments.psd1
- manifests\collectors\Monitor\MonitorMetricsIngestion.psd1
- manifests\collectors\Storage\Snapshots.psd1
- src\assess\rules\devops.capability.yaml
- src\report\renderers\inventory\Start-AZSCExcelJob.ps1
- src\assess\Get-ScoutAvailableAssessment.ps1
- manifests\collectors\AI\ContentModerator.psd1
- manifests\collectors\Databases\SQLPOOL.psd1
- manifests\collectors\Identity\SecurityPolicies.psd1
- manifests\collectors\Monitor\MonitorPrivateLinkScopes.psd1
- manifests\collectors\Storage\StorageAccounts.psd1
- src\assess\rules\finops.review.yaml
- src\report\renderers\inventory\Start-AZSCExtraReports.ps1
- src\assess\Import-ScoutConfig.ps1
- manifests\collectors\AI\ContentSafety.psd1
- manifests\collectors\Databases\SQLSERVER.psd1
- manifests\collectors\Identity\ServicePrincipals.psd1
- manifests\collectors\Monitor\MonitorWorkbooks.psd1
- manifests\collectors\Storage\StorageSync.psd1
- src\assess\rules\smart.migration.yaml
- src\report\renderers\inventory\style\Build-AZSCDashboardTabs.ps1
- src\assess\Invoke-Assessment.ps1
- manifests\collectors\AI\CustomVision.psd1
- manifests\collectors\Databases\SQLVM.psd1
- manifests\collectors\Identity\Users.psd1
- manifests\collectors\Monitor\Outages.psd1
- manifests\collectors\Web\AppServiceCertificates.psd1
- src\assess\rules\waf.ai.yaml
- src\report\renderers\inventory\style\Build-AZSCExcelChart.ps1
- src\assess\Invoke-ScoutComplianceAssessment.ps1
- manifests\collectors\AI\FaceAPI.psd1
- manifests\collectors\DevOps\ApiConnections.psd1
- manifests\collectors\Integration\APIM.psd1
- manifests\collectors\Monitor\ResourceDiagnosticSettings.psd1
- manifests\collectors\Web\AppServiceDomains.psd1
- src\assess\rules\waf.avd.yaml
- src\report\renderers\inventory\style\Build-AZSCExcelChartStyle.ps1
- src\assess\Resolve-ScoutAssessmentName.ps1
- manifests\collectors\AI\FormRecognizer.psd1
- manifests\collectors\DevOps\AppConfiguration.psd1
- manifests\collectors\Integration\EventGrid.psd1
- manifests\collectors\Monitor\ScheduledQueryRules.psd1
- manifests\collectors\Web\AppServiceEnvironments.psd1
- src\assess\rules\waf.azurelocal.cost.yaml
- src\report\renderers\inventory\style\Build-AZSCExcelInitialBlock.ps1
- src\assess\Test-ScoutPermission.ps1
- manifests\collectors\AI\HealthInsights.psd1
- manifests\collectors\DevOps\ChaosStudio.psd1
- manifests\collectors\Integration\EventHubClusters.psd1
- manifests\collectors\Monitor\SmartDetectorAlertRules.psd1
- manifests\collectors\Web\APPServicePlan.psd1
- src\assess\rules\waf.azurelocal.operational.yaml
- src\report\renderers\inventory\style\Out-AZSCReportResults.ps1
- src\collect\ConvertFrom-ScoutInventory.ps1
- manifests\collectors\AI\ImmersiveReader.psd1
- manifests\collectors\DevOps\DeploymentEnvironments.psd1
- manifests\collectors\Integration\HealthDataServices.psd1
- manifests\collectors\Monitor\SubscriptionDiagnosticSettings.psd1
- manifests\collectors\Web\APPServices.psd1
- src\assess\rules\waf.azurelocal.performance.yaml
- src\report\renderers\inventory\style\Retirement.kql
- src\collect\ConvertTo-ScoutArcSiteResource.ps1
- manifests\collectors\AI\MachineLearning.psd1
- manifests\collectors\DevOps\DevBoxPools.psd1
- manifests\collectors\Integration\IntegrationAccounts.psd1
- manifests\collectors\Monitor\Workspaces.psd1
- manifests\collectors\Web\CommunicationServices.psd1
- src\assess\rules\waf.azurelocal.reliability.yaml
- src\report\renderers\inventory\style\Start-AZSCExcelCustomization.ps1
- src\collect\ConvertTo-ScoutAvdAzureLocalSessionHost.ps1
- manifests\collectors\AI\MLComputes.psd1
- manifests\collectors\DevOps\DevCenterNetworkConnections.psd1
- manifests\collectors\Integration\LogicApps.psd1
- manifests\collectors\Networking\ApplicationGateways.psd1
- manifests\collectors\Web\DeploymentSlots.psd1
- src\assess\rules\waf.azurelocal.security.yaml
- src\report\renderers\inventory\style\Start-AZSCExcelOrdening.ps1
- src\collect\ConvertTo-ScoutGovernanceResource.ps1
- manifests\collectors\AI\MLDatasets.psd1
- manifests\collectors\DevOps\DevCenters.psd1
- manifests\collectors\Integration\LogicAppsCustomConnectors.psd1
- manifests\collectors\Networking\AzureFirewall.psd1
- manifests\collectors\Web\FluidRelay.psd1
- src\assess\rules\waf.cost.yaml
- src\report\renderers\inventory\style\Support.json
- src\collect\ConvertTo-ScoutManagementGroupHierarchy.ps1
- manifests\collectors\AI\MLDatastores.psd1
- manifests\collectors\DevOps\DevOpsAgentPools.psd1
- manifests\collectors\Integration\Relays.psd1
- manifests\collectors\Networking\BastionHosts.psd1
- manifests\collectors\Web\FunctionApps.psd1
- src\assess\rules\waf.operational.yaml
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 3.5.1 | 7 | 8/4/2026 |
| 3.5.0 | 6 | 8/4/2026 |
| 3.3.4 (current version) | 5 | 8/4/2026 |
| 3.3.3 | 7 | 8/3/2026 |
| 3.3.2 | 4 | 8/3/2026 |
| 3.3.1 | 6 | 8/3/2026 |
| 3.3.0 | 4 | 8/3/2026 |
| 3.1.0 | 9 | 7/31/2026 |
| 3.0.9 | 7 | 7/31/2026 |
| 3.0.8 | 4 | 7/30/2026 |
| 3.0.7 | 3 | 7/30/2026 |
| 3.0.6 | 7 | 7/30/2026 |
| 3.0.5 | 7 | 7/29/2026 |
| 3.0.4 | 4 | 7/29/2026 |
| 3.0.3 | 3 | 7/29/2026 |
| 3.0.2 | 5 | 7/29/2026 |
| 3.0.1 | 4 | 7/29/2026 |
| 3.0.0 | 7 | 7/28/2026 |
| 2.11.0 | 9 | 7/26/2026 |
| 2.10.0 | 5 | 7/26/2026 |
| 2.9.0 | 6 | 7/26/2026 |
| 2.8.0 | 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 | 6 | 7/23/2026 |
| 2.0.0 | 4 | 7/23/2026 |
| 1.0.0 | 48 | 2/25/2026 |