Skip to content

Assessment Prerequisites

These prerequisites are specific to the CAF/WAF assessment platform (Invoke-AzureScout -Assessment, Test-ScoutPermission). They are additional to — not a replacement for — the inventory-mode prerequisites in Prerequisites & Required Modules.

PowerShell 7 is a hard requirement

Every assessment script starts with #Requires -Version 7.0, and the module manifest declares PowerShellVersion = '7.0' with CompatiblePSEditions = @('Core') — so Windows PowerShell 5.1 cannot import AzureScout at all, in either mode. Invoke-AzureScout also throws on Desktop as a second guard. Run everything in pwsh.

System requirements

RequirementDetails
PowerShell7.0.3+ (source: pmo/plans/master-plan.md §10)
Operating SystemWindows, Linux, or macOS — the platform is pure PowerShell/.NET
.NET SDKNot required for live outputs. The held PowerPoint renderer's implementation uses it; see below
gitRequired only if you opt an assessment into the legacy AzGovViz ingestor instead of the native Governance default (see Auth & permissions) — used to shallow-clone the Azure Governance Visualizer tool at first use. Not needed by any assessment out of the box.

Required PowerShell modules

Optional dependencies are not declared as core requirements

AzureScout's manifest (AzureScout.psd1) declares ImportExcel, Az.Accounts, Az.ResourceGraph, Az.Storage, Az.Compute, Az.Resources, powershell-yaml, and Az.Advisor. PowerShellGet resolves them when AzureScout is installed from the Gallery. Importing a local clone does not install them. Optional integrations such as cost collection and the legacy Azure Governance Visualizer still have separate dependencies; install those only when you enable the corresponding feature.

ModulePurposeRequired forDeclared by AzureScout.psd1?
Az.AccountsAuthentication / token acquisitionAllYes
Az.ResourceGraphThe Collect layer's Resource Graph queriesAllYes
Az.ResourcesRole assignment reads (permission pre-flight)AllYes
powershell-yamlParses the caf.*/waf.* rule YAML files (Get-RuleSet)All scoring (any assessment with Rules)Yes
Az.AdvisorGet-AzAdvisorRecommendation, used by the AdvisorScores ingestAssessments whose Ingest includes AdvisorScores (CAF: Azure Landing Zone, Management, Security, Compute, Scout: Cost Optimization)Yes
ImportExcelPackage dependency retained for the held Excel renderer and legacy workbook testsNo live output formatYes
AzAPICallDependency of the third-party Azure Governance VisualizerAssessments whose Ingest includes AzGovVizNo — Import-AzGovViz.ps1 installs it itself at first use (Install-Module AzAPICall -Scope CurrentUser -Force) if not already present

Az.Security is documented, not yet wired up

pmo/plans/master-plan.md §10 and src/README.md list Az.Security as a dependency, but no current assessment code calls an Az.Security cmdlet — Security-category rules read collect.security.defenderPlans, which the Collect layer (Invoke-Collect.ps1) currently always returns empty (@()). Installing it does no harm, but it is not load-bearing for any assessment today.

Held PowerPoint renderer — .NET SDK, not Python

The Pptx renderer is on hold and does not emit an executive deck in a live run. Its retained implementation uses the OpenXML SDK (DocumentFormat.OpenXml), not python-pptx and not PowerPoint COM automation—see the accepted decision record, PPTX executive-deck renderer.

No Python required

Earlier design drafts specced a python3 + python-pptx shell-out for the PPTX tier. That was superseded — src/report/renderers/Export-Pptx.ps1 is pure PowerShell/.NET today. You do not need Python installed anywhere in the pipeline for any output format.

What the retained Export-Pptx.ps1 implementation needs when its internal tests exercise it:

  1. On first use, it checks for a cached copy of DocumentFormat.OpenXml 3.0.2 (and its transitive dependencies) under output/.tools/openxml/3.0.2/.
  2. If not cached, it requires the dotnet CLI on PATH — it shells out to dotnet build against a throwaway class-library project that references the NuGet package, which resolves and downloads the assembly graph via NuGet/MSBuild, then caches the three resulting DLLs.
  3. Every later run (same machine) loads the cached DLLs via Add-Type -Path — no network access, no dotnet needed once the cache is warm.
  4. If dotnet is not on PATH and nothing is cached, the held renderer's direct/internal use throws a clear error.
powershell
# Only needed when developing or directly testing the held Pptx renderer
dotnet --version

src/README.md is stale

src/README.md's Dependencies table still lists python3 + python-pptx for the PPTX tier. That reflects an earlier prototype (src/report/renderers/Export-Pptx.ps1 pre-AB#5044) and does not match the accepted, implemented renderer described above and in the decision record. Trust this page and the decision record, not src/README.md, for the PPTX tier.

What the Estate assessment does NOT need

The Estate assessment (-Assessment Estate) is inventory-only — it has no Rules, so it never calls Get-RuleSet and therefore never needs powershell-yaml. It still runs under PowerShell 7 through the same Invoke-AzureScout entry point, so the PS7 requirement above still applies even though it doesn't score anything.

Next steps

Released under the MIT License.