AzureScout.psd1
|
# # Module manifest for module 'AzureScout' # # Author: Kristopher Turner # # Created: 2026-02-22 # @{ # Script module or binary module file associated with this manifest. RootModule = 'AzureScout.psm1' # Version number of this module. ModuleVersion = '2.5.1' # Supported PSEditions CompatiblePSEditions = @('Core') # ID used to uniquely identify this module GUID = 'a0785538-fd96-4960-bf93-c733f88519e0' # Author of this module Author = 'Kristopher Turner' # Company or vendor of this module CompanyName = 'Hybrid Cloud Solutions' # Copyright statement for this module Copyright = '(c) 2026 Hybrid Cloud Solutions. All rights reserved.' # Description of the functionality provided by this module Description = 'AzureScout — discover, inventory, and assess everything in your Azure environment from one command. Run Invoke-AzureScout with no parameters for a guided wizard, or drive it with switches: by default it inventories Azure resources, Entra ID, and identity objects (Excel, JSON, Markdown, AsciiDoc); add -Assessment and it runs a read-only CAF/WAF landing-zone assessment, scoring the tenant against Cloud Adoption Framework design areas and Well-Architected pillars and producing Power BI, self-contained HTML, executive PowerPoint, and JSON/Excel evidence. See everything. Own your cloud. (Requires PowerShell 7 on PowerShell Core.)' # Minimum version of the PowerShell engine required by this module # AzureScout requires PowerShell 7+. Declaring this here makes Import-Module reject # Windows PowerShell 5.1 (Desktop) cleanly and immediately, instead of the module # loading and later crashing deep inside a strict-mode-sensitive code path (e.g. the # Entra/Graph permission audit — see Invoke-AZTIPermissionAudit.ps1). PowerShellVersion = '7.0' # Name of the PowerShell host required by this module # PowerShellHostName = '' # Minimum version of the PowerShell host required by this module # PowerShellHostVersion = '' # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # DotNetFrameworkVersion = '' # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # ClrVersion = '' # Processor architecture (None, X86, Amd64) required by this module # ProcessorArchitecture = '' # Modules that must be imported into the global environment prior to importing this module RequiredModules = @() # Assemblies that must be loaded prior to importing this module # RequiredAssemblies = @() # Script files (.ps1) that are run in the caller's environment prior to importing this module. # ScriptsToProcess = @() # Type files (.ps1xml) to be loaded when importing this module # TypesToProcess = @() # Format files (.ps1xml) to be loaded when importing this module # FormatsToProcess = @() # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess # NestedModules = @() # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. FunctionsToExport = @( #Public Jobs 'Start-AZSCAdvisoryJob', 'Start-AZSCPolicyJob', 'Start-AZSCSecCenterJob', 'Start-AZSCSubscriptionJob', 'Wait-AZSCJob', #Public Diagram Functions 'Build-AZSCDiagramSubnet', 'Set-AZSCDiagramFile', 'Start-AZSCDiagramJob', 'Start-AZSCDiagramNetwork', 'Start-AZSCDiagramOrganization', 'Start-AZSCDiagramSubscription', 'Start-AZSCDrawIODiagram', #Main Functions 'Invoke-AzureScout', 'Test-AZSCPermissions', #Guided setup wizard (AB#5541) -- what a bare Invoke-AzureScout opens 'Start-AZSCWizard', #Assessment platform entry points (Epics AB#5023 / AB#5056, AB#5024) 'Invoke-ScoutAssessment', 'Test-ScoutPermission', #Unattended pipeline entry point (AB#5050) 'Invoke-ScoutPipeline', #Analysis functions -- offline, never call Azure (AB#324/AB#325/AB#326) 'Get-ScoutInventoryDrift', 'Get-ScoutCostAnomaly', 'Get-ScoutIacGap', #Assessment config load/save (AB#373/AB#374) 'Import-ScoutConfig', 'Export-ScoutConfig' ) # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = @() # Variables to export from this module VariablesToExport = @() # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. AliasesToExport = @() # DSC resources to export from this module # DscResourcesToExport = @() # List of all modules packaged with this module # ModuleList = @() # List of all files packaged with this module # FileList = @() # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. PrivateData = @{ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. Tags = @('Azure','AzureScout','Discovery','Inventory','Assessment','CAF','WAF','WellArchitected','CloudAdoptionFramework','LandingZone','Governance','AZSC','EntraID','Resources','ARM','Graph','Reporting','Excel','PowerBI') # A URL to the license for this module. LicenseUri = 'https://github.com/thisismydemo/azure-scout/blob/main/LICENSE' # A URL to the main website for this project. ProjectUri = 'https://thisismydemo.cloud/azure-scout/' # A URL to an icon representing this module. IconUri = 'https://raw.githubusercontent.com/thisismydemo/azure-scout/main/docs/images/azurescout-icon.svg' # ReleaseNotes of this module ReleaseNotes = 'v2.5.1 -- Seven fixes that let a full inventory run complete against a real tenant. Every one was found by running the product end to end against live Azure; the 1692-test suite passed throughout because nothing drove the extraction, processing and reporting chain against real collector output. Extraction: $MGContainerExtension was consumed unconditionally by the resourcecontainers query but only assigned in the -ManagementGroup branch, so a run without that switch died on an unset variable (AB#5547). Processing: 41 .IsPresent reads on parameters not declared [switch] -- $null when the caller omits them -- replaced with a null-safe [bool] coercion (AB#5547). Reporting (AB#5567): ImportExcel throws on a -Style range or -TableName over a worksheet with zero data rows, so both are now supplied only when there is at least one row; the cost and update-manager worksheets read $vm.Name/$vm.Size/OS SKU against a collector that emits VM Name/VM Size/OS Version, so those sheets had never carried VM rows; 29 worksheet dereferences threw whenever the estate produced no such sheet (no public IPs, no disks, no VMs) and now resolve through a Worksheets lookup; 10 pivot titles were read before assignment; and the Markdown export died on a trailing italic underscore parsed as part of the identifier. Verified live: 227 Azure resources, 994 Excel rows, 40 Power BI CSVs, plus JSON, Markdown and the draw.io diagram, with Azure DevOps extraction returning 166 resources across 74 projects -- the first live-tenant verification of the -IncludeDevOps collectors. Known limitation: Build-AZSCExcelComObject emits a non-fatal error when Excel is not installed; the run completes regardless. Full suite 1692 passed, 0 failed, 3 skipped. v2.5.0 -- One collection pass. A combined inventory + assessment run now queries Azure once instead of twice (AB#5543). The inventory pass already projects the full properties bag from resources, networkresources and resourcecontainers, a superset of what the assessment typed queries were re-fetching, so the assessment shapes its scalars from those in-memory rows via ConvertFrom-ScoutInventory instead of issuing its own Resource Graph pack. Exactly one query still reaches Resource Graph in a combined run: sqlDefenderPricing reads the SecurityResources table, which inventory only touches under -SecurityCenter. The assessment-only path is unchanged and the KQL remains the reference implementation. v2.4.0 -- One command, and a guided wizard. Inventory and assessment are modes of a single Invoke-AzureScout rather than two cmdlets: Invoke-AzureScout -Assessment runs the CAF/WAF assessment, and without -Assessment the command behaves as before. -CollectOnly and -FromCollect moved onto Invoke-AzureScout, and assessment mode now honours the inventory sign-in parameters. -OutputFormat widened to [string[]] so one run can request several renderers. DEPRECATED: Invoke-ScoutAssessment still works but will be removed in v3.0.0. NEW: running Invoke-AzureScout with no parameters in an interactive session opens a guided wizard; it never fires in a non-interactive host, and -NoWizard forces that path. Full history for every earlier release is in CHANGELOG.md: https://github.com/thisismydemo/azure-scout/blob/main/CHANGELOG.md' # Prerelease string of this module # Prerelease = '' # Flag to indicate whether the module requires explicit user acceptance for install/update/save # RequireLicenseAcceptance = $false # External dependent modules of this module # ExternalModuleDependencies = @() } # End of PSData hashtable } # End of PrivateData hashtable # HelpInfo URI of this module # HelpInfoURI = '' # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. # DefaultCommandPrefix = '' } |