Added
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Export-CAPolicies.ps1
|
||||
|
||||
.DESCRIPTION
|
||||
Export Conditional Access policies to JSON files for backup purposes.
|
||||
|
||||
.LINK
|
||||
www.alitajran.com/export-conditional-access-policies/
|
||||
|
||||
.NOTES
|
||||
Written by: ALI TAJRAN
|
||||
Website: www.alitajran.com
|
||||
LinkedIn: linkedin.com/in/alitajran
|
||||
|
||||
.CHANGELOG
|
||||
V1.00, 11/16/2023 - Initial version
|
||||
V1.10, 03/23/2026 - Skip Microsoft-managed policies on export
|
||||
#>
|
||||
|
||||
# Connect to Microsoft Graph API
|
||||
Connect-MgGraph -Scopes 'Policy.Read.All' -NoWelcome
|
||||
|
||||
# Export path for CA policies
|
||||
$ExportPath = "C:\temp"
|
||||
|
||||
try {
|
||||
# Retrieve all conditional access policies from Microsoft Graph API
|
||||
$AllPolicies = Get-MgIdentityConditionalAccessPolicy -All
|
||||
|
||||
if ($AllPolicies.Count -eq 0) {
|
||||
Write-Host "There are no CA policies found to export." -ForegroundColor Yellow
|
||||
}
|
||||
else {
|
||||
# Iterate through each policy
|
||||
foreach ($Policy in $AllPolicies) {
|
||||
try {
|
||||
# Skip Microsoft-managed policies
|
||||
if ($Policy.DisplayName -like 'Microsoft-managed:*') {
|
||||
Write-Host "Skipped Microsoft-managed policy: $($Policy.DisplayName)" -ForegroundColor Cyan
|
||||
continue
|
||||
}
|
||||
$PolicyName = $Policy.DisplayName -replace '[\\/:*?"<>|]', ''
|
||||
$PolicyJSON = $Policy | ConvertTo-Json -Depth 6
|
||||
$PolicyJSON | Out-File "$ExportPath\$PolicyName.json" -Force
|
||||
Write-Host "Successfully backed up CA policy: $($Policy.DisplayName)" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host "Error occurred while backing up CA policy: $($Policy.DisplayName). $($_.Exception.Message)" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host "Error occurred: $($_.Exception.Message)" -ForegroundColor Red
|
||||
}
|
||||
Reference in New Issue
Block a user