src/Private/Assessment/Invoke-MCSMCSB.ps1
|
function Invoke-MCSMCSB { Param($SubscriptionID,$MCSBQuery,$ResourceList,$WorkingDirectory,$Debug) if ($Debug.IsPresent) { $DebugPreference = "Continue" } else { $DebugPreference = "SilentlyContinue" } Write-Debug ((get-date -Format 'yyyy-MM-dd HH:mm:ss') + ' - Starting MCSB Module') $MCSBLocalResults = @() $ResourceCollection = @() foreach ($Subscription in $SubscriptionID) { Write-Host "Processing Security loops: $Subscription" try { $QueryResult = Search-AzGraph -Query $MCSBQuery -first 1000 -Subscription $Subscription -Debug:$false } catch { $QueryResult = Search-AzGraph -Query $MCSBQuery -first 200 -Subscription $Subscription -Debug:$false } $MCSBLocalResults += $QueryResult while ($QueryResult.SkipToken) { try { $QueryResult = Search-AzGraph -Query $MCSBQuery -SkipToken $QueryResult.SkipToken -Subscription $Subscription -first 1000 -Debug:$false } catch { $QueryResult = Search-AzGraph -Query $MCSBQuery -SkipToken $QueryResult.SkipToken -Subscription $Subscription -first 200 -Debug:$false } $MCSBLocalResults += $QueryResult } } Write-Host "Exporting Security Benchmark Recommendations to CSV" $MCSBLocalResults | Export-Csv -Path ($workingDirectory + "\SecurityBenchmarkRecommendations.csv") -NoTypeInformation -Encoding UTF8 Foreach ($MCSB in $MCSBLocalResults) { if ($MCSB.state -eq 'Unhealthy' -and $MCSB.recommendationMetadataState -eq 'failed') { $MCSBResourceType = $MCSB.resourceId.Split('/')[6]+ '/' + $MCSB.resourceId.Split('/')[7] $Resourceid = $ResourceList | where-object { $_.id -eq $MCSB.resourceId } if ([string]::IsNullOrEmpty($Resourceid.id) -eq $false) { $bytes = [System.Text.Encoding]::UTF8.GetBytes($MCSB.recommendationDisplayName) $RecomID = ($bytes | ForEach-Object { $_.ToString("X2") }) -join '' $ResObj = [PSCustomObject]@{ 'Recommendation Guid' = $RecomID 'Recommendation Title' = $MCSB.recommendationDisplayName 'Description' = $MCSB.description 'Priority' = $MCSB.severity 'Customer-facing annotation' = "" 'Internal-facing notes' = ("MCSB Link: "+$MCSB.azurePortalRecommendationLink) 'Potential Benefit' = "" 'Resource Type' = $MCSBResourceType 'Resource ID' = $Resourceid.id } $ResourceCollection += $ResObj } } } return $ResourceCollection } |