Quality: Get-windowscapability -name Rsat* -online | Add-windowscapability -online Extra

If you run:

$results | Select-Object Name, State, RestartNeeded Or real-time progress: If you run: $results | Select-Object Name, State,

Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability -Online You’ll likely get an error like: Add-WindowsCapability: A positional parameter cannot be found that accepts argument ... Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability -Online Wait — that’s the same command you wrote. Let me clarify: the pipeline works by binding -Name automatically if the object has a Name property. RSAT capabilities do. So actually, your command is syntactically valid . If you run: $results | Select-Object Name, State,

Get-WindowsCapability -Name RSAT* -Online | ForEach-Object Write-Host "Installing $($_.Name)..." -ForegroundColor Cyan Add-WindowsCapability -Online -Name $_.Name If you run: $results | Select-Object Name, State,

But why might it still be “not a good report”? Your command provides no feedback until it finishes or errors. Better approach:

Or to capture results: