pwsh/dev/functions/exportResourceLocks.ps1 (93 lines of code) (raw):
function exportResourceLocks {
$arrayResourceLocks4CSV = [System.Collections.ArrayList]@()
foreach ($sub in $htResourceLocks.Keys) {
$hlper = $htSubscriptionsMgPath.($sub)
$subscriptionDisplayName = $hlper.DisplayName
$mgPath = $hlper.ParentNameChainDelimited
#sub
if ($htResourceLocks.($sub).SubscriptionLocksCannotDeleteCount -eq 1) {
$null = $arrayResourceLocks4CSV.Add([PSCustomObject]@{
SubscriptionId = $sub
SubscriptionName = $subscriptionDisplayName
MGPath = $mgPath
ScopeType = 'Subscription'
Lock = 'CannotDelete'
Id = "/subscriptions/$sub"
ResourceType = 'Microsoft.Resources/subscriptions'
})
}
if ($htResourceLocks.($sub).SubscriptionLocksReadOnlyCount -eq 1) {
$null = $arrayResourceLocks4CSV.Add([PSCustomObject]@{
SubscriptionId = $sub
SubscriptionName = $subscriptionDisplayName
MGPath = $mgPath
ScopeType = 'Subscription'
Lock = 'ReadOnly'
Id = "/subscriptions/$sub"
ResourceType = 'Microsoft.Resources/subscriptions'
})
}
#rg
if ($htResourceLocks.($sub).ResourceGroupsLocksCannotDeleteCount -gt 0) {
foreach ($res in $htResourceLocks.($sub).ResourceGroupsLocksCannotDelete) {
$null = $arrayResourceLocks4CSV.Add([PSCustomObject]@{
SubscriptionId = $sub
SubscriptionName = $subscriptionDisplayName
MGPath = $mgPath
ScopeType = 'ResourceGroup'
Lock = 'CannotDelete'
Id = $res.rg
ResourceType = 'Microsoft.Resources/subscriptions/resourceGroups'
})
}
}
if ($htResourceLocks.($sub).ResourceGroupsLocksReadOnlyCount -gt 0) {
foreach ($res in $htResourceLocks.($sub).ResourceGroupsLocksReadOnly) {
$null = $arrayResourceLocks4CSV.Add([PSCustomObject]@{
SubscriptionId = $sub
SubscriptionName = $subscriptionDisplayName
MGPath = $mgPath
ScopeType = 'ResourceGroup'
Lock = 'ReadOnly'
Id = $res.rg
ResourceType = 'Microsoft.Resources/subscriptions/resourceGroups'
})
}
}
#res
if ($htResourceLocks.($sub).ResourcesLocksCannotDeleteCount -gt 0) {
foreach ($res in $htResourceLocks.($sub).ResourcesLocksCannotDelete) {
$resSplit = ($res.res -split '/')
$null = $arrayResourceLocks4CSV.Add([PSCustomObject]@{
SubscriptionId = $sub
SubscriptionName = $subscriptionDisplayName
MGPath = $mgPath
ScopeType = 'Resource'
Lock = 'CannotDelete'
Id = $res.res
ResourceType = "$($resSplit[6])/$($resSplit[7])"
})
}
}
if ($htResourceLocks.($sub).ResourcesLocksReadOnlyCount -gt 0) {
foreach ($res in $htResourceLocks.($sub).ResourcesLocksReadOnly) {
$resSplit = ($res.res -split '/')
$null = $arrayResourceLocks4CSV.Add([PSCustomObject]@{
SubscriptionId = $sub
SubscriptionName = $subscriptionDisplayName
MGPath = $mgPath
ScopeType = 'Resource'
Lock = 'ReadOnly'
Id = $res.res
ResourceType = "$($resSplit[6])/$($resSplit[7])"
})
}
}
}
if ($arrayResourceLocks4CSV.count -gt 0) {
if (-not $NoCsvExport) {
Write-Host "Exporting ResourceLocks CSV '$($outputPath)$($DirectorySeparatorChar)$($fileName)_ResourceLocks.csv'"
$arrayResourceLocks4CSV | Sort-Object -Property ScopeType, Lock, SubscriptionId, Id | Export-Csv -Path "$($outputPath)$($DirectorySeparatorChar)$($fileName)_ResourceLocks.csv" -Delimiter "$csvDelimiter" -NoTypeInformation
}
}
}