diff --git a/.github/workflows/dev_cippkkxvm.yml b/.github/workflows/dev_cippkkxvm.yml
new file mode 100644
index 000000000000..665a3bcf8afa
--- /dev/null
+++ b/.github/workflows/dev_cippkkxvm.yml
@@ -0,0 +1,30 @@
+# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
+# More GitHub Actions for Azure: https://github.com/Azure/actions
+
+name: Build and deploy Powershell project to Azure Function App - cippkkxvm
+
+on:
+ push:
+ branches:
+ - dev
+ workflow_dispatch:
+
+env:
+ AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
+
+jobs:
+ deploy:
+ runs-on: windows-latest
+
+ steps:
+ - name: 'Checkout GitHub Action'
+ uses: actions/checkout@v4
+
+ - name: 'Run Azure Functions Action'
+ uses: Azure/functions-action@v1
+ id: fa
+ with:
+ app-name: 'cippkkxvm'
+ slot-name: 'Production'
+ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
+ publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_171C3E2B1E2346AAA333905DFCA62F2D }}
\ No newline at end of file
diff --git a/.github/workflows/dev_cippkwn4s-auditlog.yml b/.github/workflows/dev_cippkwn4s-auditlog.yml
new file mode 100644
index 000000000000..b27c1832c8c6
--- /dev/null
+++ b/.github/workflows/dev_cippkwn4s-auditlog.yml
@@ -0,0 +1,30 @@
+# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
+# More GitHub Actions for Azure: https://github.com/Azure/actions
+
+name: Build and deploy Powershell project to Azure Function App - cippkwn4s-auditlog
+
+on:
+ push:
+ branches:
+ - dev
+ workflow_dispatch:
+
+env:
+ AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
+
+jobs:
+ deploy:
+ runs-on: windows-latest
+
+ steps:
+ - name: 'Checkout GitHub Action'
+ uses: actions/checkout@v4
+
+ - name: 'Run Azure Functions Action'
+ uses: Azure/functions-action@v1
+ id: fa
+ with:
+ app-name: 'cippkwn4s-auditlog'
+ slot-name: 'Production'
+ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
+ publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_4CBFBE8BE62240D789C371767B49278E }}
\ No newline at end of file
diff --git a/.github/workflows/dev_cipplwwww-proc.yml b/.github/workflows/dev_cipplwwww-proc.yml
new file mode 100644
index 000000000000..d5f9c210f7e0
--- /dev/null
+++ b/.github/workflows/dev_cipplwwww-proc.yml
@@ -0,0 +1,30 @@
+# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
+# More GitHub Actions for Azure: https://github.com/Azure/actions
+
+name: Build and deploy Powershell project to Azure Function App - cipplwwww-proc
+
+on:
+ push:
+ branches:
+ - dev
+ workflow_dispatch:
+
+env:
+ AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
+
+jobs:
+ deploy:
+ runs-on: windows-latest
+
+ steps:
+ - name: 'Checkout GitHub Action'
+ uses: actions/checkout@v4
+
+ - name: 'Run Azure Functions Action'
+ uses: Azure/functions-action@v1
+ id: fa
+ with:
+ app-name: 'cipplwwww-proc'
+ slot-name: 'Production'
+ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
+ publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_B8CE64E970E74E6AB2D6655823D95B1A }}
\ No newline at end of file
diff --git a/AddAlertSubscription_Queue/function.json b/AddAlertSubscription_Queue/function.json
deleted file mode 100644
index 86160597ac04..000000000000
--- a/AddAlertSubscription_Queue/function.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "scriptFile": "../Modules/CippEntrypoints/CippEntrypoints.psm1",
- "entryPoint": "Receive-CippQueueTrigger",
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "AlertSubscriptions"
- }
- ]
-}
diff --git a/AddChocoApp_OrchestrationStarterTimer/function.json b/AddChocoApp_OrchestrationStarterTimer/function.json
deleted file mode 100644
index d96b29b5a0ed..000000000000
--- a/AddChocoApp_OrchestrationStarterTimer/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 12 * * *"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
\ No newline at end of file
diff --git a/AddChocoApp_OrchestrationStarterTimer/run.ps1 b/AddChocoApp_OrchestrationStarterTimer/run.ps1
deleted file mode 100644
index 85d820ceb522..000000000000
--- a/AddChocoApp_OrchestrationStarterTimer/run.ps1
+++ /dev/null
@@ -1,7 +0,0 @@
-param($Timer)
-
-try {
- Start-ApplicationOrchestrator
-} catch {
- Write-Host "AddChocoApp_OrchestratorStarterTimer Exception: $($_.Exception.Message)"
-}
diff --git a/BestPracticeAnalyser_OrchestrationStarterTimer/function.json b/BestPracticeAnalyser_OrchestrationStarterTimer/function.json
deleted file mode 100644
index cbdf59ee8bba..000000000000
--- a/BestPracticeAnalyser_OrchestrationStarterTimer/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 3 * * *"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
\ No newline at end of file
diff --git a/BestPracticeAnalyser_OrchestrationStarterTimer/run.ps1 b/BestPracticeAnalyser_OrchestrationStarterTimer/run.ps1
deleted file mode 100644
index 5b9e12f54258..000000000000
--- a/BestPracticeAnalyser_OrchestrationStarterTimer/run.ps1
+++ /dev/null
@@ -1,3 +0,0 @@
-param($Timer)
-
-Start-BPAOrchestrator
diff --git a/Z_CIPPHttpTrigger/function.json b/CIPPHttpTrigger/function.json
similarity index 83%
rename from Z_CIPPHttpTrigger/function.json
rename to CIPPHttpTrigger/function.json
index 179d246817ff..5aa5c500a642 100644
--- a/Z_CIPPHttpTrigger/function.json
+++ b/CIPPHttpTrigger/function.json
@@ -27,12 +27,6 @@
"name": "Subscription",
"queueName": "AlertSubscriptions"
},
- {
- "type": "queue",
- "direction": "out",
- "name": "mailboxstats",
- "queueName": "generalAllTenantQueue"
- },
{
"type": "queue",
"direction": "out",
@@ -45,12 +39,6 @@
"name": "alertqueue",
"queueName": "alertqueue"
},
- {
- "type": "queue",
- "direction": "out",
- "name": "gdapqueue",
- "queueName": "gdapqueue"
- },
{
"type": "queue",
"direction": "out",
diff --git a/Scheduler_Extensions/function.json b/CIPPTimer/function.json
similarity index 58%
rename from Scheduler_Extensions/function.json
rename to CIPPTimer/function.json
index c178a68af69f..55e4edb35f11 100644
--- a/Scheduler_Extensions/function.json
+++ b/CIPPTimer/function.json
@@ -1,8 +1,10 @@
{
+ "scriptFile": "../Modules/CippEntrypoints/CippEntrypoints.psm1",
+ "entryPoint": "Receive-CippTimerTrigger",
"bindings": [
{
"name": "Timer",
- "schedule": "0 0 */2 * * *",
+ "schedule": "0 0/15 * * * *",
"direction": "in",
"type": "timerTrigger"
},
diff --git a/CIPPTimers.json b/CIPPTimers.json
new file mode 100644
index 000000000000..e8763e7cf3d9
--- /dev/null
+++ b/CIPPTimers.json
@@ -0,0 +1,122 @@
+[
+ {
+ "Command": "Start-UserTasksOrchestrator",
+ "Description": "Orchestrator to process user scheduled tasks",
+ "Cron": "0 */15 * * * *",
+ "Priority": 1,
+ "RunOnProcessor": true,
+ "PreferredProcessor": "usertasks"
+ },
+ {
+ "Command": "Start-CIPPProcessorQueue",
+ "Description": "Timer to handle user initiated tasks",
+ "Cron": "0 */15 * * * *",
+ "Priority": 1,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-AuditLogOrchestrator",
+ "Description": "Orchestrator to process audit logs",
+ "Cron": "0 */15 * * * *",
+ "Priority": 2,
+ "RunOnProcessor": true,
+ "PreferredProcessor": "auditlog",
+ "IsSystem": true
+ },
+ {
+ "Command": "Start-WebhookOrchestrator",
+ "Description": "Orchestrator to process webhooks",
+ "Cron": "0 */15 * * * *",
+ "Priority": 3,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-StandardsOrchestrator",
+ "Description": "Orchestrator to process standards",
+ "Cron": "0 0 */4 * * *",
+ "Priority": 4,
+ "RunOnProcessor": true,
+ "PreferredProcessor": "standards"
+ },
+ {
+ "Command": "Start-CIPPGraphSubscriptionCleanupTimer",
+ "Description": "Orchestrator to cleanup old Graph subscriptions",
+ "Cron": "0 0 0 * * *",
+ "Priority": 5,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-SchedulerOrchestrator",
+ "Description": "Orchestrator to process system scheduled tasks",
+ "Cron": "0 0 * * * *",
+ "Priority": 6,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Set-CIPPGDAPInviteGroups",
+ "Description": "Orchestrator to map the groups for GDAP invites",
+ "Cron": "0 0 */3 * * *",
+ "Priority": 5,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-UpdateTokensTimer",
+ "Description": "Orchestrator to update tokens",
+ "Cron": "0 0 0 * * 0",
+ "Priority": 7,
+ "RunOnProcessor": true,
+ "IsSystem": true
+ },
+ {
+ "Command": "Start-CIPPGraphSubscriptionRenewalTimer",
+ "Description": "Orchestrator to renew Graph subscriptions",
+ "Cron": "0 15 * * * *",
+ "Priority": 8,
+ "RunOnProcessor": true,
+ "IsSystem": true
+ },
+ {
+ "Command": "Start-DomainOrchestrator",
+ "Description": "Orchestrator to process domains",
+ "Cron": "0 0 0 * * *",
+ "Priority": 10,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-UpdatePermissionsOrchestrator",
+ "Description": "Orchestrator to update CPV permissions",
+ "Cron": "0 0 0 * * *",
+ "Priority": 10,
+ "RunOnProcessor": true,
+ "IsSystem": true
+ },
+ {
+ "Command": "Start-BillingTimer",
+ "Description": "Timer to process billing",
+ "Cron": "0 0 0 * * *",
+ "Priority": 12,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-BPAOrchestrator",
+ "Description": "Orchestrator to process BPA reports",
+ "Cron": "0 0 3 * * *",
+ "Priority": 10,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-ExtensionOrchestrator",
+ "Description": "Orchestrator to process extensions",
+ "Cron": "0 0 */2 * * *",
+ "Priority": 12,
+ "RunOnProcessor": true
+ },
+ {
+ "Command": "Start-CIPPStatsTimer",
+ "Description": "Timer to process CIPP stats",
+ "Cron": "0 0 0 * * *",
+ "Priority": 15,
+ "RunOnProcessor": true,
+ "IsSystem": true
+ }
+]
diff --git a/Cleanup_OldAuditLogs/function.json b/Cleanup_OldAuditLogs/function.json
deleted file mode 100644
index 7e97fe568d29..000000000000
--- a/Cleanup_OldAuditLogs/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 0 * * *"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/Cleanup_OldAuditLogs/run.ps1 b/Cleanup_OldAuditLogs/run.ps1
deleted file mode 100644
index cc677d77c8da..000000000000
--- a/Cleanup_OldAuditLogs/run.ps1
+++ /dev/null
@@ -1,9 +0,0 @@
-# Input bindings are passed in via param block.
-param($Timer)
-
-try {
- $Tenants = Get-Tenants -IncludeAll | Where-Object { $_.customerId -ne $env:TenantID -and $_.Excluded -eq $false }
- $Tenants | ForEach-Object {
- Remove-CIPPGraphSubscription -cleanup $true -TenantFilter $_.defaultDomainName
- }
-} catch {}
diff --git a/ConversionTable.csv b/ConversionTable.csv
index f890ee46f8ad..55ebdfd465b9 100644
--- a/ConversionTable.csv
+++ b/ConversionTable.csv
@@ -228,9 +228,9 @@ Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE
Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE_NOPREREQ,2cf302fe-62db-4e20-b573-e0998b1208b5,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,CRMINSTANCE_GCC,483cc331-f4df-4a3b-b8ca-fe1a247569f6,Microsoft Dynamics CRM Online Instance
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,CDS_FIELD_SERVICE_CONTRACTOR_GCC,2457fe40-65be-48a1-935f-924ad6e62dba,Common Data Service Field service Part Time Contractors for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
@@ -253,27 +253,27 @@ Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAG
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_CDS_RETAIL,93cc200d-a47f-4c56-aec1-83f8b0d0425a,Common Data Service for Dynamics 365 Retail
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,FLOW_FOR_IOM_USL,9e6d1620-dce9-4655-8933-af8fa5bccc9c,Data Integration for IOM with Power Automate USL
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_RETAIL,117e3aa0-8d08-4a19-a6a5-90b7a96e2128,Dynamics 365 Commerce
-Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_ACC_PROTECTION,4c00c16c-0304-4421-b598-555c3e78edcb,Dynamics 365 Fraud Protection - Account Protection
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_LOSS_PREVENTION,ecc62904-fa88-4552-a62c-fe582fb31444,Dynamics 365 Fraud Protection - Loss Prevention
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_PURCH_PROTECTION,d703990f-006e-459b-b8dd-1267c4533a22,Dynamics 365 Fraud Protection - Purchase Protection
@@ -296,14 +296,14 @@ Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,POWERAPPS FOR DYNAMICS 365
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,DYNAMICS 365 FOR CUSTOMER SERVICE
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,D365_FIELD_SERVICE_ATTACH,55c9148b-d5f0-4101-b5a0-b2727cfc0916,Dynamics 365 for Field Service Attach
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Field Service Enterprise Edition,DYN365_ENTERPRISE_FIELD_SERVICE,c7d15985-e746-4f01-b113-20b575898250,DYN365_ENTERPRISE_FIELD_SERVICE,8c66ef8a-177f-4c0d-853c-d4f219331d09,Dynamics 365 for Field Service
@@ -393,13 +393,13 @@ Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,PROJECT ONLINE ESSENTIALS
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SHAREPOINT ONLINE (PLAN 2)
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Forms_Pro_SalesEnt_GCC,33850b82-0a37-4ebb-a0b2-ee163facd716,Microsoft Dynamics 365 Customer Voice for Sales Enterprise for GCC
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
@@ -411,12 +411,12 @@ Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,DYN365_SALES_INSIGHTS,fedc185f-0711-4cc0-80ed-0a92da1a8384,Dynamics 365 AI for Sales (Embedded)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
@@ -432,7 +432,7 @@ Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd9
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_CDS_SUPPLYCHAINMANAGEMENT,b6a8b974-2956-4e14-ae81-f0384c363528,Common Data Service for Dynamics 365 Supply Chain Management
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
-Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,D365_SCM_Attach,b21c777f-c2d5-486e-88f6-fc0a3e474271,Dynamics 365 for Supply Chain Management Attach
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Marketing Business Edition,DYN365_BUSINESS_MARKETING,238e2f8d-e429-4035-94db-6926be4ffe7b,DYN365_BUSINESS_Marketing,393a0c96-9ba1-4af0-8975-fa2f853a25ac,Dynamics 365 Marketing
@@ -521,7 +521,7 @@ Dynamics 365 P1 Tria for Information Workers,DYN365_ENTERPRISE_P1_IW,338148b6-1b
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365CDSforProjectOperations,7df1d500-ca5c-4229-8cea-815bc88798c9,Common Data Service for Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperationsCDS,18fa3aba-b085-4105-87d7-55617b8585e6,Dynamics 365 Project Operations CDS
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperations,69f07c66-bee4-4222-b051-195095efee5b,Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
@@ -1081,7 +1081,7 @@ Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,BPOS_S_TODO_2,c87f142c-d1e9-4363-8630-aaea9c4d9ae5,To-Do (Plan 2)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,UNIVERSAL_PRINT_NO_SEEDING,b67adbaf-a096-42c9-967e-5a84edbe0086,Universal Print Without Seeding
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,WHITEBOARD_PLAN3,4a51bca5-1eff-43f5-878c-177680f191af,Whiteboard (Plan 3)
-Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,YAMMER_EDU,2078e8df-cff6-4290-98cb-5408261a760a,Yammer for Academic
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,FORMS_PLAN_E1,159f4cd6-e380-449f-a816-af1a9ef76344,MICROSOFT FORMS (PLAN E1)
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,OFFICE_BUSINESS,094e7854-93fc-4d55-b2c0-3ab5369ebdc1,OFFICE 365 BUSINESS
@@ -1427,6 +1427,7 @@ Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_APPS,a62f8878-de10-42f3-b68f-6149a25ceb97,Microsoft 365 Copilot in Productivity Apps
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_BUSINESS_CHAT,3f30311c-6b1e-48a4-ab79-725b469da960,Microsoft Copilot with Graph-grounded chat
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_CONNECTORS,89f1c4c8-0878-40f7-804d-869c9128ab5d,Power Platform Connectors in Microsoft 365 Copilot
+Microsoft 365 Domestic Calling Plan (120 minutes) - US,MCOPSTN5_US,d13e9d1b-316a-4946-98c6-362c97a4fdfe,PSTN5_US,1346d5e6-15a6-4b88-9693-806ff7296a7a,Microsoft 365 Domestic Calling Plan - US (120 minutes)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,MICROSOFTBOOKINGS,199a5c09-e0ca-4e37-8f7c-b05d533e1ea2,Microsoft Bookings
@@ -3335,6 +3336,7 @@ Microsoft Teams Phone Standard for TELSTRA,MCOEV_TELSTRA,ffaf2d68-1c95-4eb3-9ddd
Microsoft Teams Phone Standard_USGOV_DOD,MCOEV_USGOV_DOD,b0e7de67-e503-4934-b729-53d595ba5cd1,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Standard_USGOV_GCCHIGH,MCOEV_USGOV_GCCHIGH,985fcb26-7b94-475b-b512-89356697be71,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Resource Account,PHONESYSTEM_VIRTUALUSER,440eaaa8-b3e0-484b-a8be-62870b9ba70a,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
+Microsoft Teams Phone Resource Account for Faculty,PHONESYSTEM_VIRTUALUSER_FACULTY,0e142028-345e-45da-8d92-8bfd4093bbb9,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Phone Resource Account for GCC,PHONESYSTEM_VIRTUALUSER_GOV,2cf22bcb-0c9e-4bc6-8daf-7e7654c0f285,MCOEV_VIRTUALUSER_GOV,0628a73f-3b4a-4989-bd7b-0f8823144313,Microsoft 365 Phone Standard Resource Account for Government
Microsoft Teams Phone Resource Account_USGOV_GCCHIGH,PHONESYSTEM_VIRTUALUSER_USGOV_GCCHIGH ,e3f0522e-ebb7-4561-9f90-b44516d65b77,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Premium Introductory Pricing,Microsoft_Teams_Premium,36a0f3b3-adb5-49ea-bf66-762134cf063a,MICROSOFT_ECDN,85704d55-2e73-47ee-93b4-4b8ea14db92b,Microsoft eCDN
@@ -3399,6 +3401,13 @@ Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,MCOST
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,Microsoft 365 Phone System
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,TEAMS1,57ff2da0-773e-42df-b2af-ffb7a2317929,Microsoft Teams
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,Skype for Business Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune Plan 1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,SPECIALTY_DEVICES,cfce7ae3-4b41-4438-999c-c0e91f3b7fb9,Specialty devices
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOEV_GOV,db23fce2-a974-42ef-9002-d78dd42a0f22,Microsoft 365 Phone System for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,TEAMS_GOV,304767db-7d23-49e8-a945-4a7eb65f9f28,Microsoft Teams for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOSTANDARD_GOV,a31ef4a2-f787-435e-8335-e47eb0cafc94,Skype for Business Online (Plan 2) for Government
@@ -4598,9 +4607,9 @@ Power Automate per user plan dept,FLOW_PER_USER_DEPT,d80a4c5d-8f05-4b64-9926-657
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,DYN365_CDS_P2_GOV,37396c73-2203-48e6-8be1-d882dae53275,Common Data Service for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,FLOW_PER_USER_GCC,769b8bee-2779-4c5a-9456-6f4f8629fd41,Power Automate per User Plan for Government
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,CDS_ATTENDED_RPA_GCC,4802707d-47e1-45dc-82c5-b6981f0fb38c,Common Data Service Attended RPA for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,POWER_AUTOMATE_ATTENDED_RPA_GCC,fb613c67-1a58-4645-a8df-21e95a37d433,Power Automate Attended RPA for Government
@@ -4669,18 +4678,18 @@ Power Pages authenticated users T2 min 100 units - 100 users/per site/month capa
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T2_min_100_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,7cae5432-61bb-48c3-b75c-831394ec13a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,DYN365_CDS_VIRAL,17ab22cd-a0b3-4536-910a-cb6eb12696c0,Common Data Service
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,POWER_PAGES_VTRIAL,6817d093-2d30-4249-8bd6-774f01efa78c,Power Pages vTrial for Makers
@@ -4901,6 +4910,7 @@ SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb2
SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb26e4,Intelligent_Content_Services_SPO_type,fd2e7f90-1010-487e-a11b-d2b1ae9651fc,SharePoint Syntex - SPO type
Skype for Business Online (Plan 1),MCOIMP,b8b749f8-a4ef-4887-9539-c95b1eaa5db7,MCOIMP,afc06cb0-b4f4-4473-8286-d644f70d8faf,SKYPE FOR BUSINESS ONLINE (PLAN 1)
Skype for Business Online (Plan 2),MCOSTANDARD,d42c793f-6c78-4f43-92ca-e8f6a02b035f,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,SKYPE FOR BUSINESS ONLINE (PLAN 2)
+Skype for Business PSTN Calling Domestic Small,MCOPSTN5,d43177b5-475b-4880-92d4-d54c27b5efbd,Skype for Business PSTN Calling Domestic Small,9a0125a5-c8f8-4526-b231-49e2abe0ebce,Skype for Business PSTN Calling Domestic Small
Skype for Business PSTN Domestic and International Calling,MCOPSTN2,d3b4fe1f-9992-4930-8acb-ca6ec609365e,MCOPSTN2,5a10155d-f5c1-411a-a8ec-e99aae125390,DOMESTIC AND INTERNATIONAL CALLING PLAN
Skype for Business PSTN Domestic Calling,MCOPSTN1,0dab259f-bf13-4952-b7f8-7db8f131b28d,MCOPSTN1,4ed3ff63-69d7-4fb7-b984-5aec7f605ca8,DOMESTIC CALLING PLAN
Skype for Business PSTN Domestic Calling (120 Minutes),MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,DOMESTIC CALLING PLAN
@@ -4965,11 +4975,11 @@ Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb53
Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb538cb07e,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender for Endpoint
@@ -4979,18 +4989,18 @@ Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467
Windows 10/11 Enterprise E3,WIN10_PRO_ENT_SUB,cb10e6cd-9da4-4992-867b-67546b1db821,WIN10_PRO_ENT_SUB,21b439ba-a0ca-424f-a6cc-52f954a5b111,WINDOWS 10 ENTERPRISE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,EXCHANGE FOUNDATION
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,UNIVERSAL PRINT
-Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
+Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,WINDOWS UPDATE FOR BUSINESS DEPLOYMENT SERVICE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
-Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10/11 Enterprise
@@ -5017,7 +5027,7 @@ Windows 365 Business 2 vCPU 4 GB 64 GB,CPC_B_2C_4RAM_64GB,42e6818f-8966-444b-b7a
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,"Windows 365 Business 2 vCPU, 8 GB, 128 GB"
+Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,Windows 365 Business 2 vCPU, 8 GB, 128 GB
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
@@ -5048,14 +5058,14 @@ Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,CPC_B_8C_32RAM_512GB,4229a0b4-7f34-4835-b068-6dc8d10be57c,Windows 365 Business 8 vCPU 32 GB 512 GB
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,"Windows 365 Business 16 vCPU, 64 GB, 512 GB"
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,"Windows 365 Business 16 vCPU, 64 GB, 1 TB"
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,Windows 365 Business 16 vCPU, 64 GB, 512 GB
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,Windows 365 Business 16 vCPU, 64 GB, 1 TB
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,CPC_E_1C_2GB_64GB,86d70dbb-d4c6-4662-ba17-3014204cbb28,Windows 365 Enterprise 1 vCPU 2 GB 64 GB
Windows 365 Enterprise 2 vCPU 4 GB 64 GB,CPC_E_2C_4GB_64GB,7bb14422-3b90-4389-a7be-f1b745fc037f,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
diff --git a/Domain_OrchestrationStarterTimer/function.json b/Domain_OrchestrationStarterTimer/function.json
deleted file mode 100644
index f5df3587c4c8..000000000000
--- a/Domain_OrchestrationStarterTimer/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 30 4 * * *"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
\ No newline at end of file
diff --git a/Domain_OrchestrationStarterTimer/run.ps1 b/Domain_OrchestrationStarterTimer/run.ps1
deleted file mode 100644
index 259b225d9d75..000000000000
--- a/Domain_OrchestrationStarterTimer/run.ps1
+++ /dev/null
@@ -1,8 +0,0 @@
-param($Timer)
-
-if ($env:DEV_SKIP_DOMAIN_TIMER) {
- Write-Host 'Skipping DomainAnalyser timer'
- exit 0
-}
-
-Start-DomainOrchestrator
diff --git a/ExecAlertsListAllTenants/function.json b/ExecAlertsListAllTenants/function.json
deleted file mode 100644
index d4169b47b86d..000000000000
--- a/ExecAlertsListAllTenants/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "alertqueue"
- }
- ]
-}
diff --git a/ExecGDAPInviteApproved_Timer/function.json b/ExecGDAPInviteApproved_Timer/function.json
deleted file mode 100644
index f8904bbb0a7f..000000000000
--- a/ExecGDAPInviteApproved_Timer/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 */3 * * *"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/ExecGDAPInviteApproved_Timer/run.ps1 b/ExecGDAPInviteApproved_Timer/run.ps1
deleted file mode 100644
index 08370014869f..000000000000
--- a/ExecGDAPInviteApproved_Timer/run.ps1
+++ /dev/null
@@ -1,5 +0,0 @@
-using namespace System.Net
-
-param($Timer)
-
-Set-CIPPGDAPInviteGroups
diff --git a/ExecIncidentsListAllTenants/function.json b/ExecIncidentsListAllTenants/function.json
deleted file mode 100644
index 05f90b816f08..000000000000
--- a/ExecIncidentsListAllTenants/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "incidentqueue"
- }
- ]
-}
diff --git a/ExecOffboard_Mailboxpermissions/function.json b/ExecOffboard_Mailboxpermissions/function.json
deleted file mode 100644
index bc64eceb6904..000000000000
--- a/ExecOffboard_Mailboxpermissions/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "offboardingmailbox"
- }
- ]
-}
diff --git a/ExecOffboard_Mailboxpermissions/run.ps1 b/ExecOffboard_Mailboxpermissions/run.ps1
deleted file mode 100644
index 755133d6586e..000000000000
--- a/ExecOffboard_Mailboxpermissions/run.ps1
+++ /dev/null
@@ -1,8 +0,0 @@
-# Input bindings are passed in via param block.
-param( $QueueItem, $TriggerMetadata)
-$APIName = $TriggerMetadata.FunctionName
-
-$Mailboxes = New-ExoRequest -tenantid $QueueItem.TenantFilter -cmdlet "get-mailbox"
-foreach ($Mailbox in $Mailboxes) {
- Remove-CIPPMailboxPermissions -PermissionsLevel @("FullAccess", "SendAs", "SendOnBehalf") -userid $Mailbox.UserPrincipalName -AccessUser $QueueItem.User -TenantFilter $QueueItem.TenantFilter -APIName $APINAME -ExecutingUser $QueueItem.ExecutingUser
-}
\ No newline at end of file
diff --git a/ExecSchedulerBillingRun/function.json b/ExecSchedulerBillingRun/function.json
deleted file mode 100644
index 987ff96a991d..000000000000
--- a/ExecSchedulerBillingRun/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "billqueue"
- }
- ]
-}
diff --git a/ExecSchedulerBillingRun/run.ps1 b/ExecSchedulerBillingRun/run.ps1
deleted file mode 100644
index 3ea7e6621fac..000000000000
--- a/ExecSchedulerBillingRun/run.ps1
+++ /dev/null
@@ -1,21 +0,0 @@
-# Input bindings are passed in via param block.
-param($QueueItem)
-
-# Get the current universal time in the default string format.
-try {
- Write-LogMessage -API 'Scheduler_Billing' -tenant 'none' -message 'Starting billing processing.' -sev Info
-
- $Table = Get-CIPPTable -TableName Extensionsconfig
- $Configuration = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -Depth 10
- foreach ($ConfigItem in $Configuration.psobject.properties.name) {
- switch ($ConfigItem) {
- 'Gradient' {
- If ($Configuration.Gradient.enabled -and $Configuration.Gradient.BillingEnabled) {
- New-GradientServiceSyncRun
- }
- }
- }
- }
-} catch {
- Write-LogMessage -API 'Scheduler_Billing' -tenant 'none' -message 'Could not start billing processing' -sev Error -LogData (Get-CippException -Exception $_)
-}
\ No newline at end of file
diff --git a/ListGenericAllTenants/function.json b/ListGenericAllTenants/function.json
deleted file mode 100644
index 4937476839a0..000000000000
--- a/ListGenericAllTenants/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "generalAllTenantQueue"
- }
- ]
-}
diff --git a/ListGenericAllTenants/run.ps1 b/ListGenericAllTenants/run.ps1
deleted file mode 100644
index 71023d396ff4..000000000000
--- a/ListGenericAllTenants/run.ps1
+++ /dev/null
@@ -1,42 +0,0 @@
-# Input bindings are passed in via param block.
-param([string]$QueueItem, $TriggerMetadata)
-
-# Write out the queue message and metadata to the information log.
-Write-Host "PowerShell queue trigger function processed work item: $QueueItem"
-$TableURLName = ($QueueItem.tolower().split('?').Split('/') | Select-Object -First 1).toString()
-$QueueKey = (Invoke-ListCippQueue | Where-Object -Property Name -EQ $TableURLName | Select-Object -Last 1).RowKey
-Update-CippQueueEntry -RowKey $QueueKey -Status 'Started'
-$Table = Get-CIPPTable -TableName "cache$TableURLName"
-$fullUrl = "https://graph.microsoft.com/beta/$QueueItem"
-Get-CIPPAzDataTableEntity @Table | Remove-AzDataTableEntity @table
-
-$RawGraphRequest = Get-Tenants | ForEach-Object -Parallel {
- $domainName = $_.defaultDomainName
- Import-Module CIPPCore
- try {
- Write-Host $using:fullUrl
- New-GraphGetRequest -uri $using:fullUrl -tenantid $_.defaultDomainName -ComplexFilter -ErrorAction Stop | Select-Object *, @{l = 'Tenant'; e = { $domainName } }, @{l = 'CippStatus'; e = { 'Good' } }
- }
- catch {
- [PSCustomObject]@{
- Tenant = $domainName
- CippStatus = "Could not connect to tenant. $($_.Exception.message)"
- }
- }
-}
-
-Update-CippQueueEntry -RowKey $QueueKey -Status 'Processing'
-foreach ($Request in $RawGraphRequest) {
- $Json = ConvertTo-Json -Compress -InputObject $request
- $GraphRequest = [PSCustomObject]@{
- Tenant = [string]$Request.tenant
- RowKey = [string](New-Guid)
- PartitionKey = [string]$URL
- Data = [string]$Json
-
- }
- Add-CIPPAzDataTableEntity @Table -Entity $GraphRequest -Force | Out-Null
-}
-
-
-Update-CippQueueEntry -RowKey $QueueKey -Status 'Completed'
diff --git a/Modules/CIPPCore/CIPPCore.psm1 b/Modules/CIPPCore/CIPPCore.psm1
index 12f13762d19c..93ce138d723d 100644
--- a/Modules/CIPPCore/CIPPCore.psm1
+++ b/Modules/CIPPCore/CIPPCore.psm1
@@ -1,5 +1,5 @@
-$Public = @(Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -Recurse -ErrorAction SilentlyContinue)
-$Private = @(Get-ChildItem -Path $PSScriptRoot\private\*.ps1 -Recurse -ErrorAction SilentlyContinue)
+$Public = @(Get-ChildItem -Path (Join-Path $PSScriptRoot "Public\*.ps1") -Recurse -ErrorAction SilentlyContinue)
+$Private = @(Get-ChildItem -Path (Join-Path $PSScriptRoot "Private\*.ps1") -Recurse -ErrorAction SilentlyContinue)
$Functions = $Public + $Private
foreach ($import in @($Functions)) {
try {
diff --git a/Modules/CIPPCore/Public/Add-CIPPDelegatedPermission.ps1 b/Modules/CIPPCore/Public/Add-CIPPDelegatedPermission.ps1
index 37932d98b9e6..1bdbb1daac6e 100644
--- a/Modules/CIPPCore/Public/Add-CIPPDelegatedPermission.ps1
+++ b/Modules/CIPPCore/Public/Add-CIPPDelegatedPermission.ps1
@@ -91,6 +91,20 @@ function Add-CIPPDelegatedPermission {
$CreateRequest = New-GraphPOSTRequest -uri 'https://graph.microsoft.com/v1.0/oauth2PermissionGrants' -tenantid $Tenantfilter -body $Createbody -type POST -NoAuthCheck $true
$Results.add("Successfully added permissions for $($svcPrincipalId.displayName)")
} else {
+ # Cleanup multiple scope entries and patch first id
+ if (($OldScope.id | Measure-Object).Count -gt 1) {
+ $OldScopeId = $OldScope.id[0]
+ $OldScope.id | ForEach-Object {
+ if ($_ -ne $OldScopeId) {
+ try {
+ $null = New-GraphPOSTRequest -uri "https://graph.microsoft.com/v1.0/oauth2PermissionGrants/$_" -tenantid $Tenantfilter -type DELETE -NoAuthCheck $true
+ } catch {
+ }
+ }
+ }
+ } else {
+ $OldScopeId = $OldScope.id
+ }
$compare = Compare-Object -ReferenceObject $OldScope.scope.Split(' ') -DifferenceObject $NewScope.Split(' ')
if (!$compare) {
$Results.add("All delegated permissions exist for $($svcPrincipalId.displayName)")
@@ -99,8 +113,12 @@ function Add-CIPPDelegatedPermission {
$Patchbody = @{
scope = "$NewScope"
} | ConvertTo-Json -Compress
- $null = New-GraphPOSTRequest -uri "https://graph.microsoft.com/v1.0/oauth2PermissionGrants/$($OldScope.id)" -tenantid $Tenantfilter -body $Patchbody -type PATCH -NoAuthCheck $true
-
+ try {
+ $null = New-GraphPOSTRequest -uri "https://graph.microsoft.com/v1.0/oauth2PermissionGrants/$($OldScopeId)" -tenantid $Tenantfilter -body $Patchbody -type PATCH -NoAuthCheck $true
+ } catch {
+ $Results.add("Failed to update permissions for $($svcPrincipalId.displayName): $(Get-NormalizedError -message $_.Exception.Message)")
+ continue
+ }
# Added permissions
$Added = ($Compare | Where-Object { $_.SideIndicator -eq '=>' }).InputObject -join ' '
$Removed = ($Compare | Where-Object { $_.SideIndicator -eq '<=' }).InputObject -join ' '
diff --git a/Modules/CIPPCore/Public/AdditionalPermissions.json b/Modules/CIPPCore/Public/AdditionalPermissions.json
index c69644cf99bf..f7008f12fee8 100644
--- a/Modules/CIPPCore/Public/AdditionalPermissions.json
+++ b/Modules/CIPPCore/Public/AdditionalPermissions.json
@@ -1,13 +1,24 @@
[
{
- "resourceAppId": "00000003-0000-0ff1-ce00-000000000000",
- "resourceAccess": [{ "id": "AllProfiles.Manage", "type": "Scope" }]
+ "resourceAppId": "00000006-0000-0ff1-ce00-000000000000",
+ "resourceAccess": [
+ {
+ "id": "M365AdminPortal.IntegratedApps.ReadWrite",
+ "type": "Scope"
+ },
+ {
+ "id": "user_impersonation",
+ "type": "Scope"
+ }
+ ]
},
{
- "resourceAppId": "00000006-0000-0ff1-ce00-000000000000",
+ "resourceAppId": "00000003-0000-0ff1-ce00-000000000000",
"resourceAccess": [
- { "id": "M365AdminPortal.IntegratedApps.ReadWrite", "type": "Scope" },
- { "id": "user_impersonation", "type": "Scope" }
+ {
+ "id": "AllProfiles.Manage",
+ "type": "Scope"
+ }
]
}
-]
+]
\ No newline at end of file
diff --git a/Modules/CIPPCore/Public/Alerts/Get-CIPPAlertQuotaUsed.ps1 b/Modules/CIPPCore/Public/Alerts/Get-CIPPAlertQuotaUsed.ps1
index 84e1e0864b87..1e61ffaa01b6 100644
--- a/Modules/CIPPCore/Public/Alerts/Get-CIPPAlertQuotaUsed.ps1
+++ b/Modules/CIPPCore/Public/Alerts/Get-CIPPAlertQuotaUsed.ps1
@@ -18,7 +18,9 @@ function Get-CIPPAlertQuotaUsed {
}
$OverQuota = $AlertData | ForEach-Object {
if ($_.StorageUsedInBytes -eq 0 -or $_.prohibitSendReceiveQuotaInBytes -eq 0) { return }
- $PercentLeft = [math]::round(($_.storageUsedInBytes / $_.prohibitSendReceiveQuotaInBytes) * 100)
+ try {
+ $PercentLeft = [math]::round(($_.storageUsedInBytes / $_.prohibitSendReceiveQuotaInBytes) * 100)
+ } catch { $PercentLeft = 100 }
try {
if ([int]$InputValue -gt 0) {
$Value = [int]$InputValue
@@ -34,4 +36,4 @@ function Get-CIPPAlertQuotaUsed {
}
Write-AlertTrace -cmdletName $MyInvocation.MyCommand -tenantFilter $TenantFilter -data $OverQuota
-}
\ No newline at end of file
+}
diff --git a/Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearchResults.ps1 b/Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearchResults.ps1
new file mode 100644
index 000000000000..4113c17dc8fb
--- /dev/null
+++ b/Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearchResults.ps1
@@ -0,0 +1,23 @@
+function Get-CippAuditLogSearchResults {
+ <#
+ .SYNOPSIS
+ Get the results of an audit log search
+ .DESCRIPTION
+ Get the results of an audit log search from the Graph API
+ .PARAMETER TenantFilter
+ The tenant to filter on.
+ .PARAMETER QueryId
+ The ID of the query to get the results for.
+ #>
+ param (
+ [Parameter(Mandatory = $true)]
+ [string]$TenantFilter,
+ [Parameter(ValueFromPipelineByPropertyName = $true, Mandatory = $true)]
+ [Alias('id')]
+ [string]$QueryId
+ )
+
+ process {
+ New-GraphGetRequest -uri ('https://graph.microsoft.com/beta/security/auditLog/queries/{0}/records?$top=999' -f $QueryId) -AsApp $true -tenantid $TenantFilter
+ }
+}
diff --git a/Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearches.ps1 b/Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearches.ps1
new file mode 100644
index 000000000000..8c2aa9e9a7ff
--- /dev/null
+++ b/Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearches.ps1
@@ -0,0 +1,23 @@
+function Get-CippAuditLogSearches {
+ <#
+ .SYNOPSIS
+ Get the available audit log searches
+ .DESCRIPTION
+ Query the Graph API for available audit log searches.
+ .PARAMETER TenantFilter
+ The tenant to filter on.
+ #>
+ param (
+ [Parameter(Mandatory = $true)]
+ [string]$TenantFilter,
+ [Parameter()]
+ [switch]$ReadyToProcess
+ )
+ $Queries = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/security/auditLog/queries' -AsApp $true -tenantid $TenantFilter
+ if ($ReadyToProcess.IsPresent) {
+ $AuditLogSearchesTable = Get-CippTable -TableName 'AuditLogSearches'
+ $PendingQueries = Get-CIPPAzDataTableEntity @AuditLogSearchesTable -Filter "Tenant eq '$TenantFilter' and CippStatus eq 'Pending'"
+ $Queries = $Queries | Where-Object { $PendingQueries.RowKey -contains $_.id -and $_.status -eq 'succeeded' }
+ }
+ return $Queries
+}
diff --git a/Modules/CIPPCore/Public/AuditLogs/Get-CippLastAuditLogSearch.ps1 b/Modules/CIPPCore/Public/AuditLogs/Get-CippLastAuditLogSearch.ps1
new file mode 100644
index 000000000000..5706a4ac3e4d
--- /dev/null
+++ b/Modules/CIPPCore/Public/AuditLogs/Get-CippLastAuditLogSearch.ps1
@@ -0,0 +1,19 @@
+function Get-CippLastAuditLogSearch {
+ <#
+ .SYNOPSIS
+ Get the last audit log search
+ .DESCRIPTION
+ Query the Graph API for the last audit log search.
+ .PARAMETER TenantFilter
+ The tenant to filter on.
+ #>
+ param (
+ [Parameter(Mandatory = $true)]
+ [string]$TenantFilter
+ )
+
+ $Table = Get-CIPPTable -TableName AuditLogSearches
+ $LastHour = (Get-Date).AddHours(-1).ToString('yyyy-MM-ddTHH:mm:ssZ')
+ $LastSearch = Get-AzDataTableEntity @Table -Filter "Tenant eq '$TenantFilter' and Timestamp ge datetime'$LastHour'" | Sort-Object Timestamp -Descending | Select-Object -First 1
+ return $LastSearch
+}
diff --git a/Modules/CIPPCore/Public/AuditLogs/New-CippAuditLogSearch.ps1 b/Modules/CIPPCore/Public/AuditLogs/New-CippAuditLogSearch.ps1
new file mode 100644
index 000000000000..2bb80d31427f
--- /dev/null
+++ b/Modules/CIPPCore/Public/AuditLogs/New-CippAuditLogSearch.ps1
@@ -0,0 +1,176 @@
+function New-CippAuditLogSearch {
+ <#
+ .SYNOPSIS
+ Create a new audit log search
+ .DESCRIPTION
+ Create a new audit log search in Microsoft Graph Security API
+ .PARAMETER DisplayName
+ The display name of the audit log search. Default is 'CIPP Audit Search - ' + current date and time.
+ .PARAMETER TenantFilter
+ The tenant to filter on.
+ .PARAMETER StartTime
+ The start time to filter on.
+ .PARAMETER EndTime
+ The end time to filter on.
+ .PARAMETER RecordTypeFilters
+ The record types to filter on.
+ .PARAMETER KeywordFilter
+ The keyword to filter on.
+ .PARAMETER ServiceFilter
+ The service to filter on.
+ .PARAMETER OperationsFilters
+ The operations to filter on.
+ .PARAMETER UserPrincipalNameFilters
+ The user principal names to filter on.
+ .PARAMETER IPAddressFilter
+ The IP addresses to filter on.
+ .PARAMETER ObjectIdFilters
+ The object IDs to filter on.
+ .PARAMETER AdministrativeUnitFilters
+ The administrative units to filter on.
+ .PARAMETER ProcessLogs
+ Store the search in the CIPP AuditLogSearches table for alert processing.
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param(
+ [Parameter()]
+ [string]$DisplayName = 'CIPP Audit Search - ' + (Get-Date).ToString('yyyy-MM-dd HH:mm:ss'),
+ [Parameter(Mandatory = $true)]
+ [string]$TenantFilter,
+ [Parameter(Mandatory = $true)]
+ [datetime]$StartTime,
+ [Parameter(Mandatory = $true)]
+ [datetime]$EndTime,
+ [Parameter()]
+ [ValidateSet(
+ 'exchangeAdmin', 'exchangeItem', 'exchangeItemGroup', 'sharePoint', 'syntheticProbe', 'sharePointFileOperation',
+ 'oneDrive', 'azureActiveDirectory', 'azureActiveDirectoryAccountLogon', 'dataCenterSecurityCmdlet',
+ 'complianceDLPSharePoint', 'sway', 'complianceDLPExchange', 'sharePointSharingOperation',
+ 'azureActiveDirectoryStsLogon', 'skypeForBusinessPSTNUsage', 'skypeForBusinessUsersBlocked',
+ 'securityComplianceCenterEOPCmdlet', 'exchangeAggregatedOperation', 'powerBIAudit', 'crm', 'yammer',
+ 'skypeForBusinessCmdlets', 'discovery', 'microsoftTeams', 'threatIntelligence', 'mailSubmission',
+ 'microsoftFlow', 'aeD', 'microsoftStream', 'complianceDLPSharePointClassification', 'threatFinder',
+ 'project', 'sharePointListOperation', 'sharePointCommentOperation', 'dataGovernance', 'kaizala',
+ 'securityComplianceAlerts', 'threatIntelligenceUrl', 'securityComplianceInsights', 'mipLabel',
+ 'workplaceAnalytics', 'powerAppsApp', 'powerAppsPlan', 'threatIntelligenceAtpContent', 'labelContentExplorer',
+ 'teamsHealthcare', 'exchangeItemAggregated', 'hygieneEvent', 'dataInsightsRestApiAudit',
+ 'informationBarrierPolicyApplication', 'sharePointListItemOperation', 'sharePointContentTypeOperation',
+ 'sharePointFieldOperation', 'microsoftTeamsAdmin', 'hrSignal', 'microsoftTeamsDevice', 'microsoftTeamsAnalytics',
+ 'informationWorkerProtection', 'campaign', 'dlpEndpoint', 'airInvestigation', 'quarantine', 'microsoftForms',
+ 'applicationAudit', 'complianceSupervisionExchange', 'customerKeyServiceEncryption', 'officeNative',
+ 'mipAutoLabelSharePointItem', 'mipAutoLabelSharePointPolicyLocation', 'microsoftTeamsShifts', 'secureScore',
+ 'mipAutoLabelExchangeItem', 'cortanaBriefing', 'search', 'wdatpAlerts', 'powerPlatformAdminDlp',
+ 'powerPlatformAdminEnvironment', 'mdatpAudit', 'sensitivityLabelPolicyMatch', 'sensitivityLabelAction',
+ 'sensitivityLabeledFileAction', 'attackSim', 'airManualInvestigation', 'securityComplianceRBAC',
+ 'userTraining', 'airAdminActionInvestigation', 'mstic', 'physicalBadgingSignal', 'teamsEasyApprovals',
+ 'aipDiscover', 'aipSensitivityLabelAction', 'aipProtectionAction', 'aipFileDeleted', 'aipHeartBeat',
+ 'mcasAlerts', 'onPremisesFileShareScannerDlp', 'onPremisesSharePointScannerDlp', 'exchangeSearch',
+ 'sharePointSearch', 'privacyDataMinimization', 'labelAnalyticsAggregate', 'myAnalyticsSettings',
+ 'securityComplianceUserChange', 'complianceDLPExchangeClassification', 'complianceDLPEndpoint',
+ 'mipExactDataMatch', 'msdeResponseActions', 'msdeGeneralSettings', 'msdeIndicatorsSettings',
+ 'ms365DCustomDetection', 'msdeRolesSettings', 'mapgAlerts', 'mapgPolicy', 'mapgRemediation',
+ 'privacyRemediationAction', 'privacyDigestEmail', 'mipAutoLabelSimulationProgress',
+ 'mipAutoLabelSimulationCompletion', 'mipAutoLabelProgressFeedback', 'dlpSensitiveInformationType',
+ 'mipAutoLabelSimulationStatistics', 'largeContentMetadata', 'microsoft365Group', 'cdpMlInferencingResult',
+ 'filteringMailMetadata', 'cdpClassificationMailItem', 'cdpClassificationDocument', 'officeScriptsRunAction',
+ 'filteringPostMailDeliveryAction', 'cdpUnifiedFeedback', 'tenantAllowBlockList', 'consumptionResource',
+ 'healthcareSignal', 'dlpImportResult', 'cdpCompliancePolicyExecution', 'multiStageDisposition',
+ 'privacyDataMatch', 'filteringDocMetadata', 'filteringEmailFeatures', 'powerBIDlp', 'filteringUrlInfo',
+ 'filteringAttachmentInfo', 'coreReportingSettings', 'complianceConnector',
+ 'powerPlatformLockboxResourceAccessRequest', 'powerPlatformLockboxResourceCommand',
+ 'cdpPredictiveCodingLabel', 'cdpCompliancePolicyUserFeedback', 'webpageActivityEndpoint', 'omePortal',
+ 'cmImprovementActionChange', 'filteringUrlClick', 'mipLabelAnalyticsAuditRecord', 'filteringEntityEvent',
+ 'filteringRuleHits', 'filteringMailSubmission', 'labelExplorer', 'microsoftManagedServicePlatform',
+ 'powerPlatformServiceActivity', 'scorePlatformGenericAuditRecord', 'filteringTimeTravelDocMetadata', 'alert',
+ 'alertStatus', 'alertIncident', 'incidentStatus', 'case', 'caseInvestigation', 'recordsManagement',
+ 'privacyRemediation', 'dataShareOperation', 'cdpDlpSensitive', 'ehrConnector', 'filteringMailGradingResult',
+ 'publicFolder', 'privacyTenantAuditHistoryRecord', 'aipScannerDiscoverEvent', 'eduDataLakeDownloadOperation',
+ 'm365ComplianceConnector', 'microsoftGraphDataConnectOperation', 'microsoftPurview',
+ 'filteringEmailContentFeatures', 'powerPagesSite', 'powerAppsResource', 'plannerPlan', 'plannerCopyPlan',
+ 'plannerTask', 'plannerRoster', 'plannerPlanList', 'plannerTaskList', 'plannerTenantSettings',
+ 'projectForTheWebProject', 'projectForTheWebTask', 'projectForTheWebRoadmap', 'projectForTheWebRoadmapItem',
+ 'projectForTheWebProjectSettings', 'projectForTheWebRoadmapSettings', 'quarantineMetadata',
+ 'microsoftTodoAudit', 'timeTravelFilteringDocMetadata', 'teamsQuarantineMetadata',
+ 'sharePointAppPermissionOperation', 'microsoftTeamsSensitivityLabelAction', 'filteringTeamsMetadata',
+ 'filteringTeamsUrlInfo', 'filteringTeamsPostDeliveryAction', 'mdcAssessments',
+ 'mdcRegulatoryComplianceStandards', 'mdcRegulatoryComplianceControls', 'mdcRegulatoryComplianceAssessments',
+ 'mdcSecurityConnectors', 'mdaDataSecuritySignal', 'vivaGoals', 'filteringRuntimeInfo', 'attackSimAdmin',
+ 'microsoftGraphDataConnectConsent', 'filteringAtpDetonationInfo', 'privacyPortal', 'managedTenants',
+ 'unifiedSimulationMatchedItem', 'unifiedSimulationSummary', 'updateQuarantineMetadata', 'ms365DSuppressionRule',
+ 'purviewDataMapOperation', 'filteringUrlPostClickAction', 'irmUserDefinedDetectionSignal', 'teamsUpdates',
+ 'plannerRosterSensitivityLabel', 'ms365DIncident', 'filteringDelistingMetadata',
+ 'complianceDLPSharePointClassificationExtended', 'microsoftDefenderForIdentityAudit',
+ 'supervisoryReviewDayXInsight', 'defenderExpertsforXDRAdmin', 'cdpEdgeBlockedMessage', 'hostedRpa',
+ 'cdpContentExplorerAggregateRecord', 'cdpHygieneAttachmentInfo', 'cdpHygieneSummary',
+ 'cdpPostMailDeliveryAction', 'cdpEmailFeatures', 'cdpHygieneUrlInfo', 'cdpUrlClick',
+ 'cdpPackageManagerHygieneEvent', 'filteringDocScan', 'timeTravelFilteringDocScan', 'mapgOnboard'
+ )]
+ [string[]]$RecordTypeFilters,
+ [Parameter()]
+ [string]$KeywordFilters,
+ [Parameter()]
+ [string[]]$ServiceFilters,
+ [Parameter()]
+ [string[]]$OperationsFilters,
+ [Parameter()]
+ [string[]]$UserPrincipalNameFilters,
+ [Parameter()]
+ [string[]]$IPAddressFilters,
+ [Parameter()]
+ [string[]]$ObjectIdFilters,
+ [Parameter()]
+ [string[]]$AdministrativeUnitFilters,
+ [Parameter()]
+ [switch]$ProcessLogs
+ )
+
+ $SearchParams = @{
+ displayName = 'CIPP Audit Search - ' + (Get-Date).ToString('yyyy-MM-dd HH:mm:ss')
+ filterStartDateTime = $StartTime.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss')
+ filterEndDateTime = $EndTime.AddHours(1).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss')
+ }
+ if ($OperationsFilters) {
+ $SearchParams.operationsFilters = $OperationsFilters
+ }
+ if ($RecordTypeFilters) {
+ $SearchParams.recordTypeFilters = @($RecordTypeFilters)
+ }
+ if ($KeywordFilters) {
+ $SearchParams.keywordFilters = $KeywordFilters
+ }
+ if ($ServiceFilters) {
+ $SearchParams.serviceFilters = $ServiceFilters
+ }
+ if ($UserPrincipalNameFilters) {
+ $SearchParams.userPrincipalNameFilters = @($UserPrincipalNameFilters)
+ }
+ if ($IPAddressFilters) {
+ $SearchParams.ipAddressFilters = @($IPAddressFilters)
+ }
+ if ($ObjectIdFilterss) {
+ $SearchParams.objectIdFilters = @($ObjectIdFilters)
+ }
+ if ($AdministrativeUnitFilters) {
+ $SearchParams.administrativeUnitFilters = @($AdministrativeUnitFilters)
+ }
+
+ if ($PSCmdlet.ShouldProcess('Create a new audit log search for tenant ' + $TenantFilter)) {
+ $Query = New-GraphPOSTRequest -uri 'https://graph.microsoft.com/beta/security/auditLog/queries' -body ($SearchParams | ConvertTo-Json -Compress) -tenantid $TenantFilter -AsApp $true
+
+ if ($ProcessLogs.IsPresent -and $Query.id) {
+ $Entity = [PSCustomObject]@{
+ PartitionKey = [string]'Search'
+ RowKey = [string]$Query.id
+ Tenant = [string]$TenantFilter
+ DisplayName = [string]$DisplayName
+ StartTime = [datetime]$StartTime.ToUniversalTime()
+ EndTime = [datetime]$EndTime.ToUniversalTime()
+ Query = [string]($Query | ConvertTo-Json -Compress)
+ CippStatus = [string]'Pending'
+ }
+ $Table = Get-CIPPTable -TableName 'AuditLogSearches'
+ Add-CIPPAzDataTableEntity @Table -Entity $Entity -Force | Out-Null
+ }
+ return $Query
+ }
+}
diff --git a/Modules/CIPPCore/Public/Clear-CippDurables.ps1 b/Modules/CIPPCore/Public/Clear-CippDurables.ps1
index 089ca10282a7..b63d399647d6 100644
--- a/Modules/CIPPCore/Public/Clear-CippDurables.ps1
+++ b/Modules/CIPPCore/Public/Clear-CippDurables.ps1
@@ -3,14 +3,11 @@ function Clear-CippDurables {
Param()
# Collect info
$StorageContext = New-AzStorageContext -ConnectionString $env:AzureWebJobsStorage
- $FunctionName = $env:WEBSITE_SITE_NAME
+ $FunctionName = $env:WEBSITE_SITE_NAME -replace '-', ''
# Get orchestrators
$InstancesTable = Get-CippTable -TableName ('{0}Instances' -f $FunctionName)
$HistoryTable = Get-CippTable -TableName ('{0}History' -f $FunctionName)
- $Yesterday = (Get-Date).AddDays(-1).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')
- $Filter = "CreatedTime ge datetime'$Yesterday' or RuntimeStatus eq 'Pending' or RuntimeStatus eq 'Running'"
- $Instances = Get-CippAzDataTableEntity @InstancesTable -Filter $Filter
$Queues = Get-AzStorageQueue -Context $StorageContext -Name ('{0}*' -f $FunctionName) | Select-Object -Property Name, ApproximateMessageCount, QueueClient
@@ -50,7 +47,7 @@ function Clear-CippDurables {
Remove-AzDataTable @InstancesTable
Remove-AzDataTable @HistoryTable
- $BlobContainer = '{0}-largemessages' -f $Function.Name
+ $BlobContainer = '{0}-largemessages' -f $FunctionName
if (Get-AzStorageContainer -Name $BlobContainer -Context $StorageContext -ErrorAction SilentlyContinue) {
Write-Information "- Removing blob container: $BlobContainer"
if ($PSCmdlet.ShouldProcess($BlobContainer, 'Remove Blob Container')) {
diff --git a/Modules/CIPPCore/Public/ConversionTable.csv b/Modules/CIPPCore/Public/ConversionTable.csv
index f890ee46f8ad..55ebdfd465b9 100644
--- a/Modules/CIPPCore/Public/ConversionTable.csv
+++ b/Modules/CIPPCore/Public/ConversionTable.csv
@@ -228,9 +228,9 @@ Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE
Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE_NOPREREQ,2cf302fe-62db-4e20-b573-e0998b1208b5,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,CRMINSTANCE_GCC,483cc331-f4df-4a3b-b8ca-fe1a247569f6,Microsoft Dynamics CRM Online Instance
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,CDS_FIELD_SERVICE_CONTRACTOR_GCC,2457fe40-65be-48a1-935f-924ad6e62dba,Common Data Service Field service Part Time Contractors for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
@@ -253,27 +253,27 @@ Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAG
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_CDS_RETAIL,93cc200d-a47f-4c56-aec1-83f8b0d0425a,Common Data Service for Dynamics 365 Retail
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,FLOW_FOR_IOM_USL,9e6d1620-dce9-4655-8933-af8fa5bccc9c,Data Integration for IOM with Power Automate USL
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_RETAIL,117e3aa0-8d08-4a19-a6a5-90b7a96e2128,Dynamics 365 Commerce
-Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_ACC_PROTECTION,4c00c16c-0304-4421-b598-555c3e78edcb,Dynamics 365 Fraud Protection - Account Protection
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_LOSS_PREVENTION,ecc62904-fa88-4552-a62c-fe582fb31444,Dynamics 365 Fraud Protection - Loss Prevention
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_PURCH_PROTECTION,d703990f-006e-459b-b8dd-1267c4533a22,Dynamics 365 Fraud Protection - Purchase Protection
@@ -296,14 +296,14 @@ Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,POWERAPPS FOR DYNAMICS 365
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,DYNAMICS 365 FOR CUSTOMER SERVICE
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,D365_FIELD_SERVICE_ATTACH,55c9148b-d5f0-4101-b5a0-b2727cfc0916,Dynamics 365 for Field Service Attach
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Field Service Enterprise Edition,DYN365_ENTERPRISE_FIELD_SERVICE,c7d15985-e746-4f01-b113-20b575898250,DYN365_ENTERPRISE_FIELD_SERVICE,8c66ef8a-177f-4c0d-853c-d4f219331d09,Dynamics 365 for Field Service
@@ -393,13 +393,13 @@ Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,PROJECT ONLINE ESSENTIALS
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SHAREPOINT ONLINE (PLAN 2)
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Forms_Pro_SalesEnt_GCC,33850b82-0a37-4ebb-a0b2-ee163facd716,Microsoft Dynamics 365 Customer Voice for Sales Enterprise for GCC
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
@@ -411,12 +411,12 @@ Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,DYN365_SALES_INSIGHTS,fedc185f-0711-4cc0-80ed-0a92da1a8384,Dynamics 365 AI for Sales (Embedded)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
@@ -432,7 +432,7 @@ Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd9
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_CDS_SUPPLYCHAINMANAGEMENT,b6a8b974-2956-4e14-ae81-f0384c363528,Common Data Service for Dynamics 365 Supply Chain Management
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
-Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,D365_SCM_Attach,b21c777f-c2d5-486e-88f6-fc0a3e474271,Dynamics 365 for Supply Chain Management Attach
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Marketing Business Edition,DYN365_BUSINESS_MARKETING,238e2f8d-e429-4035-94db-6926be4ffe7b,DYN365_BUSINESS_Marketing,393a0c96-9ba1-4af0-8975-fa2f853a25ac,Dynamics 365 Marketing
@@ -521,7 +521,7 @@ Dynamics 365 P1 Tria for Information Workers,DYN365_ENTERPRISE_P1_IW,338148b6-1b
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365CDSforProjectOperations,7df1d500-ca5c-4229-8cea-815bc88798c9,Common Data Service for Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperationsCDS,18fa3aba-b085-4105-87d7-55617b8585e6,Dynamics 365 Project Operations CDS
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperations,69f07c66-bee4-4222-b051-195095efee5b,Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
@@ -1081,7 +1081,7 @@ Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,BPOS_S_TODO_2,c87f142c-d1e9-4363-8630-aaea9c4d9ae5,To-Do (Plan 2)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,UNIVERSAL_PRINT_NO_SEEDING,b67adbaf-a096-42c9-967e-5a84edbe0086,Universal Print Without Seeding
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,WHITEBOARD_PLAN3,4a51bca5-1eff-43f5-878c-177680f191af,Whiteboard (Plan 3)
-Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,YAMMER_EDU,2078e8df-cff6-4290-98cb-5408261a760a,Yammer for Academic
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,FORMS_PLAN_E1,159f4cd6-e380-449f-a816-af1a9ef76344,MICROSOFT FORMS (PLAN E1)
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,OFFICE_BUSINESS,094e7854-93fc-4d55-b2c0-3ab5369ebdc1,OFFICE 365 BUSINESS
@@ -1427,6 +1427,7 @@ Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_APPS,a62f8878-de10-42f3-b68f-6149a25ceb97,Microsoft 365 Copilot in Productivity Apps
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_BUSINESS_CHAT,3f30311c-6b1e-48a4-ab79-725b469da960,Microsoft Copilot with Graph-grounded chat
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_CONNECTORS,89f1c4c8-0878-40f7-804d-869c9128ab5d,Power Platform Connectors in Microsoft 365 Copilot
+Microsoft 365 Domestic Calling Plan (120 minutes) - US,MCOPSTN5_US,d13e9d1b-316a-4946-98c6-362c97a4fdfe,PSTN5_US,1346d5e6-15a6-4b88-9693-806ff7296a7a,Microsoft 365 Domestic Calling Plan - US (120 minutes)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,MICROSOFTBOOKINGS,199a5c09-e0ca-4e37-8f7c-b05d533e1ea2,Microsoft Bookings
@@ -3335,6 +3336,7 @@ Microsoft Teams Phone Standard for TELSTRA,MCOEV_TELSTRA,ffaf2d68-1c95-4eb3-9ddd
Microsoft Teams Phone Standard_USGOV_DOD,MCOEV_USGOV_DOD,b0e7de67-e503-4934-b729-53d595ba5cd1,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Standard_USGOV_GCCHIGH,MCOEV_USGOV_GCCHIGH,985fcb26-7b94-475b-b512-89356697be71,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Resource Account,PHONESYSTEM_VIRTUALUSER,440eaaa8-b3e0-484b-a8be-62870b9ba70a,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
+Microsoft Teams Phone Resource Account for Faculty,PHONESYSTEM_VIRTUALUSER_FACULTY,0e142028-345e-45da-8d92-8bfd4093bbb9,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Phone Resource Account for GCC,PHONESYSTEM_VIRTUALUSER_GOV,2cf22bcb-0c9e-4bc6-8daf-7e7654c0f285,MCOEV_VIRTUALUSER_GOV,0628a73f-3b4a-4989-bd7b-0f8823144313,Microsoft 365 Phone Standard Resource Account for Government
Microsoft Teams Phone Resource Account_USGOV_GCCHIGH,PHONESYSTEM_VIRTUALUSER_USGOV_GCCHIGH ,e3f0522e-ebb7-4561-9f90-b44516d65b77,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Premium Introductory Pricing,Microsoft_Teams_Premium,36a0f3b3-adb5-49ea-bf66-762134cf063a,MICROSOFT_ECDN,85704d55-2e73-47ee-93b4-4b8ea14db92b,Microsoft eCDN
@@ -3399,6 +3401,13 @@ Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,MCOST
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,Microsoft 365 Phone System
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,TEAMS1,57ff2da0-773e-42df-b2af-ffb7a2317929,Microsoft Teams
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,Skype for Business Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune Plan 1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,SPECIALTY_DEVICES,cfce7ae3-4b41-4438-999c-c0e91f3b7fb9,Specialty devices
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOEV_GOV,db23fce2-a974-42ef-9002-d78dd42a0f22,Microsoft 365 Phone System for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,TEAMS_GOV,304767db-7d23-49e8-a945-4a7eb65f9f28,Microsoft Teams for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOSTANDARD_GOV,a31ef4a2-f787-435e-8335-e47eb0cafc94,Skype for Business Online (Plan 2) for Government
@@ -4598,9 +4607,9 @@ Power Automate per user plan dept,FLOW_PER_USER_DEPT,d80a4c5d-8f05-4b64-9926-657
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,DYN365_CDS_P2_GOV,37396c73-2203-48e6-8be1-d882dae53275,Common Data Service for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,FLOW_PER_USER_GCC,769b8bee-2779-4c5a-9456-6f4f8629fd41,Power Automate per User Plan for Government
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,CDS_ATTENDED_RPA_GCC,4802707d-47e1-45dc-82c5-b6981f0fb38c,Common Data Service Attended RPA for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,POWER_AUTOMATE_ATTENDED_RPA_GCC,fb613c67-1a58-4645-a8df-21e95a37d433,Power Automate Attended RPA for Government
@@ -4669,18 +4678,18 @@ Power Pages authenticated users T2 min 100 units - 100 users/per site/month capa
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T2_min_100_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,7cae5432-61bb-48c3-b75c-831394ec13a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,DYN365_CDS_VIRAL,17ab22cd-a0b3-4536-910a-cb6eb12696c0,Common Data Service
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,POWER_PAGES_VTRIAL,6817d093-2d30-4249-8bd6-774f01efa78c,Power Pages vTrial for Makers
@@ -4901,6 +4910,7 @@ SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb2
SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb26e4,Intelligent_Content_Services_SPO_type,fd2e7f90-1010-487e-a11b-d2b1ae9651fc,SharePoint Syntex - SPO type
Skype for Business Online (Plan 1),MCOIMP,b8b749f8-a4ef-4887-9539-c95b1eaa5db7,MCOIMP,afc06cb0-b4f4-4473-8286-d644f70d8faf,SKYPE FOR BUSINESS ONLINE (PLAN 1)
Skype for Business Online (Plan 2),MCOSTANDARD,d42c793f-6c78-4f43-92ca-e8f6a02b035f,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,SKYPE FOR BUSINESS ONLINE (PLAN 2)
+Skype for Business PSTN Calling Domestic Small,MCOPSTN5,d43177b5-475b-4880-92d4-d54c27b5efbd,Skype for Business PSTN Calling Domestic Small,9a0125a5-c8f8-4526-b231-49e2abe0ebce,Skype for Business PSTN Calling Domestic Small
Skype for Business PSTN Domestic and International Calling,MCOPSTN2,d3b4fe1f-9992-4930-8acb-ca6ec609365e,MCOPSTN2,5a10155d-f5c1-411a-a8ec-e99aae125390,DOMESTIC AND INTERNATIONAL CALLING PLAN
Skype for Business PSTN Domestic Calling,MCOPSTN1,0dab259f-bf13-4952-b7f8-7db8f131b28d,MCOPSTN1,4ed3ff63-69d7-4fb7-b984-5aec7f605ca8,DOMESTIC CALLING PLAN
Skype for Business PSTN Domestic Calling (120 Minutes),MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,DOMESTIC CALLING PLAN
@@ -4965,11 +4975,11 @@ Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb53
Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb538cb07e,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender for Endpoint
@@ -4979,18 +4989,18 @@ Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467
Windows 10/11 Enterprise E3,WIN10_PRO_ENT_SUB,cb10e6cd-9da4-4992-867b-67546b1db821,WIN10_PRO_ENT_SUB,21b439ba-a0ca-424f-a6cc-52f954a5b111,WINDOWS 10 ENTERPRISE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,EXCHANGE FOUNDATION
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,UNIVERSAL PRINT
-Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
+Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,WINDOWS UPDATE FOR BUSINESS DEPLOYMENT SERVICE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
-Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10/11 Enterprise
@@ -5017,7 +5027,7 @@ Windows 365 Business 2 vCPU 4 GB 64 GB,CPC_B_2C_4RAM_64GB,42e6818f-8966-444b-b7a
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,"Windows 365 Business 2 vCPU, 8 GB, 128 GB"
+Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,Windows 365 Business 2 vCPU, 8 GB, 128 GB
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
@@ -5048,14 +5058,14 @@ Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,CPC_B_8C_32RAM_512GB,4229a0b4-7f34-4835-b068-6dc8d10be57c,Windows 365 Business 8 vCPU 32 GB 512 GB
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,"Windows 365 Business 16 vCPU, 64 GB, 512 GB"
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,"Windows 365 Business 16 vCPU, 64 GB, 1 TB"
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,Windows 365 Business 16 vCPU, 64 GB, 512 GB
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,Windows 365 Business 16 vCPU, 64 GB, 1 TB
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,CPC_E_1C_2GB_64GB,86d70dbb-d4c6-4662-ba17-3014204cbb28,Windows 365 Enterprise 1 vCPU 2 GB 64 GB
Windows 365 Enterprise 2 vCPU 4 GB 64 GB,CPC_E_2C_4GB_64GB,7bb14422-3b90-4389-a7be-f1b745fc037f,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Applications/Push-UploadApplication.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Applications/Push-UploadApplication.ps1
index f33ef37a8e84..f718564301fc 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Applications/Push-UploadApplication.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Applications/Push-UploadApplication.ps1
@@ -100,7 +100,7 @@ function Push-UploadApplication {
#For anyone that reads this, The maximum chunk size is 100MB for blob storage, so we can upload it as one part and just give it the single ID. Easy :)
$Upload = Invoke-RestMethod -Uri "$($AzFileUri.azureStorageUri)&comp=block&blockid=$id" -Method Put -Headers @{'x-ms-blob-type' = 'BlockBlob' } -InFile $inFile -ContentType 'application/octet-stream'
Write-Host "Upload data: $($Upload | ConvertTo-Json -Depth 10)"
- $ConfirmUpload = Invoke-RestMethod -Uri "$($AzFileUri.azureStorageUri)&comp=blocklist" -Method Put -Body "$id"
+ $ConfirmUpload = Invoke-RestMethod -Uri "$($AzFileUri.azureStorageUri)&comp=blocklist" -Method Put -Body "$id" -ContentType 'application/xml'
Write-Host "Confirm Upload data: $($ConfirmUpload | ConvertTo-Json -Depth 10)"
$CommitReq = New-graphPostRequest -Uri "$($BaseURI)/$($NewApp.id)/microsoft.graph.win32lobapp/contentVersions/1/files/$($ContentReq.id)/commit" -Body $EncBody -Type POST -tenantid $tenant
Write-Host "Commit Request: $($CommitReq | ConvertTo-Json -Depth 10)"
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Domain Analyser/Push-DomainAnalyserDomain.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Domain Analyser/Push-DomainAnalyserDomain.ps1
index ff311a85737e..a787676e9de2 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Domain Analyser/Push-DomainAnalyserDomain.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Domain Analyser/Push-DomainAnalyserDomain.ps1
@@ -256,13 +256,16 @@ function Push-DomainAnalyserDomain {
continue
}
# Test if there are already MSCNAME values set, skip domain if there is
- $CurrentMSCNAMEInfo = ConvertFrom-Json $DomainObject.DomainAnalyser -Depth 10
- if (![string]::IsNullOrWhiteSpace($CurrentMSCNAMEInfo.MSCNAMEDKIMSelectors.selector1.Value) -and
- ![string]::IsNullOrWhiteSpace($CurrentMSCNAMEInfo.MSCNAMEDKIMSelectors.selector2.Value)) {
- $Result.MSCNAMEDKIMSelectors = $CurrentMSCNAMEInfo.MSCNAMEDKIMSelectors
- continue
+ if ($null -ne $DomainObject.DomainAnalyser) {
+ $CurrentMSCNAMEInfo = ConvertFrom-Json $DomainObject.DomainAnalyser -Depth 10
+ if (![string]::IsNullOrWhiteSpace($CurrentMSCNAMEInfo.MSCNAMEDKIMSelectors.selector1.Value) -and
+ ![string]::IsNullOrWhiteSpace($CurrentMSCNAMEInfo.MSCNAMEDKIMSelectors.selector2.Value)) {
+ $Result.MSCNAMEDKIMSelectors = $CurrentMSCNAMEInfo.MSCNAMEDKIMSelectors
+ continue
+ }
}
+
# Compute the DKIM CNAME records from $Tenant.InitialDomainName according to this logic: https://learn.microsoft.com/en-us/defender-office-365/email-authentication-dkim-configure#syntax-for-dkim-cname-records
# Test if it has a - in the domain name
if ($Domain -like '*-*') {
@@ -298,9 +301,9 @@ function Push-DomainAnalyserDomain {
}
$Result.MSCNAMEDKIMSelectors = $MSCNAMERecords
} catch {
- $Message = 'MS DKIM CNAME Error'
- Write-LogMessage -API 'DomainAnalyser' -tenant $DomainObject.TenantId -message $Message -LogData (Get-CippException -Exception $_) -sev Error
- return $Message
+ $ErrorMessage = Get-CippException -Exception $_
+ Write-LogMessage -API 'DomainAnalyser' -tenant $DomainObject.TenantId -message "MS CNAME DKIM error: $($ErrorMessage.NormalizedError)" -LogData $ErrorMessage -sev Error
+ return $ErrorMessage.NormalizedError
}
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Graph Requests/Push-ListGraphRequestQueue.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Graph Requests/Push-ListGraphRequestQueue.ps1
index b3f88c0b9e73..c7b2de89ec5a 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Graph Requests/Push-ListGraphRequestQueue.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Graph Requests/Push-ListGraphRequestQueue.ps1
@@ -34,6 +34,7 @@ function Push-ListGraphRequestQueue {
NoPagination = $Item.NoPagination
ReverseTenantLookupProperty = $Item.ReverseTenantLookupProperty
ReverseTenantLookup = $Item.ReverseTenantLookup
+ AsApp = $Item.AsApp ?? $false
SkipCache = $true
}
diff --git a/ExecAlertsListAllTenants/run.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecAlertsListAllTenants.ps1
similarity index 81%
rename from ExecAlertsListAllTenants/run.ps1
rename to Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecAlertsListAllTenants.ps1
index 7a885d814dd2..3d094d6bf1a3 100644
--- a/ExecAlertsListAllTenants/run.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecAlertsListAllTenants.ps1
@@ -1,12 +1,13 @@
-# Input bindings are passed in via param block.
-param( $QueueItem, $TriggerMetadata)
+function Push-ExecAlertsListAllTenants {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ #>
+ [CmdletBinding()]
+ param($Item)
-# Write out the queue message and metadata to the information log.
-Write-Host "PowerShell queue trigger function processed work item: $QueueItem"
-
-Get-Tenants | ForEach-Object -Parallel {
- $domainName = $_.defaultDomainName
- Import-Module CIPPCore
+ $Tenant = Get-Tenants -TenantFilter $Item.customerId
+ $domainName = $Tenant.defaultDomainName
$Table = Get-CIPPTable -TableName 'cachealertsandincidents'
try {
@@ -21,7 +22,6 @@ Get-Tenants | ForEach-Object -Parallel {
PartitionKey = 'alert'
}
Add-CIPPAzDataTableEntity @Table -Entity $GraphRequest -Force | Out-Null
-
}
} catch {
@@ -46,7 +46,5 @@ Get-Tenants | ForEach-Object -Parallel {
Tenant = $domainName
}
Add-CIPPAzDataTableEntity @Table -Entity $GraphRequest -Force | Out-Null
-
-
}
}
diff --git a/ExecIncidentsListAllTenants/run.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecIncidentsListAllTenants.ps1
similarity index 81%
rename from ExecIncidentsListAllTenants/run.ps1
rename to Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecIncidentsListAllTenants.ps1
index f5cfb8a3a9d3..21934125b57c 100644
--- a/ExecIncidentsListAllTenants/run.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecIncidentsListAllTenants.ps1
@@ -1,12 +1,14 @@
-# Input bindings are passed in via param block.
-param( $QueueItem, $TriggerMetadata)
+function Push-ExecIncidentsListAllTenants {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ #>
+ param(
+ $Item
+ )
-# Write out the queue message and metadata to the information log.
-Write-Host "PowerShell queue trigger function processed work item: $QueueItem"
-
-Get-Tenants | ForEach-Object -Parallel {
- $domainName = $_.defaultDomainName
- Import-Module CIPPCore
+ $Tenant = Get-Tenants -TenantFilter $Item.customerId
+ $domainName = $Tenant.defaultDomainName
$Table = Get-CIPPTable -TableName 'cachealertsandincidents'
try {
@@ -43,7 +45,6 @@ Get-Tenants | ForEach-Object -Parallel {
Tenant = [string]$domainName
}
Add-CIPPAzDataTableEntity @Table -Entity $GraphRequest -Force | Out-Null
-
-
}
}
+
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOffboardingMailboxPermissions.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOffboardingMailboxPermissions.ps1
new file mode 100644
index 000000000000..e1497d902ce1
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOffboardingMailboxPermissions.ps1
@@ -0,0 +1,11 @@
+function Push-ExecOffboardingMailboxPermissions {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ #>
+ param(
+ $Item
+ )
+
+ Remove-CIPPMailboxPermissions -PermissionsLevel @('FullAccess', 'SendAs', 'SendOnBehalf') -userid 'AllUsers' -AccessUser $Item.User -TenantFilter $Item.TenantFilter -APIName $Item.APINAME -ExecutingUser $Item.ExecutingUser
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOnboardTenantQueue.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOnboardTenantQueue.ps1
index f5316ac76a0e..bf9b17bb9dc9 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOnboardTenantQueue.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ExecOnboardTenantQueue.ps1
@@ -312,8 +312,8 @@ Function Push-ExecOnboardTenantQueue {
$LastCPVError = ''
do {
try {
- Add-CIPPApplicationPermission -RequiredResourceAccess 'CippDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Relationship.customer.tenantId
- Add-CIPPDelegatedPermission -RequiredResourceAccess 'CippDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Relationship.customer.tenantId
+ Add-CIPPApplicationPermission -RequiredResourceAccess 'CIPPDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Relationship.customer.tenantId
+ Add-CIPPDelegatedPermission -RequiredResourceAccess 'CIPPDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Relationship.customer.tenantId
$CPVSuccess = $true
$Refreshing = $false
} catch {
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListBasicAuthAllTenants.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListBasicAuthAllTenants.ps1
new file mode 100644
index 000000000000..621bd16ef4ec
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListBasicAuthAllTenants.ps1
@@ -0,0 +1,37 @@
+Function Push-ListBasicAuthAllTenants {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ #>
+ [CmdletBinding()]
+ param($Item)
+
+ $domainName = $Item.defaultDomainName
+
+ $currentTime = Get-Date -Format 'yyyy-MM-ddTHH:MM:ss'
+ $ts = (Get-Date).AddDays(-30)
+ $endTime = $ts.ToString('yyyy-MM-ddTHH:MM:ss')
+ $filters = "createdDateTime ge $($endTime)Z and createdDateTime lt $($currentTime)Z and (clientAppUsed eq 'AutoDiscover' or clientAppUsed eq 'Exchange ActiveSync' or clientAppUsed eq 'Exchange Online PowerShell' or clientAppUsed eq 'Exchange Web Services' or clientAppUsed eq 'IMAP4' or clientAppUsed eq 'MAPI Over HTTP' or clientAppUsed eq 'Offline Address Book' or clientAppUsed eq 'Outlook Anywhere (RPC over HTTP)' or clientAppUsed eq 'Other clients' or clientAppUsed eq 'POP3' or clientAppUsed eq 'Reporting Web Services' or clientAppUsed eq 'Authenticated SMTP' or clientAppUsed eq 'Outlook Service')"
+ try {
+ $GraphRequest = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/auditLogs/signIns?api-version=beta&filter=$($filters)" -tenantid $domainName -ErrorAction stop | Sort-Object -Unique -Property clientAppUsed | ForEach-Object {
+ @{
+ Tenant = $domainName
+ clientAppUsed = $_.clientAppUsed
+ userPrincipalName = $_.UserPrincipalName
+ RowKey = "$($_.UserPrincipalName)-$($_.clientAppUsed)"
+ PartitionKey = 'basicauth'
+ }
+ }
+ } catch {
+ $GraphRequest = @{
+ Tenant = $domainName
+ clientAppUsed = "Could not connect to Tenant: $($_.Exception.message)"
+ userPrincipalName = $domainName
+ RowKey = $domainName
+ PartitionKey = 'basicauth'
+ }
+ }
+ $Table = Get-CIPPTable -TableName cachebasicauth
+ Add-CIPPAzDataTableEntity @Table -Entity $GraphRequest -Force | Out-Null
+
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListMailboxRulesQueue.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListMailboxRulesQueue.ps1
index ccab06d03726..2d8a0c7cd512 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListMailboxRulesQueue.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-ListMailboxRulesQueue.ps1
@@ -14,7 +14,7 @@ function Push-ListMailboxRulesQueue {
try {
$Rules = New-ExoRequest -tenantid $domainName -cmdlet 'Get-Mailbox' -Select 'userPrincipalName,GUID' | ForEach-Object -Parallel {
Import-Module CIPPCore
- $MbxRules = New-ExoRequest -Anchor $_.UserPrincipalName -tenantid $using:domainName -cmdlet 'Get-InboxRule' -cmdParams @{Mailbox = $_.GUID; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' }
+ $MbxRules = New-ExoRequest -Anchor $_.UserPrincipalName -tenantid $using:domainName -cmdlet 'Get-InboxRule' -cmdParams @{Mailbox = $_.GUID; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' -and $_.Name -notlike 'Microsoft.Exchange.OOF.*' }
foreach ($Rule in $MbxRules) {
$Rule | Add-Member -NotePropertyName 'UserPrincipalName' -NotePropertyValue $_.userPrincipalName
$Rule
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-UpdatePermissionsQueue.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-UpdatePermissionsQueue.ps1
index cbdab980cb9a..d579d1ad77ec 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-UpdatePermissionsQueue.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-UpdatePermissionsQueue.ps1
@@ -23,8 +23,8 @@ function Push-UpdatePermissionsQueue {
$DomainRefreshRequired = $true
}
Write-Information 'Updating permissions'
- Add-CIPPApplicationPermission -RequiredResourceAccess 'CippDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Item.customerId
- Add-CIPPDelegatedPermission -RequiredResourceAccess 'CippDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Item.customerId
+ Add-CIPPApplicationPermission -RequiredResourceAccess 'CIPPDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Item.customerId
+ Add-CIPPDelegatedPermission -RequiredResourceAccess 'CIPPDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $Item.customerId
Write-LogMessage -tenant $Item.defaultDomainName -tenantId $Item.customerId -message "Updated permissions for $($Item.displayName)" -Sev 'Info' -API 'UpdatePermissionsQueue'
Write-Information 'Pushing CIPP-SAM admin roles'
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-CIPPStandard.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Standards/Push-CIPPStandard.ps1
similarity index 100%
rename from Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Push-CIPPStandard.ps1
rename to Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Standards/Push-CIPPStandard.ps1
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogBundleProcessing.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogBundleProcessing.ps1
index 13f2315e94a8..757180f3a0bd 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogBundleProcessing.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogBundleProcessing.ps1
@@ -1,6 +1,8 @@
function Push-AuditLogBundleProcessing {
Param($Item)
+ return # Disabled for now, as it's not used
+
try {
$AuditBundleTable = Get-CippTable -tablename 'AuditLogBundles'
$AuditLogBundle = Get-CIPPAzDataTableEntity @AuditBundleTable -Filter "PartitionKey eq '$($Item.TenantFilter)' and RowKey eq '$($Item.ContentId)'"
@@ -37,4 +39,4 @@ function Push-AuditLogBundleProcessing {
} catch {
Write-Host ( 'Audit log error {0} line {1} - {2}' -f $_.InvocationInfo.ScriptName, $_.InvocationInfo.ScriptLineNumber, $_.Exception.Message)
}
-}
\ No newline at end of file
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogTenant.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogTenant.ps1
index e74208b8887c..2faa3fac26eb 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogTenant.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-AuditLogTenant.ps1
@@ -1,74 +1,79 @@
function Push-AuditLogTenant {
Param($Item)
-
- # Get Table contexts
- $AuditBundleTable = Get-CippTable -tablename 'AuditLogBundles'
- $SchedulerConfig = Get-CippTable -TableName 'SchedulerConfig'
- $WebhookTable = Get-CippTable -tablename 'webhookTable'
$ConfigTable = Get-CippTable -TableName 'WebhookRules'
+ $TenantFilter = $Item.TenantFilter
- # Query CIPPURL for linking
- $CIPPURL = Get-CIPPAzDataTableEntity @SchedulerConfig -Filter "PartitionKey eq 'webhookcreation'" | Select-Object -First 1 -ExpandProperty CIPPURL
+ Write-Information "Audit Logs: Processing $($TenantFilter)"
- # Get all webhooks for the tenant
- $Webhooks = Get-CIPPAzDataTableEntity @WebhookTable -Filter "PartitionKey eq '$($Item.TenantFilter)' and Version eq '3'" | Where-Object { $_.Resource -match '^Audit' }
+ # Get CIPP Url, cleanup legacy tasks
+ $SchedulerConfig = Get-CippTable -TableName 'SchedulerConfig'
+ $LegacyWebhookTasks = Get-CIPPAzDataTableEntity @SchedulerConfig -Filter "PartitionKey eq 'webhookcreation'"
+ $LegacyUrl = $LegacyWebhookTasks | Select-Object -First 1 -ExpandProperty CIPPURL
+ $CippConfigTable = Get-CippTable -tablename Config
+ $CippConfig = Get-CIPPAzDataTableEntity @CippConfigTable -Filter "PartitionKey eq 'InstanceProperties' and RowKey eq 'CIPPURL'"
+ if ($LegacyUrl) {
+ if (!$CippConfig) {
+ $Entity = @{
+ PartitionKey = 'InstanceProperties'
+ RowKey = 'CIPPURL'
+ Value = [string]([System.Uri]$LegacyUrl).Host
+ }
+ Add-CIPPAzDataTableEntity @CippConfigTable -Entity $Entity -Force
+ }
+ # remove legacy webhooks
+ foreach ($Task in $LegacyWebhookTasks) {
+ Remove-AzDataTableEntity @SchedulerConfig -Entity $Task
+ }
+ $CIPPURL = $LegacyUrl
+ } else {
+ $CIPPURL = 'https://{0}' -f $CippConfig.Value
+ }
# Get webhook rules
$ConfigEntries = Get-CIPPAzDataTableEntity @ConfigTable
+ $LogSearchesTable = Get-CippTable -TableName 'AuditLogSearches'
- # Date filter for existing bundles
- $LastHour = (Get-Date).AddHours(-1).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss')
+ $Configuration = $ConfigEntries | Where-Object { ($_.Tenants -match $TenantFilter -or $_.Tenants -match 'AllTenants') }
+ if ($Configuration) {
+ try {
+ $LogSearches = Get-CippAuditLogSearches -TenantFilter $TenantFilter -ReadyToProcess
+ Write-Information ('Audit Logs: Found {0} searches, begin processing' -f $LogSearches.Count)
+ foreach ($Search in $LogSearches) {
+ $SearchEntity = Get-CIPPAzDataTableEntity @LogSearchesTable -Filter "Tenant eq '$($TenantFilter)' and RowKey eq '$($Search.id)'"
+ $SearchEntity.CippStatus = 'Processing'
+ Add-CIPPAzDataTableEntity @LogSearchesTable -Entity $SearchEntity -Force
+ try {
+ # Test the audit log rules against the search results
+ $AuditLogTest = Test-CIPPAuditLogRules -TenantFilter $TenantFilter -SearchId $Search.id
- $NewBundles = [System.Collections.Generic.List[object]]::new()
- foreach ($Webhook in $Webhooks) {
- # only process webhooks that are configured in the webhookrules table
- $Configuration = $ConfigEntries | Where-Object { ($_.Tenants -match $TenantFilter -or $_.Tenants -match 'AllTenants') }
- if ($Configuration.Type -notcontains $Webhook.Resource) {
- continue
- }
-
- $TenantFilter = $Webhook.PartitionKey
- $LogType = $Webhook.Resource
- Write-Information "Querying for $LogType on $TenantFilter"
- $ContentBundleQuery = @{
- TenantFilter = $TenantFilter
- ContentType = $LogType
- StartTime = $Item.StartTime
- EndTime = $Item.EndTime
- }
- $LogBundles = Get-CIPPAuditLogContentBundles @ContentBundleQuery
- $ExistingBundles = Get-CIPPAzDataTableEntity @AuditBundleTable -Filter "PartitionKey eq '$($Item.TenantFilter)' and ContentType eq '$LogType' and Timestamp ge datetime'$($LastHour)'"
-
- foreach ($Bundle in $LogBundles) {
- if ($ExistingBundles.RowKey -notcontains $Bundle.contentId) {
- $NewBundles.Add([PSCustomObject]@{
- PartitionKey = $TenantFilter
- RowKey = $Bundle.contentId
- DefaultDomainName = $TenantFilter
- ContentType = $Bundle.contentType
- ContentUri = $Bundle.contentUri
- ContentCreated = $Bundle.contentCreated
- ContentExpiration = $Bundle.contentExpiration
- CIPPURL = [string]$CIPPURL
- ProcessingStatus = 'Pending'
- MatchedRules = ''
- MatchedLogs = 0
- })
+ $SearchEntity.CippStatus = 'Completed'
+ $MatchedRules = [string](ConvertTo-Json -Compress -InputObject $AuditLogTest.MatchedRules)
+ $SearchEntity | Add-Member -MemberType NoteProperty -Name MatchedRules -Value $MatchedRules -Force
+ $SearchEntity | Add-Member -MemberType NoteProperty -Name MatchedLogs -Value $AuditLogTest.MatchedLogs -Force
+ $SearchEntity | Add-Member -MemberType NoteProperty -Name TotalLogs -Value $AuditLogTest.TotalLogs -Force
+ } catch {
+ $SearchEntity.CippStatus = 'Failed'
+ Write-Information "Error processing audit log rules: $($_.Exception.Message)"
+ $Exception = [string](ConvertTo-Json -Compress -InputObject (Get-CippException -Exception $_))
+ $SearchEntity | Add-Member -MemberType NoteProperty -Name Error -Value $Exception
+ }
+ Add-CIPPAzDataTableEntity @LogSearchesTable -Entity $SearchEntity -Force
+ $DataToProcess = ($AuditLogTest).DataToProcess
+ Write-Information "Audit Logs: Data to process found: $($DataToProcess.count) items"
+ if ($DataToProcess) {
+ foreach ($AuditLog in $DataToProcess) {
+ Write-Information "Processing $($AuditLog.operation)"
+ $Webhook = @{
+ Data = $AuditLog
+ CIPPURL = [string]$CIPPURL
+ TenantFilter = $TenantFilter
+ }
+ Invoke-CippWebhookProcessing @Webhook
+ }
+ }
}
+ } catch {
+ Write-Information ( 'Audit Logs: Error {0} line {1} - {2}' -f $_.InvocationInfo.ScriptName, $_.InvocationInfo.ScriptLineNumber, $_.Exception.Message)
}
}
-
- if (($NewBundles | Measure-Object).Count -gt 0) {
- Add-CIPPAzDataTableEntity @AuditBundleTable -Entity $NewBundles -Force
- Write-Information ($NewBundles | ConvertTo-Json -Depth 5 -Compress)
-
- $Batch = $NewBundles | Select-Object @{Name = 'ContentId'; Expression = { $_.RowKey } }, @{Name = 'TenantFilter'; Expression = { $_.PartitionKey } }, @{Name = 'FunctionName'; Expression = { 'AuditLogBundleProcessing' } }
- $InputObject = [PSCustomObject]@{
- OrchestratorName = 'AuditLogs'
- Batch = @($Batch)
- SkipLog = $true
- }
- $InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
- Write-Host "Started orchestration with ID = '$InstanceId'"
- }
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-Schedulerwebhookcreation.ps1 b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-Schedulerwebhookcreation.ps1
index bba8630e91c5..62da83dff4cd 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-Schedulerwebhookcreation.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Webhooks/Push-Schedulerwebhookcreation.ps1
@@ -6,7 +6,7 @@ function Push-Schedulerwebhookcreation {
param (
$item
)
- $Table = Get-CIPPTable -TableName 'SchedulerConfig'
+ <#$Table = Get-CIPPTable -TableName 'SchedulerConfig'
$WebhookTable = Get-CIPPTable -TableName 'webhookTable'
$Tenant = $Item.Tenant
$Row = Get-CIPPAzDataTableEntity @Table -Filter "RowKey eq '$($item.SchedulerRow)'"
@@ -42,6 +42,6 @@ function Push-Schedulerwebhookcreation {
Write-Information "Failed to create webhook for $Tenant - $($Row.webhookType): $($_.Exception.Message)"
}
}
- }
+ }#>
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Core/Invoke-ExecServicePrincipals.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Core/Invoke-ExecServicePrincipals.ps1
index 7d3e509b5e51..71bdb7a36d59 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Core/Invoke-ExecServicePrincipals.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Core/Invoke-ExecServicePrincipals.ps1
@@ -36,7 +36,11 @@ function Invoke-ExecServicePrincipals {
if ($Request.Query.AppId) {
$Action = 'Get'
$Results = New-GraphGetRequest -Uri "https://graph.microsoft.com/beta/servicePrincipals(appId='$($Request.Query.AppId)')" -tenantid $TenantFilter -NoAuthCheck $true
- } else {
+ } elseif ($Request.Query.Id) {
+ $Action = 'Get'
+ $Results = New-GraphGetRequest -Uri "https://graph.microsoft.com/beta/servicePrincipals/$($Request.Query.Id)" -tenantid $TenantFilter -NoAuthCheck $true
+ }
+ else {
$Action = 'List'
$Results = New-GraphGetRequest -Uri 'https://graph.microsoft.com/beta/servicePrincipals?$top=999&$orderby=displayName&$count=true' -ComplexFilter -tenantid $TenantFilter -NoAuthCheck $true
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Extensions/Invoke-ExecExtensionSync.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Extensions/Invoke-ExecExtensionSync.ps1
index 911ce71d7e14..136009bd740b 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Extensions/Invoke-ExecExtensionSync.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Extensions/Invoke-ExecExtensionSync.ps1
@@ -19,12 +19,19 @@ Function Invoke-ExecExtensionSync {
Write-LogMessage -API 'Scheduler_Billing' -tenant 'none' -message 'Starting billing processing.' -sev Info
$Table = Get-CIPPTable -TableName Extensionsconfig
$Configuration = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -Depth 10
+
foreach ($ConfigItem in $Configuration.psobject.properties.name) {
switch ($ConfigItem) {
'Gradient' {
If ($Configuration.Gradient.enabled -and $Configuration.Gradient.BillingEnabled) {
- Push-OutputBinding -Name gradientqueue -Value 'LetsGo'
- $Results = [pscustomobject]@{'Results' = 'Successfully started Gradient Sync' }
+ $ProcessorQueue = Get-CIPPTable -TableName 'ProcessorQueue'
+ $ProcessorFunction = [PSCustomObject]@{
+ PartitionKey = 'Function'
+ RowKey = 'New-GradientServiceSyncRun'
+ FunctionName = 'New-GradientServiceSyncRun'
+ }
+ Add-AzDataTableEntity @ProcessorQueue -Entity $ProcessorFunction -Force
+ $Results = [pscustomobject]@{'Results' = 'Successfully queued Gradient Sync' }
}
}
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecAccessChecks.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecAccessChecks.ps1
index 557be474dd5a..08d9b59cc620 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecAccessChecks.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecAccessChecks.ps1
@@ -13,18 +13,29 @@ Function Invoke-ExecAccessChecks {
$APIName = $TriggerMetadata.FunctionName
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
+ $Table = Get-CIPPTable -tablename 'AccessChecks'
# Write to the Azure Functions log stream.
Write-Host 'PowerShell HTTP trigger function processed a request.'
if ($Request.Query.Permissions -eq 'true') {
- $Results = Test-CIPPAccessPermissions -tenantfilter $ENV:TenantID -APIName $APINAME -ExecutingUser $Request.Headers.'x-ms-client-principal'
+ if ($Request.Query.Cached -eq 'true') {
+ $Data = (Get-CIPPAzDataTableEntity @Table -Filter "RowKey eq 'AccessPermissions'").Data | ConvertFrom-Json
+ $Results = $Data
+ } else {
+ $Results = Test-CIPPAccessPermissions -tenantfilter $ENV:TenantID -APIName $APINAME -ExecutingUser $Request.Headers.'x-ms-client-principal'
+ }
}
if ($Request.Query.Tenants -eq 'true') {
$Results = Test-CIPPAccessTenant -TenantCSV $Request.Body.tenantid -ExecutingUser $Request.Headers.'x-ms-client-principal'
}
if ($Request.Query.GDAP -eq 'true') {
- $Results = Test-CIPPGDAPRelationships
+ if ($Request.Query.Cached -eq 'true') {
+ $Data = (Get-CIPPAzDataTableEntity @Table -Filter "RowKey eq 'GDAPRelationships'").Data | ConvertFrom-Json
+ $Results = $Data
+ } else {
+ $Results = Test-CIPPGDAPRelationships
+ }
}
$body = [pscustomobject]@{'Results' = $Results }
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCPVPermissions.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCPVPermissions.ps1
index e666476b7b6f..22f7f02c0307 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCPVPermissions.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCPVPermissions.ps1
@@ -33,8 +33,8 @@ Function Invoke-ExecCPVPermissions {
} else {
$TenantFilter = $env:TenantID
}
- Add-CIPPApplicationPermission -RequiredResourceAccess 'CippDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $TenantFilter
- Add-CIPPDelegatedPermission -RequiredResourceAccess 'CippDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $TenantFilter
+ Add-CIPPApplicationPermission -RequiredResourceAccess 'CIPPDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $TenantFilter
+ Add-CIPPDelegatedPermission -RequiredResourceAccess 'CIPPDefaults' -ApplicationId $ENV:ApplicationID -tenantfilter $TenantFilter
Set-CIPPSAMAdminRoles -TenantFilter $TenantFilter
$Success = $true
} catch {
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCustomRole.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCustomRole.ps1
index c5725a2cafb8..44c87fd92425 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCustomRole.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCustomRole.ps1
@@ -39,14 +39,26 @@ function Invoke-ExecCustomRole {
)
} else {
$Body = foreach ($Role in $Body) {
- $Role.Permissions = $Role.Permissions | ConvertFrom-Json
+ try {
+ $Role.Permissions = $Role.Permissions | ConvertFrom-Json
+ } catch {
+ $Role.Permissions = ''
+ }
if ($Role.AllowedTenants) {
- $Role.AllowedTenants = @($Role.AllowedTenants | ConvertFrom-Json)
+ try {
+ $Role.AllowedTenants = @($Role.AllowedTenants | ConvertFrom-Json)
+ } catch {
+ $Role.AllowedTenants = ''
+ }
} else {
$Role | Add-Member -NotePropertyName AllowedTenants -NotePropertyValue @() -Force
}
if ($Role.BlockedTenants) {
- $Role.BlockedTenants = @($Role.BlockedTenants | ConvertFrom-Json)
+ try {
+ $Role.BlockedTenants = @($Role.BlockedTenants | ConvertFrom-Json)
+ } catch {
+ $Role.BlockedTenants = ''
+ }
} else {
$Role | Add-Member -NotePropertyName BlockedTenants -NotePropertyValue @() -Force
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecRunBackup.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecRunBackup.ps1
index afdd570d8910..561a655c2b19 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecRunBackup.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecRunBackup.ps1
@@ -16,7 +16,7 @@ Function Invoke-ExecRunBackup {
$body = [pscustomobject]@{
'Results' = 'Created backup'
backup = $CSVfile.BackupData
- }
+ } | ConvertTo-Json -Depth 5 -Compress
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Endpoint/Applications/Invoke-ExecAppUpload.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Endpoint/Applications/Invoke-ExecAppUpload.ps1
index 366da173390e..2202e7f58ccd 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Endpoint/Applications/Invoke-ExecAppUpload.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Endpoint/Applications/Invoke-ExecAppUpload.ps1
@@ -8,16 +8,33 @@ function Invoke-ExecAppUpload {
[CmdletBinding()]
param($Request, $TriggerMetadata)
- try {
- Start-ApplicationOrchestrator
- } catch {
- Write-Host "orchestrator error: $($_.Exception.Message)"
+ $ConfigTable = Get-CIPPTable -tablename Config
+ $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
+
+ if ($Config -and $Config.state -eq $true) {
+ if ($env:CIPP_PROCESSOR -ne 'true') {
+ $ProcessorFunction = [PSCustomObject]@{
+ PartitionKey = 'Function'
+ RowKey = 'Start-ApplicationOrchestrator'
+ ProcessorFunction = 'Start-ApplicationOrchestrator'
+ }
+ $ProcessorQueue = Get-CIPPTable -TableName 'ProcessorQueue'
+ Add-AzDataTableEntity @ProcessorQueue -Entity $ProcessorFunction -Force
+ $Results = [pscustomobject]@{'Results' = 'Queueing application upload' }
+ }
+ } else {
+ try {
+ Start-ApplicationOrchestrator
+ $Results = [pscustomobject]@{'Results' = 'Started application upload' }
+ } catch {
+ $Results = [pscustomobject]@{'Results' = "Failed to start application upload. Error: $($_.Exception.Message)" }
+ }
}
$Results = [pscustomobject]@{'Results' = 'Started application queue' }
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
- Body = $results
+ Body = $Results
})
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-AddUser.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-AddUser.ps1
index 38b476922adc..320a196a0f3a 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-AddUser.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-AddUser.ps1
@@ -14,11 +14,10 @@ Function Invoke-AddUser {
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
$UserObj = $Request.body
- # Write to the Azure Functions log stream.
- Write-Host 'PowerShell HTTP trigger function processed a request.'
+
if ($UserObj.Scheduled.Enabled) {
$TaskBody = [pscustomobject]@{
- TenantFilter = 'AllTenants'
+ TenantFilter = $UserObj.tenantID
Name = "New user creation: $($UserObj.User)@$($UserObj.Domain)"
Command = @{
value = 'New-CIPPUserTask'
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecBECRemediate.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecBECRemediate.ps1
index 21622f9b336f..cfa67b8bd043 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecBECRemediate.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecBECRemediate.ps1
@@ -23,7 +23,7 @@ Function Invoke-ExecBECRemediate {
Write-Host $SuspectUser
$Results = try {
$Step = 'Reset Password'
- Set-CIPPResetPassword -userid $username -tenantFilter $TenantFilter -APIName $APINAME -ExecutingUser $User
+ Set-CIPPResetPassword -UserID $username -tenantFilter $TenantFilter -APIName $APINAME -ExecutingUser $User
$Step = 'Disable Account'
Set-CIPPSignInState -userid $username -AccountEnabled $false -tenantFilter $TenantFilter -APIName $APINAME -ExecutingUser $User
$Step = 'Revoke Sessions'
@@ -34,7 +34,7 @@ Function Invoke-ExecBECRemediate {
$RuleDisabled = 0
$RuleFailed = 0
if (($Rules | Measure-Object).Count -gt 0) {
- $Rules | Where-Object { $_.Name -ne 'Junk E-Mail Rule' } | ForEach-Object {
+ $Rules | Where-Object { $_.Name -ne 'Junk E-Mail Rule' -and $_.Name -notlike 'Microsoft.Exchange.OOF.*' } | ForEach-Object {
try {
$null = New-ExoRequest -anchor $username -tenantid $TenantFilter -cmdlet 'Disable-InboxRule' -cmdParams @{Confirm = $false; Identity = $_.Identity }
"Disabled Inbox Rule '$($_.Identity)' for $username"
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecJITAdmin.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecJITAdmin.ps1
index 680460302a7f..b0c29871ae9d 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecJITAdmin.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ExecJITAdmin.ps1
@@ -63,14 +63,14 @@ Function Invoke-ExecJITAdmin {
if ($Request.Body.UserId -match '^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$') {
$Username = (New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/users/$($Request.Body.UserId)" -tenantid $Request.Body.TenantFilter).userPrincipalName
}
- Write-LogMessage -user $User -API $APINAME -message "Executing JIT Admin for $Username" -Sev 'Info'
+ Write-LogMessage -user $User -API $APINAME -message "Executing JIT Admin for $Username" -tenant $Request.Body.TenantFilter -Sev 'Info'
$Start = ([System.DateTimeOffset]::FromUnixTimeSeconds($Request.Body.StartDate)).DateTime.ToLocalTime()
$Expiration = ([System.DateTimeOffset]::FromUnixTimeSeconds($Request.Body.EndDate)).DateTime.ToLocalTime()
$Results = [System.Collections.Generic.List[string]]::new()
if ($Request.Body.useraction -eq 'Create') {
- Write-LogMessage -user $User -API $APINAME -message "Creating JIT Admin user $($Request.Body.UserPrincipalName)" -Sev 'Info'
+ Write-LogMessage -user $User -API $APINAME -tenant $Request.Body.TenantFilter -message "Creating JIT Admin user $($Request.Body.UserPrincipalName)" -Sev 'Info'
Write-Information "Creating JIT Admin user $($Request.Body.UserPrincipalName)"
$JITAdmin = @{
User = @{
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUserMailboxRules.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUserMailboxRules.ps1
index d7438a065dc0..a8c4af96c998 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUserMailboxRules.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUserMailboxRules.ps1
@@ -23,7 +23,7 @@ Function Invoke-ListUserMailboxRules {
$TenantFilter = $Request.Query.TenantFilter
$UserID = $Request.Query.UserID
$UserEmail = if ([string]::IsNullOrWhiteSpace($Request.Query.userEmail)) { $UserID } else { $Request.Query.userEmail }
- $GraphRequest = New-ExoRequest -Anchor $UserID -tenantid $TenantFilter -cmdlet 'Get-InboxRule' -cmdParams @{mailbox = $UserID; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' } | Select-Object
+ $GraphRequest = New-ExoRequest -Anchor $UserID -tenantid $TenantFilter -cmdlet 'Get-InboxRule' -cmdParams @{mailbox = $UserID; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' -and $_.Name -notlike 'Microsoft.Exchange.OOF.*' } | Select-Object
@{ Name = 'DisplayName'; Expression = { $_.displayName } },
@{ Name = 'Description'; Expression = { $_.Description } },
@{ Name = 'Redirect To'; Expression = { $_.RedirectTo } },
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUsers.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUsers.ps1
index f61ff5a28283..ef2870bc0649 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUsers.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-ListUsers.ps1
@@ -35,11 +35,8 @@ Function Invoke-ListUsers {
$Table = Get-CIPPTable -TableName 'cacheusers'
$Rows = Get-CIPPAzDataTableEntity @Table | Where-Object -Property Timestamp -GT (Get-Date).AddHours(-1)
if (!$Rows) {
- $Queue = New-CippQueueEntry -Name 'Users' -Link '/identity/administration/users?customerId=AllTenants'
- Push-OutputBinding -Name listusers -Value "users/$($userid)?`$top=999&`$select=$($selectlist -join ',')&`$filter=$GraphFilter&`$count=true"
[PSCustomObject]@{
- Tenant = 'Loading data for all tenants. Please check back after the job completes'
- QueueId = $Queue.RowKey
+ Message = 'This function has been deprecated for all users, please use ListGraphRequest instead'
}
} else {
$Rows.Data | ConvertFrom-Json | Select-Object $selectlist | ForEach-Object {
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuth.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuth.ps1
index 9cdbce1b86c8..aacc1676381a 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuth.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuth.ps1
@@ -45,7 +45,22 @@ Function Invoke-ListBasicAuth {
$Table = Get-CIPPTable -TableName cachebasicauth
$Rows = Get-CIPPAzDataTableEntity @Table | Where-Object -Property Timestamp -GT (Get-Date).AddHours(-1)
if (!$Rows) {
- Push-OutputBinding -Name Msg -Value (Get-Date).ToString()
+ $TenantList = Get-Tenants -IncludeErrors
+ $Queue = New-CippQueueEntry -Name 'Basic Auth - All Tenants' -TotalTasks ($TenantList | Measure-Object).Count
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'BasicAuthOrchestrator'
+ QueueFunction = @{
+ FunctionName = 'GetTenants'
+ TenantParams = @{
+ IncludeErrors = $true
+ }
+ QueueId = $Queue.RowKey
+ DurableFunction = 'ListBasicAuthAllTenants'
+ }
+ SkipLog = $true
+ }
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
+
$GraphRequest = [PSCustomObject]@{
Tenant = 'Loading data for all tenants. Please check back in 10 minutes'
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuthAllTenants.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuthAllTenants.ps1
deleted file mode 100644
index 26d93e02b387..000000000000
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Reports/Invoke-ListBasicAuthAllTenants.ps1
+++ /dev/null
@@ -1,49 +0,0 @@
-using namespace System.Net
-
-Function Invoke-ListBasicAuthAllTenants {
- <#
- .FUNCTIONALITY
- Entrypoint
- .ROLE
- Identity.AuditLog.Read
- #>
- [CmdletBinding()]
- param($Request, $TriggerMetadata)
-
-
- Get-Tenants | ForEach-Object -Parallel {
- $domainName = $_.defaultDomainName
- Import-Module '.\Modules\AzBobbyTables'
- Import-Module '.\Modules\CIPPCore'
-
- $currentTime = Get-Date -Format 'yyyy-MM-ddTHH:MM:ss'
- $ts = (Get-Date).AddDays(-30)
- $endTime = $ts.ToString('yyyy-MM-ddTHH:MM:ss')
- $filters = "createdDateTime ge $($endTime)Z and createdDateTime lt $($currentTime)Z and (clientAppUsed eq 'AutoDiscover' or clientAppUsed eq 'Exchange ActiveSync' or clientAppUsed eq 'Exchange Online PowerShell' or clientAppUsed eq 'Exchange Web Services' or clientAppUsed eq 'IMAP4' or clientAppUsed eq 'MAPI Over HTTP' or clientAppUsed eq 'Offline Address Book' or clientAppUsed eq 'Outlook Anywhere (RPC over HTTP)' or clientAppUsed eq 'Other clients' or clientAppUsed eq 'POP3' or clientAppUsed eq 'Reporting Web Services' or clientAppUsed eq 'Authenticated SMTP' or clientAppUsed eq 'Outlook Service')"
- try {
- $GraphRequest = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/auditLogs/signIns?api-version=beta&filter=$($filters)" -tenantid $domainName -ErrorAction stop | Sort-Object -Unique -Property clientAppUsed | ForEach-Object {
- @{
- Tenant = $domainName
- clientAppUsed = $_.clientAppUsed
- userPrincipalName = $_.UserPrincipalName
- RowKey = "$($_.UserPrincipalName)-$($_.clientAppUsed)"
- PartitionKey = 'basicauth'
- }
- }
- } catch {
- $GraphRequest = @{
- Tenant = $domainName
- clientAppUsed = "Could not connect to Tenant: $($_.Exception.message)"
- userPrincipalName = $domainName
- RowKey = $domainName
- PartitionKey = 'basicauth'
- }
- }
- $Table = Get-CIPPTable -TableName cachebasicauth
- Add-CIPPAzDataTableEntity @Table -Entity $GraphRequest -Force | Out-Null
-
- }
-
-
-
-}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecAlertsList.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecAlertsList.ps1
index f3580ec3fc19..2fad771b8707 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecAlertsList.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecAlertsList.ps1
@@ -60,9 +60,24 @@ Function Invoke-ExecAlertsList {
$Filter = "PartitionKey eq 'alert'"
$Rows = Get-CIPPAzDataTableEntity @Table -filter $Filter | Where-Object -Property Timestamp -GT (Get-Date).AddMinutes(-10)
if (!$Rows) {
- Push-OutputBinding -Name alertqueue -Value (Get-Date).ToString()
+ $TenantList = Get-Tenants -IncludeErrors
+ $Queue = New-CippQueueEntry -Name 'Alerts List - All Tenants' -TotalTasks ($TenantList | Measure-Object).Count
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'AlertsList'
+ QueueFunction = [PSCustomObject]@{
+ FunctionName = 'GetTenants'
+ QueueId = $Queue.RowKey
+ TenantParams = @{
+ IncludeErrors = $true
+ }
+ DurableName = 'ExecAlertsListAllTenants'
+ }
+ SkipLog = $true
+ } | ConvertTo-Json -Depth 10
+ $InstanceId = Start-NewOrchestration -FunctionName CIPPOrchestrator -InputObject $InputObject
[PSCustomObject]@{
- Waiting = $true
+ Waiting = $true
+ InstanceId = $InstanceId
}
} else {
$Alerts = $Rows
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecIncidentsList.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecIncidentsList.ps1
index 184f629f2b2c..29b622550ef2 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecIncidentsList.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Security/Invoke-ExecIncidentsList.ps1
@@ -41,7 +41,21 @@ Function Invoke-ExecIncidentsList {
$Filter = "PartitionKey eq 'Incident'"
$Rows = Get-CIPPAzDataTableEntity @Table -filter $Filter | Where-Object -Property Timestamp -GT (Get-Date).AddMinutes(-10)
if (!$Rows) {
- Push-OutputBinding -Name incidentqueue -Value (Get-Date).ToString()
+ $TenantList = Get-Tenants -IncludeErrors
+ $Queue = New-CippQueueEntry -Name 'Incidents - All Tenants' -Link '/security/reports/incident-report?customerId=AllTenants' -TotalTasks ($TenantList | Measure-Object).Count
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'IncidentOrchestrator'
+ QueueFunction = @{
+ FunctionName = 'GetTenants'
+ TenantParams = @{
+ IncludeErrors = $true
+ }
+ QueueId = $Queue.RowKey
+ DurableFunction = 'ExecIncidentsListAllTenants'
+ }
+ SkipLog = $true
+ }
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
[PSCustomObject]@{
Waiting = $true
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSite.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSite.ps1
index e31239f1bf02..ab7474163cdc 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSite.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSite.ps1
@@ -5,7 +5,7 @@ Function Invoke-AddSite {
.FUNCTIONALITY
Entrypoint
.ROLE
- Teams.Group.ReadWrite
+ Sharepoint.Site.ReadWrite
#>
[CmdletBinding()]
param($Request, $TriggerMetadata)
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSiteBulk.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSiteBulk.ps1
index 79ac24fbc508..97f779f10c76 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSiteBulk.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-AddSiteBulk.ps1
@@ -5,7 +5,7 @@ Function Invoke-AddSiteBulk {
.FUNCTIONALITY
Entrypoint
.ROLE
- Teams.Group.ReadWrite
+ Sharepoint.Site.ReadWrite
#>
[CmdletBinding()]
param($Request, $TriggerMetadata)
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ExecSetSharePointMember.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ExecSetSharePointMember.ps1
index c52f4c1b1409..9c59f13662c3 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ExecSetSharePointMember.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ExecSetSharePointMember.ps1
@@ -9,8 +9,9 @@ Function Invoke-ExecSetSharePointMember {
#>
[CmdletBinding()]
param($Request, $TriggerMetadata)
- $GroupId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/groups?`$filter=mail eq '$($Request.Body.GroupID)'" -tenantid $Request.Body.TenantFilter).id
+
if ($Request.body.SharePointType -eq 'Group') {
+ $GroupId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/groups?`$filter=mail eq '$($Request.Body.GroupID)'" -tenantid $Request.Body.TenantFilter).id
if ($Request.body.Add -eq $true) {
$Results = Add-CIPPGroupMember -GroupType 'Team' -GroupID $GroupID -Member $Request.Body.input -TenantFilter $Request.Body.TenantFilter -ExecutingUser $request.headers.'x-ms-client-principal'
} else {
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ListSharepointAdminUrl.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ListSharepointAdminUrl.ps1
new file mode 100644
index 000000000000..ef0e1e5c690e
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ListSharepointAdminUrl.ps1
@@ -0,0 +1,50 @@
+function Invoke-ListSharepointAdminUrl {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ .ROLE
+ CIPP.Core.Read
+ #>
+ [CmdletBinding()]
+ param(
+ $Request,
+ $TriggerMetadata
+ )
+
+ if ($Request.Query.TenantFilter) {
+ $TenantFilter = $Request.Query.TenantFilter
+
+ $Tenant = Get-Tenants -TenantFilter $TenantFilter
+
+ if ($Tenant.SharepointAdminUrl) {
+ $AdminUrl = $Tenant.SharepointAdminUrl
+ } else {
+ $tenantName = (New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/sites/root' -asApp $true -tenantid $TenantFilter).id.Split('.')[0]
+ $AdminUrl = "https://$($tenantName)-admin.sharepoint.com"
+ $Tenant | Add-Member -MemberType NoteProperty -Name SharepointAdminUrl -Value $AdminUrl
+ $Table = Get-CIPPTable -TableName 'Tenants'
+ Add-CIPPAzDataTableEntity @Table -Entity $Tenant -Force
+ }
+
+ if ($Request.Query.ReturnUrl) {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::OK
+ Body = @{
+ AdminUrl = $AdminUrl
+ }
+ })
+ } else {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::Found
+ Headers = @{
+ Location = $AdminUrl
+ }
+ })
+ }
+ } else {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::BadRequest
+ Body = 'TenantFilter is required'
+ })
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ExecAuditLogSearch.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ExecAuditLogSearch.ps1
new file mode 100644
index 000000000000..ee418b6b145b
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ExecAuditLogSearch.ps1
@@ -0,0 +1,54 @@
+function Invoke-ExecAuditLogSearch {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ .ROLE
+ Tenant.Alert.ReadWrite
+ #>
+ [CmdletBinding()]
+ param($Request, $TriggerMetadata)
+
+ $Query = $Request.Body
+ if (!$Query.TenantFilter) {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::BadRequest
+ Body = 'TenantFilter is required'
+ })
+ return
+ }
+ if (!$Query.StartTime -or !$Query.EndTime) {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::BadRequest
+ Body = 'StartTime and EndTime are required'
+ })
+ return
+ }
+
+ $Command = Get-Command New-CippAuditLogSearch
+ $AvailableParameters = $Command.Parameters.Keys
+ $BadProps = foreach ($Prop in $Query.PSObject.Properties.Name) {
+ if ($AvailableParameters -notcontains $Prop) {
+ $Prop
+ }
+ }
+ if ($BadProps) {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::BadRequest
+ Body = "Invalid parameters: $($BadProps -join ', ')"
+ })
+ return
+ }
+
+ try {
+ $Results = New-CippAuditLogSearch @Query
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::OK
+ Body = $Results
+ })
+ } catch {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::BadRequest
+ Body = $_.Exception.Message
+ })
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogSearches.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogSearches.ps1
new file mode 100644
index 000000000000..b72187063e48
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogSearches.ps1
@@ -0,0 +1,77 @@
+function Invoke-ListAuditLogSearches {
+ <#
+ .FUNCTIONALITY
+ Entrypoint
+ .ROLE
+ Tenant.Alert.Read
+ #>
+ Param($Request, $TriggerMetadata)
+
+ if ($Request.Query.TenantFilter) {
+ switch ($Request.Query.Type) {
+ 'Searches' {
+ $Results = Get-CippAuditLogSearches -TenantFilter $Request.Query.TenantFilter
+ $Body = @{
+ Results = @($Results)
+ Metadata = @{
+ TenantFilter = $Request.Query.TenantFilter
+ TotalSearches = $Results.Count
+ }
+ } | ConvertTo-Json -Depth 10 -Compress
+ }
+ 'SearchResults' {
+ $Results = Get-CippAuditLogSearchResults -TenantFilter $Request.Query.TenantFilter -QueryId $Request.Query.SearchId
+ $Body = @{
+ Results = @($Results)
+ Metadata = @{
+ SearchId = $Request.Query.SearchId
+ TenantFilter = $Request.Query.TenantFilter
+ TotalResults = $Results.Count
+ }
+ } | ConvertTo-Json -Depth 10 -Compress
+ }
+ default {
+ if ($Request.Query.Days) {
+ $Days = $Request.Query.Days
+ } else {
+ $Days = 1
+ }
+ $StartTime = (Get-Date).AddDays(-$Days).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')
+
+ $Table = Get-CIPPTable -TableName 'AuditLogSearches'
+ $Results = Get-CIPPAzDataTableEntity @Table -Filter "StartTime ge datetime'$StartTime'" | ForEach-Object {
+ $Query = try { $_.Query | ConvertFrom-Json } catch { $_.Query }
+ $MatchedRules = try { $_.MatchedRules | ConvertFrom-Json } catch { $_.MatchedRules }
+ [PSCustomObject]@{
+ SearchId = $_.RowKey
+ StartTime = $_.StartTime.DateTime
+ EndTime = $_.EndTime.DateTime
+ Query = $Query
+ MatchedRules = $MatchedRules
+ TotalLogs = $_.TotalLogs
+ MatchedLogs = $_.MatchedLogs
+ CippStatus = $_.CippStatus
+ }
+ }
+
+ $Body = @{
+ Results = @($Results)
+ Metadata = @{
+ StartTime = $StartTime
+ TenantFilter = $Request.Query.TenantFilter
+ }
+ } | ConvertTo-Json -Depth 10 -Compress
+ }
+ }
+
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::OK
+ Body = $Body
+ })
+ } else {
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::BadRequest
+ Body = 'TenantFilter is required'
+ })
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogTest.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogTest.ps1
index 34576f5b5811..bc3a73fbe686 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogTest.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Administration/Alerts/Invoke-ListAuditLogTest.ps1
@@ -10,8 +10,7 @@ function Invoke-ListAuditLogTest {
$AuditLogQuery = @{
TenantFilter = $Request.Query.TenantFilter
- LogType = $Request.Query.LogType
- ShowAll = $true
+ SearchId = $Request.Query.SearchId
}
try {
$TestResults = Test-CIPPAuditLogRules @AuditLogQuery
@@ -38,4 +37,4 @@ function Invoke-ListAuditLogTest {
Body = $Body
})
-}
\ No newline at end of file
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecBPA.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecBPA.ps1
index fb2b4f4e7c48..3a1a16241b68 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecBPA.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecBPA.ps1
@@ -8,11 +8,31 @@ function Invoke-ExecBPA {
[CmdletBinding()]
param($Request, $TriggerMetadata)
- Start-BPAOrchestrator -TenantFilter $Request.Query.TenantFilter
+ $ConfigTable = Get-CIPPTable -tablename Config
+ $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
+
+ if ($Config -and $Config.state -eq $true) {
+ if ($env:CIPP_PROCESSOR -ne 'true') {
+ $ProcessorQueue = Get-CIPPTable -TableName 'ProcessorQueue'
+ $ProcessorFunction = [PSCustomObject]@{
+ PartitionKey = 'Function'
+ RowKey = "Start-BPAOrchestrator-$($Request.Query.TenantFilter)"
+ FunctionName = 'Start-BPAOrchestrator'
+ Parameters = [string](ConvertTo-Json -Compress -InputObject @{
+ TenantFilter = $Request.Query.TenantFilter
+ })
+ }
+ Add-AzDataTableEntity @ProcessorQueue -Entity $ProcessorFunction -Force
+ $Results = [pscustomobject]@{'Results' = 'BPA queued for execution' }
+ }
+ } else {
+ Start-BPAOrchestrator -TenantFilter $Request.Query.TenantFilter
+ $Results = [pscustomobject]@{'Results' = 'BPA started' }
+ }
- $Results = [pscustomobject]@{'Results' = 'BPA started' }
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $Results
})
+
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecDomainAnalyser.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecDomainAnalyser.ps1
index 50de572b0729..2b31c6bb1d44 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecDomainAnalyser.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecDomainAnalyser.ps1
@@ -8,10 +8,32 @@ function Invoke-ExecDomainAnalyser {
[CmdletBinding()]
param($Request, $TriggerMetadata)
- Start-DomainOrchestrator
+ $ConfigTable = Get-CIPPTable -tablename Config
+ $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
+
+ if ($Config -and $Config.state -eq $true) {
+ if ($env:CIPP_PROCESSOR -ne 'true') {
+ $ProcessorFunction = [PSCustomObject]@{
+ PartitionKey = 'Function'
+ RowKey = 'Start-DomainOrchestrator'
+ ProcessorFunction = 'Start-DomainOrchestrator'
+ }
+ $ProcessorQueue = Get-CIPPTable -TableName 'ProcessorQueue'
+ Add-AzDataTableEntity @ProcessorQueue -Entity $ProcessorFunction -Force
+ $Results = [pscustomobject]@{'Results' = 'Queueing Domain Analyser' }
+ }
+ } else {
+ $OrchStatus = Start-DomainOrchestrator
+ if ($OrchStatus) {
+ $Message = 'Domain Analyser started'
+ } else {
+ $Message = 'Domain Analyser error: check logs'
+ }
+ $Results = [pscustomobject]@{'Results' = $Message }
+ }
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
- Body = $results
+ Body = $Results
})
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecStandardsRun.ps1 b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecStandardsRun.ps1
index 032bdea91f1f..2b3200bf553f 100644
--- a/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecStandardsRun.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Tenant/Standards/Invoke-ExecStandardsRun.ps1
@@ -12,11 +12,32 @@ Function Invoke-ExecStandardsRun {
$APIName = $TriggerMetadata.FunctionName
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
$tenantfilter = if ($Request.Query.TenantFilter) { $Request.Query.TenantFilter } else { 'allTenants' }
- try {
- $null = Invoke-CIPPStandardsRun -Tenantfilter $tenantfilter -Force
- $Results = "Successfully Started Standards Run for Tenant $tenantfilter"
- } catch {
- $Results = "Failed to start standards run for $tenantfilter. Error: $($_.Exception.Message)"
+
+ $ConfigTable = Get-CIPPTable -tablename Config
+ $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
+
+ if ($Config -and $Config.state -eq $true) {
+ if ($env:CIPP_PROCESSOR -ne 'true') {
+ $ProcessorFunction = [PSCustomObject]@{
+ PartitionKey = 'Function'
+ RowKey = "Invoke-CIPPStandardsRun-$tenantfilter"
+ ProcessorFunction = 'Invoke-CIPPStandardsRun'
+ Parameters = [string](ConvertTo-Json -Compress -InputObject @{
+ TenantFilter = $tenantfilter
+ Force = $true
+ })
+ }
+ $ProcessorQueue = Get-CIPPTable -TableName 'ProcessorQueue'
+ Add-AzDataTableEntity @ProcessorQueue -Entity $ProcessorFunction -Force
+ $Results = "Successfully Queued Standards Run for Tenant $tenantfilter"
+ }
+ } else {
+ try {
+ $null = Invoke-CIPPStandardsRun -Tenantfilter $tenantfilter -Force
+ $Results = "Successfully Started Standards Run for Tenant $tenantfilter"
+ } catch {
+ $Results = "Failed to start standards run for $tenantfilter. Error: $($_.Exception.Message)"
+ }
}
$Results = [pscustomobject]@{'Results' = "$results" }
diff --git a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListGraphRequest.ps1 b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListGraphRequest.ps1
index 23c8f4f691a6..dbb63b088425 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListGraphRequest.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListGraphRequest.ps1
@@ -41,6 +41,7 @@ function Invoke-ListGraphRequest {
$Parameters.'$count' = ([string]([System.Boolean]$Request.Query.'$count')).ToLower()
}
+
if ($Request.Query.'$orderby') {
$Parameters.'$orderby' = $Request.Query.'$orderby'
}
@@ -75,6 +76,14 @@ function Invoke-ListGraphRequest {
$GraphRequestParams.NoPagination = [System.Boolean]$Request.Query.NoPagination
}
+ if ($Request.Query.manualPagination) {
+ $GraphRequestParams.NoPagination = [System.Boolean]$Request.Query.manualPagination
+ }
+
+ if ($Request.Query.nextLink) {
+ $GraphRequestParams.nextLink = $Request.Query.nextLink
+ }
+
if ($Request.Query.CountOnly) {
$GraphRequestParams.CountOnly = [System.Boolean]$Request.Query.CountOnly
}
@@ -103,6 +112,10 @@ function Invoke-ListGraphRequest {
}
}
+ if ($Request.Query.AsApp) {
+ $GraphRequestParams.AsApp = $true
+ }
+
Write-Host ($GraphRequestParams | ConvertTo-Json)
$Metadata = $GraphRequestParams
diff --git a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListIntunePolicy.ps1 b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListIntunePolicy.ps1
index 6bbf36a98274..ffd921297a06 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListIntunePolicy.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListIntunePolicy.ps1
@@ -1,4 +1,3 @@
-using namespace System.Net
Function Invoke-ListIntunePolicy {
<#
@@ -25,32 +24,75 @@ Function Invoke-ListIntunePolicy {
if ($ID) {
$GraphRequest = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/deviceManagement/$($urlname)('$ID')" -tenantid $tenantfilter
} else {
+ $Groups = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/groups' -tenantid $tenantfilter | Select-Object -Property id, displayName
- $GraphURLS = @("https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations?`$select=id,displayName,lastModifiedDateTime,roleScopeTagIds,microsoft.graph.unsupportedDeviceConfiguration/originalEntityTypeName&`$expand=assignments&top=1000"
- 'https://graph.microsoft.com/beta/deviceManagement/windowsDriverUpdateProfiles'
- "https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations?`$expand=assignments&top=1000"
- "https://graph.microsoft.com/beta/deviceAppManagement/mobileAppConfigurations?`$expand=assignments&`$filter=microsoft.graph.androidManagedStoreAppConfiguration/appSupportsOemConfig%20eq%20true"
- 'https://graph.microsoft.com/beta/deviceManagement/configurationPolicies'
+ $BulkRequests = [PSCustomObject]@(
+ @{
+ id = 'DeviceConfigurations'
+ method = 'GET'
+ url = "/deviceManagement/deviceConfigurations?`$select=id,displayName,lastModifiedDateTime,roleScopeTagIds,microsoft.graph.unsupportedDeviceConfiguration/originalEntityTypeName,description&`$expand=assignments&top=1000"
+ }
+ @{
+ id = 'WindowsDriverUpdateProfiles'
+ method = 'GET'
+ url = "/deviceManagement/windowsDriverUpdateProfiles?`$expand=assignments&top=200"
+ }
+ @{
+ id = 'GroupPolicyConfigurations'
+ method = 'GET'
+ url = "/deviceManagement/groupPolicyConfigurations?`$expand=assignments&top=1000"
+ }
+ @{
+ id = 'MobileAppConfigurations'
+ method = 'GET'
+ url = "/deviceAppManagement/mobileAppConfigurations?`$expand=assignments&`$filter=microsoft.graph.androidManagedStoreAppConfiguration/appSupportsOemConfig%20eq%20true"
+ }
+ @{
+ id = 'ConfigurationPolicies'
+ method = 'GET'
+ url = "/deviceManagement/configurationPolicies?`$expand=assignments&top=1000"
+ }
)
- $GraphRequest = $GraphURLS | ForEach-Object {
- $URLName = (($_).split('?') | Select-Object -First 1) -replace 'https://graph.microsoft.com/beta/deviceManagement/', ''
- New-GraphGetRequest -uri $_ -tenantid $TenantFilter
+ $BulkResults = New-GraphBulkRequest -Requests $BulkRequests -tenantid $TenantFilter
- } | ForEach-Object {
+ $GraphRequest = $BulkResults.body.value | ForEach-Object {
$policyTypeName = switch -Wildcard ($_.'assignments@odata.context') {
'*microsoft.graph.windowsIdentityProtectionConfiguration*' { 'Identity Protection' }
'*microsoft.graph.windows10EndpointProtectionConfiguration*' { 'Endpoint Protection' }
'*microsoft.graph.windows10CustomConfiguration*' { 'Custom' }
+ '*microsoft.graph.windows10DeviceFirmwareConfigurationInterface*' { 'Firmware Configuration' }
'*groupPolicyConfigurations*' { 'Administrative Templates' }
'*windowsDomainJoinConfiguration*' { 'Domain Join configuration' }
'*windowsUpdateForBusinessConfiguration*' { 'Update Configuration' }
'*windowsHealthMonitoringConfiguration*' { 'Health Monitoring' }
+ '*microsoft.graph.macOSGeneralDeviceConfiguration*' { 'MacOS Configuration' }
+ '*microsoft.graph.macOSEndpointProtectionConfiguration*' { 'MacOS Endpoint Protection' }
+ '*microsoft.graph.androidWorkProfileGeneralDeviceConfiguration*' { 'Android Configuration' }
default { $_.'assignments@odata.context' }
}
+ $Assignments = $_.assignments.target | Select-Object -Property '@odata.type', groupId
+ $PolicyAssignment = [System.Collections.Generic.List[string]]::new()
+ $PolicyExclude = [System.Collections.Generic.List[string]]::new()
+ ForEach ($target in $Assignments) {
+ switch ($target.'@odata.type') {
+ '#microsoft.graph.allDevicesAssignmentTarget' { $PolicyAssignment.Add('All Devices') }
+ '#microsoft.graph.exclusionallDevicesAssignmentTarget' { $PolicyExclude.Add('All Devices') }
+ '#microsoft.graph.allUsersAssignmentTarget' { $PolicyAssignment.Add('All Users') }
+ '#microsoft.graph.exclusionallUsersAssignmentTarget' { $PolicyExclude.Add('All Users') }
+ '#microsoft.graph.groupAssignmentTarget' { $PolicyAssignment.Add($Groups.Where({ $_.id -eq $target.groupId }).displayName) }
+ '#microsoft.graph.exclusionGroupAssignmentTarget' { $PolicyExclude.Add($Groups.Where({ $_.id -eq $target.groupId }).displayName) }
+ default {
+ $PolicyAssignment.Add($null)
+ $PolicyExclude.Add($null)
+ }
+ }
+ }
if ($_.displayname -eq $null) { $_ | Add-Member -NotePropertyName displayName -NotePropertyValue $_.name }
$_ | Add-Member -NotePropertyName PolicyTypeName -NotePropertyValue $policyTypeName
$_ | Add-Member -NotePropertyName URLName -NotePropertyValue $URLName
+ $_ | Add-Member -NotePropertyName PolicyAssignment -NotePropertyValue ($PolicyAssignment -join ', ')
+ $_ | Add-Member -NotePropertyName PolicyExclude -NotePropertyValue ($PolicyExclude -join ', ')
$_
} | Where-Object { $_.DisplayName -ne $null }
@@ -66,5 +108,4 @@ Function Invoke-ListIntunePolicy {
StatusCode = $StatusCode
Body = @($GraphRequest)
})
-
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListLicenses.ps1 b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListLicenses.ps1
index 82bb1e4aab1f..d6580cab36d2 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListLicenses.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListLicenses.ps1
@@ -29,7 +29,6 @@ Function Invoke-ListLicenses {
$Table = Get-CIPPTable -TableName cachelicenses
$Rows = Get-CIPPAzDataTableEntity @Table | Where-Object -Property Timestamp -GT (Get-Date).AddHours(-1)
if (!$Rows) {
- #Push-OutputBinding -Name LicenseQueue -Value (Get-Date).ToString()
$GraphRequest = [PSCustomObject]@{
Tenant = 'Loading data for all tenants. Please check back in 1 minute'
License = 'Loading data for all tenants. Please check back in 1 minute'
diff --git a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMFAUsers.ps1 b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMFAUsers.ps1
index 643900b2ccd8..0cdf963febe6 100644
--- a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMFAUsers.ps1
+++ b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMFAUsers.ps1
@@ -27,7 +27,6 @@ Function Invoke-ListMFAUsers {
$TenantList = Get-Tenants -IncludeErrors
$Queue = New-CippQueueEntry -Name 'MFA Users - All Tenants' -Link '/identity/reports/mfa-report?customerId=AllTenants' -TotalTasks ($TenantList | Measure-Object).Count
Write-Information ($Queue | ConvertTo-Json)
- #Push-OutputBinding -Name mfaqueue -Value $Queue.RowKey
$GraphRequest = [PSCustomObject]@{
UPN = 'Loading data for all tenants. Please check back in a few minutes'
}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMailboxStatistics.ps1 b/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMailboxStatistics.ps1
deleted file mode 100644
index 795812096c50..000000000000
--- a/Modules/CIPPCore/Public/Entrypoints/Invoke-ListMailboxStatistics.ps1
+++ /dev/null
@@ -1,66 +0,0 @@
-using namespace System.Net
-
-Function Invoke-ListMailboxStatistics {
- <#
- .FUNCTIONALITY
- Entrypoint
- .ROLE
- Exchange.Mailbox.Read
- #>
- [CmdletBinding()]
- param($Request, $TriggerMetadata)
-
- $APIName = $TriggerMetadata.FunctionName
- Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
-
-
- # Write to the Azure Functions log stream.
- Write-Host 'PowerShell HTTP trigger function processed a request.'
-
- # Interact with query parameters or the body of the request.
- $TenantFilter = $Request.Query.TenantFilter
- try {
-
- $GraphRequest = if ($TenantFilter -ne 'AllTenants') {
- New-GraphGetRequest -uri "https://graph.microsoft.com/beta/reports/getMailboxUsageDetail(period='D7')" -tenantid $TenantFilter | ConvertFrom-Csv | Select-Object @{ Name = 'UPN'; Expression = { $_.'User Principal Name' } },
- @{ Name = 'displayName'; Expression = { $_.'Display Name' } },
- @{ Name = 'MailboxType'; Expression = { $_.'Recipient Type' } },
- @{ Name = 'LastActive'; Expression = { $_.'Last Activity Date' } },
- @{ Name = 'UsedGB'; Expression = { [math]::round($_.'Storage Used (Byte)' / 1GB, 2) } },
- @{ Name = 'QuotaGB'; Expression = { [math]::round($_.'Prohibit Send/Receive Quota (Byte)' / 1GB, 2) } },
- @{ Name = 'ItemCount'; Expression = { $_.'Item Count' } },
- @{ Name = 'HasArchive'; Expression = { If (($_.'Has Archive').ToLower() -eq 'true') { [bool]$true } else { [bool]$false } } }
- $StatusCode = [HttpStatusCode]::OK
- } else {
- $Table = Get-CIPPTable -TableName 'cachereports'
- $Rows = Get-CIPPAzDataTableEntity @Table | Where-Object -Property Timestamp -GT (Get-Date).AddHours(-1)
- if (!$Rows) {
- $Queue = New-CippQueueEntry -Name 'Reports' -Link '/email/reports/mailbox-statistics?customerId=AllTenants'
- Push-OutputBinding -Name mailboxstats -Value "reports/getMailboxUsageDetail(period='D7')?`$format=application/json"
- [PSCustomObject]@{
- Tenant = 'Loading data for all tenants. Please check back after the job completes'
- }
- $StatusCode = [HttpStatusCode]::OK
- } else {
- $Rows.Data | ConvertFrom-Json | Select-Object *, @{ Name = 'UPN'; Expression = { $_.'UserPrincipalName' } },
- @{ Name = 'MailboxType'; Expression = { $_.'RecipientType' } },
- @{ Name = 'LastActive'; Expression = { $_.'LastActivityDate' } },
- @{ Name = 'UsedGB'; Expression = { [math]::round($_.'storageUsedInBytes' / 1GB, 2) } },
- @{ Name = 'QuotaGB'; Expression = { [math]::round($_.'prohibitSendReceiveQuotaInBytes' / 1GB, 2) } }
- $StatusCode = [HttpStatusCode]::OK
- }
- }
-
-
- } catch {
- $ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
- $StatusCode = [HttpStatusCode]::Forbidden
- $GraphRequest = $ErrorMessage
- }
- # Associate values to output bindings by calling 'Push-OutputBinding'.
- Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
- StatusCode = $StatusCode
- Body = @($GraphRequest)
- }) -clobber
-
-}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Invoke-TestResults.ps1 b/Modules/CIPPCore/Public/Entrypoints/Invoke-TestResults.ps1
deleted file mode 100644
index b8718793f559..000000000000
--- a/Modules/CIPPCore/Public/Entrypoints/Invoke-TestResults.ps1
+++ /dev/null
@@ -1,16 +0,0 @@
-function Invoke-TestResults {
-
- Push-OutputBinding -Name QueueItem -Value ([pscustomobject]@{
- FunctionName = 'TestResults'
- Body = @{
- Permissions = $true
- Tenants = $true
- GDAP = $true
- }
- })
- Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
- StatusCode = [HttpStatusCode]::OK
- Body = "yes"
- })
-
-}
\ No newline at end of file
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-AuditLogOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-AuditLogOrchestrator.ps1
new file mode 100644
index 000000000000..c0ccc91c3443
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-AuditLogOrchestrator.ps1
@@ -0,0 +1,101 @@
+function Start-AuditLogOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the Audit Log Polling Orchestrator
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+ try {
+ $AuditLogSearchesTable = Get-CIPPTable -TableName 'AuditLogSearches'
+ $AuditLogSearches = Get-CIPPAzDataTableEntity @AuditLogSearchesTable -Filter "CippStatus eq 'Pending'"
+
+ $ConfigTable = Get-CippTable -TableName 'WebhookRules'
+ $ConfigEntries = Get-CIPPAzDataTableEntity @ConfigTable
+
+ $TenantList = Get-Tenants -IncludeErrors
+ # Round time down to nearest minute
+ $Now = Get-Date
+ $StartTime = ($Now.AddSeconds(-$Now.Seconds)).AddHours(-1)
+ $EndTime = $Now.AddSeconds(-$Now.Seconds)
+
+ if (($AuditLogSearches | Measure-Object).Count -eq 0) {
+ Write-Information 'No audit log searches available'
+ } else {
+ $Queue = New-CippQueueEntry -Name 'Audit Log Collection' -Reference 'AuditLogCollection' -TotalTasks ($AuditLogSearches).Count
+ $Batch = $AuditLogSearches | Sort-Object -Property Tenant -Unique | Select-Object @{Name = 'TenantFilter'; Expression = { $_.Tenant } }, @{Name = 'QueueId'; Expression = { $Queue.RowKey } }, @{Name = 'FunctionName'; Expression = { 'AuditLogTenant' } }
+
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'AuditLogs'
+ Batch = @($Batch)
+ SkipLog = $true
+ }
+ if ($PSCmdlet.ShouldProcess('Start-AuditLogOrchestrator', 'Starting Audit Log Polling')) {
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
+ }
+ }
+
+ Write-Information 'Audit Logs: Creating new searches'
+ foreach ($Tenant in $TenantList) {
+ $Configuration = $ConfigEntries | Where-Object { ($_.Tenants -match $TenantFilter -or $_.Tenants -match 'AllTenants') }
+ if ($Configuration) {
+ $ServiceFilters = $Configuration | Select-Object -Property type | Sort-Object -Property type -Unique | ForEach-Object { $_.type.split('.')[1] }
+ try {
+ $LogSearch = @{
+ StartTime = $StartTime
+ EndTime = $EndTime
+ ServiceFilters = $ServiceFilters
+ TenantFilter = $Tenant.defaultDomainName
+ ProcessLogs = $true
+ RecordTypeFilters = @(
+ 'exchangeAdmin', 'azureActiveDirectory', 'azureActiveDirectoryAccountLogon', 'dataCenterSecurityCmdlet',
+ 'complianceDLPSharePoint', 'complianceDLPExchange', 'azureActiveDirectoryStsLogon', 'skypeForBusinessPSTNUsage',
+ 'skypeForBusinessUsersBlocked', 'securityComplianceCenterEOPCmdlet', 'microsoftFlow', 'aeD', 'microsoftStream',
+ 'threatFinder', 'project', 'dataGovernance', 'securityComplianceAlerts', 'threatIntelligenceUrl',
+ 'securityComplianceInsights', 'mipLabel', 'workplaceAnalytics', 'powerAppsApp', 'powerAppsPlan',
+ 'threatIntelligenceAtpContent', 'labelContentExplorer', 'hygieneEvent',
+ 'dataInsightsRestApiAudit', 'informationBarrierPolicyApplication', 'microsoftTeamsAdmin', 'hrSignal',
+ 'informationWorkerProtection', 'campaign', 'dlpEndpoint', 'airInvestigation', 'quarantine', 'microsoftForms',
+ 'applicationAudit', 'complianceSupervisionExchange', 'customerKeyServiceEncryption', 'officeNative',
+ 'mipAutoLabelSharePointItem', 'mipAutoLabelSharePointPolicyLocation', 'secureScore',
+ 'mipAutoLabelExchangeItem', 'cortanaBriefing', 'search', 'wdatpAlerts', 'powerPlatformAdminDlp',
+ 'powerPlatformAdminEnvironment', 'mdatpAudit', 'sensitivityLabelPolicyMatch', 'sensitivityLabelAction',
+ 'sensitivityLabeledFileAction', 'attackSim', 'airManualInvestigation', 'securityComplianceRBAC', 'userTraining',
+ 'airAdminActionInvestigation', 'mstic', 'physicalBadgingSignal', 'aipDiscover', 'aipSensitivityLabelAction',
+ 'aipProtectionAction', 'aipFileDeleted', 'aipHeartBeat', 'mcasAlerts', 'onPremisesFileShareScannerDlp',
+ 'onPremisesSharePointScannerDlp', 'exchangeSearch', 'privacyDataMinimization', 'labelAnalyticsAggregate',
+ 'myAnalyticsSettings', 'securityComplianceUserChange', 'complianceDLPExchangeClassification',
+ 'complianceDLPEndpoint', 'mipExactDataMatch', 'msdeResponseActions', 'msdeGeneralSettings', 'msdeIndicatorsSettings',
+ 'ms365DCustomDetection', 'msdeRolesSettings', 'mapgAlerts', 'mapgPolicy', 'mapgRemediation',
+ 'privacyRemediationAction', 'privacyDigestEmail', 'mipAutoLabelSimulationProgress', 'mipAutoLabelSimulationCompletion',
+ 'mipAutoLabelProgressFeedback', 'dlpSensitiveInformationType', 'mipAutoLabelSimulationStatistics',
+ 'largeContentMetadata', 'microsoft365Group', 'cdpMlInferencingResult', 'filteringMailMetadata',
+ 'cdpClassificationMailItem', 'cdpClassificationDocument', 'officeScriptsRunAction', 'filteringPostMailDeliveryAction',
+ 'cdpUnifiedFeedback', 'tenantAllowBlockList', 'consumptionResource', 'healthcareSignal', 'dlpImportResult',
+ 'cdpCompliancePolicyExecution', 'multiStageDisposition', 'privacyDataMatch', 'filteringDocMetadata',
+ 'filteringEmailFeatures', 'powerBIDlp', 'filteringUrlInfo', 'filteringAttachmentInfo', 'coreReportingSettings',
+ 'complianceConnector', 'powerPlatformLockboxResourceAccessRequest', 'powerPlatformLockboxResourceCommand',
+ 'cdpPredictiveCodingLabel', 'cdpCompliancePolicyUserFeedback', 'webpageActivityEndpoint', 'omePortal',
+ 'cmImprovementActionChange', 'filteringUrlClick', 'mipLabelAnalyticsAuditRecord', 'filteringEntityEvent',
+ 'filteringRuleHits', 'filteringMailSubmission', 'labelExplorer', 'microsoftManagedServicePlatform',
+ 'powerPlatformServiceActivity', 'scorePlatformGenericAuditRecord', 'filteringTimeTravelDocMetadata', 'alert',
+ 'alertStatus', 'alertIncident', 'incidentStatus', 'case', 'caseInvestigation', 'recordsManagement',
+ 'privacyRemediation', 'dataShareOperation', 'cdpDlpSensitive', 'ehrConnector', 'filteringMailGradingResult',
+ 'microsoftTodoAudit', 'timeTravelFilteringDocMetadata', 'microsoftDefenderForIdentityAudit',
+ 'supervisoryReviewDayXInsight', 'defenderExpertsforXDRAdmin', 'cdpEdgeBlockedMessage', 'hostedRpa',
+ 'cdpContentExplorerAggregateRecord', 'cdpHygieneAttachmentInfo', 'cdpHygieneSummary', 'cdpPostMailDeliveryAction',
+ 'cdpEmailFeatures', 'cdpHygieneUrlInfo', 'cdpUrlClick', 'cdpPackageManagerHygieneEvent', 'filteringDocScan',
+ 'timeTravelFilteringDocScan', 'mapgOnboard'
+ )
+ }
+ $NewSearch = New-CippAuditLogSearch @LogSearch
+ Write-Information "Created audit log search $($Tenant.defaultDomainName) - $($NewSearch.displayName)"
+ } catch {
+ Write-Information "Error creating audit log search $($Tenant.defaultDomainName) - $($_.Exception.Message)"
+ }
+ }
+ }
+ } catch {
+ Write-LogMessage -API 'Audit Logs' -message 'Error processing audit logs' -sev Error -LogData (Get-CippException -Exception $_)
+ Write-Information ( 'Audit logs error {0} line {1} - {2}' -f $_.InvocationInfo.ScriptName, $_.InvocationInfo.ScriptLineNumber, $_.Exception.Message)
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-ExtensionOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-ExtensionOrchestrator.ps1
new file mode 100644
index 000000000000..55126c5080ca
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-ExtensionOrchestrator.ps1
@@ -0,0 +1,23 @@
+function Start-ExtensionOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the Extension Orchestrator
+ .FUNCTIONALITY
+ Entrypoint
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ $Table = Get-CIPPTable -TableName Extensionsconfig
+
+ $Configuration = ((Get-AzDataTableEntity @Table).config | ConvertFrom-Json)
+
+ Write-Host 'Started Scheduler for Extensions'
+
+ # NinjaOne Extension
+ if ($Configuration.NinjaOne.Enabled -eq $True) {
+ if ($PSCmdlet.ShouldProcess('Invoke-NinjaOneExtensionScheduler')) {
+ Invoke-NinjaOneExtensionScheduler
+ }
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-SchedulerOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-SchedulerOrchestrator.ps1
new file mode 100644
index 000000000000..c7463ec28e08
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-SchedulerOrchestrator.ps1
@@ -0,0 +1,63 @@
+function Start-SchedulerOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the Scheduler Orchestrator
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ $Table = Get-CIPPTable -TableName SchedulerConfig
+ $Tenants = Get-CIPPAzDataTableEntity @Table | Where-Object -Property PartitionKey -NE 'WebhookAlert'
+
+ $Tasks = foreach ($Tenant in $Tenants) {
+ if ($Tenant.tenant -ne 'AllTenants') {
+ [pscustomobject]@{
+ Tenant = $Tenant.tenant
+ Tag = 'SingleTenant'
+ TenantID = $Tenant.tenantid
+ Type = $Tenant.type
+ RowKey = $Tenant.RowKey
+ }
+ } else {
+ Write-Information 'All tenants, doing them all'
+ $TenantList = Get-Tenants
+ foreach ($t in $TenantList) {
+ [pscustomobject]@{
+ Tenant = $t.defaultDomainName
+ Tag = 'AllTenants'
+ TenantID = $t.customerId
+ Type = $Tenant.type
+ RowKey = $Tenant.RowKey
+ }
+ }
+ }
+ }
+
+ if (($Tasks | Measure-Object).Count -eq 0) {
+ return
+ }
+
+ $Queue = New-CippQueueEntry -Name 'Scheduler' -TotalTasks ($Tasks | Measure-Object).Count
+
+ $Batch = foreach ($Task in $Tasks) {
+ [pscustomobject]@{
+ Tenant = $task.tenant
+ Tenantid = $task.tenantid
+ Tag = $task.tag
+ Type = $task.type
+ QueueId = $Queue.RowKey
+ SchedulerRow = $Task.RowKey
+ QueueName = '{0} - {1}' -f $Task.Type, $task.tenant
+ FunctionName = "Scheduler$($Task.Type)"
+ }
+ }
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'SchedulerOrchestrator'
+ Batch = @($Batch)
+ SkipLog = $true
+ }
+
+ if ($PSCmdlet.ShouldProcess('Start-ScheduleOrchestrator', 'Starting Scheduler Orchestrator')) {
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-StandardsOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-StandardsOrchestrator.ps1
new file mode 100644
index 000000000000..76e689ef4952
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-StandardsOrchestrator.ps1
@@ -0,0 +1,13 @@
+function Start-StandardsOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the Standards Orchestrator
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ if ($PSCmdlet.ShouldProcess('Start-StandardsOrchestrator', 'Starting Standards Orchestrator')) {
+ Write-LogMessage -API 'Standards' -message 'Starting Standards Schedule' -sev Info
+ Invoke-CIPPStandardsRun -tenantfilter 'allTenants'
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-UpdatePermissionsOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-UpdatePermissionsOrchestrator.ps1
new file mode 100644
index 000000000000..08495c8fb763
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-UpdatePermissionsOrchestrator.ps1
@@ -0,0 +1,35 @@
+function Start-UpdatePermissionsOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the Update Permissions Orchestrator
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ try {
+ $Tenants = Get-Tenants -IncludeAll | Where-Object { $_.customerId -ne $env:TenantID -and $_.Excluded -eq $false }
+ $CPVTable = Get-CIPPTable -TableName cpvtenants
+ $CPVRows = Get-CIPPAzDataTableEntity @CPVTable
+ $ModuleRoot = (Get-Module CIPPCore).ModuleBase
+ $SAMManifest = Get-Item -Path "$ModuleRoot\Public\SAMManifest.json"
+ $AdditionalPermissions = Get-Item -Path "$ModuleRoot\Public\AdditionalPermissions.json"
+ $Tenants = $Tenants | ForEach-Object {
+ $CPVRow = $CPVRows | Where-Object -Property Tenant -EQ $_.customerId
+ if (!$CPVRow -or $env:ApplicationID -notin $CPVRow.applicationId -or $SAMManifest.LastWriteTime.ToUniversalTime() -gt $CPVRow.Timestamp.DateTime -or $AdditionalPermissions.LastWriteTime.ToUniversalTime() -ge $CPVRow.Timestamp.DateTime -or $CPVRow.Timestamp.DateTime -le (Get-Date).AddDays(-7).ToUniversalTime() -or !$_.defaultDomainName) {
+ $_
+ }
+ }
+ $TenantCount = ($Tenants | Measure-Object).Count
+ if ($TenantCount -gt 0) {
+ $Queue = New-CippQueueEntry -Name 'Update Permissions' -TotalTasks $TenantCount
+ $TenantBatch = $Tenants | Select-Object defaultDomainName, customerId, displayName, @{n = 'FunctionName'; exp = { 'UpdatePermissionsQueue' } }, @{n = 'QueueId'; exp = { $Queue.RowKey } }
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'UpdatePermissionsOrchestrator'
+ Batch = @($TenantBatch)
+ }
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
+ } else {
+ Write-Information 'No tenants require permissions update'
+ }
+ } catch {}
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-UserTasksOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-UserTasksOrchestrator.ps1
new file mode 100644
index 000000000000..10aebb5c0767
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-UserTasksOrchestrator.ps1
@@ -0,0 +1,83 @@
+function Start-UserTasksOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the User Tasks Orchestrator
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ $Table = Get-CippTable -tablename 'ScheduledTasks'
+ $Filter = "TaskState eq 'Planned' or TaskState eq 'Failed - Planned'"
+ $tasks = Get-CIPPAzDataTableEntity @Table -Filter $Filter
+ $Batch = [System.Collections.Generic.List[object]]::new()
+ $TenantList = Get-Tenants -IncludeErrors
+ foreach ($task in $tasks) {
+ $tenant = $task.Tenant
+ $currentUnixTime = [int64](([datetime]::UtcNow) - (Get-Date '1/1/1970')).TotalSeconds
+ if ($currentUnixTime -ge $task.ScheduledTime) {
+ try {
+ $null = Update-AzDataTableEntity @Table -Entity @{
+ PartitionKey = $task.PartitionKey
+ RowKey = $task.RowKey
+ ExecutedTime = "$currentUnixTime"
+ TaskState = 'Running'
+ }
+ $task.Parameters = $task.Parameters | ConvertFrom-Json -AsHashtable
+ $task.AdditionalProperties = $task.AdditionalProperties | ConvertFrom-Json
+
+ if (!$task.Parameters) { $task.Parameters = @{} }
+ $ScheduledCommand = [pscustomobject]@{
+ Command = $task.Command
+ Parameters = $task.Parameters
+ TaskInfo = $task
+ FunctionName = 'ExecScheduledCommand'
+ }
+
+ if ($task.Tenant -eq 'AllTenants') {
+ $AllTenantCommands = foreach ($Tenant in $TenantList) {
+ $NewParams = $task.Parameters.Clone()
+ $NewParams.TenantFilter = $Tenant.defaultDomainName
+ [pscustomobject]@{
+ Command = $task.Command
+ Parameters = $NewParams
+ TaskInfo = $task
+ FunctionName = 'ExecScheduledCommand'
+ }
+ }
+ $Batch.AddRange($AllTenantCommands)
+ } else {
+ $ScheduledCommand.Parameters['TenantFilter'] = $task.Tenant
+ $Batch.Add($ScheduledCommand)
+ }
+ } catch {
+ $errorMessage = $_.Exception.Message
+
+ $null = Update-AzDataTableEntity @Table -Entity @{
+ PartitionKey = $task.PartitionKey
+ RowKey = $task.RowKey
+ Results = "$errorMessage"
+ ExecutedTime = "$currentUnixTime"
+ TaskState = 'Failed'
+ }
+ Write-LogMessage -API 'Scheduler_UserTasks' -tenant $tenant -message "Failed to execute task $($task.Name): $errorMessage" -sev Error
+ }
+ }
+ }
+ if (($Batch | Measure-Object).Count -gt 0) {
+ # Create queue entry
+ $Queue = New-CippQueueEntry -Name 'Scheduled Tasks' -TotalTasks ($Batch | Measure-Object).Count
+ $QueueId = $Queue.RowKey
+ $Batch = $Batch | Select-Object *, @{Name = 'QueueId'; Expression = { $QueueId } }, @{Name = 'QueueName'; Expression = { '{0} - {1}' -f $_.TaskInfo.Name, ($_.TaskInfo.Tenant -ne 'AllTenants' ? $_.TaskInfo.Tenant : $_.Parameters.TenantFilter) } }
+
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'UserTaskOrchestrator'
+ Batch = @($Batch)
+ SkipLog = $true
+ }
+ #Write-Host ($InputObject | ConvertTo-Json -Depth 10)
+
+ if ($PSCmdlet.ShouldProcess('Start-UserTasksOrchestrator', 'Starting User Tasks Orchestrator')) {
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 10 -Compress)
+ }
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-WebhookOrchestrator.ps1 b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-WebhookOrchestrator.ps1
new file mode 100644
index 000000000000..1ba797d3e10d
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Orchestrator Functions/Start-WebhookOrchestrator.ps1
@@ -0,0 +1,40 @@
+function Start-WebhookOrchestrator {
+ <#
+ .SYNOPSIS
+ Start the Webhook Orchestrator
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+ try {
+ $webhookTable = Get-CIPPTable -tablename webhookTable
+ $Webhooks = Get-CIPPAzDataTableEntity @webhookTable -Property PartitionKey, RowKey
+ if (($Webhooks | Measure-Object).Count -eq 0) {
+ Write-Information 'No webhook subscriptions found. Exiting.'
+ return
+ }
+
+ $WebhookIncomingTable = Get-CIPPTable -TableName WebhookIncoming
+ $WebhookIncoming = Get-CIPPAzDataTableEntity @WebhookIncomingTable -Property PartitionKey, RowKey
+ if (($WebhookIncoming | Measure-Object).Count -eq 0) {
+ Write-Information 'No webhook incoming found. Exiting.'
+ return
+ }
+
+ Write-Information 'Processing webhooks'
+
+ $InputObject = [PSCustomObject]@{
+ OrchestratorName = 'WebhookOrchestrator'
+ QueueFunction = @{
+ FunctionName = 'GetPendingWebhooks'
+ }
+ SkipLog = $true
+ }
+ if ($PSCmdlet.ShouldProcess('Start-WebhookOrchestrator', 'Starting Webhook Orchestrator')) {
+ Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
+
+ }
+ } catch {
+ Write-LogMessage -API 'Webhooks' -message 'Error processing webhooks' -sev Error -LogData (Get-CippException -Exception $_)
+ Write-Information ( 'Webhook error {0} line {1} - {2}' -f $_.InvocationInfo.ScriptName, $_.InvocationInfo.ScriptLineNumber, $_.Exception.Message)
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-BillingTimer.ps1 b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-BillingTimer.ps1
new file mode 100644
index 000000000000..99500af4ed9f
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-BillingTimer.ps1
@@ -0,0 +1,30 @@
+function Start-BillingTimer {
+ <#
+ .SYNOPSIS
+ Start the Billing Timer
+ .DESCRIPTION
+ This function starts the Billing Timner
+ .FUNCTIONALITY
+ Entrypoint
+ #>
+
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+ try {
+ Write-LogMessage -API 'Scheduler_Billing' -tenant 'none' -message 'Starting billing processing.' -sev Info
+
+ $Table = Get-CIPPTable -TableName Extensionsconfig
+ $Configuration = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -Depth 10
+ foreach ($ConfigItem in $Configuration.psobject.properties.name) {
+ switch ($ConfigItem) {
+ 'Gradient' {
+ If ($Configuration.Gradient.enabled -and $Configuration.Gradient.BillingEnabled) {
+ New-GradientServiceSyncRun
+ }
+ }
+ }
+ }
+ } catch {
+ Write-LogMessage -API 'Scheduler_Billing' -tenant 'none' -message "Could not start billing processing $($_.Exception.Message)" -sev Error
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPGraphSubscriptionCleanupTimer.ps1 b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPGraphSubscriptionCleanupTimer.ps1
new file mode 100644
index 000000000000..65d1ea7c29e1
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPGraphSubscriptionCleanupTimer.ps1
@@ -0,0 +1,19 @@
+function Start-CIPPGraphSubscriptionCleanupTimer {
+ <#
+ .SYNOPSIS
+ Remove CIPP Graph Subscriptions for all tenants except the partner tenant.
+
+ .DESCRIPTION
+ Remove CIPP Graph Subscriptions for all tenants except the partner tenant.
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+ try {
+ $Tenants = Get-Tenants -IncludeAll | Where-Object { $_.customerId -ne $env:TenantID -and $_.Excluded -eq $false }
+ $Tenants | ForEach-Object {
+ if ($PSCmdlet.ShouldProcess($_.defaultDomainName, 'Remove-CIPPGraphSubscription')) {
+ Remove-CIPPGraphSubscription -cleanup $true -TenantFilter $_.defaultDomainName
+ }
+ }
+ } catch {}
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPGraphSubscriptionRenewalTimer.ps1 b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPGraphSubscriptionRenewalTimer.ps1
new file mode 100644
index 000000000000..ee96995ee6f4
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPGraphSubscriptionRenewalTimer.ps1
@@ -0,0 +1,17 @@
+function Start-CIPPGraphSubscriptionRenewalTimer {
+ <#
+ .SYNOPSIS
+ Start the Graph Subscription Renewal Timer
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ if ($PSCmdlet.ShouldProcess('Start-CIPPGraphSubscriptionRenewalTimer', 'Starting Graph Subscription Renewal Timer')) {
+ try {
+ Write-LogMessage -API 'Scheduler_RenewGraphSubscriptions' -tenant 'none' -message 'Starting Graph Subscription Renewal' -sev Info
+ Invoke-CippGraphWebhookRenewal
+ } catch {
+ Write-LogMessage -API 'Scheduler_RenewGraphSubscriptions' -tenant 'none' -message 'Failed to renew graph subscriptions' -sev Info
+ }
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPProcessorQueue.ps1 b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPProcessorQueue.ps1
new file mode 100644
index 000000000000..ed6e09bebf62
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPProcessorQueue.ps1
@@ -0,0 +1,23 @@
+function Start-CIPPProcessorQueue {
+ <#
+ .SYNOPSIS
+ Starts a specified function on the processor node
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+
+ $QueueTable = Get-CIPPTable -tablename 'ProcessorQueue'
+ $QueueItems = Get-CIPPAzDataTableEntity @QueueTable -Filter "PartitionKey eq 'Function'"
+
+ foreach ($QueueItem in $QueueItems) {
+ if ($PSCmdlet.ShouldProcess("Processing function $($QueueItem.ProcessorFunction)")) {
+ Remove-AzDataTableEntity @QueueTable -Entity $QueueItem
+ $Parameters = $QueueItem.Parameters | ConvertFrom-Json -AsHashtable
+ if (Get-Command -Name $QueueItem.FunctionName -Module CIPPCore -ErrorAction SilentlyContinue) {
+ & $QueueItem.FunctionName @Parameters
+ } else {
+ Write-Warning "Function $($QueueItem.FunctionName) not found"
+ }
+ }
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPStatsTimer.ps1 b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPStatsTimer.ps1
new file mode 100644
index 000000000000..83cbc4b344a1
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-CIPPStatsTimer.ps1
@@ -0,0 +1,30 @@
+function Start-CIPPStatsTimer {
+ <#
+ .SYNOPSIS
+ Start the CIPP Stats Timer
+ #>
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+ #These stats are sent to a central server to help us understand how many tenants are using the product, and how many are using the latest version, this information allows the CIPP team to make decisions about what features to support, and what features to deprecate.
+ #We will never ship any data that is related to your instance, all we care about is the number of tenants, and the version of the API you are running, and if you completed setup.
+
+ if ($PSCmdlet.ShouldProcess('Start-CIPPStatsTimer', 'Starting CIPP Stats Timer')) {
+ if ($ENV:ApplicationID -ne 'LongApplicationID') {
+ $SetupComplete = $true
+ }
+ $TenantCount = (Get-Tenants -IncludeAll).count
+
+ Set-Location (Get-Item $PSScriptRoot).Parent.FullName
+ $APIVersion = Get-Content 'version_latest.txt' | Out-String
+
+ $SendingObject = [PSCustomObject]@{
+ rgid = $env:WEBSITE_SITE_NAME
+ SetupComplete = $SetupComplete
+ RunningVersionAPI = $APIVersion.trim()
+ CountOfTotalTenants = $tenantcount
+ uid = $env:TenantID
+ } | ConvertTo-Json
+
+ Invoke-RestMethod -Uri 'https://management.cipp.app/api/stats' -Method POST -Body $SendingObject -ContentType 'application/json'
+ }
+}
diff --git a/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-UpdateTokensTimer.ps1 b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-UpdateTokensTimer.ps1
new file mode 100644
index 000000000000..1f7cd63a8d3b
--- /dev/null
+++ b/Modules/CIPPCore/Public/Entrypoints/Timer Functions/Start-UpdateTokensTimer.ps1
@@ -0,0 +1,41 @@
+function Start-UpdateTokensTimer {
+ <#
+ .SYNOPSIS
+ Start the Update Tokens Timer
+ #>
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingConvertToSecureStringWithPlainText', '')]
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param()
+ if ($PSCmdlet.ShouldProcess('Start-UpdateTokensTimer', 'Starting Update Tokens Timer')) {
+
+ # Get the current universal time in the default string format.
+ $currentUTCtime = (Get-Date).ToUniversalTime()
+
+ $Refreshtoken = (Get-GraphToken -ReturnRefresh $true).Refresh_token
+
+ if ($env:AzureWebJobsStorage -eq 'UseDevelopmentStorage=true') {
+ $Table = Get-CIPPTable -tablename 'DevSecrets'
+ $Secret = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'Secret' and RowKey eq 'Secret'"
+ if ($Secret) {
+ $Secret.RefreshToken = $Refreshtoken
+ Add-AzDataTableEntity @Table -Entity $Secret -Force
+ } else {
+ Write-LogMessage -message 'Could not update refresh token. Will try again in 7 days.' -sev 'CRITICAL'
+ }
+ } else {
+ if ($env:MSI_SECRET) {
+ Disable-AzContextAutosave -Scope Process | Out-Null
+ $AzSession = Connect-AzAccount -Identity
+ }
+ $KV = $ENV:WEBSITE_DEPLOYMENT_ID
+ if ($Refreshtoken) {
+ Set-AzKeyVaultSecret -VaultName $kv -Name 'RefreshToken' -SecretValue (ConvertTo-SecureString -String $Refreshtoken -AsPlainText -Force)
+ } else {
+ Write-LogMessage -message 'Could not update refresh token. Will try again in 7 days.' -sev 'CRITICAL'
+ }
+ }
+
+ # Write an information log with the current time.
+ Write-Information "PowerShell timer trigger function ran! TIME: $currentUTCtime"
+ }
+}
diff --git a/Modules/CIPPCore/Public/Get-CIPPAuthentication.ps1 b/Modules/CIPPCore/Public/Get-CIPPAuthentication.ps1
index 0f37e2309dbc..4018dd43154b 100644
--- a/Modules/CIPPCore/Public/Get-CIPPAuthentication.ps1
+++ b/Modules/CIPPCore/Public/Get-CIPPAuthentication.ps1
@@ -9,7 +9,7 @@ function Get-CIPPAuthentication {
try {
if ($env:AzureWebJobsStorage -eq 'UseDevelopmentStorage=true') {
$Table = Get-CIPPTable -tablename 'DevSecrets'
- $Secret = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'Secret' and RowKey eq 'Secret'"
+ $Secret = Get-AzDataTableEntity @Table -Filter "PartitionKey eq 'Secret' and RowKey eq 'Secret'"
if (!$Secret) {
throw 'Development variables not set'
}
@@ -20,9 +20,9 @@ function Get-CIPPAuthentication {
}
} else {
Connect-AzAccount -Identity
-
+ $keyvaultname = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
$Variables | ForEach-Object {
- Set-Item -Path ENV:$_ -Value (Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name $_ -AsPlainText -ErrorAction Stop) -Force
+ Set-Item -Path ENV:$_ -Value (Get-AzKeyVaultSecret -VaultName $keyvaultname -Name $_ -AsPlainText -ErrorAction Stop) -Force
}
}
$ENV:SetFromProfile = $true
diff --git a/Modules/CIPPCore/Public/Get-CIPPTimerFunctions.ps1 b/Modules/CIPPCore/Public/Get-CIPPTimerFunctions.ps1
new file mode 100644
index 000000000000..99bea5b3cd84
--- /dev/null
+++ b/Modules/CIPPCore/Public/Get-CIPPTimerFunctions.ps1
@@ -0,0 +1,131 @@
+function Get-CIPPTimerFunctions {
+ [CmdletBinding()]
+ param(
+ [switch]$All,
+ [switch]$ResetToDefault
+ )
+
+ $ConfigTable = Get-CIPPTable -tablename Config
+ $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
+
+ # Check running nodes
+ $VersionTable = Get-CIPPTable -tablename 'Version'
+ $Nodes = Get-CIPPAzDataTableEntity @VersionTable -Filter "PartitionKey eq 'Version' and RowKey ne 'Version'" | Where-Object { $_.RowKey -match '-' }
+ $AvailableNodes = $Nodes.RowKey | ForEach-Object { ($_ -split '-')[1] }
+ $FunctionName = $env:WEBSITE_SITE_NAME
+
+ # Get node name
+ if ($FunctionName -match '-') {
+ $Node = ($FunctionName -split '-')[1]
+ } else {
+ $Node = 'http'
+ }
+
+ $RunOnProcessor = $true
+ if ($Config -and $Config.state -eq $true) {
+ if ($env:CIPP_PROCESSOR -ne 'true' -and !$All.IsPresent) {
+ $RunOnProcessor = $false
+ }
+ }
+
+ $CIPPCoreModuleRoot = Get-Module -Name CIPPCore | Select-Object -ExpandProperty ModuleBase
+
+ if (!('NCronTab.Advanced.CrontabSchedule' -as [type])) {
+ try {
+ $NCronTab = Join-Path -Path $CIPPCoreModuleRoot -ChildPath 'lib\NCrontab.Advanced.dll'
+ Add-Type -Path $NCronTab
+ } catch {}
+ }
+
+ $CIPPRoot = (Get-Item $CIPPCoreModuleRoot).Parent.Parent
+ $Orchestrators = Get-Content -Path $CIPPRoot\CIPPTimers.json | ConvertFrom-Json | Where-Object { $_.RunOnProcessor -eq $RunOnProcessor }
+ $Table = Get-CIPPTable -TableName 'CIPPTimers'
+ $RunOnProcessorTxt = if ($RunOnProcessor) { 'true' } else { 'false' }
+ $OrchestratorStatus = Get-CIPPAzDataTableEntity @Table -Filter "RunOnProcessor eq $RunOnProcessorTxt"
+ foreach ($Orchestrator in $Orchestrators) {
+ $Status = $OrchestratorStatus | Where-Object { $_.RowKey -eq $Orchestrator.Command }
+ if ($Status.Cron) {
+ $CronString = $Status.Cron
+ } else {
+ $CronString = $Orchestrator.Cron
+ }
+ $CronCount = ($CronString -split ' ' | Measure-Object).Count
+ if ($CronCount -eq 5) {
+ $Cron = [Ncrontab.Advanced.CrontabSchedule]::Parse($CronString)
+ } elseif ($CronCount -eq 6) {
+ $Cron = [Ncrontab.Advanced.CrontabSchedule]::Parse($CronString, [Ncrontab.Advanced.Enumerations.CronStringFormat]::WithSeconds)
+ } else {
+ Write-Warning "Invalid cron expression for $($Orchestrator.Command): $($Orchestrator.Cron)"
+ continue
+ }
+
+ if ($Orchestrator.PreferredProcessor -and $AvailableNodes -contains $Orchestrator.PreferredProcessor -and $Node -ne $Orchestrator.PreferredProcessor) {
+ # only run on preferred processor when available
+ continue
+ } elseif ((!$Orchestrator.PreferredProcessor -or $AvailableNodes -notcontains $Orchestrator.PreferredProcessor) -and $Node -notin ('http', 'proc')) {
+ # Catchall function nodes
+ continue
+ }
+
+ $Now = Get-Date
+ if ($All.IsPresent) {
+ $NextOccurrence = [datetime]$Cron.GetNextOccurrence($Now)
+ } else {
+ $NextOccurrences = $Cron.GetNextOccurrences($Now.AddMinutes(-15), $Now.AddMinutes(15))
+ if (!$Status -or $Status.LastOccurrence -eq 'Never') {
+ $NextOccurrence = $NextOccurrences | Where-Object { $_ -le (Get-Date) } | Select-Object -First 1
+ } else {
+ $NextOccurrence = $NextOccurrences | Where-Object { $_ -gt $Status.LastOccurrence.DateTime.ToLocalTime() -and $_ -le (Get-Date) } | Select-Object -First 1
+ }
+ }
+
+ if (Get-Command -Name $Orchestrator.Command -Module CIPPCore -ErrorAction SilentlyContinue) {
+ if ($NextOccurrence) {
+ if (!$Status) {
+ $Status = [pscustomobject]@{
+ PartitionKey = 'Timer'
+ RowKey = $Orchestrator.Command
+ Cron = $CronString
+ LastOccurrence = 'Never'
+ NextOccurrence = $NextOccurrence.ToUniversalTime()
+ Status = 'Not Scheduled'
+ OrchestratorId = ''
+ RunOnProcessor = $RunOnProcessor
+ IsSystem = $Orchestrator.IsSystem ?? $false
+ PreferredProcessor = $Orchestrator.PreferredProcessor ?? ''
+ }
+ Add-CIPPAzDataTableEntity @Table -Entity $Status
+ } else {
+ if ($Orchestrator.IsSystem -eq $true -or $ResetToDefault.IsPresent) {
+ $Status.Cron = $CronString
+ }
+ $Status.NextOccurrence = $NextOccurrence.ToUniversalTime()
+ $PreferredProcessor = $Orchestrator.PreferredProcessor ?? ''
+ if ($Status.PSObject.Properites.Name -notcontains 'PreferredProcessor') {
+ $Status | Add-Member -MemberType NoteProperty -Name 'PreferredProcessor' -Value $PreferredProcessor -Force
+ } else {
+ $Status.PreferredProcessor = $PreferredProcessor
+ }
+ Add-CIPPAzDataTableEntity @Table -Entity $Status -Force
+ }
+
+ [PSCustomObject]@{
+ Command = $Orchestrator.Command
+ Cron = $CronString
+ NextOccurrence = $NextOccurrence.ToUniversalTime()
+ LastOccurrence = $Status.LastOccurrence.DateTime
+ Status = $Status.Status
+ OrchestratorId = $Status.OrchestratorId
+ RunOnProcessor = $Orchestrator.RunOnProcessor
+ IsSystem = $Orchestrator.IsSystem ?? $false
+ PreferredProcessor = $Orchestrator.PreferredProcessor ?? ''
+ }
+ }
+ } else {
+ if ($Status) {
+ Write-Warning "Timer function: $($Orchestrator.Command) does not exist"
+ Remove-CIPPAzDataTableEntity @Table -Entity $Status
+ }
+ }
+ }
+}
diff --git a/Modules/CIPPCore/Public/GraphHelper/Get-CippSamPermissions.ps1 b/Modules/CIPPCore/Public/GraphHelper/Get-CippSamPermissions.ps1
index 0c356d839202..32ede8169d61 100644
--- a/Modules/CIPPCore/Public/GraphHelper/Get-CippSamPermissions.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/Get-CippSamPermissions.ps1
@@ -25,14 +25,14 @@ function Get-CippSamPermissions {
if (!$SavedOnly.IsPresent) {
$ModuleBase = Get-Module -Name CIPPCore | Select-Object -ExpandProperty ModuleBase
- $SamManifestFile = Get-Item "$ModuleBase\Public\SAMManifest.json"
- $AdditionalPermissions = Get-Item "$ModuleBase\Public\AdditionalPermissions.json"
+ $SamManifestFile = Get-Item (Join-Path $ModuleBase "Public\SAMManifest.json")
+ $AdditionalPermissions = Get-Item (Join-Path $ModuleBase "Public\AdditionalPermissions.json")
$ServicePrincipals = New-GraphGetRequest -Uri 'https://graph.microsoft.com/beta/servicePrincipals?$top=999&$select=appId,displayName,appRoles,publishedPermissionScopes' -tenantid $env:TenantID -NoAuthCheck $true
$SAMManifest = Get-Content -Path $SamManifestFile.FullName | ConvertFrom-Json
$AdditionalPermissions = Get-Content -Path $AdditionalPermissions.FullName | ConvertFrom-Json
- $RequiredResources = $SamManifest.requiredResourceAccess
+ $RequiredResources = $SAMManifest.requiredResourceAccess
$AppIds = ($RequiredResources.resourceAppId + $AdditionalPermissions.resourceAppId) | Sort-Object -Unique
diff --git a/Modules/CIPPCore/Public/GraphHelper/Get-GraphToken.ps1 b/Modules/CIPPCore/Public/GraphHelper/Get-GraphToken.ps1
index b0021973a701..626dc7ba842a 100644
--- a/Modules/CIPPCore/Public/GraphHelper/Get-GraphToken.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/Get-GraphToken.ps1
@@ -1,4 +1,4 @@
-function Get-GraphToken($tenantid, $scope, $AsApp, $AppID, $refreshToken, $ReturnRefresh, $SkipCache) {
+function Get-GraphToken($tenantid, $scope, $AsApp, $AppID, $AppSecret, $refreshToken, $ReturnRefresh, $SkipCache) {
<#
.FUNCTIONALITY
Internal
@@ -30,6 +30,15 @@ function Get-GraphToken($tenantid, $scope, $AsApp, $AppID, $refreshToken, $Retur
}
}
+ if ($null -ne $AppID -and $null -ne $AppSecret) {
+ $AuthBody = @{
+ client_id = $AppID
+ client_secret = $AppSecret
+ scope = $Scope
+ grant_type = 'client_credentials'
+ }
+ }
+
if (!$tenantid) { $tenantid = $env:TenantID }
$TokenKey = '{0}-{1}-{2}' -f $tenantid, $scope, $asApp
@@ -57,9 +66,9 @@ function Get-GraphToken($tenantid, $scope, $AsApp, $AppID, $refreshToken, $Retur
if (!$Tenant.RowKey) {
$donotset = $true
$Tenant = [pscustomobject]@{
- GraphErrorCount = $null
- LastGraphTokenError = $null
- LastGraphError = $null
+ GraphErrorCount = 0
+ LastGraphTokenError = ''
+ LastGraphError = ''
PartitionKey = 'TenantFailed'
RowKey = 'Failed'
}
diff --git a/Modules/CIPPCore/Public/GraphHelper/Get-Tenants.ps1 b/Modules/CIPPCore/Public/GraphHelper/Get-Tenants.ps1
index f720cf05d8d7..446a1c5fc5ac 100644
--- a/Modules/CIPPCore/Public/GraphHelper/Get-Tenants.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/Get-Tenants.ps1
@@ -55,7 +55,7 @@ function Get-Tenants {
}
if ($CleanOld) {
- $GDAPRelationships = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/tenantRelationships/delegatedAdminRelationships?`$filter=status eq 'active' and not startsWith(displayName,'MLT_')&`$select=customer,autoExtendDuration,endDateTime`$top=300" -NoAuthCheck:$true
+ $GDAPRelationships = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/tenantRelationships/delegatedAdminRelationships?`$filter=status eq 'active' and not startsWith(displayName,'MLT_')&`$select=customer,autoExtendDuration,endDateTime&`$top=300" -NoAuthCheck:$true
$GDAPList = foreach ($Relationship in $GDAPRelationships) {
[PSCustomObject]@{
customerId = $Relationship.customer.tenantId
@@ -86,7 +86,9 @@ function Get-Tenants {
$ActiveRelationships = $GDAPList | Where-Object $IncludedTenantFilter | Where-Object { $_.customerId -notin $SkipListCache.customerId }
$TenantList = $ActiveRelationships | Group-Object -Property customerId | ForEach-Object {
- #Write-Host "Processing $($_.Name) to add to tenant list."
+
+ # Write-Host (ConvertTo-Json -InputObject $_ -Depth 10)
+ # Write-Host "Processing $($_.Name), $($_.displayName) to add to tenant list."
$ExistingTenantInfo = Get-CIPPAzDataTableEntity @TenantsTable -Filter "PartitionKey eq 'Tenants' and RowKey eq '$($_.Name)'"
if ($TriggerRefresh.IsPresent -and $ExistingTenantInfo.customerId) {
# Reset error count
@@ -111,13 +113,17 @@ function Get-Tenants {
} catch {
try {
#doing alternative method to temporarily get domains. Nightly refresh will fix this as it will be marked for renew.
- $Domain = (New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/tenantRelationships/findTenantInformationByTenantId(tenantId='$($LatestRelationship.customerId)')" -NoAuthCheck:$true).defaultDomainName
- $defaultDomainName = $Domain
- $initialDomainName = $Domain
+ Write-Host 'Main method failed, trying alternative method.'
+ Write-Host "Domain variable is $Domain"
+ $Domain = (New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/tenantRelationships/findTenantInformationByTenantId(tenantId='$($LatestRelationship.customerId)')" -NoAuthCheck:$true ).defaultDomainName
+ Write-Host "Alternative method worked, got domain $Domain."
$RequiresRefresh = $true
-
} catch {
- Write-LogMessage -API 'Get-Tenants' -message "Tried adding $($LatestRelationship.customerId) to tenant list but failed to get domains - $($_.Exception.Message)" -level 'Critical'
+ $ErrorMessage = Get-CippException -Exception $_
+ Write-LogMessage -API 'Get-Tenants' -message "Tried adding $($LatestRelationship.customerId) to tenant list but failed to get domains - $($_.Exception.Message)" -Sev 'Critical' -LogData $ErrorMessage
+ } finally {
+ $defaultDomainName = $Domain
+ $initialDomainName = $Domain
}
}
Write-Host 'finished getting domain'
@@ -175,7 +181,7 @@ function Get-Tenants {
}
foreach ($Tenant in $TenantList | Where-Object $IncludedTenantFilter) {
- if ($Tenant.defaultDomainName -eq 'Invalid' -or !$Tenant.defaultDomainName) {
+ if ($Tenant.defaultDomainName -eq 'Invalid' -or [string]::IsNullOrWhiteSpace($Tenant.defaultDomainName)) {
Write-LogMessage -API 'Get-Tenants' -message "We're skipping $($Tenant.displayName) as it has an invalid default domain name. Something is up with this instance." -level 'Critical'
continue
}
diff --git a/Modules/CIPPCore/Public/GraphHelper/New-ExoRequest.ps1 b/Modules/CIPPCore/Public/GraphHelper/New-ExoRequest.ps1
index fdded4391dd3..8572b6494df4 100644
--- a/Modules/CIPPCore/Public/GraphHelper/New-ExoRequest.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/New-ExoRequest.ps1
@@ -73,8 +73,7 @@ function New-ExoRequest {
$OnMicrosoft = $Tenant.initialDomainName
}
$anchor = "UPN:SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@$($OnMicrosoft)"
- if ($cmdlet -in 'Set-AdminAuditLogConfig', 'Get-AdminAuditLogConfig', 'Enable-OrganizationCustomization', 'Get-OrganizationConfig') { $anchor = "UPN:SystemMailbox{8cc370d3-822a-4ab8-a926-bb94bd0641a9}@$($OnMicrosoft)" }
-
+ if ($cmdlet -in 'Set-AdminAuditLogConfig', 'Get-AdminAuditLogConfig', 'Enable-OrganizationCustomization', 'Get-OrganizationConfig', 'Set-OrganizationConfig') { $anchor = "UPN:SystemMailbox{8cc370d3-822a-4ab8-a926-bb94bd0641a9}@$($OnMicrosoft)" }
}
}
#if the anchor is a GUID, try looking up the user.
@@ -143,11 +142,12 @@ function New-ExoRequest {
ContentType = 'application/json'
}
- $Return = Invoke-RestMethod @ExoRequestParams
+ $Return = Invoke-RestMethod @ExoRequestParams -ResponseHeadersVariable ResponseHeaders
$URL = $Return.'@odata.nextLink'
$Return
} until ($null -eq $URL)
+ Write-Verbose ($ResponseHeaders | ConvertTo-Json)
if ($ReturnedData.'@adminapi.warnings' -and $ReturnedData.value -eq $null) {
$ReturnedData.value = $ReturnedData.'@adminapi.warnings'
}
diff --git a/Modules/CIPPCore/Public/GraphHelper/New-GraphBulkRequest.ps1 b/Modules/CIPPCore/Public/GraphHelper/New-GraphBulkRequest.ps1
index ae2777fa2ac7..bbace99fdca5 100644
--- a/Modules/CIPPCore/Public/GraphHelper/New-GraphBulkRequest.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/New-GraphBulkRequest.ps1
@@ -23,7 +23,7 @@ function New-GraphBulkRequest {
if (!$Tenant) {
$Tenant = @{
GraphErrorCount = 0
- LastGraphError = $null
+ LastGraphError = ''
PartitionKey = 'TenantFailed'
RowKey = 'Failed'
}
@@ -54,14 +54,18 @@ function New-GraphBulkRequest {
$Message = ($_.ErrorDetails.Message | ConvertFrom-Json -ErrorAction SilentlyContinue).error.message
if ($null -eq $Message) { $Message = $($_.Exception.Message) }
if ($Message -ne 'Request not applicable to target tenant.') {
- $Tenant.LastGraphError = $Message
+ $Tenant.LastGraphError = $Message ?? ''
$Tenant.GraphErrorCount++
Update-AzDataTableEntity @TenantsTable -Entity $Tenant
}
throw $Message
}
- $Tenant.LastGraphError = ''
+ if ($Tenant.PSObject.Properties.Name -notcontains 'LastGraphError') {
+ $Tenant | Add-Member -MemberType NoteProperty -Name 'LastGraphError' -Value '' -Force
+ } else {
+ $Tenant.LastGraphError = ''
+ }
Update-AzDataTableEntity @TenantsTable -Entity $Tenant
return $ReturnedData.responses
diff --git a/Modules/CIPPCore/Public/GraphHelper/New-GraphGetRequest.ps1 b/Modules/CIPPCore/Public/GraphHelper/New-GraphGetRequest.ps1
index e5fe77f2e484..f2d95290f673 100644
--- a/Modules/CIPPCore/Public/GraphHelper/New-GraphGetRequest.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/New-GraphGetRequest.ps1
@@ -11,6 +11,7 @@ function New-GraphGetRequest {
$noPagination,
$NoAuthCheck,
$skipTokenCache,
+ $Caller,
[switch]$ComplexFilter,
[switch]$CountOnly,
[switch]$IncludeResponseHeaders
@@ -36,7 +37,7 @@ function New-GraphGetRequest {
if (!$Tenant) {
$Tenant = @{
GraphErrorCount = 0
- LastGraphError = $null
+ LastGraphError = ''
PartitionKey = 'TenantFailed'
RowKey = 'Failed'
}
@@ -58,8 +59,11 @@ function New-GraphGetRequest {
$Data.'@odata.count'
$NextURL = $null
} else {
- if ($Data.PSObject.Properties.Name -contains 'value') { $data.value } else { ($Data) }
+ if ($Data.PSObject.Properties.Name -contains 'value') { $data.value } else { $Data }
if ($noPagination) {
+ if ($Caller -eq 'Get-GraphRequestList') {
+ @{ 'nextLink' = $data.'@odata.nextLink' }
+ }
$nextURL = $null
} else {
$NextPageUriFound = $false
@@ -87,7 +91,11 @@ function New-GraphGetRequest {
throw $Message
}
} until ([string]::IsNullOrEmpty($NextURL) -or $NextURL -is [object[]] -or ' ' -eq $NextURL)
- $Tenant.LastGraphError = ''
+ if ($Tenant.PSObject.Properties.Name -notcontains 'LastGraphError') {
+ $Tenant | Add-Member -MemberType NoteProperty -Name 'LastGraphError' -Value '' -Force
+ } else {
+ $Tenant.LastGraphError = ''
+ }
$Tenant.GraphErrorCount = 0
Update-AzDataTableEntity @TenantsTable -Entity $Tenant
return $ReturnedData
diff --git a/Modules/CIPPCore/Public/GraphHelper/Write-CippFunctionStats.ps1 b/Modules/CIPPCore/Public/GraphHelper/Write-CippFunctionStats.ps1
index 0e295e96cc46..b8a2b05ed80c 100644
--- a/Modules/CIPPCore/Public/GraphHelper/Write-CippFunctionStats.ps1
+++ b/Modules/CIPPCore/Public/GraphHelper/Write-CippFunctionStats.ps1
@@ -6,34 +6,23 @@ function Write-CippFunctionStats {
Param(
[string]$FunctionType,
$Entity,
- $Start,
- $End,
+ [datetime]$Start,
+ [datetime]$End,
[string]$ErrorMsg = ''
)
try {
- $Start = Get-Date $Start
- $End = Get-Date $End
-
$Table = Get-CIPPTable -tablename CippFunctionStats
$RowKey = [string](New-Guid).Guid
$TimeSpan = New-TimeSpan -Start $Start -End $End
$Duration = [int]$TimeSpan.TotalSeconds
$DurationMS = [int]$TimeSpan.TotalMilliseconds
- # if datetime is local, convert to UTC
- if ($Start.Kind -eq 'Local') {
- $Start = $Start.ToUniversalTime()
- }
- if ($End.Kind -eq 'Local') {
- $End = $End.ToUniversalTime()
- }
-
$StatEntity = @{}
# Flatten data to json string
$StatEntity.PartitionKey = $FunctionType
$StatEntity.RowKey = $RowKey
- $StatEntity.Start = $Start
- $StatEntity.End = $End
+ $StatEntity.Start = $Start.ToUniversalTime()
+ $StatEntity.End = $End.ToUniversalTime()
$StatEntity.Duration = $Duration
$StatEntity.DurationMS = $DurationMS
$StatEntity.ErrorMsg = $ErrorMsg
@@ -42,6 +31,8 @@ function Write-CippFunctionStats {
if ($Entity.$Property) {
if ($Entity.$Property.GetType().Name -in ('Hashtable', 'PSCustomObject', 'OrderedHashtable')) {
$StatEntity.$Property = [string]($Entity.$Property | ConvertTo-Json -Compress)
+ } elseif ($Entity.$Property.GetType().Name -eq 'DateTime' -and $Entity.$Property.Kind -eq 'Local') {
+ $StatEntity.$Property = $Entity.$Property.ToUniversalTime()
} elseif ($Property -notin ('ETag', 'RowKey', 'PartitionKey', 'Timestamp', 'LastRefresh')) {
$StatEntity.$Property = $Entity.$Property
}
diff --git a/Modules/CIPPCore/Public/GraphRequests/Get-GraphRequestList.ps1 b/Modules/CIPPCore/Public/GraphRequests/Get-GraphRequestList.ps1
index 39324bfdb09b..769796f02504 100644
--- a/Modules/CIPPCore/Public/GraphRequests/Get-GraphRequestList.ps1
+++ b/Modules/CIPPCore/Public/GraphRequests/Get-GraphRequestList.ps1
@@ -51,6 +51,7 @@ function Get-GraphRequestList {
[string]$TenantFilter = $env:TenantID,
[Parameter(Mandatory = $true)]
[string]$Endpoint,
+ [string]$nextLink,
[hashtable]$Parameters = @{},
[string]$QueueId,
[string]$CippLink,
@@ -63,7 +64,8 @@ function Get-GraphRequestList {
[switch]$CountOnly,
[switch]$NoAuthCheck,
[switch]$ReverseTenantLookup,
- [string]$ReverseTenantLookupProperty = 'tenantId'
+ [string]$ReverseTenantLookupProperty = 'tenantId',
+ [boolean]$AsApp = $false
)
$SingleTenantThreshold = 8000
@@ -94,11 +96,12 @@ function Get-GraphRequestList {
$Count = 0
if ($TenantFilter -ne 'AllTenants') {
$GraphRequest = @{
- uri = $GraphQuery.ToString()
- tenantid = $TenantFilter
- ComplexFilter = $true
+ uri = $GraphQuery.ToString()
+ tenantid = $TenantFilter
+ }
+ if ($Parameters.'$filter') {
+ $GraphRequest.ComplexFilter = $true
}
-
if ($NoPagination.IsPresent) {
$GraphRequest.noPagination = $NoPagination.IsPresent
}
@@ -108,6 +111,9 @@ function Get-GraphRequestList {
if ($NoAuthCheck.IsPresent) {
$GraphRequest.noauthcheck = $NoAuthCheck.IsPresent
}
+ if ($AsApp) {
+ $GraphRequest.asApp = $AsApp
+ }
if ($Parameters.'$count' -and !$SkipCache.IsPresent -and !$NoPagination.IsPresent) {
$Count = New-GraphGetRequest @GraphRequest -CountOnly -ErrorAction Stop
if ($CountOnly.IsPresent) { return $Count }
@@ -172,6 +178,8 @@ function Get-GraphRequestList {
NoPagination = $using:NoPagination.IsPresent
ReverseTenantLookupProperty = $using:ReverseTenantLookupProperty
ReverseTenantLookup = $using:ReverseTenantLookup.IsPresent
+ NoAuthCheck = $using:NoAuthCheck.IsPresent
+ AsApp = $using:AsApp
SkipCache = $true
}
@@ -218,11 +226,11 @@ function Get-GraphRequestList {
PartitionKey = $PartitionKey
NoPagination = $NoPagination.IsPresent
NoAuthCheck = $NoAuthCheck.IsPresent
+ AsApp = $AsApp
ReverseTenantLookupProperty = $ReverseTenantLookupProperty
ReverseTenantLookup = $ReverseTenantLookup.IsPresent
}
- #Push-OutputBinding -Name QueueItem -Value $QueueTenant
}
$InputObject = @{
@@ -273,8 +281,6 @@ function Get-GraphRequestList {
}
$InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
- #Push-OutputBinding -Name QueueItem -Value $QueueTenant
-
[PSCustomObject]@{
QueueMessage = ('Loading {0} rows for {1}. Please check back after the job completes' -f $Count, $TenantFilter)
QueueId = $Queue.RowKey
@@ -285,7 +291,17 @@ function Get-GraphRequestList {
}
if (!$QueueThresholdExceeded) {
- $GraphRequestResults = New-GraphGetRequest @GraphRequest -ErrorAction Stop | Select-Object *, @{l = 'Tenant'; e = { $TenantFilter } }, @{l = 'CippStatus'; e = { 'Good' } }
+ #nextLink should ONLY be used in direct calls with manual pagination. It should not be used in queueing
+ if ($nextLink) { $GraphRequest.uri = $nextLink }
+
+ $GraphRequestResults = New-GraphGetRequest @GraphRequest -Caller 'Get-GraphRequestList' -ErrorAction Stop
+ if ($GraphRequestResults.nextLink) {
+ #$Metadata['nextLink'] = $GraphRequestResults.nextLink | Select-Object -Last 1
+ #GraphRequestResults is an array of objects, so we need to remove the last object before returning
+ $GraphRequestResults = $GraphRequestResults | Select-Object -First ($GraphRequestResults.Count - 1)
+ }
+ $GraphRequestResults = $GraphRequestResults | Select-Object *, @{n = 'Tenant'; e = { $TenantFilter } }, @{n = 'CippStatus'; e = { 'Good' } }
+
if ($ReverseTenantLookup -and $GraphRequestResults) {
$ReverseLookupRequests = $GraphRequestResults.$ReverseTenantLookupProperty | Sort-Object -Unique | ForEach-Object {
@{
diff --git a/Modules/CIPPCore/Public/Invoke-CIPPOffboardingJob.ps1 b/Modules/CIPPCore/Public/Invoke-CIPPOffboardingJob.ps1
index f404764897db..2de463c0c811 100644
--- a/Modules/CIPPCore/Public/Invoke-CIPPOffboardingJob.ps1
+++ b/Modules/CIPPCore/Public/Invoke-CIPPOffboardingJob.ps1
@@ -12,7 +12,7 @@ function Invoke-CIPPOffboardingJob {
if ($Options -is [string]) {
$Options = $Options | ConvertFrom-Json
}
- $userid = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($username)" -tenantid $Tenantfilter).id
+ $userid = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($username)?`$select=id" -tenantid $Tenantfilter).id
Write-Host "Running offboarding job for $username with options: $($Options | ConvertTo-Json -Depth 10)"
$Return = switch ($Options) {
{ $_.'ConvertToShared' -eq 'true' } {
@@ -50,14 +50,15 @@ function Invoke-CIPPOffboardingJob {
Set-CIPPOutOfOffice -tenantFilter $tenantFilter -userid $username -InternalMessage $Options.OOO -ExternalMessage $Options.OOO -ExecutingUser $ExecutingUser -APIName $APIName -state 'Enabled'
}
{ $_.'forward' -ne '' } {
- if (!$options.keepcopy) {
+ if (!$Options.keepCopy) {
Set-CIPPForwarding -userid $userid -username $username -tenantFilter $Tenantfilter -Forward $Options.forward -ExecutingUser $ExecutingUser -APIName $APIName
} else {
- Set-CIPPForwarding -userid $userid -username $username -tenantFilter $Tenantfilter -Forward $Options.forward -KeepCopy [boolean]($Options.keepCopy) -ExecutingUser $ExecutingUser -APIName $APIName
+ $KeepCopy = [boolean]$Options.keepCopy
+ Set-CIPPForwarding -userid $userid -username $username -tenantFilter $Tenantfilter -Forward $Options.forward -KeepCopy $KeepCopy -ExecutingUser $ExecutingUser -APIName $APIName
}
}
{ $_.'RemoveLicenses' -eq 'true' } {
- Remove-CIPPLicense -userid $userid -username $Username -tenantFilter $Tenantfilter -ExecutingUser $ExecutingUser -APIName $APIName
+ Remove-CIPPLicense -userid $userid -username $Username -tenantFilter $Tenantfilter -ExecutingUser $ExecutingUser -APIName $APIName -Schedule
}
{ $_.'Deleteuser' -eq 'true' } {
@@ -80,12 +81,22 @@ function Invoke-CIPPOffboardingJob {
Remove-CIPPMailboxPermissions -PermissionsLevel @('FullAccess', 'SendAs', 'SendOnBehalf') -userid 'AllUsers' -AccessUser $UserName -TenantFilter $TenantFilter -APIName $APINAME -ExecutingUser $ExecutingUser
} else {
- $object = [PSCustomObject]@{
- TenantFilter = $tenantFilter
- User = $username
- executingUser = $ExecutingUser
+ $Queue = New-CippQueueEntry -Name "Offboarding - Mailbox Permissions: $Username" -TotalTasks 1
+ $InputObject = [PSCustomObject]@{
+ Batch = @(
+ [PSCustomObject]@{
+ 'FunctionName' = 'ExecOffboardingMailboxPermissions'
+ 'TenantFilter' = $TenantFilter
+ 'User' = $Username
+ 'ExecutingUser' = $ExecutingUser
+ 'APINAME' = $APINAME
+ 'QueueId' = $Queue.RowKey
+ }
+ )
+ OrchestratorName = "OffboardingMailboxPermissions_$Username"
+ SkipLog = $true
}
- Push-OutputBinding -Name offboardingmailbox -Value $object
+ $null = Start-NewOrchestration -FunctionName CIPPOrchestrator -InputObject ($InputObject | ConvertTo-Json -Depth 10)
"Removal of permissions queued. This task will run in the background and send it's results to the logbook."
}
}
diff --git a/Modules/CIPPCore/Public/New-CIPPAPIConfig.ps1 b/Modules/CIPPCore/Public/New-CIPPAPIConfig.ps1
index 5ec4e4eab582..d09e17561641 100644
--- a/Modules/CIPPCore/Public/New-CIPPAPIConfig.ps1
+++ b/Modules/CIPPCore/Public/New-CIPPAPIConfig.ps1
@@ -8,7 +8,8 @@ function New-CIPPAPIConfig {
$resetpassword
)
$null = Connect-AzAccount -Identity
- $currentapp = (Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name 'CIPPAPIAPP' -AsPlainText)
+ $VaultName = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
+ $currentapp = (Get-AzKeyVaultSecret -VaultName $VaultName -Name 'CIPPAPIAPP' -AsPlainText)
$subscription = $($ENV:WEBSITE_OWNER_NAME).Split('+')[0]
try {
diff --git a/Modules/CIPPCore/Public/New-CIPPBackup.ps1 b/Modules/CIPPCore/Public/New-CIPPBackup.ps1
index f3240da8b1d0..65e55aa03455 100644
--- a/Modules/CIPPCore/Public/New-CIPPBackup.ps1
+++ b/Modules/CIPPCore/Public/New-CIPPBackup.ps1
@@ -27,6 +27,7 @@ function New-CIPPBackup {
Get-AzDataTableEntity @Table | Select-Object *, @{l = 'table'; e = { $CSVTable } } -ExcludeProperty DomainAnalyser
}
$RowKey = 'CIPPBackup' + '_' + (Get-Date).ToString('yyyy-MM-dd-HHmm')
+ $CSVfile
$CSVFile = [string]($CSVfile | ConvertTo-Json -Compress -Depth 100)
$entity = @{
PartitionKey = 'CIPPBackup'
diff --git a/Modules/CIPPCore/Public/New-CIPPUserTask.ps1 b/Modules/CIPPCore/Public/New-CIPPUserTask.ps1
index ea18ca891c16..6d00a366827f 100644
--- a/Modules/CIPPCore/Public/New-CIPPUserTask.ps1
+++ b/Modules/CIPPCore/Public/New-CIPPUserTask.ps1
@@ -30,7 +30,7 @@ function New-CIPPUserTask {
try {
if ($Userobj.AddedAliases) {
- $AliasResults = Add-CIPPAlias -user $CreationResults.username -Aliases ($UserObj.AddedAliases -split '\s') -UserprincipalName $UserObj.UserprincipalName -TenantFilter $UserObj.tenantID -APIName $APINAME -ExecutingUser $request.headers.'x-ms-client-principal'
+ $AliasResults = Add-CIPPAlias -user $CreationResults.username -Aliases ($UserObj.AddedAliases -split '\s') -UserprincipalName $CreationResults.Username -TenantFilter $UserObj.tenantID -APIName $APINAME -ExecutingUser $request.headers.'x-ms-client-principal'
$results.add($AliasResults)
}
} catch {
@@ -38,7 +38,7 @@ function New-CIPPUserTask {
$body = $results.add("Failed to create the Aliases: $($_.Exception.Message)")
}
if ($userobj.CopyFrom -ne '') {
- $CopyFrom = Set-CIPPCopyGroupMembers -ExecutingUser $request.headers.'x-ms-client-principal' -CopyFromId $userObj.CopyFrom -UserID $UserObj.UserprincipalName -TenantFilter $UserObj.tenantID
+ $CopyFrom = Set-CIPPCopyGroupMembers -ExecutingUser $request.headers.'x-ms-client-principal' -CopyFromId $userObj.CopyFrom -UserID $CreationResults.Username -TenantFilter $UserObj.tenantID
$CopyFrom.Success | ForEach-Object { $results.Add($_) }
$CopyFrom.Error | ForEach-Object { $results.Add($_) }
}
diff --git a/Modules/CIPPCore/Public/Remove-CIPPLicense.ps1 b/Modules/CIPPCore/Public/Remove-CIPPLicense.ps1
index b84663a55468..6bf266fc7a7a 100644
--- a/Modules/CIPPCore/Public/Remove-CIPPLicense.ps1
+++ b/Modules/CIPPCore/Public/Remove-CIPPLicense.ps1
@@ -5,32 +5,57 @@ function Remove-CIPPLicense {
$userid,
$username,
$APIName = 'Remove License',
- $TenantFilter
+ $TenantFilter,
+ [switch]$Schedule
)
- try {
- $ConvertTable = Import-Csv ConversionTable.csv
- $User = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($userid)" -tenantid $tenantFilter
- if (!$username) { $username = $User.userPrincipalName }
- $CurrentLicenses = $User.assignedlicenses.skuid
- $ConvertedLicense = $(($ConvertTable | Where-Object { $_.guid -in $CurrentLicenses }).'Product_Display_Name' | Sort-Object -Unique) -join ', '
- if ($CurrentLicenses) {
- $LicensePayload = [PSCustomObject]@{
- addLicenses = @()
- removeLicenses = @($CurrentLicenses)
+ if ($Schedule.IsPresent) {
+ $ScheduledTask = @{
+ TenantFilter = $TenantFilter
+ Name = "Remove License: $Username"
+ Command = @{
+ value = 'Remove-CIPPLicense'
}
- if ($PSCmdlet.ShouldProcess($userid, "Remove licenses: $ConvertedLicense")) {
- $null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/users/$($userid)/assignlicense" -tenantid $tenantFilter -type POST -body (ConvertTo-Json -InputObject $LicensePayload -Compress -Depth 5) -verbose
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Removed licenses for $($username): $ConvertedLicense" -Sev 'Info' -tenant $TenantFilter
+ Parameters = [pscustomobject]@{
+ userid = $userid
+ username = $username
+ APIName = 'Scheduled License Removal'
+ ExecutingUser = $ExecutingUser
}
- return "Removed licenses for $($Username): $ConvertedLicense"
- } else {
- Write-LogMessage -user $ExecutingUser -API $APIName -message "No licenses to remove for $username" -Sev 'Info' -tenant $TenantFilter
- return "No licenses to remove for $username"
+ ScheduledTime = [int64](([datetime]::UtcNow).AddMinutes(5) - (Get-Date '1/1/1970')).TotalSeconds
+ PostExecution = @{
+ Webhook = $false
+ Email = $false
+ PSA = $false
+ }
+ }
+ Add-CIPPScheduledTask -Task $ScheduledTask -hidden $false
+ return "Scheduled license removal for $username"
+ } else {
+ try {
+ $ConvertTable = Import-Csv ConversionTable.csv
+ $User = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($userid)" -tenantid $tenantFilter
+ if (!$username) { $username = $User.userPrincipalName }
+ $CurrentLicenses = $User.assignedlicenses.skuid
+ $ConvertedLicense = $(($ConvertTable | Where-Object { $_.guid -in $CurrentLicenses }).'Product_Display_Name' | Sort-Object -Unique) -join ', '
+ if ($CurrentLicenses) {
+ $LicensePayload = [PSCustomObject]@{
+ addLicenses = @()
+ removeLicenses = @($CurrentLicenses)
+ }
+ if ($PSCmdlet.ShouldProcess($userid, "Remove licenses: $ConvertedLicense")) {
+ $null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/users/$($userid)/assignlicense" -tenantid $tenantFilter -type POST -body (ConvertTo-Json -InputObject $LicensePayload -Compress -Depth 5) -verbose
+ Write-LogMessage -user $ExecutingUser -API $APIName -message "Removed licenses for $($username): $ConvertedLicense" -Sev 'Info' -tenant $TenantFilter
+ }
+ return "Removed licenses for $($Username): $ConvertedLicense"
+ } else {
+ Write-LogMessage -user $ExecutingUser -API $APIName -message "No licenses to remove for $username" -Sev 'Info' -tenant $TenantFilter
+ return "No licenses to remove for $username"
+ }
+ } catch {
+ $ErrorMessage = Get-CippException -Exception $_
+ Write-LogMessage -user $ExecutingUser -API $APIName -message "Could not remove license for $username. Error: $($ErrorMessage.NormalizedError)" -Sev 'Error' -tenant $TenantFilter -LogData $ErrorMessage
+ return "Could not remove license for $($username). Error: $($ErrorMessage.NormalizedError)"
}
- } catch {
- $ErrorMessage = Get-CippException -Exception $_
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Could not remove license for $username. Error: $($ErrorMessage.NormalizedError)" -Sev 'Error' -tenant $TenantFilter -LogData $ErrorMessage
- return "Could not remove license for $($username). Error: $($ErrorMessage.NormalizedError)"
}
}
diff --git a/Modules/CIPPCore/Public/Remove-CIPPMailboxPermissions.ps1 b/Modules/CIPPCore/Public/Remove-CIPPMailboxPermissions.ps1
index 1e039e8bb8e5..31c400a79d5c 100644
--- a/Modules/CIPPCore/Public/Remove-CIPPMailboxPermissions.ps1
+++ b/Modules/CIPPCore/Public/Remove-CIPPMailboxPermissions.ps1
@@ -11,7 +11,7 @@ function Remove-CIPPMailboxPermissions {
try {
if ($userid -eq 'AllUsers') {
- $Mailboxes = New-ExoRequest -tenantid $TenantFilter -cmdlet 'get-mailbox'
+ $Mailboxes = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Get-Mailbox' -Select UserPrincipalName
$Mailboxes | ForEach-Object -Parallel {
Import-Module '.\Modules\AzBobbyTables'
Import-Module '.\Modules\CIPPCore'
@@ -36,7 +36,19 @@ function Remove-CIPPMailboxPermissions {
}
}
'FullAccess' {
- $permissions = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Remove-MailboxPermission' -cmdParams @{Identity = $userid; user = $AccessUser; accessRights = @('FullAccess') } -Anchor $userid
+ $ExoRequest = @{
+ tenantid = $TenantFilter
+ cmdlet = 'Remove-MailboxPermission'
+ cmdParams = @{
+ Identity = $userid
+ user = $AccessUser
+ accessRights = @('FullAccess')
+ Verbose = $true
+ }
+ Anchor = $userid
+ }
+ New-ExoRequest @ExoRequest
+
if ($permissions -notlike "*because the ACE doesn't exist on the object.*") {
Write-LogMessage -user $ExecutingUser -API $APIName -message "Removed FullAccess permissions for $($AccessUser) from $($userid)'s mailbox." -Sev 'Info' -tenant $TenantFilter
"Removed FullAccess permissions for $($AccessUser) from $($userid)'s mailbox."
diff --git a/Modules/CIPPCore/Public/Remove-CIPPMailboxRule.ps1 b/Modules/CIPPCore/Public/Remove-CIPPMailboxRule.ps1
index 95695c388ac3..82fa745d6f83 100644
--- a/Modules/CIPPCore/Public/Remove-CIPPMailboxRule.ps1
+++ b/Modules/CIPPCore/Public/Remove-CIPPMailboxRule.ps1
@@ -15,7 +15,7 @@ function Remove-CIPPMailboxRule {
# Delete all rules
try {
Write-Host "Checking rules for $username"
- $rules = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Get-InboxRule' -cmdParams @{Mailbox = $username; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' }
+ $rules = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Get-InboxRule' -cmdParams @{Mailbox = $username; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' -and $_.Name -notlike 'Microsoft.Exchange.OOF.*' }
Write-Host "$($rules.count) rules found"
if ($null -eq $rules) {
Write-LogMessage -user $ExecutingUser -API $APIName -message "No Rules for $($username) to delete" -Sev 'Info' -tenant $TenantFilter
diff --git a/Modules/CIPPCore/Public/SAMManifest.json b/Modules/CIPPCore/Public/SAMManifest.json
index 45df45352603..8d79357f0079 100644
--- a/Modules/CIPPCore/Public/SAMManifest.json
+++ b/Modules/CIPPCore/Public/SAMManifest.json
@@ -1,197 +1,618 @@
-{
- "isFallbackPublicClient": true,
- "signInAudience": "AzureADMultipleOrgs",
- "displayName": "CIPP-SAM",
- "web": {
- "redirectUris": [
- "https://login.microsoftonline.com/common/oauth2/nativeclient",
- "https://localhost",
- "http://localhost",
- "http://localhost:8400"
- ]
- },
- "requiredResourceAccess": [
- {
- "resourceAppId": "aeb86249-8ea3-49e2-900b-54cc8e308f85",
- "resourceAccess": [
- { "id": "fc946a4f-bc4d-413b-a090-b2c86113ec4f", "type": "Scope" }
- ]
- },
- {
- "resourceAppId": "fa3d9a0c-3fb0-42cc-9193-47c7ecd2edbd",
- "resourceAccess": [
- { "id": "1cebfa2a-fb4d-419e-b5f9-839b4383e05a", "type": "Scope" }
- ]
- },
- {
- "resourceAppId": "00000003-0000-0000-c000-000000000000",
- "resourceAccess": [
- { "id": "aa07f155-3612-49b8-a147-6c590df35536", "type": "Scope" },
- { "id": "73e75199-7c3e-41bb-9357-167164dbb415", "type": "Scope" },
- { "id": "d01b97e9-cbc0-49fe-810a-750afd5527a3", "type": "Scope" },
- { "id": "46ca0847-7e6b-426e-9775-ea810a948356", "type": "Scope" },
- { "id": "dc38509c-b87d-4da0-bd92-6bec988bac4a", "type": "Scope" },
- { "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", "type": "Scope" },
- { "id": "ad902697-1014-4ef5-81ef-2b4301988e8c", "type": "Scope" },
- { "id": "572fea84-0151-49b2-9301-11cb16974376", "type": "Scope" },
- { "id": "e4c9e354-4dc5-45b8-9e7c-e1393b0b1a20", "type": "Scope" },
- { "id": "0883f392-0a7a-443d-8c76-16a6d39c7b63", "type": "Scope" },
- { "id": "7b3f05d5-f68c-4b8d-8c59-a2ecd12f24af", "type": "Scope" },
- { "id": "0c5e8a55-87a6-4556-93ab-adc52c4d862d", "type": "Scope" },
- { "id": "44642bfe-8385-4adc-8fc6-fe3cb2c375c3", "type": "Scope" },
- { "id": "662ed50a-ac44-4eef-ad86-62eed9be2a29", "type": "Scope" },
- { "id": "6aedf524-7e1c-45a7-bd76-ded8cab8d0fc", "type": "Scope" },
- { "id": "bac3b9c2-b516-4ef4-bd3b-c2ef73d8d804", "type": "Scope" },
- { "id": "11d4cd79-5ba5-460f-803f-e22c8ab85ccd", "type": "Scope" },
- { "id": "02e97553-ed7b-43d0-ab3c-f8bace0d040c", "type": "Scope" },
- { "id": "89fe6a52-be36-487e-b7d8-d061c450a026", "type": "Scope" },
- { "id": "a367ab51-6b49-43bf-a716-a1fb06d2a174", "type": "Scope" },
- { "id": "204e0828-b5ca-4ad8-b9f3-f32a958e7cc4", "type": "Scope" },
- { "id": "4e46008b-f24c-477d-8fff-7bb4ec7aafe0", "type": "Scope" },
- { "id": "0e263e50-5827-48a4-b97c-d940288653c7", "type": "Scope" },
- { "id": "e383f46e-2787-4529-855e-0e479a3ffac0", "type": "Scope" },
- { "id": "37f7f235-527c-4136-accd-4a02d197296e", "type": "Scope" },
- { "id": "14dad69e-099b-42c9-810b-d002981feec1", "type": "Scope" },
- { "id": "f6a3db3e-f7e8-4ed2-a414-557c8c9830be", "type": "Scope" },
- { "id": "0e755559-83fb-4b44-91d0-4cc721b9323e", "type": "Scope" },
- { "id": "a84a9652-ffd3-496e-a991-22ba5529156a", "type": "Scope" },
- { "id": "1d89d70c-dcac-4248-b214-903c457af83a", "type": "Scope" },
- { "id": "2b61aa8a-6d36-4b2f-ac7b-f29867937c53", "type": "Scope" },
- { "id": "ebf0f66e-9fb1-49e4-a278-222f76911cf4", "type": "Scope" },
- { "id": "bdfbf15f-ee85-4955-8675-146e8e5296b5", "type": "Scope" },
- { "id": "f81125ac-d3b7-4573-a3b2-7099cc39df9e", "type": "Scope" },
- { "id": "cac97e40-6730-457d-ad8d-4852fddab7ad", "type": "Scope" },
- { "id": "b7887744-6746-4312-813d-72daeaee7e2d", "type": "Scope" },
- { "id": "48971fc1-70d7-4245-af77-0beb29b53ee2", "type": "Scope" },
- { "id": "aec28ec7-4d02-4e8c-b864-50163aea77eb", "type": "Scope" },
- { "id": "a9ff19c2-f369-4a95-9a25-ba9d460efc8e", "type": "Scope" },
- { "id": "b98bfd41-87c6-45cc-b104-e2de4f0dafb9", "type": "Scope" },
- { "id": "2f9ee017-59c1-4f1d-9472-bd5529a7b311", "type": "Scope" },
- { "id": "951183d1-1a61-466f-a6d1-1fde911bfd95", "type": "Scope" },
- { "id": "637d7bec-b31e-4deb-acc9-24275642a2c9", "type": "Scope" },
- { "id": "101147cf-4178-4455-9d58-02b5c164e759", "type": "Scope" },
- { "id": "cc83893a-e232-4723-b5af-bd0b01bcfe65", "type": "Scope" },
- { "id": "233e0cf1-dd62-48bc-b65b-b38fe87fcf8e", "type": "Scope" },
- { "id": "d649fb7c-72b4-4eec-b2b4-b15acf79e378", "type": "Scope" },
- { "id": "485be79e-c497-4b35-9400-0e3fa7f2a5d4", "type": "Scope" },
- { "id": "9d8982ae-4365-4f57-95e9-d6032a4c0b87", "type": "Scope" },
- { "id": "48638b3c-ad68-4383-8ac4-e6880ee6ca57", "type": "Scope" },
- { "id": "39d65650-9d3e-4223-80db-a335590d027e", "type": "Scope" },
- { "id": "4a06efd2-f825-4e34-813e-82a57b03d1ee", "type": "Scope" },
- { "id": "f3bfad56-966e-4590-a536-82ecf548ac1e", "type": "Scope" },
- { "id": "4d135e65-66b8-41a8-9f8b-081452c91774", "type": "Scope" },
- { "id": "2eadaff8-0bce-4198-a6b9-2cfc35a30075", "type": "Scope" },
- { "id": "0c3e411a-ce45-4cd1-8f30-f99a3efa7b11", "type": "Scope" },
- { "id": "edb72de9-4252-4d03-a925-451deef99db7", "type": "Scope" },
- { "id": "767156cb-16ae-4d10-8f8b-41b657c8c8c8", "type": "Scope" },
- { "id": "7e823077-d88e-468f-a337-e18f1f0e6c7c", "type": "Scope" },
- { "id": "edd3c878-b384-41fd-95ad-e7407dd775be", "type": "Scope" },
- { "id": "40b534c3-9552-4550-901b-23879c90bcf9", "type": "Scope" },
- { "id": "7825d5d6-6049-4ce7-bdf6-3b8d53f4bcd0", "type": "Scope" },
- { "id": "2104a4db-3a2f-4ea0-9dba-143d457dc666", "type": "Scope" },
- { "id": "eda39fa6-f8cf-4c3c-a909-432c683e4c9b", "type": "Scope" },
- { "id": "55896846-df78-47a7-aa94-8d3d4442ca7f", "type": "Scope" },
- { "id": "128ca929-1a19-45e6-a3b8-435ec44a36ba", "type": "Scope" },
- { "id": "b27add92-efb2-4f16-84f5-8108ba77985c", "type": "Scope" },
- { "id": "3404d2bf-2b13-457e-a330-c24615765193", "type": "Scope" },
- { "id": "b955410e-7715-4a88-a940-dfd551018df3", "type": "Scope" },
- { "id": "5b07b0dd-2377-4e44-a38d-703f09a0dc3c", "type": "Role" },
- { "id": "19b94e34-907c-4f43-bde9-38b1909ed408", "type": "Role" },
- { "id": "999f8c63-0a38-4f1b-91fd-ed1947bdd1a9", "type": "Role" },
- { "id": "292d869f-3427-49a8-9dab-8c70152b74e9", "type": "Role" },
- { "id": "2f51be20-0bb4-4fed-bf7b-db946066c75e", "type": "Role" },
- { "id": "58ca0d9a-1575-47e1-a3cb-007ef2e4583b", "type": "Role" },
- { "id": "06a5fe6d-c49d-46a7-b082-56b1b14103c7", "type": "Role" },
- { "id": "246dd0d5-5bd0-4def-940b-0421030a5b68", "type": "Role" },
- { "id": "bf394140-e372-4bf9-a898-299cfc7564e5", "type": "Role" },
- { "id": "741f803b-c850-494e-b5df-cde7c675a1ca", "type": "Role" },
- { "id": "230c1aed-a721-4c5d-9cb4-a90514e508ef", "type": "Role" },
- { "id": "b633e1c5-b582-4048-a93e-9f11b44c7e96", "type": "Role" },
- { "id": "5b567255-7703-4780-807c-7be8301ae99b", "type": "Role" },
- { "id": "62a82d76-70ea-41e2-9197-370581804d09", "type": "Role" },
- { "id": "7ab1d382-f21e-4acd-a863-ba3e13f7da61", "type": "Role" },
- { "id": "1138cb37-bd11-4084-a2b7-9f71582aeddb", "type": "Role" },
- { "id": "78145de6-330d-4800-a6ce-494ff2d33d07", "type": "Role" },
- { "id": "9241abd9-d0e6-425a-bd4f-47ba86e767a4", "type": "Role" },
- { "id": "243333ab-4d21-40cb-a475-36241daa0842", "type": "Role" },
- { "id": "e330c4f0-4170-414e-a55a-2f022ec2b57b", "type": "Role" },
- { "id": "5ac13192-7ace-4fcf-b828-1a26f28068ee", "type": "Role" },
- { "id": "2f6817f8-7b12-4f0f-bc18-eeaf60705a9e", "type": "Role" },
- { "id": "dbaae8cf-10b5-4b86-a4a1-f871c94c6695", "type": "Role" },
- { "id": "bf7b1a76-6e77-406b-b258-bf5c7720e98f", "type": "Role" },
- { "id": "01c0a623-fc9b-48e9-b794-0756f8e8f067", "type": "Role" },
- { "id": "50483e42-d915-4231-9639-7fdb7fd190e5", "type": "Role" },
- { "id": "dbb9058a-0e50-45d7-ae91-66909b5d4664", "type": "Role" },
- { "id": "a82116e5-55eb-4c41-a434-62fe8a61c773", "type": "Role" },
- { "id": "f3a65bd4-b703-46df-8f7e-0174fea562aa", "type": "Role" },
- { "id": "59a6b24b-4225-4393-8165-ebaec5f55d7a", "type": "Role" },
- { "id": "0121dc95-1b9f-4aed-8bac-58c5ac466691", "type": "Role" },
- { "id": "3b55498e-47ec-484f-8136-9013221c06a9", "type": "Role" },
- { "id": "35930dcf-aceb-4bd1-b99a-8ffed403c974", "type": "Role" },
- { "id": "25f85f3c-f66c-4205-8cd5-de92dd7f0cec", "type": "Role" },
- { "id": "29c18626-4985-4dcd-85c0-193eef327366", "type": "Role" },
- { "id": "4437522e-9a86-4a41-a7da-e380edd4a97d", "type": "Role" },
- { "id": "34bf0e97-1971-4929-b999-9e2442d941d7", "type": "Role" },
- { "id": "45cc0394-e837-488b-a098-1918f48d186c", "type": "Role" },
- { "id": "be74164b-cff1-491c-8741-e671cb536e13", "type": "Role" },
- { "id": "2a60023f-3219-47ad-baa4-40e17cd02a1d", "type": "Role" },
- { "id": "338163d7-f101-4c92-94ba-ca46fe52447c", "type": "Role" },
- { "id": "cac88765-0581-4025-9725-5ebc13f729ee", "type": "Role" },
- { "id": "75359482-378d-4052-8f01-80520e7db3cd", "type": "Role" },
- { "id": "19dbc75e-c2e2-444c-a770-ec69d8559fc7", "type": "Role" },
- { "id": "b27a61ec-b99c-4d6a-b126-c4375d08ae30", "type": "Scope" },
- { "id": "84bccea3-f856-4a8a-967b-dbe0a3d53a64", "type": "Scope" },
- { "id": "280b3b69-0437-44b1-bc20-3b2fca1ee3e9", "type": "Scope" },
- { "id": "885f682f-a990-4bad-a642-36736a74b0c7", "type": "Scope" },
- { "id": "913b9306-0ce1-42b8-9137-6a7df690a760", "type": "Role" },
- { "id": "4c06a06a-098a-4063-868e-5dfee3827264", "type": "Scope" },
- { "id": "1bfefb4e-e0b5-418b-a88f-73c46d2cc8e9", "type": "Role" },
- { "id": "e67e6727-c080-415e-b521-e3f35d5248e9", "type": "Scope" },
- { "id": "b6890674-9dd5-4e42-bb15-5af07f541ae1", "type": "Role" },
- { "id": "9e4862a5-b68f-479e-848a-4e07e25c9916", "type": "Scope" },
- { "id": "bb6f654c-d7fd-4ae3-85c3-fc380934f515", "type": "Scope" },
- { "id": "e0a7cdbb-08b0-4697-8264-0069786e9674", "type": "Scope" },
- { "id": "19da66cb-0fb0-4390-b071-ebc76a349482", "type": "Role" },
- { "id": "818c620a-27a9-40bd-a6a5-d96f7d610b4b", "type": "Scope" },
- { "id": "6931bccd-447a-43d1-b442-00a195474933", "type": "Role" },
- { "id": "c5366453-9fb0-48a5-a156-24f0c49a4b84", "type": "Scope" }
- ]
- },
- {
- "resourceAppId": "fc780465-2017-40d4-a0c5-307022471b92",
- "resourceAccess": [
- { "id": "63a677ce-818c-4409-9d12-5c6d2e2a6bfe", "type": "Scope" },
- { "id": "41269fc5-d04d-4bfd-bce7-43a51cea049a", "type": "Role" }
- ]
- },
- {
- "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
- "resourceAccess": [
- { "id": "ab4f2b77-0b06-4fc1-a9de-02113fc2ab7c", "type": "Scope" },
- { "id": "bbd1ca91-75e0-4814-ad94-9c5dbbae3415", "type": "Scope" },
- { "id": "2e83d72d-8895-4b66-9eea-abb43449ab8b", "type": "Scope" },
- { "id": "dc50a0fb-09a3-484d-be87-e023b12c6440", "type": "Role" },
- { "id": "ef54d2bf-783f-4e0f-bca1-3210c0444d99", "type": "Role" },
- { "id": "f9156939-25cd-4ba8-abfe-7fabcf003749", "type": "Role" }
- ]
- },
- {
- "resourceAppId": "00000003-0000-0ff1-ce00-000000000000",
- "resourceAccess": [
- { "id": "56680e0d-d2a3-4ae1-80d8-3c4f2100e3d0", "type": "Scope" }
- ]
- },
- {
- "resourceAppId": "48ac35b8-9aa8-4d74-927d-1f4a14a0b239",
- "resourceAccess": [
- { "id": "e60370c1-e451-437e-aa6e-d76df38e5f15", "type": "Scope" }
- ]
- },
- {
- "resourceAppId": "c5393580-f805-4401-95e8-94b7a6ef2fc2",
- "resourceAccess": [
- { "id": "594c1fb6-4f81-4475-ae41-0c394909246c", "type": "Scope" }
- ]
- }
- ]
-}
+{
+ "isFallbackPublicClient": true,
+ "signInAudience": "AzureADMultipleOrgs",
+ "displayName": "CIPP-SAM",
+ "web": {
+ "redirectUris": [
+ "https://login.microsoftonline.com/common/oauth2/nativeclient",
+ "https://localhost",
+ "http://localhost",
+ "http://localhost:8400"
+ ]
+ },
+ "requiredResourceAccess": [
+ {
+ "resourceAppId": "aeb86249-8ea3-49e2-900b-54cc8e308f85",
+ "resourceAccess": [
+ {
+ "id": "fc946a4f-bc4d-413b-a090-b2c86113ec4f",
+ "type": "Scope"
+ }
+ ]
+ },
+ {
+ "resourceAppId": "00000003-0000-0000-c000-000000000000",
+ "resourceAccess": [
+ {
+ "id": "5b07b0dd-2377-4e44-a38d-703f09a0dc3c",
+ "type": "Role"
+ },
+ {
+ "id": "19b94e34-907c-4f43-bde9-38b1909ed408",
+ "type": "Role"
+ },
+ {
+ "id": "999f8c63-0a38-4f1b-91fd-ed1947bdd1a9",
+ "type": "Role"
+ },
+ {
+ "id": "292d869f-3427-49a8-9dab-8c70152b74e9",
+ "type": "Role"
+ },
+ {
+ "id": "2f51be20-0bb4-4fed-bf7b-db946066c75e",
+ "type": "Role"
+ },
+ {
+ "id": "58ca0d9a-1575-47e1-a3cb-007ef2e4583b",
+ "type": "Role"
+ },
+ {
+ "id": "06a5fe6d-c49d-46a7-b082-56b1b14103c7",
+ "type": "Role"
+ },
+ {
+ "id": "246dd0d5-5bd0-4def-940b-0421030a5b68",
+ "type": "Role"
+ },
+ {
+ "id": "bf394140-e372-4bf9-a898-299cfc7564e5",
+ "type": "Role"
+ },
+ {
+ "id": "741f803b-c850-494e-b5df-cde7c675a1ca",
+ "type": "Role"
+ },
+ {
+ "id": "230c1aed-a721-4c5d-9cb4-a90514e508ef",
+ "type": "Role"
+ },
+ {
+ "id": "b633e1c5-b582-4048-a93e-9f11b44c7e96",
+ "type": "Role"
+ },
+ {
+ "id": "5b567255-7703-4780-807c-7be8301ae99b",
+ "type": "Role"
+ },
+ {
+ "id": "62a82d76-70ea-41e2-9197-370581804d09",
+ "type": "Role"
+ },
+ {
+ "id": "7ab1d382-f21e-4acd-a863-ba3e13f7da61",
+ "type": "Role"
+ },
+ {
+ "id": "1138cb37-bd11-4084-a2b7-9f71582aeddb",
+ "type": "Role"
+ },
+ {
+ "id": "78145de6-330d-4800-a6ce-494ff2d33d07",
+ "type": "Role"
+ },
+ {
+ "id": "9241abd9-d0e6-425a-bd4f-47ba86e767a4",
+ "type": "Role"
+ },
+ {
+ "id": "243333ab-4d21-40cb-a475-36241daa0842",
+ "type": "Role"
+ },
+ {
+ "id": "e330c4f0-4170-414e-a55a-2f022ec2b57b",
+ "type": "Role"
+ },
+ {
+ "id": "5ac13192-7ace-4fcf-b828-1a26f28068ee",
+ "type": "Role"
+ },
+ {
+ "id": "2f6817f8-7b12-4f0f-bc18-eeaf60705a9e",
+ "type": "Role"
+ },
+ {
+ "id": "dbaae8cf-10b5-4b86-a4a1-f871c94c6695",
+ "type": "Role"
+ },
+ {
+ "id": "bf7b1a76-6e77-406b-b258-bf5c7720e98f",
+ "type": "Role"
+ },
+ {
+ "id": "01c0a623-fc9b-48e9-b794-0756f8e8f067",
+ "type": "Role"
+ },
+ {
+ "id": "50483e42-d915-4231-9639-7fdb7fd190e5",
+ "type": "Role"
+ },
+ {
+ "id": "dbb9058a-0e50-45d7-ae91-66909b5d4664",
+ "type": "Role"
+ },
+ {
+ "id": "a82116e5-55eb-4c41-a434-62fe8a61c773",
+ "type": "Role"
+ },
+ {
+ "id": "f3a65bd4-b703-46df-8f7e-0174fea562aa",
+ "type": "Role"
+ },
+ {
+ "id": "59a6b24b-4225-4393-8165-ebaec5f55d7a",
+ "type": "Role"
+ },
+ {
+ "id": "0121dc95-1b9f-4aed-8bac-58c5ac466691",
+ "type": "Role"
+ },
+ {
+ "id": "3b55498e-47ec-484f-8136-9013221c06a9",
+ "type": "Role"
+ },
+ {
+ "id": "35930dcf-aceb-4bd1-b99a-8ffed403c974",
+ "type": "Role"
+ },
+ {
+ "id": "25f85f3c-f66c-4205-8cd5-de92dd7f0cec",
+ "type": "Role"
+ },
+ {
+ "id": "29c18626-4985-4dcd-85c0-193eef327366",
+ "type": "Role"
+ },
+ {
+ "id": "4437522e-9a86-4a41-a7da-e380edd4a97d",
+ "type": "Role"
+ },
+ {
+ "id": "34bf0e97-1971-4929-b999-9e2442d941d7",
+ "type": "Role"
+ },
+ {
+ "id": "45cc0394-e837-488b-a098-1918f48d186c",
+ "type": "Role"
+ },
+ {
+ "id": "be74164b-cff1-491c-8741-e671cb536e13",
+ "type": "Role"
+ },
+ {
+ "id": "2a60023f-3219-47ad-baa4-40e17cd02a1d",
+ "type": "Role"
+ },
+ {
+ "id": "338163d7-f101-4c92-94ba-ca46fe52447c",
+ "type": "Role"
+ },
+ {
+ "id": "cac88765-0581-4025-9725-5ebc13f729ee",
+ "type": "Role"
+ },
+ {
+ "id": "75359482-378d-4052-8f01-80520e7db3cd",
+ "type": "Role"
+ },
+ {
+ "id": "19dbc75e-c2e2-444c-a770-ec69d8559fc7",
+ "type": "Role"
+ },
+ {
+ "id": "913b9306-0ce1-42b8-9137-6a7df690a760",
+ "type": "Role"
+ },
+ {
+ "id": "1bfefb4e-e0b5-418b-a88f-73c46d2cc8e9",
+ "type": "Role"
+ },
+ {
+ "id": "b6890674-9dd5-4e42-bb15-5af07f541ae1",
+ "type": "Role"
+ },
+ {
+ "id": "19da66cb-0fb0-4390-b071-ebc76a349482",
+ "type": "Role"
+ },
+ {
+ "id": "6931bccd-447a-43d1-b442-00a195474933",
+ "type": "Role"
+ },
+ {
+ "id": "5e1e9171-754d-478c-812c-f1755a9a4c2d",
+ "type": "Role"
+ },
+ {
+ "id": "aa07f155-3612-49b8-a147-6c590df35536",
+ "type": "Scope"
+ },
+ {
+ "id": "73e75199-7c3e-41bb-9357-167164dbb415",
+ "type": "Scope"
+ },
+ {
+ "id": "d01b97e9-cbc0-49fe-810a-750afd5527a3",
+ "type": "Scope"
+ },
+ {
+ "id": "46ca0847-7e6b-426e-9775-ea810a948356",
+ "type": "Scope"
+ },
+ {
+ "id": "dc38509c-b87d-4da0-bd92-6bec988bac4a",
+ "type": "Scope"
+ },
+ {
+ "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182",
+ "type": "Scope"
+ },
+ {
+ "id": "ad902697-1014-4ef5-81ef-2b4301988e8c",
+ "type": "Scope"
+ },
+ {
+ "id": "572fea84-0151-49b2-9301-11cb16974376",
+ "type": "Scope"
+ },
+ {
+ "id": "e4c9e354-4dc5-45b8-9e7c-e1393b0b1a20",
+ "type": "Scope"
+ },
+ {
+ "id": "0883f392-0a7a-443d-8c76-16a6d39c7b63",
+ "type": "Scope"
+ },
+ {
+ "id": "7b3f05d5-f68c-4b8d-8c59-a2ecd12f24af",
+ "type": "Scope"
+ },
+ {
+ "id": "0c5e8a55-87a6-4556-93ab-adc52c4d862d",
+ "type": "Scope"
+ },
+ {
+ "id": "44642bfe-8385-4adc-8fc6-fe3cb2c375c3",
+ "type": "Scope"
+ },
+ {
+ "id": "662ed50a-ac44-4eef-ad86-62eed9be2a29",
+ "type": "Scope"
+ },
+ {
+ "id": "6aedf524-7e1c-45a7-bd76-ded8cab8d0fc",
+ "type": "Scope"
+ },
+ {
+ "id": "bac3b9c2-b516-4ef4-bd3b-c2ef73d8d804",
+ "type": "Scope"
+ },
+ {
+ "id": "11d4cd79-5ba5-460f-803f-e22c8ab85ccd",
+ "type": "Scope"
+ },
+ {
+ "id": "02e97553-ed7b-43d0-ab3c-f8bace0d040c",
+ "type": "Scope"
+ },
+ {
+ "id": "89fe6a52-be36-487e-b7d8-d061c450a026",
+ "type": "Scope"
+ },
+ {
+ "id": "a367ab51-6b49-43bf-a716-a1fb06d2a174",
+ "type": "Scope"
+ },
+ {
+ "id": "204e0828-b5ca-4ad8-b9f3-f32a958e7cc4",
+ "type": "Scope"
+ },
+ {
+ "id": "4e46008b-f24c-477d-8fff-7bb4ec7aafe0",
+ "type": "Scope"
+ },
+ {
+ "id": "0e263e50-5827-48a4-b97c-d940288653c7",
+ "type": "Scope"
+ },
+ {
+ "id": "e383f46e-2787-4529-855e-0e479a3ffac0",
+ "type": "Scope"
+ },
+ {
+ "id": "37f7f235-527c-4136-accd-4a02d197296e",
+ "type": "Scope"
+ },
+ {
+ "id": "14dad69e-099b-42c9-810b-d002981feec1",
+ "type": "Scope"
+ },
+ {
+ "id": "f6a3db3e-f7e8-4ed2-a414-557c8c9830be",
+ "type": "Scope"
+ },
+ {
+ "id": "0e755559-83fb-4b44-91d0-4cc721b9323e",
+ "type": "Scope"
+ },
+ {
+ "id": "a84a9652-ffd3-496e-a991-22ba5529156a",
+ "type": "Scope"
+ },
+ {
+ "id": "1d89d70c-dcac-4248-b214-903c457af83a",
+ "type": "Scope"
+ },
+ {
+ "id": "2b61aa8a-6d36-4b2f-ac7b-f29867937c53",
+ "type": "Scope"
+ },
+ {
+ "id": "ebf0f66e-9fb1-49e4-a278-222f76911cf4",
+ "type": "Scope"
+ },
+ {
+ "id": "bdfbf15f-ee85-4955-8675-146e8e5296b5",
+ "type": "Scope"
+ },
+ {
+ "id": "f81125ac-d3b7-4573-a3b2-7099cc39df9e",
+ "type": "Scope"
+ },
+ {
+ "id": "cac97e40-6730-457d-ad8d-4852fddab7ad",
+ "type": "Scope"
+ },
+ {
+ "id": "b7887744-6746-4312-813d-72daeaee7e2d",
+ "type": "Scope"
+ },
+ {
+ "id": "48971fc1-70d7-4245-af77-0beb29b53ee2",
+ "type": "Scope"
+ },
+ {
+ "id": "aec28ec7-4d02-4e8c-b864-50163aea77eb",
+ "type": "Scope"
+ },
+ {
+ "id": "a9ff19c2-f369-4a95-9a25-ba9d460efc8e",
+ "type": "Scope"
+ },
+ {
+ "id": "b98bfd41-87c6-45cc-b104-e2de4f0dafb9",
+ "type": "Scope"
+ },
+ {
+ "id": "2f9ee017-59c1-4f1d-9472-bd5529a7b311",
+ "type": "Scope"
+ },
+ {
+ "id": "951183d1-1a61-466f-a6d1-1fde911bfd95",
+ "type": "Scope"
+ },
+ {
+ "id": "637d7bec-b31e-4deb-acc9-24275642a2c9",
+ "type": "Scope"
+ },
+ {
+ "id": "101147cf-4178-4455-9d58-02b5c164e759",
+ "type": "Scope"
+ },
+ {
+ "id": "cc83893a-e232-4723-b5af-bd0b01bcfe65",
+ "type": "Scope"
+ },
+ {
+ "id": "233e0cf1-dd62-48bc-b65b-b38fe87fcf8e",
+ "type": "Scope"
+ },
+ {
+ "id": "d649fb7c-72b4-4eec-b2b4-b15acf79e378",
+ "type": "Scope"
+ },
+ {
+ "id": "485be79e-c497-4b35-9400-0e3fa7f2a5d4",
+ "type": "Scope"
+ },
+ {
+ "id": "9d8982ae-4365-4f57-95e9-d6032a4c0b87",
+ "type": "Scope"
+ },
+ {
+ "id": "48638b3c-ad68-4383-8ac4-e6880ee6ca57",
+ "type": "Scope"
+ },
+ {
+ "id": "39d65650-9d3e-4223-80db-a335590d027e",
+ "type": "Scope"
+ },
+ {
+ "id": "4a06efd2-f825-4e34-813e-82a57b03d1ee",
+ "type": "Scope"
+ },
+ {
+ "id": "f3bfad56-966e-4590-a536-82ecf548ac1e",
+ "type": "Scope"
+ },
+ {
+ "id": "4d135e65-66b8-41a8-9f8b-081452c91774",
+ "type": "Scope"
+ },
+ {
+ "id": "2eadaff8-0bce-4198-a6b9-2cfc35a30075",
+ "type": "Scope"
+ },
+ {
+ "id": "0c3e411a-ce45-4cd1-8f30-f99a3efa7b11",
+ "type": "Scope"
+ },
+ {
+ "id": "edb72de9-4252-4d03-a925-451deef99db7",
+ "type": "Scope"
+ },
+ {
+ "id": "767156cb-16ae-4d10-8f8b-41b657c8c8c8",
+ "type": "Scope"
+ },
+ {
+ "id": "7e823077-d88e-468f-a337-e18f1f0e6c7c",
+ "type": "Scope"
+ },
+ {
+ "id": "edd3c878-b384-41fd-95ad-e7407dd775be",
+ "type": "Scope"
+ },
+ {
+ "id": "40b534c3-9552-4550-901b-23879c90bcf9",
+ "type": "Scope"
+ },
+ {
+ "id": "7825d5d6-6049-4ce7-bdf6-3b8d53f4bcd0",
+ "type": "Scope"
+ },
+ {
+ "id": "2104a4db-3a2f-4ea0-9dba-143d457dc666",
+ "type": "Scope"
+ },
+ {
+ "id": "eda39fa6-f8cf-4c3c-a909-432c683e4c9b",
+ "type": "Scope"
+ },
+ {
+ "id": "55896846-df78-47a7-aa94-8d3d4442ca7f",
+ "type": "Scope"
+ },
+ {
+ "id": "128ca929-1a19-45e6-a3b8-435ec44a36ba",
+ "type": "Scope"
+ },
+ {
+ "id": "b27add92-efb2-4f16-84f5-8108ba77985c",
+ "type": "Scope"
+ },
+ {
+ "id": "3404d2bf-2b13-457e-a330-c24615765193",
+ "type": "Scope"
+ },
+ {
+ "id": "b955410e-7715-4a88-a940-dfd551018df3",
+ "type": "Scope"
+ },
+ {
+ "id": "b27a61ec-b99c-4d6a-b126-c4375d08ae30",
+ "type": "Scope"
+ },
+ {
+ "id": "84bccea3-f856-4a8a-967b-dbe0a3d53a64",
+ "type": "Scope"
+ },
+ {
+ "id": "280b3b69-0437-44b1-bc20-3b2fca1ee3e9",
+ "type": "Scope"
+ },
+ {
+ "id": "885f682f-a990-4bad-a642-36736a74b0c7",
+ "type": "Scope"
+ },
+ {
+ "id": "4c06a06a-098a-4063-868e-5dfee3827264",
+ "type": "Scope"
+ },
+ {
+ "id": "e67e6727-c080-415e-b521-e3f35d5248e9",
+ "type": "Scope"
+ },
+ {
+ "id": "9e4862a5-b68f-479e-848a-4e07e25c9916",
+ "type": "Scope"
+ },
+ {
+ "id": "bb6f654c-d7fd-4ae3-85c3-fc380934f515",
+ "type": "Scope"
+ },
+ {
+ "id": "e0a7cdbb-08b0-4697-8264-0069786e9674",
+ "type": "Scope"
+ },
+ {
+ "id": "818c620a-27a9-40bd-a6a5-d96f7d610b4b",
+ "type": "Scope"
+ },
+ {
+ "id": "c5366453-9fb0-48a5-a156-24f0c49a4b84",
+ "type": "Scope"
+ }
+ ]
+ },
+ {
+ "resourceAppId": "fa3d9a0c-3fb0-42cc-9193-47c7ecd2edbd",
+ "resourceAccess": [
+ {
+ "id": "1cebfa2a-fb4d-419e-b5f9-839b4383e05a",
+ "type": "Scope"
+ }
+ ]
+ },
+ {
+ "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
+ "resourceAccess": [
+ {
+ "id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
+ "type": "Role"
+ },
+ {
+ "id": "ef54d2bf-783f-4e0f-bca1-3210c0444d99",
+ "type": "Role"
+ },
+ {
+ "id": "f9156939-25cd-4ba8-abfe-7fabcf003749",
+ "type": "Role"
+ },
+ {
+ "id": "ab4f2b77-0b06-4fc1-a9de-02113fc2ab7c",
+ "type": "Scope"
+ },
+ {
+ "id": "bbd1ca91-75e0-4814-ad94-9c5dbbae3415",
+ "type": "Scope"
+ },
+ {
+ "id": "2e83d72d-8895-4b66-9eea-abb43449ab8b",
+ "type": "Scope"
+ }
+ ]
+ },
+ {
+ "resourceAppId": "00000003-0000-0ff1-ce00-000000000000",
+ "resourceAccess": [
+ {
+ "id": "56680e0d-d2a3-4ae1-80d8-3c4f2100e3d0",
+ "type": "Scope"
+ }
+ ]
+ },
+ {
+ "resourceAppId": "48ac35b8-9aa8-4d74-927d-1f4a14a0b239",
+ "resourceAccess": [
+ {
+ "id": "e60370c1-e451-437e-aa6e-d76df38e5f15",
+ "type": "Scope"
+ }
+ ]
+ },
+ {
+ "resourceAppId": "fc780465-2017-40d4-a0c5-307022471b92",
+ "resourceAccess": [
+ {
+ "id": "41269fc5-d04d-4bfd-bce7-43a51cea049a",
+ "type": "Role"
+ },
+ {
+ "id": "63a677ce-818c-4409-9d12-5c6d2e2a6bfe",
+ "type": "Scope"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Modules/CIPPCore/Public/Send-CIPPAlert.ps1 b/Modules/CIPPCore/Public/Send-CIPPAlert.ps1
index 54e0def2bb98..f5610cd84e63 100644
--- a/Modules/CIPPCore/Public/Send-CIPPAlert.ps1
+++ b/Modules/CIPPCore/Public/Send-CIPPAlert.ps1
@@ -9,7 +9,8 @@ function Send-CIPPAlert {
$TenantFilter,
$APIName = 'Send Alert',
$ExecutingUser,
- $TableName
+ $TableName,
+ $RowKey = [string][guid]::NewGuid()
)
Write-Information 'Shipping Alert'
$Table = Get-CIPPTable -TableName SchedulerConfig
@@ -52,7 +53,7 @@ function Send-CIPPAlert {
$Table = Get-CIPPTable -TableName $TableName
$Alert = @{
PartitionKey = $TenantFilter ?? 'Alert'
- RowKey = [string][guid]::NewGuid()
+ RowKey = $RowKey
Title = $Title
Data = [string]$JSONContent
Tenant = $TenantFilter
diff --git a/Modules/CIPPCore/Public/Set-CIPPAssignedApplication.ps1 b/Modules/CIPPCore/Public/Set-CIPPAssignedApplication.ps1
index bdd1ec2da682..d070d7bea3c2 100644
--- a/Modules/CIPPCore/Public/Set-CIPPAssignedApplication.ps1
+++ b/Modules/CIPPCore/Public/Set-CIPPAssignedApplication.ps1
@@ -109,6 +109,7 @@ function Set-CIPPAssignedApplication {
)
}
if ($PSCmdlet.ShouldProcess($GroupName, "Assigning Application $ApplicationId")) {
+ Start-Sleep -Seconds 1
$null = New-GraphPOSTRequest -uri "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps/$($ApplicationId)/assign" -tenantid $TenantFilter -type POST -body ($DefaultAssignmentObject | ConvertTo-Json -Compress -Depth 10)
Write-LogMessage -user $ExecutingUser -API $APIName -message "Assigned Application to $($GroupName)" -Sev 'Info' -tenant $TenantFilter
}
diff --git a/Modules/CIPPCore/Public/Set-CIPPCopyGroupMembers.ps1 b/Modules/CIPPCore/Public/Set-CIPPCopyGroupMembers.ps1
index 41d60a70b521..7711dd0c7f26 100644
--- a/Modules/CIPPCore/Public/Set-CIPPCopyGroupMembers.ps1
+++ b/Modules/CIPPCore/Public/Set-CIPPCopyGroupMembers.ps1
@@ -5,26 +5,92 @@ function Set-CIPPCopyGroupMembers {
[string]$UserId,
[string]$CopyFromId,
[string]$TenantFilter,
- [string]$APIName = 'Copy User Groups'
+ [string]$APIName = 'Copy User Groups',
+ [switch]$ExchangeOnly
)
- $MemberIDs = 'https://graph.microsoft.com/v1.0/directoryObjects/' + (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$UserId" -tenantid $TenantFilter).id
- $AddMemberBody = "{ `"members@odata.bind`": $(ConvertTo-Json @($MemberIDs)) }"
+
+ $Requests = @(
+ @{
+ id = 'User'
+ url = 'users/{0}' -f $UserId
+ method = 'GET'
+ }
+ @{
+ id = 'UserMembership'
+ url = 'users/{0}/memberOf' -f $UserId
+ method = 'GET'
+ }
+ @{
+ id = 'CopyFromMembership'
+ url = 'users/{0}/memberOf' -f $CopyFromId
+ method = 'GET'
+ }
+ )
+ $Results = New-GraphBulkRequest -Requests $Requests -tenantid $TenantFilter
+ $User = ($Results | Where-Object { $_.id -eq 'User' }).body
+ $CurrentMemberships = ($Results | Where-Object { $_.id -eq 'UserMembership' }).body.value
+ $CopyFromMemberships = ($Results | Where-Object { $_.id -eq 'CopyFromMembership' }).body.value
+
+ Write-Information ($Results | ConvertTo-Json -Depth 10)
+
+ $ODataBind = 'https://graph.microsoft.com/v1.0/directoryObjects/{0}' -f $User.id
+ $AddMemberBody = @{
+ '@odata.id' = $ODataBind
+ } | ConvertTo-Json -Compress
$Success = [System.Collections.Generic.List[string]]::new()
$Errors = [System.Collections.Generic.List[string]]::new()
- (New-GraphGETRequest -uri "https://graph.microsoft.com/beta/users/$CopyFromId/memberOf" -tenantid $TenantFilter) | Where-Object { $_.GroupTypes -notin 'herohero' } | ForEach-Object {
+ $Memberships = $CopyFromMemberships | Where-Object { $_.'@odata.type' -eq '#microsoft.graph.group' -and $_.groupTypes -notcontains 'DynamicMembership' -and $_.onPremisesSyncEnabled -ne $true -and $_.visibility -ne 'Public' -and $CurrentMemberships.id -notcontains $_.id }
+ $ScheduleExchangeGroupTask = $false
+ foreach ($MailGroup in $Memberships) {
try {
- $MailGroup = $_
- if ($PSCmdlet.ShouldProcess($_.displayName, "Add $UserId to group")) {
- if ($MailGroup.MailEnabled -and $Mailgroup.ResourceProvisioningOptions -notin 'Team') {
- $Params = @{ Identity = $MailGroup.mail; Member = $UserId; BypassSecurityGroupManagerCheck = $true }
- $null = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Add-DistributionGroupMember' -cmdParams $params -UseSystemMailbox $true
- } else {
- $null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/groups/$($_.id)" -tenantid $TenantFilter -type patch -body $AddMemberBody -Verbose
+ if ($PSCmdlet.ShouldProcess($MailGroup.displayName, "Add $UserId to group")) {
+ if ($MailGroup.MailEnabled -and $Mailgroup.ResourceProvisioningOptions -notcontains 'Team' -and $MailGroup.groupTypes -notcontains 'Unified') {
+ $Params = @{ Identity = $MailGroup.mailNickname; Member = $UserId; BypassSecurityGroupManagerCheck = $true }
+ try {
+ $null = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Add-DistributionGroupMember' -cmdParams $params -UseSystemMailbox $true
+ } catch {
+ if ($_.Exception.Message -match 'Ex94914C|Microsoft.Exchange.Configuration.Tasks.ManagementObjectNotFoundException') {
+ if (($User.assignedLicenses | Measure-Object).Count -gt 0 -and !$ExchangeOnly.IsPresent) {
+ $ScheduleExchangeGroupTask = $true
+ } else {
+ throw $_
+ }
+ } else {
+ throw $_
+ }
+ }
+ } elseif (!$ExchangeOnly.IsPresent) {
+ $null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/groups/$($MailGroup.id)/members/`$ref" -tenantid $TenantFilter -body $AddMemberBody -Verbose
+ }
+ }
+
+ if ($ScheduleExchangeGroupTask) {
+ $TaskBody = [PSCustomObject]@{
+ TenantFilter = $TenantFilter
+ Name = "Copy Exchange Group Membership: $UserId from $CopyFromId"
+ Command = @{
+ value = 'Set-CIPPCopyGroupMembers'
+ }
+ Parameters = [PSCustomObject]@{
+ UserId = $UserId
+ CopyFromId = $CopyFromId
+ TenantFilter = $TenantFilter
+ ExchangeOnly = $true
+ }
+ ScheduledTime = [int64](([datetime]::UtcNow).AddMinutes(5) - (Get-Date '1/1/1970')).TotalSeconds
+ PostExecution = @{
+ Webhook = $false
+ Email = $false
+ PSA = $false
+ }
}
+ Add-CIPPScheduledTask -Task $TaskBody -hidden $false
+ $Errors.Add("We've scheduled a task to add $UserId to the Exchange group $($MailGroup.displayName)") | Out-Null
+ } else {
+ Write-LogMessage -user $ExecutingUser -API $APIName -message "Added $UserId to group $($MailGroup.displayName)" -Sev 'Info' -tenant $TenantFilter
+ $Success.Add("Added user to group: $($MailGroup.displayName)") | Out-Null
}
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Added $UserId to group $($_.displayName)" -Sev 'Info' -tenant $TenantFilter
- $Success.Add("Added group: $($MailGroup.displayName)") | Out-Null
} catch {
$ErrorMessage = Get-CippException -Exception $_
$Errors.Add("We've failed to add the group $($MailGroup.displayName): $($ErrorMessage.NormalizedError)") | Out-Null
diff --git a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardAntiPhishPolicy.ps1 b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardAntiPhishPolicy.ps1
index 8e1517c6f5b1..c58a9a3dd7cf 100644
--- a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardAntiPhishPolicy.ps1
+++ b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardAntiPhishPolicy.ps1
@@ -51,11 +51,11 @@ function Invoke-CIPPStandardAntiPhishPolicy {
param($Tenant, $Settings)
##$Rerun -Type Standard -Tenant $Tenant -Settings $Settings 'AntiPhishPolicy'
- $PolicyName = 'Default Anti-Phishing Policy'
+ $PolicyName = @('Default Anti-Phishing Policy', 'Office365 AntiPhish Default (Default)')
$CurrentState = New-ExoRequest -tenantid $Tenant -cmdlet 'Get-AntiPhishPolicy' |
- Where-Object -Property Name -EQ $PolicyName |
- Select-Object Name, Enabled, PhishThresholdLevel, EnableMailboxIntelligence, EnableMailboxIntelligenceProtection, EnableSpoofIntelligence, EnableFirstContactSafetyTips, EnableSimilarUsersSafetyTips, EnableSimilarDomainsSafetyTips, EnableUnusualCharactersSafetyTips, EnableUnauthenticatedSender, EnableViaTag, AuthenticationFailAction, SpoofQuarantineTag, MailboxIntelligenceProtectionAction, MailboxIntelligenceQuarantineTag, TargetedUserProtectionAction, TargetedUserQuarantineTag, TargetedDomainProtectionAction, TargetedDomainQuarantineTag, EnableOrganizationDomainsProtection
+ Where-Object -Property Name -In $PolicyName |
+ Select-Object Name, Enabled, PhishThresholdLevel, EnableMailboxIntelligence, EnableMailboxIntelligenceProtection, EnableSpoofIntelligence, EnableFirstContactSafetyTips, EnableSimilarUsersSafetyTips, EnableSimilarDomainsSafetyTips, EnableUnusualCharactersSafetyTips, EnableUnauthenticatedSender, EnableViaTag, AuthenticationFailAction, SpoofQuarantineTag, MailboxIntelligenceProtectionAction, MailboxIntelligenceQuarantineTag, TargetedUserProtectionAction, TargetedUserQuarantineTag, TargetedDomainProtectionAction, TargetedDomainQuarantineTag, EnableOrganizationDomainsProtection
$StateIsCorrect = ($CurrentState.Name -eq $PolicyName) -and
($CurrentState.Enabled -eq $true) -and
@@ -82,8 +82,8 @@ function Invoke-CIPPStandardAntiPhishPolicy {
$AcceptedDomains = New-ExoRequest -tenantid $Tenant -cmdlet 'Get-AcceptedDomain'
$RuleState = New-ExoRequest -tenantid $Tenant -cmdlet 'Get-AntiPhishRule' |
- Where-Object -Property Name -EQ "CIPP $PolicyName" |
- Select-Object Name, AntiPhishPolicy, Priority, RecipientDomainIs
+ Where-Object -Property Name -EQ "CIPP $PolicyName" |
+ Select-Object Name, AntiPhishPolicy, Priority, RecipientDomainIs
$RuleStateIsCorrect = ($RuleState.Name -eq "CIPP $PolicyName") -and
($RuleState.AntiPhishPolicy -eq $PolicyName) -and
diff --git a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableGuests.ps1 b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableGuests.ps1
index 463f2faefed7..4ef37eab9c29 100644
--- a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableGuests.ps1
+++ b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableGuests.ps1
@@ -30,7 +30,7 @@ function Invoke-CIPPStandardDisableGuests {
##$Rerun -Type Standard -Tenant $Tenant -Settings $Settings 'DisableGuests'
$Lookup = (Get-Date).AddDays(-90).ToUniversalTime().ToString('o')
- $GraphRequest = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users?`$filter=(signInActivity/lastNonInteractiveSignInDateTime le $Lookup)&`$select=id,UserPrincipalName,signInActivity,mail,userType,accountEnabled" -scope 'https://graph.microsoft.com/.default' -tenantid $Tenant | Where-Object { $_.userType -EQ 'Guest' -and $_.AccountEnabled -EQ $true }
+ $GraphRequest = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users?`$filter=(signInActivity/lastSuccessfulSignInDateTime le $Lookup)&`$select=id,UserPrincipalName,signInActivity,mail,userType,accountEnabled" -scope 'https://graph.microsoft.com/.default' -tenantid $Tenant | Where-Object { $_.userType -EQ 'Guest' -and $_.AccountEnabled -EQ $true }
If ($Settings.remediate -eq $true) {
diff --git a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableUserSiteCreate.ps1 b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableUserSiteCreate.ps1
index 3a8d431f56a2..4b0c9b4287b9 100644
--- a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableUserSiteCreate.ps1
+++ b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardDisableUserSiteCreate.ps1
@@ -33,31 +33,32 @@ function Invoke-CIPPStandardDisableUserSiteCreate {
If ($Settings.remediate -eq $true) {
- if ($CurrentInfo.isSiteCreationEnabled) {
+ if ($CurrentInfo.isSiteCreationEnabled -or $CurrentInfo.isSiteCreationUIEnabled) {
try {
- $body = '{"isSiteCreationEnabled": false}'
+ $body = '{"isSiteCreationEnabled": false, "isSiteCreationUIEnabled": false}'
$null = New-GraphPostRequest -tenantid $tenant -Uri 'https://graph.microsoft.com/beta/admin/sharepoint/settings' -AsApp $true -Type patch -Body $body -ContentType 'application/json'
- Write-LogMessage -API 'Standards' -tenant $tenant -message 'Disabled standard users from creating sites' -sev Info
+ Write-LogMessage -API 'Standards' -tenant $tenant -message 'Disabled standard users from creating sites and adjusted UI setting' -sev Info
} catch {
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
Write-LogMessage -API 'Standards' -tenant $tenant -message "Failed to disable standard users from creating sites: $ErrorMessage" -sev Error
}
} else {
- Write-LogMessage -API 'Standards' -tenant $tenant -message 'Standard users are already disabled from creating sites' -sev Info
+ Write-LogMessage -API 'Standards' -tenant $tenant -message 'Standard users are already disabled from creating sites and UI setting is adjusted' -sev Info
}
}
if ($Settings.alert -eq $true) {
- if ($CurrentInfo.isSiteCreationEnabled -eq $false) {
- Write-LogMessage -API 'Standards' -tenant $tenant -message 'Standard users are not allowed to create sites' -sev Info
+ if ($CurrentInfo.isSiteCreationEnabled -eq $false -and $CurrentInfo.isSiteCreationUIEnabled -eq $false) {
+ Write-LogMessage -API 'Standards' -tenant $tenant -message 'Standard users are not allowed to create sites and UI setting is disabled' -sev Info
} else {
- Write-LogMessage -API 'Standards' -tenant $tenant -message 'Standard users are allowed to create sites' -sev Alert
+ Write-LogMessage -API 'Standards' -tenant $tenant -message 'Standard users are allowed to create sites or UI setting is enabled' -sev Alert
}
}
if ($Settings.report -eq $true) {
Add-CIPPBPAField -FieldName 'DisableUserSiteCreate' -FieldValue $CurrentInfo.isSiteCreationEnabled -StoreAs bool -Tenant $tenant
+ Add-CIPPBPAField -FieldName 'DisableUserSiteCreateUI' -FieldValue $CurrentInfo.isSiteCreationUIEnabled -StoreAs bool -Tenant $tenant
}
}
diff --git a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardSPDirectSharing.ps1 b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardSPDirectSharing.ps1
index eace18c05e14..e27cc33a94ee 100644
--- a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardSPDirectSharing.ps1
+++ b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardSPDirectSharing.ps1
@@ -34,7 +34,7 @@ function Invoke-CIPPStandardSPDirectSharing {
$CurrentState = Get-CIPPSPOTenant -TenantFilter $Tenant |
Select-Object -Property DefaultSharingLinkType
- $StateIsCorrect = ($CurrentState.DefaultSharingLinkType -eq 'Direct')
+ $StateIsCorrect = ($CurrentState.DefaultSharingLinkType -eq 'Direct' -or $CurrentState.DefaultSharingLinkType -eq 1)
if ($Settings.remediate -eq $true) {
if ($StateIsCorrect -eq $true) {
diff --git a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardTeamsGlobalMeetingPolicy.ps1 b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardTeamsGlobalMeetingPolicy.ps1
index 27e1bfb25e80..ee90cb769e04 100644
--- a/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardTeamsGlobalMeetingPolicy.ps1
+++ b/Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardTeamsGlobalMeetingPolicy.ps1
@@ -38,9 +38,9 @@ Function Invoke-CIPPStandardTeamsGlobalMeetingPolicy {
$StateIsCorrect = ($CurrentState.AllowAnonymousUsersToJoinMeeting -eq $false) -and
($CurrentState.AllowAnonymousUsersToStartMeeting -eq $false) -and
($CurrentState.AutoAdmittedUsers -eq 'EveryoneInCompanyExcludingGuests') -and
- ($CurrentState.AllowPSTNUsersToBypassLobby -eq $false)
- ($CurrentState.MeetingChatEnabledType -eq 'EnabledExceptAnonymous')
- ($CurrentState.DesignatedPresenterRoleMode -eq $Settings.DesignatedPresenterRoleMode)
+ ($CurrentState.AllowPSTNUsersToBypassLobby -eq $false) -and
+ ($CurrentState.MeetingChatEnabledType -eq 'EnabledExceptAnonymous') -and
+ ($CurrentState.DesignatedPresenterRoleMode -eq $Settings.DesignatedPresenterRoleMode) -and
($CurrentState.AllowExternalParticipantGiveRequestControl -eq $false)
if ($Settings.remediate -eq $true) {
diff --git a/Modules/CIPPCore/Public/Test-CIPPAccessPermissions.ps1 b/Modules/CIPPCore/Public/Test-CIPPAccessPermissions.ps1
index f46d290536c7..ff9878957e2b 100644
--- a/Modules/CIPPCore/Public/Test-CIPPAccessPermissions.ps1
+++ b/Modules/CIPPCore/Public/Test-CIPPAccessPermissions.ps1
@@ -123,7 +123,8 @@ function Test-CIPPAccessPermissions {
if ($Success -eq $true) {
$Messages.Add('No service account issues have been found. CIPP is ready for use.') | Out-Null
}
- return [PSCustomObject]@{
+
+ $AccessCheck = [PSCustomObject]@{
AccessTokenDetails = $AccessTokenDetails
Messages = @($Messages)
ErrorMessages = @($ErrorMessages)
@@ -131,4 +132,19 @@ function Test-CIPPAccessPermissions {
Links = @($Links)
Success = $Success
}
+
+ $Table = Get-CIPPTable -TableName AccessChecks
+ $Data = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'AccessCheck' and RowKey eq 'AccessPermissions'"
+ if ($Data) {
+ $Data.Data = [string](ConvertTo-Json -InputObject $AccessCheck -Depth 10 -Compress)
+ } else {
+ $Data = @{
+ PartitionKey = 'AccessCheck'
+ RowKey = 'AccessPermissions'
+ Data = [string](ConvertTo-Json -InputObject $AccessCheck -Depth 10 -Compress)
+ }
+ }
+ Add-CIPPAzDataTableEntity @Table -Entity $Data -Force
+
+ return $AccessCheck
}
diff --git a/Modules/CIPPCore/Public/Test-CIPPGDAPRelationships.ps1 b/Modules/CIPPCore/Public/Test-CIPPGDAPRelationships.ps1
index 2d8b95ff2ea2..71b7cae9808a 100644
--- a/Modules/CIPPCore/Public/Test-CIPPGDAPRelationships.ps1
+++ b/Modules/CIPPCore/Public/Test-CIPPGDAPRelationships.ps1
@@ -93,10 +93,25 @@ function Test-CIPPGDAPRelationships {
Write-LogMessage -user $ExecutingUser -API $APINAME -message "Failed to run GDAP check for $($TenantFilter): $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
}
- return [PSCustomObject]@{
+ $GDAPRelationships = [PSCustomObject]@{
GDAPIssues = @($GDAPissues)
MissingGroups = @($MissingGroups)
Memberships = @($SAMUserMemberships)
CIPPGroupCount = $CIPPGroupCount
}
+
+ $Table = Get-CIPPTable -TableName AccessChecks
+ $Data = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'AccessCheck' and RowKey eq 'GDAPRelationships'"
+ if ($Data) {
+ $Data.Data = [string](ConvertTo-Json -InputObject $GDAPRelationships -Depth 10 -Compress)
+ } else {
+ $Data = @{
+ PartitionKey = 'AccessCheck'
+ RowKey = 'GDAPRelationships'
+ Data = [string](ConvertTo-Json -InputObject $GDAPRelationships -Depth 10 -Compress)
+ }
+ }
+ Add-CIPPAzDataTableEntity @Table -Entity $Data -Force
+
+ return $GDAPRelationships
}
diff --git a/Modules/CIPPCore/Public/Webhooks/Get-CIPPAuditLogContentBundles.ps1 b/Modules/CIPPCore/Public/Webhooks/Get-CIPPAuditLogContentBundles.ps1
index 89781ec70190..a9bb8bb0cbce 100644
--- a/Modules/CIPPCore/Public/Webhooks/Get-CIPPAuditLogContentBundles.ps1
+++ b/Modules/CIPPCore/Public/Webhooks/Get-CIPPAuditLogContentBundles.ps1
@@ -35,11 +35,12 @@ function Get-CIPPAuditLogContentBundles {
throw 'AllTenants is not a valid tenant filter for webhooks'
}
+ $Tenant = Get-Tenants -TenantFilter $TenantFilter -IncludeErrors
if (!($TenantFilter -match '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$')) {
$DefaultDomainName = $TenantFilter
- $TenantFilter = (Get-Tenants | Where-Object { $_.defaultDomainName -eq $TenantFilter }).customerId
+ $TenantFilter = $Tenant.customerId
} else {
- $DefaultDomainName = (Get-Tenants | Where-Object { $_.customerId -eq $TenantFilter }).defaultDomainName
+ $DefaultDomainName = $Tenant.defaultDomainName
}
$WebhookTable = Get-CippTable -tablename 'webhookTable'
diff --git a/Modules/CIPPCore/Public/Webhooks/Invoke-CIPPWebhookProcessing.ps1 b/Modules/CIPPCore/Public/Webhooks/Invoke-CIPPWebhookProcessing.ps1
index df5e5291df95..ae8ad7a8ff74 100644
--- a/Modules/CIPPCore/Public/Webhooks/Invoke-CIPPWebhookProcessing.ps1
+++ b/Modules/CIPPCore/Public/Webhooks/Invoke-CIPPWebhookProcessing.ps1
@@ -10,23 +10,31 @@ function Invoke-CippWebhookProcessing {
$ExecutingUser
)
+ $AuditLogTable = Get-CIPPTable -TableName 'AuditLogs'
+ $AuditLog = Get-CIPPAzDataTableEntity @AuditLogTable -Filter "PartitionKey eq '$TenantFilter' and RowKey eq '$($Data.Id)'"
+
+ if ($AuditLog) {
+ Write-Host "Audit Log already exists for $($Data.Id). Skipping processing."
+ return
+ }
+
$Tenant = Get-Tenants -IncludeErrors | Where-Object { $_.defaultDomainName -eq $TenantFilter }
Write-Host "Received data. Our Action List is $($data.CIPPAction)"
$ActionList = ($data.CIPPAction | ConvertFrom-Json -ErrorAction SilentlyContinue).value
$ActionResults = foreach ($action in $ActionList) {
- Write-Host "this is our action: $($action | ConvertTo-Json -Depth 15 -Compress))"
+ Write-Host "this is our action: $($action | ConvertTo-Json -Depth 15 -Compress)"
switch ($action) {
'disableUser' {
Set-CIPPSignInState -TenantFilter $TenantFilter -User $data.UserId -AccountEnabled $false -APIName 'Alert Engine' -ExecutingUser 'Alert Engine'
}
'becremediate' {
$username = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($data.UserId)" -tenantid $TenantFilter).UserPrincipalName
- Set-CIPPResetPassword -userid $username -tenantFilter $TenantFilter -APIName 'Alert Engine' -ExecutingUser 'Alert Engine'
+ Set-CIPPResetPassword -UserID $username -tenantFilter $TenantFilter -APIName 'Alert Engine' -ExecutingUser 'Alert Engine'
Set-CIPPSignInState -userid $username -AccountEnabled $false -tenantFilter $TenantFilter -APIName 'Alert Engine' -ExecutingUser 'Alert Engine'
Revoke-CIPPSessions -userid $username -username $username -ExecutingUser 'Alert Engine' -APIName 'Alert Engine' -tenantFilter $TenantFilter
$RuleDisabled = 0
- New-ExoRequest -anchor $username -tenantid $TenantFilter -cmdlet 'Get-InboxRule' -cmdParams @{Mailbox = $username; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' } | ForEach-Object {
+ New-ExoRequest -anchor $username -tenantid $TenantFilter -cmdlet 'Get-InboxRule' -cmdParams @{Mailbox = $username; IncludeHidden = $true } | Where-Object { $_.Name -ne 'Junk E-Mail Rule' -and $_.Name -notlike 'Microsoft.Exchange.OOF.*' } | ForEach-Object {
$null = New-ExoRequest -anchor $username -tenantid $TenantFilter -cmdlet 'Disable-InboxRule' -cmdParams @{Confirm = $false; Identity = $_.Identity }
"Disabled Inbox Rule $($_.Identity) for $username"
$RuleDisabled++
@@ -54,6 +62,7 @@ function Invoke-CippWebhookProcessing {
# Save audit log entry to table
$LocationInfo = $Data.CIPPLocationInfo | ConvertFrom-Json -ErrorAction SilentlyContinue
+ $AuditRecord = $Data.AuditRecord | ConvertFrom-Json -ErrorAction SilentlyContinue
$GenerateJSON = New-CIPPAlertTemplate -format 'json' -data $Data -ActionResults $ActionResults -CIPPURL $CIPPURL
$JsonContent = @{
Title = $GenerateJSON.Title
@@ -63,6 +72,7 @@ function Invoke-CippWebhookProcessing {
IP = $data.ClientIP
PotentialLocationInfo = $LocationInfo
ActionsTaken = $ActionResults
+ AuditRecord = $AuditRecord
} | ConvertTo-Json -Depth 15 -Compress
$CIPPAlert = @{
@@ -71,6 +81,7 @@ function Invoke-CippWebhookProcessing {
JSONContent = $JsonContent
TenantFilter = $TenantFilter
TableName = 'AuditLogs'
+ RowKey = $Data.Id
}
$LogId = Send-CIPPAlert @CIPPAlert
diff --git a/Modules/CIPPCore/Public/Webhooks/Invoke-RemoveWebhookAlert.ps1 b/Modules/CIPPCore/Public/Webhooks/Invoke-RemoveWebhookAlert.ps1
index e2a0b4d3bce2..ddac44fd273a 100644
--- a/Modules/CIPPCore/Public/Webhooks/Invoke-RemoveWebhookAlert.ps1
+++ b/Modules/CIPPCore/Public/Webhooks/Invoke-RemoveWebhookAlert.ps1
@@ -12,10 +12,9 @@ Function Invoke-RemoveWebhookAlert {
$APIName = $TriggerMetadata.FunctionName
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
- $Table = get-cipptable -TableName 'SchedulerConfig'
try {
- $WebhookTable = Get-CIPPTable -TableName SchedulerConfig
+ $WebhookTable = Get-CIPPTable -TableName 'SchedulerConfig'
$WebhookRow = Get-CIPPAzDataTableEntity @WebhookTable -Filter "PartitionKey eq 'WebhookAlert'" | Where-Object -Property Tenant -EQ $Request.query.TenantFilter
Write-Host "The webhook count is $($WebhookRow.count)"
if ($WebhookRow.count -gt 1) {
@@ -34,7 +33,7 @@ Function Invoke-RemoveWebhookAlert {
}
Remove-AzDataTableEntity @Table -Entity $CompleteObject -ErrorAction SilentlyContinue | Out-Null
} catch {
- #
+ Write-LogMessage -user $Request.headers.'x-ms-client-principal' -API $APIName -message "Failed to remove webhook for AllTenants. $($_.Exception.Message)" -Sev 'Error'
}
} else {
$Tenants = $Request.query.TenantFilter
@@ -53,10 +52,9 @@ Function Invoke-RemoveWebhookAlert {
$body = [pscustomobject]@{'Results' = "Failed to remove webhook alert: $($_.Exception.Message)" }
}
-
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
-}
\ No newline at end of file
+}
diff --git a/Modules/CIPPCore/Public/Webhooks/New-CIPPGraphSubscription.ps1 b/Modules/CIPPCore/Public/Webhooks/New-CIPPGraphSubscription.ps1
index 33b0032070dc..a6212c26f322 100644
--- a/Modules/CIPPCore/Public/Webhooks/New-CIPPGraphSubscription.ps1
+++ b/Modules/CIPPCore/Public/Webhooks/New-CIPPGraphSubscription.ps1
@@ -2,7 +2,6 @@ function New-CIPPGraphSubscription {
[CmdletBinding()]
param (
$TenantFilter,
- [bool]$auditLogAPI = $false,
$TypeofSubscription,
$AllowedLocations,
$BaseURL,
@@ -14,72 +13,10 @@ function New-CIPPGraphSubscription {
[switch]$PartnerCenter
)
$CIPPID = (New-Guid).GUID
- $WebhookTable = Get-CIPPTable -TableName webhookTable
+ $WebhookTable = Get-CIPPTable -TableName 'webhookTable'
try {
- if ($auditLogAPI) {
- $CIPPID = (New-Guid).GUID
- $Resource = $EventType
- $WebhookFilter = "PartitionKey eq '$($TenantFilter)' and Resource eq '$Resource' and Version eq '3'"
- $ExistingWebhooks = Get-CIPPAzDataTableEntity @WebhookTable -Filter $WebhookFilter
- $MatchedWebhook = $ExistingWebhooks
- try {
- if (!$MatchedWebhook -or ($Recreate.IsPresent)) {
- if (!$MatchedWebhook) {
- $WebhookRow = [PSCustomObject]@{
- PartitionKey = [string]$TenantFilter
- RowKey = [string]$CIPPID
- Status = 'Enabled'
- Error = ''
- Resource = [string]$Resource
- Expiration = [string]'Does Not Expire'
- Version = [string]'3'
- }
- Add-CIPPAzDataTableEntity @WebhookTable -Entity $WebhookRow
- } else {
- Write-Host 'Setting webhook back to enabled'
- Write-Host ($MatchedWebhook | ConvertTo-Json)
- $MatchedWebhook | Add-Member -MemberType NoteProperty -Name Status -Value 'Enabled' -Force
- $MatchedWebhook | Add-Member -MemberType NoteProperty -Name Error -Value '' -Force
-
- $null = Add-CIPPAzDataTableEntity @WebhookTable -Entity $MatchedWebhook -Force
- $WebhookRow = $MatchedWebhook
- }
- Write-Host "Creating webhook subscription for $EventType"
-
- $AuditLog = New-GraphPOSTRequest -type POST -uri "https://manage.office.com/api/v1.0/$($TenantFilter)/activity/feed/subscriptions/start?contentType=$EventType&PublisherIdentifier=$($env:TenantID)" -tenantid $TenantFilter -scope 'https://manage.office.com/.default' -body '{}' -verbose
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Created Webhook subscription for $($TenantFilter) for the log $($EventType)" -Sev 'Info' -tenant $TenantFilter
- return @{ Success = $true; message = "Created Webhook subscription for $($TenantFilter) for the log $($EventType)" }
- } else {
- if ($MatchedWebhook.Status -eq 'Disabled') {
- return @{ success = $false; message = "Webhook subscription for $($TenantFilter) is disabled due to an error"; WebhookID = $MatchedWebhook.RowKey }
- } else {
- return @{ success = $true; message = "Webhook exists for $($TenantFilter) for the log $($EventType)"; WebhookID = $MatchedWebhook.RowKey }
- }
- }
- } catch {
- if ($_.Exception.Message -eq 'The subscription is already enabled. No property change.' -or $_.Exception.Message -like '*already exists*') {
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Webhook subscription for $($TenantFilter) already exists" -Sev 'Info' -tenant $TenantFilter
- return @{ success = $true; message = "Webhook exists for $($TenantFilter) for the log $($EventType)" }
- } elseif ($_.Exception.Message -match "The service principal for resource 'https://manage.office.com' is disabled") {
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Failed to create Webhook Subscription for $($TenantFilter): This tenant may not have an Exchange Online license. Audit Log subscription disabled." -Sev 'Error' -tenant $TenantFilter -LogData (Get-CippException -Exception $_)
- $WebhookRow.Status = 'Disabled'
- $WebhookRow.Error = $_.Exception.Message
- $null = Add-CIPPAzDataTableEntity @WebhookTable -Entity $WebhookRow -Force
- return @{ success = $false; message = "Failed to create Webhook Subscription for $($TenantFilter): $($_.Exception.Message)" }
- } elseif ($_.Exception.Message -match 'Retry the request.') {
- Remove-AzDataTableEntity @WebhookTable -Entity @{ PartitionKey = $TenantFilter; RowKey = [string]$CIPPID } | Out-Null
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Failed to create Webhook Subscription for $($TenantFilter): $($_.Exception.Message)" -Sev 'Error' -tenant $TenantFilter -LogData (Get-CippException -Exception $_)
- return @{ success = $false; message = "Failed to create Webhook Subscription for $($TenantFilter): A temporary error occurred, we will try to subscribe again later" }
- } else {
- $WebhookRow.Status = 'Disabled'
- $WebhookRow.Error = $_.Exception.Message
- $null = Add-CIPPAzDataTableEntity @WebhookTable -Entity $WebhookRow -Force
- Write-LogMessage -user $ExecutingUser -API $APIName -message "Failed to create Webhook Subscription for $($TenantFilter): $($_.Exception.Message)" -Sev 'Error' -tenant $TenantFilter -LogData (Get-CippException -Exception $_)
- return @{ success = $false; message = "Failed to create Webhook Subscription for $($TenantFilter): $($_.Exception.Message). Audit log subscription disabled." }
- }
- }
- } elseif ($PartnerCenter.IsPresent) {
+ if ($PartnerCenter.IsPresent) {
$WebhookFilter = "PartitionKey eq '$($env:TenantID)'"
$ExistingWebhooks = Get-CIPPAzDataTableEntity @WebhookTable -Filter $WebhookFilter
$CIPPID = $env:TenantID
@@ -143,7 +80,7 @@ function New-CIPPGraphSubscription {
}
} else {
- # First check if there is an exsiting Webhook in place
+ # First check if there is an existing Webhook in place
$WebhookFilter = "PartitionKey eq '$($TenantFilter)'"
$ExistingWebhooks = Get-CIPPAzDataTableEntity @WebhookTable -Filter $WebhookFilter
$MatchedWebhook = $ExistingWebhooks | Where-Object { $_.Resource -eq $Resource }
diff --git a/Modules/CIPPCore/Public/Webhooks/Remove-CIPPGraphSubscription.ps1 b/Modules/CIPPCore/Public/Webhooks/Remove-CIPPGraphSubscription.ps1
index e64f366d7830..7b17983dadff 100644
--- a/Modules/CIPPCore/Public/Webhooks/Remove-CIPPGraphSubscription.ps1
+++ b/Modules/CIPPCore/Public/Webhooks/Remove-CIPPGraphSubscription.ps1
@@ -28,7 +28,7 @@ function Remove-CIPPGraphSubscription {
}
}
} else {
- $WebhookTable = Get-CIPPTable -TableName webhookTable
+ $WebhookTable = Get-CIPPTable -TableName 'webhookTable'
if ($type -eq 'AuditLog') {
$WebhookRow = Get-CIPPAzDataTableEntity @WebhookTable | Where-Object { $_.PartitionKey -eq $TenantFilter -and $_.Resource -eq $EventType }
} else {
diff --git a/Modules/CIPPCore/Public/Webhooks/Test-CIPPAuditLogRules.ps1 b/Modules/CIPPCore/Public/Webhooks/Test-CIPPAuditLogRules.ps1
index 9e76e9a01ca5..33f22fc0c953 100644
--- a/Modules/CIPPCore/Public/Webhooks/Test-CIPPAuditLogRules.ps1
+++ b/Modules/CIPPCore/Public/Webhooks/Test-CIPPAuditLogRules.ps1
@@ -4,10 +4,7 @@ function Test-CIPPAuditLogRules {
[Parameter(Mandatory = $true)]
$TenantFilter,
[Parameter(Mandatory = $true)]
- $ContentUri,
- [Parameter(Mandatory = $true)]
- [ValidateSet('Audit.AzureActiveDirectory', 'Audit.Exchange')]
- $LogType
+ $SearchId
)
$Results = [PSCustomObject]@{
@@ -37,25 +34,23 @@ function Test-CIPPAuditLogRules {
LogType = $_.Type
}
}
- $AuditLogQuery = @{
- TenantFilter = $TenantFilter
- ContentUri = $ContentUri
- }
- Write-Information 'Getting data from Office 365 Management Activity API'
- $Data = Get-CIPPAuditLogContent @AuditLogQuery
- $LogCount = ($Data | Measure-Object).Count
- Write-Information "Logs to process: $LogCount"
+ #write-warning 'Getting audit records from Graph API'
+ $SearchResults = Get-CippAuditLogSearchResults -TenantFilter $TenantFilter -QueryId $SearchId
+ $LogCount = ($SearchResults | Measure-Object).Count
+ $RunGuid = New-Guid
+ Write-Warning "Logs to process: $LogCount - RunGuid: $($RunGuid) - $($TenantFilter)"
$Results.TotalLogs = $LogCount
if ($LogCount -gt 0) {
- $PreProccessedData = $Data | Select-Object *, CIPPAction, CIPPClause, CIPPGeoLocation, CIPPBadRepIP, CIPPHostedIP, CIPPIPDetected, CIPPLocationInfo, CIPPExtendedProperties, CIPPDeviceProperties, CIPPParameters, CIPPModifiedProperties -ErrorAction SilentlyContinue
$LocationTable = Get-CIPPTable -TableName 'knownlocationdb'
- $ProcessedData = foreach ($Data in $PreProccessedData) {
+ $ProcessedData = foreach ($AuditRecord in $SearchResults) {
+ $RootProperties = $AuditRecord | Select-Object * -ExcludeProperty auditData
+ $Data = $AuditRecord.auditData | Select-Object *, CIPPAction, CIPPClause, CIPPGeoLocation, CIPPBadRepIP, CIPPHostedIP, CIPPIPDetected, CIPPLocationInfo, CIPPExtendedProperties, CIPPDeviceProperties, CIPPParameters, CIPPModifiedProperties, AuditRecord -ErrorAction SilentlyContinue
try {
if ($Data.ExtendedProperties) {
$Data.CIPPExtendedProperties = ($Data.ExtendedProperties | ConvertTo-Json)
$Data.ExtendedProperties | ForEach-Object {
if ($_.Value -in $ExtendedPropertiesIgnoreList) {
- Write-Information 'No need to process this operation as its in our ignore list'
+ #write-warning "No need to process this operation as its in our ignore list. Some extended information: $($data.operation):$($_.Value) - $($TenantFilter)"
continue
}
$Data | Add-Member -NotePropertyName $_.Name -NotePropertyValue $_.Value -Force -ErrorAction SilentlyContinue
@@ -74,12 +69,12 @@ function Test-CIPPAuditLogRules {
try {
$Data.ModifiedProperties | ForEach-Object { $Data | Add-Member -NotePropertyName "$($_.Name)" -NotePropertyValue "$($_.NewValue)" -Force -ErrorAction SilentlyContinue }
} catch {
- #Write-Information ($Data.ModifiedProperties | ConvertTo-Json -Depth 10)
+ ##write-warning ($Data.ModifiedProperties | ConvertTo-Json -Depth 10)
}
try {
$Data.ModifiedProperties | ForEach-Object { $Data | Add-Member -NotePropertyName $("Previous_Value_$($_.Name)") -NotePropertyValue "$($_.OldValue)" -Force -ErrorAction SilentlyContinue }
} catch {
- #Write-Information ($Data.ModifiedProperties | ConvertTo-Json -Depth 10)
+ ##write-warning ($Data.ModifiedProperties | ConvertTo-Json -Depth 10)
}
}
@@ -90,61 +85,64 @@ function Test-CIPPAuditLogRules {
# Check if IP is on trusted IP list
$TrustedIP = Get-CIPPAzDataTableEntity @TrustedIPTable -Filter "PartitionKey eq '$TenantFilter' and RowKey eq '$($Data.clientip)' and state eq 'Trusted'"
if ($TrustedIP) {
- Write-Information "IP $($Data.clientip) is trusted"
- continue
+ #write-warning "IP $($Data.clientip) is trusted"
+ $Trusted = $true
}
+ if (!$Trusted) {
+ $Location = Get-CIPPAzDataTableEntity @LocationTable -Filter "RowKey eq '$($Data.clientIp)'" | Select-Object -Last 1
+ if ($Location) {
+ $Country = $Location.CountryOrRegion
+ $City = $Location.City
+ $Proxy = $Location.Proxy
+ $hosting = $Location.Hosting
+ $ASName = $Location.ASName
+ } else {
+ try {
+ $Location = Get-CIPPGeoIPLocation -IP $Data.clientip
+ } catch {
+ #write-warning "Unable to get IP location for $($Data.clientip): $($_.Exception.Message)"
+ }
+ $Country = if ($Location.CountryCode) { $Location.CountryCode } else { 'Unknown' }
+ $City = if ($Location.City) { $Location.City } else { 'Unknown' }
+ $Proxy = if ($Location.Proxy -ne $null) { $Location.Proxy } else { 'Unknown' }
+ $hosting = if ($Location.Hosting -ne $null) { $Location.Hosting } else { 'Unknown' }
+ $ASName = if ($Location.ASName) { $Location.ASName } else { 'Unknown' }
+ $IP = $Data.ClientIP
+ $LocationInfo = @{
+ RowKey = [string]$Data.clientip
+ PartitionKey = [string]$Data.id
+ Tenant = [string]$TenantFilter
+ CountryOrRegion = "$Country"
+ City = "$City"
+ Proxy = "$Proxy"
+ Hosting = "$hosting"
+ ASName = "$ASName"
+ }
+ try {
+ $null = Add-CIPPAzDataTableEntity @LocationTable -Entity $LocationInfo -Force
+ } catch {
+ #write-warning "Failed to add location info for $($Data.clientip) to cache: $($_.Exception.Message)"
- $Location = Get-CIPPAzDataTableEntity @LocationTable -Filter "RowKey eq '$($Data.clientIp)'" | Select-Object -Last 1
- if ($Location) {
- $Country = $Location.CountryOrRegion
- $City = $Location.City
- $Proxy = $Location.Proxy
- $hosting = $Location.Hosting
- $ASName = $Location.ASName
- } else {
- try {
- $Location = Get-CIPPGeoIPLocation -IP $Data.clientip
- } catch {
- Write-Information "Unable to get IP location for $($Data.clientip): $($_.Exception.Messge)"
- }
- $Country = if ($Location.CountryCode) { $Location.CountryCode } else { 'Unknown' }
- $City = if ($Location.City) { $Location.City } else { 'Unknown' }
- $Proxy = if ($Location.Proxy -ne $null) { $Location.Proxy } else { 'Unknown' }
- $hosting = if ($Location.Hosting -ne $null) { $Location.Hosting } else { 'Unknown' }
- $ASName = if ($Location.ASName) { $Location.ASName } else { 'Unknown' }
- $IP = $Data.ClientIP
- $LocationInfo = @{
- RowKey = [string]$Data.clientip
- PartitionKey = [string]$Data.id
- Tenant = [string]$TenantFilter
- CountryOrRegion = "$Country"
- City = "$City"
- Proxy = "$Proxy"
- Hosting = "$hosting"
- ASName = "$ASName"
- }
- try {
- $null = Add-CIPPAzDataTableEntity @LocationTable -Entity $LocationInfo -Force
- } catch {
- Write-Information "Failed to add location info for $($Data.clientip) to cache: $($_.Exception.Message)"
-
+ }
}
+ $Data.CIPPGeoLocation = $Country
+ $Data.CIPPBadRepIP = $Proxy
+ $Data.CIPPHostedIP = $hosting
+ $Data.CIPPIPDetected = $IP
+ $Data.CIPPLocationInfo = ($Location | ConvertTo-Json)
+ $Data.AuditRecord = ($RootProperties | ConvertTo-Json)
}
- $Data.CIPPGeoLocation = $Country
- $Data.CIPPBadRepIP = $Proxy
- $Data.CIPPHostedIP = $hosting
- $Data.CIPPIPDetected = $IP
- $Data.CIPPLocationInfo = ($Location | ConvertTo-Json)
}
$Data | Select-Object * -ExcludeProperty ExtendedProperties, DeviceProperties, parameters
} catch {
- Write-Information "Audit log: Error processing data: $($_.Exception.Message)`r`n$($_.InvocationInfo.PositionMessage)"
+ #write-warning "Audit log: Error processing data: $($_.Exception.Message)`r`n$($_.InvocationInfo.PositionMessage)"
Write-LogMessage -API 'Webhooks' -message 'Error Processing Audit Log Data' -LogData (Get-CippException -Exception $_) -sev Error -tenant $TenantFilter
}
}
+ #write-warning "Processed Data: $(($ProcessedData | Measure-Object).Count) - This should be higher than 0 in many cases, because the where object has not run yet."
+ #write-warning "Creating filters - $(($ProcessedData.operation | Sort-Object -Unique) -join ',') - $($TenantFilter)"
- #Filter data based on conditions.
- $Where = $Configuration | Where-Object { $_.LogType -eq $LogType } | ForEach-Object {
+ $Where = $Configuration | ForEach-Object {
$conditions = $_.Conditions | ConvertFrom-Json | Where-Object { $_.Input.value -ne '' }
$actions = $_.Actions
$conditionStrings = [System.Collections.Generic.List[string]]::new()
@@ -169,14 +167,13 @@ function Test-CIPPAuditLogRules {
}
}
- Write-Information "Webhook: The list of operations in the data are $(($ProcessedData.operation | Select-Object -Unique) -join ', ')"
$MatchedRules = [System.Collections.Generic.List[string]]::new()
$DataToProcess = foreach ($clause in $Where) {
- Write-Information "Webhook: Processing clause: $($clause.clause)"
- Write-Information "Webhook: If this clause would be true, the action would be: $($clause.expectedAction)"
+ #write-warning "Webhook: Processing clause: $($clause.clause)"
$ReturnedData = $ProcessedData | Where-Object { Invoke-Expression $clause.clause }
if ($ReturnedData) {
+ #write-warning "Webhook: There is matching data: $(($ReturnedData.operation | Select-Object -Unique) -join ', ')"
$ReturnedData = foreach ($item in $ReturnedData) {
$item.CIPPAction = $clause.expectedAction
$item.CIPPClause = $clause.CIPPClause -join ' and '
@@ -186,9 +183,10 @@ function Test-CIPPAuditLogRules {
}
$ReturnedData
}
- $Results.MatchedRules = $MatchedRules | Select-Object -Unique
+ $Results.MatchedRules = @($MatchedRules | Select-Object -Unique)
$Results.MatchedLogs = ($DataToProcess | Measure-Object).Count
$Results.DataToProcess = $DataToProcess
}
+ Write-Warning "Finished - RunGuid: $($RunGuid) - $($TenantFilter)"
$Results
}
diff --git a/Modules/CIPPCore/lib/NCrontab.Advanced.dll b/Modules/CIPPCore/lib/NCrontab.Advanced.dll
new file mode 100644
index 000000000000..3aff438ecf86
Binary files /dev/null and b/Modules/CIPPCore/lib/NCrontab.Advanced.dll differ
diff --git a/Modules/CippEntrypoints/CippEntrypoints.psm1 b/Modules/CippEntrypoints/CippEntrypoints.psm1
index aae4096c53a1..1bda0cce5b84 100644
--- a/Modules/CippEntrypoints/CippEntrypoints.psm1
+++ b/Modules/CippEntrypoints/CippEntrypoints.psm1
@@ -9,11 +9,26 @@ function Receive-CippHttpTrigger {
$Request,
$TriggerMetadata
)
+
+ $ConfigTable = Get-CIPPTable -tablename Config
+ $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
+
+ if ($Config -and $Config.state -eq $true) {
+ if ($env:CIPP_PROCESSOR -eq 'true') {
+ Write-Information 'No API Calls'
+ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
+ StatusCode = [HttpStatusCode]::Forbidden
+ Body = 'API calls are not accepted on this function app'
+ })
+ return
+ }
+ }
+
# Convert the request to a PSCustomObject because the httpContext is case sensitive since 7.3
$Request = $Request | ConvertTo-Json -Depth 100 | ConvertFrom-Json
Set-Location (Get-Item $PSScriptRoot).Parent.Parent.FullName
$FunctionName = 'Invoke-{0}' -f $Request.Params.CIPPEndpoint
- Write-Host "Function: $($Request.Params.CIPPEndpoint)"
+ Write-Information "Function: $($Request.Params.CIPPEndpoint)"
$HttpTrigger = @{
Request = [pscustomobject]($Request)
@@ -42,38 +57,6 @@ function Receive-CippHttpTrigger {
}
}
-function Receive-CippQueueTrigger {
- Param($QueueItem, $TriggerMetadata)
-
- Set-Location (Get-Item $PSScriptRoot).Parent.Parent.FullName
- $Start = (Get-Date).ToUniversalTime()
- $APIName = $TriggerMetadata.FunctionName
- Write-Information "#### Running $APINAME"
- Set-Location (Get-Item $PSScriptRoot).Parent.Parent.FullName
- $FunctionName = 'Push-{0}' -f $APIName
- $QueueTrigger = @{
- QueueItem = $QueueItem
- TriggerMetadata = $TriggerMetadata
- }
- try {
- & $FunctionName @QueueTrigger
- } catch {
- $ErrorMsg = $_.Exception.Message
- }
-
- $End = (Get-Date).ToUniversalTime()
-
- $Stats = @{
- FunctionType = 'Queue'
- Entity = $QueueItem
- Start = $Start
- End = $End
- ErrorMsg = $ErrorMsg
- }
- Write-Information '####### Adding stats'
- Write-CippFunctionStats @Stats
-}
-
function Receive-CippOrchestrationTrigger {
param($Context)
@@ -213,5 +196,44 @@ function Receive-CippActivityTrigger {
}
}
-Export-ModuleMember -Function @('Receive-CippHttpTrigger', 'Receive-CippQueueTrigger', 'Receive-CippOrchestrationTrigger', 'Receive-CippActivityTrigger')
+function Receive-CIPPTimerTrigger {
+ param($Timer)
+
+ $UtcNow = (Get-Date).ToUniversalTime()
+ $Functions = Get-CIPPTimerFunctions
+ $Table = Get-CIPPTable -tablename CIPPTimers
+ $Statuses = Get-CIPPAzDataTableEntity @Table
+ $FunctionName = $env:WEBSITE_SITE_NAME
+
+ foreach ($Function in $Functions) {
+ Write-Information "CIPPTimer: $($Function.Command) - $($Function.Cron)"
+ $FunctionStatus = $Statuses | Where-Object { $_.RowKey -eq $Function.Command }
+ if ($FunctionStatus.OrchestratorId) {
+ $FunctionName = $env:WEBSITE_SITE_NAME
+ $InstancesTable = Get-CippTable -TableName ('{0}Instances' -f ($FunctionName -replace '-', ''))
+ $Instance = Get-CIPPAzDataTableEntity @InstancesTable -Filter "PartitionKey eq '$($FunctionStatus.OrchestratorId)'" -Property PartitionKey, RowKey, RuntimeStatus
+ if ($Instance.RuntimeStatus -eq 'Running') {
+ Write-LogMessage -API 'TimerFunction' -message "$($Function.Command) - $($FunctionStatus.OrchestratorId) is still running" -sev Warn -LogData $FunctionStatus
+ Write-Warning "CIPP Timer: $($Function.Command) - $($FunctionStatus.OrchestratorId) is still running, skipping execution"
+ continue
+ }
+ }
+ try {
+ $Results = Invoke-Command -ScriptBlock { & $Function.Command }
+ if ($Results -match '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$') {
+ $FunctionStatus.OrchestratorId = $Results
+ $Status = 'Started'
+ } else {
+ $Status = 'Completed'
+ }
+ } catch {
+ $Status = 'Failed'
+ }
+ $FunctionStatus.LastOccurrence = $UtcNow
+ $FunctionStatus.Status = $Status
+ Add-CIPPAzDataTableEntity @Table -Entity $FunctionStatus -Force
+ }
+}
+
+Export-ModuleMember -Function @('Receive-CippHttpTrigger', 'Receive-CippOrchestrationTrigger', 'Receive-CippActivityTrigger', 'Receive-CIPPTimerTrigger')
diff --git a/Modules/CippExtensions/CippExtensions.psm1 b/Modules/CippExtensions/CippExtensions.psm1
index d2bab13c84b9..ce47d5f7e719 100644
--- a/Modules/CippExtensions/CippExtensions.psm1
+++ b/Modules/CippExtensions/CippExtensions.psm1
@@ -1,5 +1,5 @@
-$Public = @(Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -Recurse -ErrorAction SilentlyContinue)
-$Private = @(Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -Recurse -ErrorAction SilentlyContinue)
+$Public = @(Get-ChildItem -Path (Join-Path $PSScriptRoot "Public\*.ps1") -Recurse -ErrorAction SilentlyContinue)
+$Private = @(Get-ChildItem -Path (Join-Path $PSScriptRoot "Private\*.ps1") -Recurse -ErrorAction SilentlyContinue)
$Functions = $Public + $Private
foreach ($import in @($Functions)) {
try {
diff --git a/Modules/CippExtensions/ConversionTable.csv b/Modules/CippExtensions/ConversionTable.csv
index f890ee46f8ad..55ebdfd465b9 100644
--- a/Modules/CippExtensions/ConversionTable.csv
+++ b/Modules/CippExtensions/ConversionTable.csv
@@ -228,9 +228,9 @@ Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE
Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE_NOPREREQ,2cf302fe-62db-4e20-b573-e0998b1208b5,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,CRMINSTANCE_GCC,483cc331-f4df-4a3b-b8ca-fe1a247569f6,Microsoft Dynamics CRM Online Instance
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,CDS_FIELD_SERVICE_CONTRACTOR_GCC,2457fe40-65be-48a1-935f-924ad6e62dba,Common Data Service Field service Part Time Contractors for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
@@ -253,27 +253,27 @@ Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAG
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_CDS_RETAIL,93cc200d-a47f-4c56-aec1-83f8b0d0425a,Common Data Service for Dynamics 365 Retail
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,FLOW_FOR_IOM_USL,9e6d1620-dce9-4655-8933-af8fa5bccc9c,Data Integration for IOM with Power Automate USL
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_RETAIL,117e3aa0-8d08-4a19-a6a5-90b7a96e2128,Dynamics 365 Commerce
-Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_ACC_PROTECTION,4c00c16c-0304-4421-b598-555c3e78edcb,Dynamics 365 Fraud Protection - Account Protection
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_LOSS_PREVENTION,ecc62904-fa88-4552-a62c-fe582fb31444,Dynamics 365 Fraud Protection - Loss Prevention
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_PURCH_PROTECTION,d703990f-006e-459b-b8dd-1267c4533a22,Dynamics 365 Fraud Protection - Purchase Protection
@@ -296,14 +296,14 @@ Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,POWERAPPS FOR DYNAMICS 365
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,DYNAMICS 365 FOR CUSTOMER SERVICE
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,D365_FIELD_SERVICE_ATTACH,55c9148b-d5f0-4101-b5a0-b2727cfc0916,Dynamics 365 for Field Service Attach
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Field Service Enterprise Edition,DYN365_ENTERPRISE_FIELD_SERVICE,c7d15985-e746-4f01-b113-20b575898250,DYN365_ENTERPRISE_FIELD_SERVICE,8c66ef8a-177f-4c0d-853c-d4f219331d09,Dynamics 365 for Field Service
@@ -393,13 +393,13 @@ Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,PROJECT ONLINE ESSENTIALS
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SHAREPOINT ONLINE (PLAN 2)
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Forms_Pro_SalesEnt_GCC,33850b82-0a37-4ebb-a0b2-ee163facd716,Microsoft Dynamics 365 Customer Voice for Sales Enterprise for GCC
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
@@ -411,12 +411,12 @@ Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,DYN365_SALES_INSIGHTS,fedc185f-0711-4cc0-80ed-0a92da1a8384,Dynamics 365 AI for Sales (Embedded)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
@@ -432,7 +432,7 @@ Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd9
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_CDS_SUPPLYCHAINMANAGEMENT,b6a8b974-2956-4e14-ae81-f0384c363528,Common Data Service for Dynamics 365 Supply Chain Management
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
-Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,D365_SCM_Attach,b21c777f-c2d5-486e-88f6-fc0a3e474271,Dynamics 365 for Supply Chain Management Attach
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Marketing Business Edition,DYN365_BUSINESS_MARKETING,238e2f8d-e429-4035-94db-6926be4ffe7b,DYN365_BUSINESS_Marketing,393a0c96-9ba1-4af0-8975-fa2f853a25ac,Dynamics 365 Marketing
@@ -521,7 +521,7 @@ Dynamics 365 P1 Tria for Information Workers,DYN365_ENTERPRISE_P1_IW,338148b6-1b
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365CDSforProjectOperations,7df1d500-ca5c-4229-8cea-815bc88798c9,Common Data Service for Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperationsCDS,18fa3aba-b085-4105-87d7-55617b8585e6,Dynamics 365 Project Operations CDS
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperations,69f07c66-bee4-4222-b051-195095efee5b,Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
@@ -1081,7 +1081,7 @@ Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,BPOS_S_TODO_2,c87f142c-d1e9-4363-8630-aaea9c4d9ae5,To-Do (Plan 2)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,UNIVERSAL_PRINT_NO_SEEDING,b67adbaf-a096-42c9-967e-5a84edbe0086,Universal Print Without Seeding
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,WHITEBOARD_PLAN3,4a51bca5-1eff-43f5-878c-177680f191af,Whiteboard (Plan 3)
-Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,YAMMER_EDU,2078e8df-cff6-4290-98cb-5408261a760a,Yammer for Academic
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,FORMS_PLAN_E1,159f4cd6-e380-449f-a816-af1a9ef76344,MICROSOFT FORMS (PLAN E1)
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,OFFICE_BUSINESS,094e7854-93fc-4d55-b2c0-3ab5369ebdc1,OFFICE 365 BUSINESS
@@ -1427,6 +1427,7 @@ Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_APPS,a62f8878-de10-42f3-b68f-6149a25ceb97,Microsoft 365 Copilot in Productivity Apps
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_BUSINESS_CHAT,3f30311c-6b1e-48a4-ab79-725b469da960,Microsoft Copilot with Graph-grounded chat
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_CONNECTORS,89f1c4c8-0878-40f7-804d-869c9128ab5d,Power Platform Connectors in Microsoft 365 Copilot
+Microsoft 365 Domestic Calling Plan (120 minutes) - US,MCOPSTN5_US,d13e9d1b-316a-4946-98c6-362c97a4fdfe,PSTN5_US,1346d5e6-15a6-4b88-9693-806ff7296a7a,Microsoft 365 Domestic Calling Plan - US (120 minutes)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,MICROSOFTBOOKINGS,199a5c09-e0ca-4e37-8f7c-b05d533e1ea2,Microsoft Bookings
@@ -3335,6 +3336,7 @@ Microsoft Teams Phone Standard for TELSTRA,MCOEV_TELSTRA,ffaf2d68-1c95-4eb3-9ddd
Microsoft Teams Phone Standard_USGOV_DOD,MCOEV_USGOV_DOD,b0e7de67-e503-4934-b729-53d595ba5cd1,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Standard_USGOV_GCCHIGH,MCOEV_USGOV_GCCHIGH,985fcb26-7b94-475b-b512-89356697be71,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Resource Account,PHONESYSTEM_VIRTUALUSER,440eaaa8-b3e0-484b-a8be-62870b9ba70a,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
+Microsoft Teams Phone Resource Account for Faculty,PHONESYSTEM_VIRTUALUSER_FACULTY,0e142028-345e-45da-8d92-8bfd4093bbb9,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Phone Resource Account for GCC,PHONESYSTEM_VIRTUALUSER_GOV,2cf22bcb-0c9e-4bc6-8daf-7e7654c0f285,MCOEV_VIRTUALUSER_GOV,0628a73f-3b4a-4989-bd7b-0f8823144313,Microsoft 365 Phone Standard Resource Account for Government
Microsoft Teams Phone Resource Account_USGOV_GCCHIGH,PHONESYSTEM_VIRTUALUSER_USGOV_GCCHIGH ,e3f0522e-ebb7-4561-9f90-b44516d65b77,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Premium Introductory Pricing,Microsoft_Teams_Premium,36a0f3b3-adb5-49ea-bf66-762134cf063a,MICROSOFT_ECDN,85704d55-2e73-47ee-93b4-4b8ea14db92b,Microsoft eCDN
@@ -3399,6 +3401,13 @@ Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,MCOST
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,Microsoft 365 Phone System
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,TEAMS1,57ff2da0-773e-42df-b2af-ffb7a2317929,Microsoft Teams
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,Skype for Business Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune Plan 1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,SPECIALTY_DEVICES,cfce7ae3-4b41-4438-999c-c0e91f3b7fb9,Specialty devices
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOEV_GOV,db23fce2-a974-42ef-9002-d78dd42a0f22,Microsoft 365 Phone System for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,TEAMS_GOV,304767db-7d23-49e8-a945-4a7eb65f9f28,Microsoft Teams for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOSTANDARD_GOV,a31ef4a2-f787-435e-8335-e47eb0cafc94,Skype for Business Online (Plan 2) for Government
@@ -4598,9 +4607,9 @@ Power Automate per user plan dept,FLOW_PER_USER_DEPT,d80a4c5d-8f05-4b64-9926-657
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,DYN365_CDS_P2_GOV,37396c73-2203-48e6-8be1-d882dae53275,Common Data Service for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,FLOW_PER_USER_GCC,769b8bee-2779-4c5a-9456-6f4f8629fd41,Power Automate per User Plan for Government
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,CDS_ATTENDED_RPA_GCC,4802707d-47e1-45dc-82c5-b6981f0fb38c,Common Data Service Attended RPA for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,POWER_AUTOMATE_ATTENDED_RPA_GCC,fb613c67-1a58-4645-a8df-21e95a37d433,Power Automate Attended RPA for Government
@@ -4669,18 +4678,18 @@ Power Pages authenticated users T2 min 100 units - 100 users/per site/month capa
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T2_min_100_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,7cae5432-61bb-48c3-b75c-831394ec13a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,DYN365_CDS_VIRAL,17ab22cd-a0b3-4536-910a-cb6eb12696c0,Common Data Service
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,POWER_PAGES_VTRIAL,6817d093-2d30-4249-8bd6-774f01efa78c,Power Pages vTrial for Makers
@@ -4901,6 +4910,7 @@ SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb2
SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb26e4,Intelligent_Content_Services_SPO_type,fd2e7f90-1010-487e-a11b-d2b1ae9651fc,SharePoint Syntex - SPO type
Skype for Business Online (Plan 1),MCOIMP,b8b749f8-a4ef-4887-9539-c95b1eaa5db7,MCOIMP,afc06cb0-b4f4-4473-8286-d644f70d8faf,SKYPE FOR BUSINESS ONLINE (PLAN 1)
Skype for Business Online (Plan 2),MCOSTANDARD,d42c793f-6c78-4f43-92ca-e8f6a02b035f,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,SKYPE FOR BUSINESS ONLINE (PLAN 2)
+Skype for Business PSTN Calling Domestic Small,MCOPSTN5,d43177b5-475b-4880-92d4-d54c27b5efbd,Skype for Business PSTN Calling Domestic Small,9a0125a5-c8f8-4526-b231-49e2abe0ebce,Skype for Business PSTN Calling Domestic Small
Skype for Business PSTN Domestic and International Calling,MCOPSTN2,d3b4fe1f-9992-4930-8acb-ca6ec609365e,MCOPSTN2,5a10155d-f5c1-411a-a8ec-e99aae125390,DOMESTIC AND INTERNATIONAL CALLING PLAN
Skype for Business PSTN Domestic Calling,MCOPSTN1,0dab259f-bf13-4952-b7f8-7db8f131b28d,MCOPSTN1,4ed3ff63-69d7-4fb7-b984-5aec7f605ca8,DOMESTIC CALLING PLAN
Skype for Business PSTN Domestic Calling (120 Minutes),MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,DOMESTIC CALLING PLAN
@@ -4965,11 +4975,11 @@ Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb53
Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb538cb07e,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender for Endpoint
@@ -4979,18 +4989,18 @@ Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467
Windows 10/11 Enterprise E3,WIN10_PRO_ENT_SUB,cb10e6cd-9da4-4992-867b-67546b1db821,WIN10_PRO_ENT_SUB,21b439ba-a0ca-424f-a6cc-52f954a5b111,WINDOWS 10 ENTERPRISE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,EXCHANGE FOUNDATION
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,UNIVERSAL PRINT
-Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
+Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,WINDOWS UPDATE FOR BUSINESS DEPLOYMENT SERVICE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
-Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10/11 Enterprise
@@ -5017,7 +5027,7 @@ Windows 365 Business 2 vCPU 4 GB 64 GB,CPC_B_2C_4RAM_64GB,42e6818f-8966-444b-b7a
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,"Windows 365 Business 2 vCPU, 8 GB, 128 GB"
+Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,Windows 365 Business 2 vCPU, 8 GB, 128 GB
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
@@ -5048,14 +5058,14 @@ Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,CPC_B_8C_32RAM_512GB,4229a0b4-7f34-4835-b068-6dc8d10be57c,Windows 365 Business 8 vCPU 32 GB 512 GB
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,"Windows 365 Business 16 vCPU, 64 GB, 512 GB"
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,"Windows 365 Business 16 vCPU, 64 GB, 1 TB"
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,Windows 365 Business 16 vCPU, 64 GB, 512 GB
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,Windows 365 Business 16 vCPU, 64 GB, 1 TB
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,CPC_E_1C_2GB_64GB,86d70dbb-d4c6-4662-ba17-3014204cbb28,Windows 365 Enterprise 1 vCPU 2 GB 64 GB
Windows 365 Enterprise 2 vCPU 4 GB 64 GB,CPC_E_2C_4GB_64GB,7bb14422-3b90-4389-a7be-f1b745fc037f,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
diff --git a/Modules/CippExtensions/Public/ConversionTable.csv b/Modules/CippExtensions/Public/ConversionTable.csv
index f890ee46f8ad..55ebdfd465b9 100644
--- a/Modules/CippExtensions/Public/ConversionTable.csv
+++ b/Modules/CippExtensions/Public/ConversionTable.csv
@@ -228,9 +228,9 @@ Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE
Dynamics 365 - Additional Non-Production Instance for Government,CRMTESTINSTANCE_NOPREREQ,2cf302fe-62db-4e20-b573-e0998b1208b5,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,CRMINSTANCE_GCC,483cc331-f4df-4a3b-b8ca-fe1a247569f6,Microsoft Dynamics CRM Online Instance
Dynamics 365 Enterprise Edition - Additional Production Instance for Government,CRMINSTANCE_GCC,2bd3cb20-1bb6-446b-b4d0-089af3a05c52,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
-"Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization",CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ENGINE_ADDON,24435e4b-87d0-4d7d-8beb-63a9b1573022,Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,CRM_AUTO_ROUTING_ADDON,2ba394e0-6f18-4b77-b45f-a5663bbab540,RETIRED - Field Service – Automated Routing Engine Add-On
+Dynamics 365 Field Service, Enterprise Edition - Resource Scheduling Optimization,CRM_AUTO_ROUTING_ADDON,977464c4-bfaf-4b67-b761-a9bb735a2196,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,CDS_FIELD_SERVICE_CONTRACTOR_GCC,2457fe40-65be-48a1-935f-924ad6e62dba,Common Data Service Field service Part Time Contractors for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Dynamics 365 Field Service Contractor for Government,D365_FIELD_SERVICE_CONTRACTOR_GOV,e7965e3a-1f49-4d67-a3de-ad1ce460bbcc,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
@@ -253,27 +253,27 @@ Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAG
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 for Case Management Enterprise Edition,DYN365_ENTERPRISE_CASE_MANAGEMENT,d39fb075-21ae-42d0-af80-22a2599749e0,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Case Management, Enterprise Edition for Government",DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,D365_ENTERPRISE_CASE_MANAGEMENT_GOV,5cd0b796-9ac8-4792-9f0b-796ca9044e4a,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,79bb0a8d-e686-4e16-ac59-2b3fd0014a61,Dynamics 365 for Case Management for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Case Management, Enterprise Edition for Government,DYN365_ENTERPRISE_CASE_MANAGEMENT_GOV,ff5a82be-1edd-4d48-94e0-52527825b589,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_CDS_RETAIL,93cc200d-a47f-4c56-aec1-83f8b0d0425a,Common Data Service for Dynamics 365 Retail
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,FLOW_FOR_IOM_USL,9e6d1620-dce9-4655-8933-af8fa5bccc9c,Data Integration for IOM with Power Automate USL
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_RETAIL,117e3aa0-8d08-4a19-a6a5-90b7a96e2128,Dynamics 365 Commerce
-Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_ACC_PROTECTION,4c00c16c-0304-4421-b598-555c3e78edcb,Dynamics 365 Fraud Protection - Account Protection
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_LOSS_PREVENTION,ecc62904-fa88-4552-a62c-fe582fb31444,Dynamics 365 Fraud Protection - Loss Prevention
Dynamics 365 Commerce,DYN365_RETAIL,79909bd8-4c69-4202-939e-11bc4385b134,DYN365_FP_PURCH_PROTECTION,d703990f-006e-459b-b8dd-1267c4533a22,Dynamics 365 Fraud Protection - Purchase Protection
@@ -296,14 +296,14 @@ Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,POWERAPPS FOR DYNAMICS 365
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,DYNAMICS 365 FOR CUSTOMER SERVICE
Dynamics 365 for Customer Service Enterprise Edition,DYN365_ENTERPRISE_CUSTOMER_SERVICE,749742bf-0d37-4158-a120-33567104deeb,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Customer Service, Enterprise Edition for Government",DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,dc6643d9-1e72-4dce-9f64-1d6eac1f1c5a,Dynamics 365 for Customer Service for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,Forms_Pro_Service_GCC,bb681a9b-58f5-42ee-9926-674325be8aaa,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise for GCC
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Customer Service, Enterprise Edition for Government,DYN365_ENTERPRISE_CUSTOMER_SERVICE_GOV,3c74d823-8f01-4fe8-82d5-f089a5504cec,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,D365_FIELD_SERVICE_ATTACH,55c9148b-d5f0-4101-b5a0-b2727cfc0916,Dynamics 365 for Field Service Attach
Dynamics 365 for Field Service Attach to Qualifying Dynamics 365 Base Offer,D365_FIELD_SERVICE_ATTACH,a36cdaa2-a806-4b6e-9ae0-28dbd993c20e,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Field Service Enterprise Edition,DYN365_ENTERPRISE_FIELD_SERVICE,c7d15985-e746-4f01-b113-20b575898250,DYN365_ENTERPRISE_FIELD_SERVICE,8c66ef8a-177f-4c0d-853c-d4f219331d09,Dynamics 365 for Field Service
@@ -393,13 +393,13 @@ Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,PROJECT ONLINE ESSENTIALS
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SHAREPOINT ONLINE (PLAN 2)
Dynamics 365 for Sales Enterprise Edition,DYN365_ENTERPRISE_SALES,1e1a282c-9c54-43a2-9310-98ef728faace,SHAREPOINTWAC,e95bec33-7c88-4a70-8e19-b10bd9d0c014,OFFICE ONLINE
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
-"Dynamics 365 for Sales, Enterprise Edition for Government",DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTWAC_GOV,8f9f0f3b-ca90-406c-a842-95579171f8ec,Office for the Web for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,PROJECT_ESSENTIALS_GOV,fdcb7064-f45c-46fa-b056-7e0e9fdf4bf3,Project Online Essentials for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
+Dynamics 365 for Sales, Enterprise Edition for Government,DYN365_ENTERPRISE_SALES_GOV,28b275ce-aec7-4c26-82e2-1ffbc2746ad4,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,DYN365_ENTERPRISE_SALES_GOV,213be507-d547-4f79-bc2c-6196bc54c4a3,Dynamics 365 for Sales for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Forms_Pro_SalesEnt_GCC,33850b82-0a37-4ebb-a0b2-ee163facd716,Microsoft Dynamics 365 Customer Voice for Sales Enterprise for GCC
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
@@ -411,12 +411,12 @@ Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,SHAREPOINTENTERPRISE_GOV,153f85dd-d912-4762-af6c-d6e0fb4f6692,SharePoint Plan 2G
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,FLOW_DYN_APPS_GOV,2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69,Power Automate for Dynamics 365 for Government
Dynamics 365 for Sales Enterprise for Government,D365_ENTERPRISE_SALES_GOV,e85b3345-2fd5-45cf-a196-7968d3e18e56,POWERAPPS_DYN_APPS_GOV,3089c02b-e533-4b73-96a5-01fa648c3c3c,PowerApps for Dynamics 365 for Government
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox",Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,DYN365_ENTERPRISE_P1,d56f3deb-50d8-465a-bedb-f079817ccac1,Dynamics 365 Customer Engagement Plan
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,Forms_Pro_Service,67bf4812-f90b-4db9-97e7-c0bbbf7b2d09,Microsoft Dynamics 365 Customer Voice for Customer Service Enterprise
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Dynamics 365 Sales, Field Service and Customer Service Partner Sandbox,Dynamics_365_Sales_Field_Service_and_Customer_Service_Partner_Sandbox,494721b8-1f30-4315-aba6-70ca169358d9,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,DYN365_SALES_INSIGHTS,fedc185f-0711-4cc0-80ed-0a92da1a8384,Dynamics 365 AI for Sales (Embedded)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,SHAREPOINTENTERPRISE,5dbe027f-2339-4123-9542-606e4d348a72,SharePoint (Plan 2)
Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd96877,PROJECT_ESSENTIALS,1259157c-8581-4875-bca7-2ffb18c51bda,Project Online Essentials
@@ -432,7 +432,7 @@ Dynamics 365 Sales Premium,DYN365_SALES_PREMIUM,2edaa1dc-966d-4475-93d6-8ee8dfd9
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_CDS_SUPPLYCHAINMANAGEMENT,b6a8b974-2956-4e14-ae81-f0384c363528,Common Data Service for Dynamics 365 Supply Chain Management
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,CDS_FOR_IOM,2bb89402-51e9-4c5a-be33-e954a9dd1ba6,Dataverse for IOM
-Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,D365_SCM_Attach,b21c777f-c2d5-486e-88f6-fc0a3e474271,Dynamics 365 for Supply Chain Management Attach
Dynamics 365 for Supply Chain Management Attach to Qualifying Dynamics 365 Base Offer,DYN365_SCM_ATTACH,090b4a96-8114-4c95-9c91-60e81ef53302,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Dynamics 365 for Marketing Business Edition,DYN365_BUSINESS_MARKETING,238e2f8d-e429-4035-94db-6926be4ffe7b,DYN365_BUSINESS_Marketing,393a0c96-9ba1-4af0-8975-fa2f853a25ac,Dynamics 365 Marketing
@@ -521,7 +521,7 @@ Dynamics 365 P1 Tria for Information Workers,DYN365_ENTERPRISE_P1_IW,338148b6-1b
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365CDSforProjectOperations,7df1d500-ca5c-4229-8cea-815bc88798c9,Common Data Service for Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperationsCDS,18fa3aba-b085-4105-87d7-55617b8585e6,Dynamics 365 Project Operations CDS
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,Power_Pages_Internal_User,60bf28f9-2b70-4522-96f7-335f5e06c941,Power Pages Internal User
-Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,"Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,DYN365_REGULATORY_SERVICE,c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65,Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,D365_ProjectOperations,69f07c66-bee4-4222-b051-195095efee5b,Dynamics 365 Project Operations
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,POWERAPPS_DYN_APPS,874fc546-6efe-4d22-90b8-5c4e7aa59f4b,Power Apps for Dynamics 365
Dynamics 365 Project Operations,DYN365_PROJECT_OPERATIONS,98619618-9dc8-48c6-8f0c-741890ba5f93,FLOW_DYN_APPS,7e6d7d78-73de-46ba-83b1-6d25117334ba,Power Automate for Dynamics 365
@@ -1081,7 +1081,7 @@ Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,BPOS_S_TODO_2,c87f142c-d1e9-4363-8630-aaea9c4d9ae5,To-Do (Plan 2)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,UNIVERSAL_PRINT_NO_SEEDING,b67adbaf-a096-42c9-967e-5a84edbe0086,Universal Print Without Seeding
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,WHITEBOARD_PLAN3,4a51bca5-1eff-43f5-878c-177680f191af,Whiteboard (Plan 3)
-Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Microsoft 365 A5 without Audio Conferencing for students use benefit,M365EDU_A5_NOPSTNCONF_STUUSEBNFT,81441ae1-0b31-4185-a6c0-32b6b84d419f,YAMMER_EDU,2078e8df-cff6-4290-98cb-5408261a760a,Yammer for Academic
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,FORMS_PLAN_E1,159f4cd6-e380-449f-a816-af1a9ef76344,MICROSOFT FORMS (PLAN E1)
Microsoft 365 Apps for Business,O365_BUSINESS,cdd28e44-67e3-425e-be4c-737fab2899d3,OFFICE_BUSINESS,094e7854-93fc-4d55-b2c0-3ab5369ebdc1,OFFICE 365 BUSINESS
@@ -1427,6 +1427,7 @@ Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_APPS,a62f8878-de10-42f3-b68f-6149a25ceb97,Microsoft 365 Copilot in Productivity Apps
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_BUSINESS_CHAT,3f30311c-6b1e-48a4-ab79-725b469da960,Microsoft Copilot with Graph-grounded chat
Microsoft Copilot for Microsoft 365,M365_Copilot,a809996b-059e-42e2-9866-db24b99a9782,M365_COPILOT_CONNECTORS,89f1c4c8-0878-40f7-804d-869c9128ab5d,Power Platform Connectors in Microsoft 365 Copilot
+Microsoft 365 Domestic Calling Plan (120 minutes) - US,MCOPSTN5_US,d13e9d1b-316a-4946-98c6-362c97a4fdfe,PSTN5_US,1346d5e6-15a6-4b88-9693-806ff7296a7a,Microsoft 365 Domestic Calling Plan - US (120 minutes)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Microsoft 365 E3,SPE_E3,05e9a617-0261-4cee-bb44-138d3ef5d965,MICROSOFTBOOKINGS,199a5c09-e0ca-4e37-8f7c-b05d533e1ea2,Microsoft Bookings
@@ -3335,6 +3336,7 @@ Microsoft Teams Phone Standard for TELSTRA,MCOEV_TELSTRA,ffaf2d68-1c95-4eb3-9ddd
Microsoft Teams Phone Standard_USGOV_DOD,MCOEV_USGOV_DOD,b0e7de67-e503-4934-b729-53d595ba5cd1,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Standard_USGOV_GCCHIGH,MCOEV_USGOV_GCCHIGH,985fcb26-7b94-475b-b512-89356697be71,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,MICROSOFT 365 PHONE SYSTEM
Microsoft Teams Phone Resource Account,PHONESYSTEM_VIRTUALUSER,440eaaa8-b3e0-484b-a8be-62870b9ba70a,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
+Microsoft Teams Phone Resource Account for Faculty,PHONESYSTEM_VIRTUALUSER_FACULTY,0e142028-345e-45da-8d92-8bfd4093bbb9,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Phone Resource Account for GCC,PHONESYSTEM_VIRTUALUSER_GOV,2cf22bcb-0c9e-4bc6-8daf-7e7654c0f285,MCOEV_VIRTUALUSER_GOV,0628a73f-3b4a-4989-bd7b-0f8823144313,Microsoft 365 Phone Standard Resource Account for Government
Microsoft Teams Phone Resource Account_USGOV_GCCHIGH,PHONESYSTEM_VIRTUALUSER_USGOV_GCCHIGH ,e3f0522e-ebb7-4561-9f90-b44516d65b77,MCOEV_VIRTUALUSER,f47330e9-c134-43b3-9993-e7f004506889,Microsoft 365 Phone Standard Resource Account
Microsoft Teams Premium Introductory Pricing,Microsoft_Teams_Premium,36a0f3b3-adb5-49ea-bf66-762134cf063a,MICROSOFT_ECDN,85704d55-2e73-47ee-93b4-4b8ea14db92b,Microsoft eCDN
@@ -3399,6 +3401,13 @@ Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,MCOST
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
Microsoft Teams Shared Devices,MCOCAP,295a8eb0-f78d-45c7-8b5b-1eed5ed02dff,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,EXCHANGE_S_ENTERPRISE,efb87545-963c-4e0d-99df-69c6916d9eb0,Exchange Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOEV,4828c8ec-dc2e-4779-b502-87ac9ce28ab7,Microsoft 365 Phone System
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,TEAMS1,57ff2da0-773e-42df-b2af-ffb7a2317929,Microsoft Teams
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,Skype for Business Online (Plan 2)
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,AAD_PREMIUM,41781fb2-bc02-4b7c-bd55-b576c07bb09d,Microsoft Entra ID P1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,INTUNE_A,c1ec4a95-1f05-45b3-a911-aa3fa01094f5,Microsoft Intune Plan 1
+Microsoft Teams Shared Devices for Faculty,MCOCAP_FACULTY ,420c7602-7f70-4895-9394-d3d679ea36fb ,SPECIALTY_DEVICES,cfce7ae3-4b41-4438-999c-c0e91f3b7fb9,Specialty devices
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOEV_GOV,db23fce2-a974-42ef-9002-d78dd42a0f22,Microsoft 365 Phone System for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,TEAMS_GOV,304767db-7d23-49e8-a945-4a7eb65f9f28,Microsoft Teams for Government
Microsoft Teams Shared Devices for GCC,MCOCAP_GOV,b1511558-69bd-4e1b-8270-59ca96dba0f3,MCOSTANDARD_GOV,a31ef4a2-f787-435e-8335-e47eb0cafc94,Skype for Business Online (Plan 2) for Government
@@ -4598,9 +4607,9 @@ Power Automate per user plan dept,FLOW_PER_USER_DEPT,d80a4c5d-8f05-4b64-9926-657
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,DYN365_CDS_P2_GOV,37396c73-2203-48e6-8be1-d882dae53275,Common Data Service for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate per user plan for Government,FLOW_PER_USER_GCC,c8803586-c136-479a-8ff3-f5f32d23a68e,FLOW_PER_USER_GCC,769b8bee-2779-4c5a-9456-6f4f8629fd41,Power Automate per User Plan for Government
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-Power Automate per user with attended RPA plan,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,CDS_ATTENDED_RPA,3da2fd4c-1bee-4b61-a17f-94c31e5cab93,Common Data Service Attended RPA
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Power Automate Premium,POWERAUTOMATE_ATTENDED_RPA,eda1941c-3c4f-4995-b5eb-e85a42175ab9,POWER_AUTOMATE_ATTENDED_RPA,375cd0ad-c407-49fd-866a-0bff4f8a9a4d,Power Automate RPA Attended
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,CDS_ATTENDED_RPA_GCC,4802707d-47e1-45dc-82c5-b6981f0fb38c,Common Data Service Attended RPA for Government
Power Automate Premium for Government,POWERAUTOMATE_ATTENDED_RPA_GCC,d3987516-4b53-4dc0-8335-411260bf5626,POWER_AUTOMATE_ATTENDED_RPA_GCC,fb613c67-1a58-4645-a8df-21e95a37d433,Power Automate Attended RPA for Government
@@ -4669,18 +4678,18 @@ Power Pages authenticated users T2 min 100 units - 100 users/per site/month capa
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T2_min_100_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,7cae5432-61bb-48c3-b75c-831394ec13a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
Power Pages authenticated users T2 min 100 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T2_CN_CN,7d2bb54a-a870-41c2-98d1-1f3b5b523275,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN",Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack",878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC",53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD",398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
-"Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH","Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH",01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack CN_CN,Power Pages authenticated users T3_CN_CN,2cfd692f-a352-4fa8-b960-e3ad0c9b1178,PowerPages_Authenticated_User_CN,967d9574-a076-4bb7-ab89-f41f64bc142e,Power Pages Authenticated Users per site monthly capacity China
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User,0d3366f3-266e-4117-b422-7cabbc165e7c,Power Pages Authenticated Users per site monthly capacity
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack,878b8bbd-3cd0-4b44-9a56-3406741e65e0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_GCC,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_GCC,53265c61-c78c-4223-ab30-422da0c97fbb,PowerPages_Authenticated_User_GCC,cdf787bd-1546-48d2-9e93-b21f9ea7067a,Power Pages Authenticated Users per site monthly capacity GCC
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_DOD,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_DOD,398d37b5-8deb-48db-8f7f-703eb2fb7c72,PowerPages_Authenticated_User_DoD,03300fea-7a88-45a6-b5bd-29653803c591,Power Pages Authenticated Users per site monthly capacity DoD
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,DV_PowerPages_Authenticated_User,7aae746a-3463-4737-b295-3c1a16c31438,Dataverse for Power Pages Authenticated users per site
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_User_GCCH,18e74ca2-b5f0-4802-9a8b-00d2ff1e8322,Power Pages Authenticated Users per site monthly capacity GCCH
+Power Pages authenticated users T3 min 1,000 units - 100 users/per site/month capacity pack_USGOV_GCCHIGH,Power_Pages_authenticated_users_T3_min_1,000_units_100_users/per_site/month_capacity_pack_USGOV_GCCHIGH,01d46c34-3525-47d5-bd1a-5f19979938a0,PowerPages_Authenticated_Users_GCCH,5410f688-68f2-47a5-9b8f-7466194a806a,Power Pages Authenticated Users per site mthly capacity GCCH New
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,DYN365_CDS_VIRAL,17ab22cd-a0b3-4536-910a-cb6eb12696c0,Common Data Service
Power Pages vTrial for Makers,Power_Pages_vTrial_for_Makers,3f9f06f5-3c31-472c-985f-62d9c10ec167,POWER_PAGES_VTRIAL,6817d093-2d30-4249-8bd6-774f01efa78c,Power Pages vTrial for Makers
@@ -4901,6 +4910,7 @@ SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb2
SharePoint Syntex,Intelligent_Content_Services,f61d4aba-134f-44e9-a2a0-f81a5adb26e4,Intelligent_Content_Services_SPO_type,fd2e7f90-1010-487e-a11b-d2b1ae9651fc,SharePoint Syntex - SPO type
Skype for Business Online (Plan 1),MCOIMP,b8b749f8-a4ef-4887-9539-c95b1eaa5db7,MCOIMP,afc06cb0-b4f4-4473-8286-d644f70d8faf,SKYPE FOR BUSINESS ONLINE (PLAN 1)
Skype for Business Online (Plan 2),MCOSTANDARD,d42c793f-6c78-4f43-92ca-e8f6a02b035f,MCOSTANDARD,0feaeb32-d00e-4d66-bd5a-43b5b83db82c,SKYPE FOR BUSINESS ONLINE (PLAN 2)
+Skype for Business PSTN Calling Domestic Small,MCOPSTN5,d43177b5-475b-4880-92d4-d54c27b5efbd,Skype for Business PSTN Calling Domestic Small,9a0125a5-c8f8-4526-b231-49e2abe0ebce,Skype for Business PSTN Calling Domestic Small
Skype for Business PSTN Domestic and International Calling,MCOPSTN2,d3b4fe1f-9992-4930-8acb-ca6ec609365e,MCOPSTN2,5a10155d-f5c1-411a-a8ec-e99aae125390,DOMESTIC AND INTERNATIONAL CALLING PLAN
Skype for Business PSTN Domestic Calling,MCOPSTN1,0dab259f-bf13-4952-b7f8-7db8f131b28d,MCOPSTN1,4ed3ff63-69d7-4fb7-b984-5aec7f605ca8,DOMESTIC CALLING PLAN
Skype for Business PSTN Domestic Calling (120 Minutes),MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,MCOPSTN5,54a152dc-90de-4996-93d2-bc47e670fc06,DOMESTIC CALLING PLAN
@@ -4965,11 +4975,11 @@ Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb53
Windows 10/11 Enterprise E5 (Original),WIN_ENT_E5,1e7e1070-8ccb-4aca-b470-d7cb538cb07e,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for faculty,WIN10_ENT_A3_FAC,8efbe2f6-106e-442f-97d4-a59aa6037e06,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise A3 for students,WIN10_ENT_A3_STU,d4ef921e-840b-4b48-9a90-ab6698bc7b31,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467-20c943f1122c,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender for Endpoint
@@ -4979,18 +4989,18 @@ Windows 10/11 Enterprise A5 for faculty,WIN10_ENT_A5_FAC,7b1a89a9-5eb9-4cf8-9467
Windows 10/11 Enterprise E3,WIN10_PRO_ENT_SUB,cb10e6cd-9da4-4992-867b-67546b1db821,WIN10_PRO_ENT_SUB,21b439ba-a0ca-424f-a6cc-52f954a5b111,WINDOWS 10 ENTERPRISE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,EXCHANGE FOUNDATION
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,UNIVERSAL PRINT
-Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
+Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,WINDOWS 10 ENTERPRISE (NEW)
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,WINDOWS UPDATE FOR BUSINESS DEPLOYMENT SERVICE
Windows 10/11 Enterprise E3,WIN10_VDA_E3,6a0f6da5-0b87-4190-a6ae-9bb5a2b9546a,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
-Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE,7bf960f6-2cd9-443a-8046-5dbff9558365,Windows Update for Business Deployment Service
Windows 10/11 Enterprise E5,WIN10_VDA_E5,488ba24a-39a9-4473-8ee5-19291e71b002,Windows_Autopatch,9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3,Windows Autopatch
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,EXCHANGE_S_FOUNDATION_GOV,922ba911-5694-4e99-a794-73aed9bfeec8,Exchange Foundation for Government
Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,WINDEFATP,871d91ec-ec1a-452b-a83f-bd76c7d770ef,Microsoft Defender For Endpoint
-Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,"Virtualization Rights for Windows 10 (E3/E5+VDA)",e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
+Windows 10/11 Enterprise E5 Commercial (GCC Compatible),WINE5_GCC_COMPAT,938fd547-d794-42a4-996c-1cc206619580,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10 Enterprise (New)
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,UNIVERSAL_PRINT_01,795f6fe0-cc4d-4773-b050-5dde4dc704c9,Universal Print
Windows 10/11 Enterprise E3 VDA,E3_VDA_only,d13ef257-988a-46f3-8fce-f47484dd4550,Virtualization Rights for Windows 10 (E3/E5+VDA),e7c91390-7625-45be-94e0-e16907e03118,Windows 10/11 Enterprise
@@ -5017,7 +5027,7 @@ Windows 365 Business 2 vCPU 4 GB 64 GB,CPC_B_2C_4RAM_64GB,42e6818f-8966-444b-b7a
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,"Windows 365 Business 2 vCPU, 8 GB, 128 GB"
+Windows 365 Business 2 vCPU 8 GB 128 GB,CPC_B_2C_8RAM_128GB,71f21848-f89b-4aaa-a2dc-780c8e8aac5b,CPC_SS_2,9d2eed2c-b0c0-4a89-940c-bc303444a41b,Windows 365 Business 2 vCPU, 8 GB, 128 GB
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 2 vCPU 8 GB 256 GB,CPC_B_2C_8RAM_256GB,750d9542-a2f8-41c7-8c81-311352173432,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
@@ -5048,14 +5058,14 @@ Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
Windows 365 Business 8 vCPU 32 GB 512 GB,CPC_B_8C_32RAM_512GB,8ee402cd-e6a8-4b67-a411-54d1f37a2049,CPC_B_8C_32RAM_512GB,4229a0b4-7f34-4835-b068-6dc8d10be57c,Windows 365 Business 8 vCPU 32 GB 512 GB
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 512 GB","Windows_365_Business_16_vCPU,_64_GB,_512_GB",93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,"Windows 365 Business 16 vCPU, 64 GB, 512 GB"
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
-"Windows 365 Business 16 vCPU, 64 GB, 1 TB","Windows_365_Business_16_vCPU,_64_GB,_1_TB",24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,"Windows 365 Business 16 vCPU, 64 GB, 1 TB"
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 512 GB,Windows_365_Business_16_vCPU,_64_GB,_512_GB,93d9955a-ec70-44d5-8faa-a194492390f7,CPC_B_16C_64GB_512GB,cbbedc49-52d5-4fd6-82ac-a5bc51634dc3,Windows 365 Business 16 vCPU, 64 GB, 512 GB
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_CUSTOMER_PLAN1,6f23d6a9-adbf-481c-8538-b4c095654487,Microsoft 365 Lighthouse (Plan 1)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,M365_LIGHTHOUSE_PARTNER_PLAN1,d55411c9-cfff-40a9-87c7-240f14df7da5,Microsoft 365 Lighthouse (Plan 2)
+Windows 365 Business 16 vCPU, 64 GB, 1 TB,Windows_365_Business_16_vCPU,_64_GB,_1_TB,24be3cd7-82ca-41a5-94a7-4903373cdcae,CPC_B_16C_64GB_1TB,37c961db-2cfd-4e13-b81e-b0059ce10e34,Windows 365 Business 16 vCPU, 64 GB, 1 TB
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
Windows 365 Enterprise 1 vCPU 2 GB 64 GB,CPC_E_1C_2GB_64GB,0c278af4-c9c1-45de-9f4b-cd929e747a2c,CPC_E_1C_2GB_64GB,86d70dbb-d4c6-4662-ba17-3014204cbb28,Windows 365 Enterprise 1 vCPU 2 GB 64 GB
Windows 365 Enterprise 2 vCPU 4 GB 64 GB,CPC_E_2C_4GB_64GB,7bb14422-3b90-4389-a7be-f1b745fc037f,EXCHANGE_S_FOUNDATION,113feb6c-3fe4-4440-bddc-54d774bf0318,Exchange Foundation
diff --git a/Modules/CippExtensions/Public/Gradient/Get-GradientToken.ps1 b/Modules/CippExtensions/Public/Gradient/Get-GradientToken.ps1
index b4b8023e990b..a944d16b805d 100644
--- a/Modules/CippExtensions/Public/Gradient/Get-GradientToken.ps1
+++ b/Modules/CippExtensions/Public/Gradient/Get-GradientToken.ps1
@@ -4,7 +4,8 @@ function Get-GradientToken {
)
if ($Configuration.vendorKey) {
$null = Connect-AzAccount -Identity
- $partnerApiKey = (Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name 'Gradient' -AsPlainText)
+ $keyvaultname = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
+ $partnerApiKey = (Get-AzKeyVaultSecret -VaultName $keyvaultname -Name 'Gradient' -AsPlainText)
$authorizationToken = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("$($configuration.vendorKey):$($partnerApiKey)"))
$headers = [hashtable]@{
diff --git a/Modules/CippExtensions/Public/Gradient/New-GradientServiceSyncRun.ps1 b/Modules/CippExtensions/Public/Gradient/New-GradientServiceSyncRun.ps1
index 93a421fc3db1..11d039d1ecf5 100644
--- a/Modules/CippExtensions/Public/Gradient/New-GradientServiceSyncRun.ps1
+++ b/Modules/CippExtensions/Public/Gradient/New-GradientServiceSyncRun.ps1
@@ -1,8 +1,6 @@
function New-GradientServiceSyncRun {
- [CmdletBinding()]
- param (
-
- )
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param ()
$Table = Get-CIPPTable -TableName Extensionsconfig
$Configuration = ((Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json).Gradient
diff --git a/Modules/CippExtensions/Public/Halo/Get-HaloToken.ps1 b/Modules/CippExtensions/Public/Halo/Get-HaloToken.ps1
index 5c407c02a5f0..4fad5d783977 100644
--- a/Modules/CippExtensions/Public/Halo/Get-HaloToken.ps1
+++ b/Modules/CippExtensions/Public/Halo/Get-HaloToken.ps1
@@ -9,7 +9,8 @@ function Get-HaloToken {
$Secret = (Get-CIPPAzDataTableEntity @DevSecretsTable -Filter "PartitionKey eq 'HaloPSA' and RowKey eq 'HaloPSA'").APIKey
} else {
$null = Connect-AzAccount -Identity
- $Secret = Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name 'HaloPSA' -AsPlainText
+ $VaultName = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
+ $Secret = Get-AzKeyVaultSecret -VaultName $VaultName -Name 'HaloPSA' -AsPlainText
}
$body = @{
grant_type = 'client_credentials'
@@ -24,4 +25,4 @@ function Get-HaloToken {
} else {
throw 'No Halo configuration'
}
-}
\ No newline at end of file
+}
diff --git a/Modules/CippExtensions/Public/Hudu/Connect-HuduAPI.ps1 b/Modules/CippExtensions/Public/Hudu/Connect-HuduAPI.ps1
index 3117d343ec55..05c2f9b1e78f 100644
--- a/Modules/CippExtensions/Public/Hudu/Connect-HuduAPI.ps1
+++ b/Modules/CippExtensions/Public/Hudu/Connect-HuduAPI.ps1
@@ -8,9 +8,10 @@ function Connect-HuduAPI {
$DevSecretsTable = Get-CIPPTable -tablename 'DevSecrets'
$APIKey = (Get-CIPPAzDataTableEntity @DevSecretsTable -Filter "PartitionKey eq 'Hudu' and RowKey eq 'Hudu'").APIKey
} else {
+ $keyvaultname = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
$null = Connect-AzAccount -Identity
- $APIKey = (Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name 'Hudu' -AsPlainText)
+ $APIKey = (Get-AzKeyVaultSecret -VaultName $keyvaultname -Name 'Hudu' -AsPlainText)
}
New-HuduBaseURL -BaseURL $Configuration.BaseURL
New-HuduAPIKey -ApiKey $APIKey
-}
\ No newline at end of file
+}
diff --git a/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneFieldMapping.ps1 b/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneFieldMapping.ps1
index e88f53ceba9c..8a430f372b0e 100644
--- a/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneFieldMapping.ps1
+++ b/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneFieldMapping.ps1
@@ -102,7 +102,7 @@ function Get-NinjaOneFieldMapping {
} catch {
[System.Collections.Generic.List[object]]$NinjaCustomFieldsNode = @()
- [System.Collections.Generic.List[objecgt]]$NinjaCustomFieldsOrg = @()
+ [System.Collections.Generic.List[object]]$NinjaCustomFieldsOrg = @()
}
$MappingObj = [PSCustomObject]@{
@@ -114,4 +114,4 @@ function Get-NinjaOneFieldMapping {
return $MappingObj
-}
\ No newline at end of file
+}
diff --git a/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneToken.ps1 b/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneToken.ps1
index ba293404b5bd..d7102d7d0e27 100644
--- a/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneToken.ps1
+++ b/Modules/CippExtensions/Public/NinjaOne/Get-NinjaOneToken.ps1
@@ -11,7 +11,8 @@ function Get-NinjaOneToken {
$ClientSecret = (Get-CIPPAzDataTableEntity @DevSecretsTable -Filter "PartitionKey eq 'NinjaOne' and RowKey eq 'NinjaOne'").APIKey
} else {
$null = Connect-AzAccount -Identity
- $ClientSecret = (Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name 'NinjaOne' -AsPlainText)
+ $keyvaultname = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
+ $ClientSecret = (Get-AzKeyVaultSecret -VaultName $keyvaultname -Name 'NinjaOne' -AsPlainText)
}
} else {
$ClientSecret = $ENV:NinjaClientSecret
@@ -37,4 +38,4 @@ function Get-NinjaOneToken {
}
return $token
-}
\ No newline at end of file
+}
diff --git a/Modules/CippExtensions/Public/NinjaOne/Invoke-NinjaOneTenantSync.ps1 b/Modules/CippExtensions/Public/NinjaOne/Invoke-NinjaOneTenantSync.ps1
index 9a3b6949b056..03d1bed97445 100644
--- a/Modules/CippExtensions/Public/NinjaOne/Invoke-NinjaOneTenantSync.ps1
+++ b/Modules/CippExtensions/Public/NinjaOne/Invoke-NinjaOneTenantSync.ps1
@@ -1975,7 +1975,11 @@ function Invoke-NinjaOneTenantSync {
}
)
- $SecureScoreHTML = Get-NinjaInLineBarGraph -Title "Secure Score - $([System.Math]::Round((($CurrentSecureScore.currentScore / $MaxSecureScore) * 100),2))%" -Data $Data -KeyInLine -NoCount -NoSort
+ try {
+ $SecureScoreHTML = Get-NinjaInLineBarGraph -Title "Secure Score - $([System.Math]::Round((($CurrentSecureScore.currentScore / $MaxSecureScore) * 100),2))%" -Data $Data -KeyInLine -NoCount -NoSort
+ } catch {
+ $SecureScoreHTML = "No Secure Score Data Available"
+ }
# Recommended Actions HTML
$RecommendedActionsHTML = $Top5Actions | Select-Object 'Recommended Action', @{n = 'Score Impact'; e = { "+$($_.'Score Impact')%" } }, Category, @{n = 'Link'; e = { '' } } | ConvertTo-Html -As Table -Fragment
diff --git a/Modules/CippExtensions/Public/PwPush/Set-PwPushConfig.ps1 b/Modules/CippExtensions/Public/PwPush/Set-PwPushConfig.ps1
index 1d4e8d03e6a0..82021abb0539 100644
--- a/Modules/CippExtensions/Public/PwPush/Set-PwPushConfig.ps1
+++ b/Modules/CippExtensions/Public/PwPush/Set-PwPushConfig.ps1
@@ -23,7 +23,8 @@ function Set-PwPushConfig {
$ApiKey = (Get-CIPPAzDataTableEntity @DevSecretsTable -Filter "PartitionKey eq 'PWPush' and RowKey eq 'PWPush'").APIKey
} else {
$null = Connect-AzAccount -Identity
- $ApiKey = Get-AzKeyVaultSecret -VaultName $ENV:WEBSITE_DEPLOYMENT_ID -Name 'PWPush' -AsPlainText
+ $VaultName = ($ENV:WEBSITE_DEPLOYMENT_ID -split '-')[0]
+ $ApiKey = Get-AzKeyVaultSecret -VaultName $VaultName -Name 'PWPush' -AsPlainText
}
if (![string]::IsNullOrEmpty($ApiKey)) {
$InitParams.APIKey = $ApiKey
diff --git a/Package.zip b/Package.zip
deleted file mode 100644
index eec32937d667..000000000000
Binary files a/Package.zip and /dev/null differ
diff --git a/PublicScripts/function.json b/PublicScripts/function.json
deleted file mode 100644
index 306b0c51e560..000000000000
--- a/PublicScripts/function.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "bindings": [
- {
- "authLevel": "anonymous",
- "type": "httpTrigger",
- "direction": "in",
- "name": "Request",
- "methods": [
- "get",
- "post"
- ]
- },
- {
- "type": "http",
- "direction": "out",
- "name": "Response"
- }
- ]
-}
\ No newline at end of file
diff --git a/PublicScripts/run.ps1 b/PublicScripts/run.ps1
deleted file mode 100644
index 0dca13ac3c97..000000000000
--- a/PublicScripts/run.ps1
+++ /dev/null
@@ -1,38 +0,0 @@
-using namespace System.Net
-
-# Input bindings are passed in via param block.
-param($Request, $TriggerMetadata)
-
-$APIName = $TriggerMetadata.FunctionName
-Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
-
-# Write to the Azure Functions log stream.
-Write-Host 'PowerShell HTTP trigger function processed a request.'
-
-$Table = Get-CippTable -TableName 'MaintenanceScripts'
-
-if (![string]::IsNullOrEmpty($Request.Query.Guid)) {
- $Filter = "PartitionKey eq 'Maintenance' and RowKey eq '{0}'" -f $Request.Query.Guid
- $ScriptRow = Get-CIPPAzDataTableEntity @Table -Filter $Filter
- if ($ScriptRow) {
- if ($ScriptRow.Timestamp.DateTime -lt (Get-Date).AddMinutes(-5)) {
- $Body = 'Write-Host "Link expired"'
- }
- else {
- $Body = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($ScriptRow.ScriptContent))
- }
- Remove-AzDataTableEntity @Table -Entity $ScriptRow
- }
- else {
- $Body = 'Write-Host "Invalid Script ID"'
- }
-}
-else {
- $Body = 'Write-Host "Script ID is required, generate a link from the Maintenance page"'
-}
-
-# Associate values to output bindings by calling 'Push-OutputBinding'.
-Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
- StatusCode = [HttpStatusCode]::OK
- Body = $body
- })
diff --git a/Scheduler_Billing/function.json b/Scheduler_Billing/function.json
deleted file mode 100644
index d2e7f34face4..000000000000
--- a/Scheduler_Billing/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 0 * * *"
- }
- ]
-}
diff --git a/Scheduler_Billing/run.ps1 b/Scheduler_Billing/run.ps1
deleted file mode 100644
index 4c14defea81b..000000000000
--- a/Scheduler_Billing/run.ps1
+++ /dev/null
@@ -1,22 +0,0 @@
-# Input bindings are passed in via param block.
-param($Timer)
-
-# Get the current universal time in the default string format.
-try {
- Write-LogMessage -API "Scheduler_Billing" -tenant "none" -message "Starting billing processing." -sev Info
-
- $Table = Get-CIPPTable -TableName Extensionsconfig
- $Configuration = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -Depth 10
- foreach ($ConfigItem in $Configuration.psobject.properties.name) {
- switch ($ConfigItem) {
- "Gradient" {
- If ($Configuration.Gradient.enabled -and $Configuration.Gradient.BillingEnabled) {
- New-GradientServiceSyncRun
- }
- }
- }
- }
-}
-catch {
- Write-LogMessage -API "Scheduler_Billing" -tenant "none" -message "Could not start billing processing $($_.Exception.Message)" -sev Error
-}
\ No newline at end of file
diff --git a/Scheduler_Extensions/run.ps1 b/Scheduler_Extensions/run.ps1
deleted file mode 100644
index 58e228ebbe1d..000000000000
--- a/Scheduler_Extensions/run.ps1
+++ /dev/null
@@ -1,14 +0,0 @@
-using namespace System.Net
-
-param($Timer)
-
-$Table = Get-CIPPTable -TableName Extensionsconfig
-
-$Configuration = ((Get-AzDataTableEntity @Table).config | ConvertFrom-Json)
-
-Write-Host 'Started Scheduler for Extensions'
-
-# NinjaOne Extension
-if ($Configuration.NinjaOne.Enabled -eq $True) {
- Invoke-NinjaOneExtensionScheduler
-}
\ No newline at end of file
diff --git a/Scheduler_GetQueue/function.json b/Scheduler_GetQueue/function.json
deleted file mode 100644
index 56e4cf0cfda1..000000000000
--- a/Scheduler_GetQueue/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "schedule": "0 0 * * * *",
- "direction": "in",
- "type": "timerTrigger"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/Scheduler_GetQueue/run.ps1 b/Scheduler_GetQueue/run.ps1
deleted file mode 100644
index f359db7de9c4..000000000000
--- a/Scheduler_GetQueue/run.ps1
+++ /dev/null
@@ -1,56 +0,0 @@
-param($Timer)
-
-$Table = Get-CIPPTable -TableName SchedulerConfig
-$Tenants = Get-CIPPAzDataTableEntity @Table | Where-Object -Property PartitionKey -NE 'WebhookAlert'
-
-$Tasks = foreach ($Tenant in $Tenants) {
- if ($Tenant.tenant -ne 'AllTenants') {
- [pscustomobject]@{
- Tenant = $Tenant.tenant
- Tag = 'SingleTenant'
- TenantID = $Tenant.tenantid
- Type = $Tenant.type
- RowKey = $Tenant.RowKey
- }
- } else {
- Write-Information 'All tenants, doing them all'
- $TenantList = Get-Tenants
- foreach ($t in $TenantList) {
- [pscustomobject]@{
- Tenant = $t.defaultDomainName
- Tag = 'AllTenants'
- TenantID = $t.customerId
- Type = $Tenant.type
- RowKey = $Tenant.RowKey
- }
- }
- }
-}
-
-if (($Tasks | Measure-Object).Count -eq 0) {
- return
-}
-
-$Queue = New-CippQueueEntry -Name 'Scheduler' -TotalTasks ($Tasks | Measure-Object).Count
-
-$Batch = foreach ($Task in $Tasks) {
- [pscustomobject]@{
- Tenant = $task.tenant
- Tenantid = $task.tenantid
- Tag = $task.tag
- Type = $task.type
- QueueId = $Queue.RowKey
- SchedulerRow = $Task.RowKey
- QueueName = '{0} - {1}' -f $Task.Type, $task.tenant
- FunctionName = "Scheduler$($Task.Type)"
- }
-}
-$InputObject = [PSCustomObject]@{
- OrchestratorName = 'SchedulerOrchestrator'
- Batch = @($Batch)
- SkipLog = $true
-}
-#Write-Information ($InputObject | ConvertTo-Json)
-$InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
-Write-Information "Started orchestration with ID = '$InstanceId'"
-#$Orchestrator = New-OrchestrationCheckStatusResponse -Request $Request -InstanceId $InstanceId
diff --git a/Scheduler_GetWebhooks/function.json b/Scheduler_GetWebhooks/function.json
deleted file mode 100644
index f30537d11b34..000000000000
--- a/Scheduler_GetWebhooks/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "schedule": "0 */15 * * * *",
- "direction": "in",
- "type": "timerTrigger"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/Scheduler_GetWebhooks/run.ps1 b/Scheduler_GetWebhooks/run.ps1
deleted file mode 100644
index cef8cfb6d726..000000000000
--- a/Scheduler_GetWebhooks/run.ps1
+++ /dev/null
@@ -1,26 +0,0 @@
-param($Timer)
-
-try {
-
- $webhookTable = Get-CIPPTable -tablename webhookTable
- $Webhooks = Get-CIPPAzDataTableEntity @webhookTable -Property PartitionKey, RowKey
- if (($Webhooks | Measure-Object).Count -eq 0) {
- Write-Host 'No webhook subscriptions found. Exiting.'
- return
- }
- Write-Host 'Processing webhooks'
-
- $InputObject = [PSCustomObject]@{
- OrchestratorName = 'WebhookOrchestrator'
- QueueFunction = @{
- FunctionName = 'GetPendingWebhooks'
- }
- SkipLog = $true
- }
- Write-Host ($InputObject | ConvertTo-Json -Depth 5)
- $InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
- Write-Host "Started orchestration with ID = '$InstanceId'"
-} catch {
- Write-LogMessage -API 'Webhooks' -message 'Error processing webhooks' -sev Error -LogData (Get-CippException -Exception $_)
- Write-Host ( 'Webhook error {0} line {1} - {2}' -f $_.InvocationInfo.ScriptName, $_.InvocationInfo.ScriptLineNumber, $_.Exception.Message)
-}
diff --git a/Scheduler_PollAuditLogs/function.json b/Scheduler_PollAuditLogs/function.json
deleted file mode 100644
index f30537d11b34..000000000000
--- a/Scheduler_PollAuditLogs/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "schedule": "0 */15 * * * *",
- "direction": "in",
- "type": "timerTrigger"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/Scheduler_PollAuditLogs/run.ps1 b/Scheduler_PollAuditLogs/run.ps1
deleted file mode 100644
index 3c7e8668355c..000000000000
--- a/Scheduler_PollAuditLogs/run.ps1
+++ /dev/null
@@ -1,34 +0,0 @@
-param($Timer)
-
-try {
- $ConfigTable = Get-CIPPTable -tablename Config
- $Config = Get-CIPPAzDataTableEntity @ConfigTable -Filter "PartitionKey eq 'OffloadFunctions' and RowKey eq 'OffloadFunctions'"
-
- if ($Config -and $Config.state -eq $true) {
- Write-Host 'Offload functions are enabled. Exiting.'
- return 0
- }
-
- $webhookTable = Get-CIPPTable -tablename webhookTable
- $Webhooks = Get-CIPPAzDataTableEntity @webhookTable -Filter "Version eq '3'" | Where-Object { $_.Resource -match '^Audit' -and $_.Status -ne 'Disabled' }
- if (($Webhooks | Measure-Object).Count -eq 0) {
- Write-Host 'No webhook subscriptions found. Exiting.'
- return
- }
-
- $StartTime = (Get-Date).AddMinutes(-30)
- $EndTime = Get-Date
-
- $Queue = New-CippQueueEntry -Name 'Audit Log Collection' -Reference 'AuditLogCollection' -TotalTasks ($Webhooks | Sort-Object -Property PartitionKey -Unique | Measure-Object).Count
- $Batch = $Webhooks | Sort-Object -Property PartitionKey -Unique | Select-Object @{Name = 'TenantFilter'; Expression = { $_.PartitionKey } }, @{Name = 'QueueId'; Expression = { $Queue.RowKey } }, @{Name = 'FunctionName'; Expression = { 'AuditLogTenant' } }, @{Name = 'StartTime'; Expression = { $StartTime } }, @{Name = 'EndTime'; Expression = { $EndTime } }
- $InputObject = [PSCustomObject]@{
- OrchestratorName = 'AuditLogs'
- Batch = @($Batch)
- SkipLog = $true
- }
- $InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
- Write-Host "Started orchestration with ID = '$InstanceId'"
-} catch {
- Write-LogMessage -API 'Webhooks' -message 'Error processing webhooks' -sev Error -LogData (Get-CippException -Exception $_)
- Write-Host ( 'Webhook error {0} line {1} - {2}' -f $_.InvocationInfo.ScriptName, $_.InvocationInfo.ScriptLineNumber, $_.Exception.Message)
-}
diff --git a/Scheduler_RenewGraphSubscriptions/function.json b/Scheduler_RenewGraphSubscriptions/function.json
deleted file mode 100644
index 114e4c0f7aab..000000000000
--- a/Scheduler_RenewGraphSubscriptions/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 10 * * * *"
- }
- ]
-}
diff --git a/Scheduler_RenewGraphSubscriptions/run.ps1 b/Scheduler_RenewGraphSubscriptions/run.ps1
deleted file mode 100644
index b688e87e8b17..000000000000
--- a/Scheduler_RenewGraphSubscriptions/run.ps1
+++ /dev/null
@@ -1,10 +0,0 @@
-# Input bindings are passed in via param block.
-param($Timer)
-
-# Get the current universal time in the default string format.
-try {
- Write-LogMessage -API "Scheduler_RenewGraphSubscriptions" -tenant "none" -message "Starting Graph Subscription Renewal" -sev Info
- Invoke-CippGraphWebhookRenewal
-} catch {
- Write-LogMessage -API "Scheduler_RenewGraphSubscriptions" -tenant "none" -message "Failed to renew graph subscriptions" -sev Info
-}
\ No newline at end of file
diff --git a/Scheduler_Standards/function.json b/Scheduler_Standards/function.json
deleted file mode 100644
index e071591357a0..000000000000
--- a/Scheduler_Standards/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "schedule": "0 0 */4 * * *",
- "direction": "in",
- "type": "timerTrigger"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/Scheduler_Standards/run.ps1 b/Scheduler_Standards/run.ps1
deleted file mode 100644
index 7466a60f5338..000000000000
--- a/Scheduler_Standards/run.ps1
+++ /dev/null
@@ -1,6 +0,0 @@
-using namespace System.Net
-
-param($Timer)
-Write-LogMessage -API 'Standards' -message 'Starting Standards Schedule' -sev Info
-Invoke-CIPPStandardsRun -tenantfilter 'allTenants'
-Write-LogMessage -API 'Standards' -message 'Launched all standard jobs' -sev Info
\ No newline at end of file
diff --git a/Scheduler_UserTasks/function.json b/Scheduler_UserTasks/function.json
deleted file mode 100644
index f7af84092121..000000000000
--- a/Scheduler_UserTasks/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "schedule": "0 */15 * * * *",
- "direction": "in",
- "type": "timerTrigger"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/Scheduler_UserTasks/run.ps1 b/Scheduler_UserTasks/run.ps1
deleted file mode 100644
index 27b975443797..000000000000
--- a/Scheduler_UserTasks/run.ps1
+++ /dev/null
@@ -1,75 +0,0 @@
-param($Timer)
-
-$Table = Get-CippTable -tablename 'ScheduledTasks'
-$Filter = "TaskState eq 'Planned' or TaskState eq 'Failed - Planned'"
-$tasks = Get-CIPPAzDataTableEntity @Table -Filter $Filter
-$Batch = [System.Collections.Generic.List[object]]::new()
-$TenantList = Get-Tenants -IncludeErrors
-foreach ($task in $tasks) {
- $tenant = $task.Tenant
- $currentUnixTime = [int64](([datetime]::UtcNow) - (Get-Date '1/1/1970')).TotalSeconds
- if ($currentUnixTime -ge $task.ScheduledTime) {
- try {
- $null = Update-AzDataTableEntity @Table -Entity @{
- PartitionKey = $task.PartitionKey
- RowKey = $task.RowKey
- ExecutedTime = "$currentUnixTime"
- TaskState = 'Running'
- }
- $task.Parameters = $task.Parameters | ConvertFrom-Json -AsHashtable
- $task.AdditionalProperties = $task.AdditionalProperties | ConvertFrom-Json
-
- if (!$task.Parameters) { $task.Parameters = @{} }
- $ScheduledCommand = [pscustomobject]@{
- Command = $task.Command
- Parameters = $task.Parameters
- TaskInfo = $task
- FunctionName = 'ExecScheduledCommand'
- }
-
- if ($task.Tenant -eq 'AllTenants') {
- $AllTenantCommands = foreach ($Tenant in $TenantList) {
- $NewParams = $task.Parameters.Clone()
- $NewParams.TenantFilter = $Tenant.defaultDomainName
- [pscustomobject]@{
- Command = $task.Command
- Parameters = $NewParams
- TaskInfo = $task
- FunctionName = 'ExecScheduledCommand'
- }
- }
- $Batch.AddRange($AllTenantCommands)
- } else {
- $ScheduledCommand.Parameters['TenantFilter'] = $task.Tenant
- $Batch.Add($ScheduledCommand)
- }
- } catch {
- $errorMessage = $_.Exception.Message
-
- $null = Update-AzDataTableEntity @Table -Entity @{
- PartitionKey = $task.PartitionKey
- RowKey = $task.RowKey
- Results = "$errorMessage"
- ExecutedTime = "$currentUnixTime"
- TaskState = 'Failed'
- }
- Write-LogMessage -API 'Scheduler_UserTasks' -tenant $tenant -message "Failed to execute task $($task.Name): $errorMessage" -sev Error
- }
- }
-}
-if (($Batch | Measure-Object).Count -gt 0) {
- # Create queue entry
- $Queue = New-CippQueueEntry -Name 'Scheduled Tasks' -TotalTasks ($Batch | Measure-Object).Count
- $QueueId = $Queue.RowKey
- $Batch = $Batch | Select-Object *, @{Name = 'QueueId'; Expression = { $QueueId } }, @{Name = 'QueueName'; Expression = { '{0} - {1}' -f $_.TaskInfo.Name, ($_.TaskInfo.Tenant -ne 'AllTenants' ? $_.TaskInfo.Tenant : $_.Parameters.TenantFilter) } }
-
- $InputObject = [PSCustomObject]@{
- OrchestratorName = 'UserTaskOrchestrator'
- Batch = @($Batch)
- SkipLog = $true
- }
- #Write-Host ($InputObject | ConvertTo-Json -Depth 10)
- $InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 10 -Compress)
-
- Write-Host "Started orchestration with ID = '$InstanceId'"
-}
diff --git a/SendStats/function.json b/SendStats/function.json
deleted file mode 100644
index b47dd4f6ee24..000000000000
--- a/SendStats/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 0 * * *"
- }
- ]
-}
\ No newline at end of file
diff --git a/SendStats/run.ps1 b/SendStats/run.ps1
deleted file mode 100644
index 170e6e7b5bee..000000000000
--- a/SendStats/run.ps1
+++ /dev/null
@@ -1,23 +0,0 @@
-# Input bindings are passed in via param block.
-param($Timer)
-
-#These stats are sent to a central server to help us understand how many tenants are using the product, and how many are using the latest version, this information allows the CIPP team to make decisions about what features to support, and what features to deprecate.
-#We will never ship any data that is related to your instance, all we care about is the number of tenants, and the version of the API you are running, and if you completed setup.
-
-if ($ENV:ApplicationID -ne 'LongApplicationID') {
- $SetupComplete = $true
-}
-$TenantCount = (Get-Tenants).count
-
-Set-Location (Get-Item $PSScriptRoot).Parent.FullName
-$APIVersion = Get-Content 'version_latest.txt' | Out-String
-
-$SendingObject = [PSCustomObject]@{
- rgid = $env:WEBSITE_SITE_NAME
- SetupComplete = $SetupComplete
- RunningVersionAPI = $APIVersion.trim()
- CountOfTotalTenants = $tenantcount
- uid = $env:TenantID
-} | ConvertTo-Json
-
-Invoke-RestMethod -Uri 'https://management.cipp.app/api/stats' -Method POST -Body $SendingObject -ContentType 'application/json'
diff --git a/Tools/Update-LicenseSKUFiles.ps1 b/Tools/Update-LicenseSKUFiles.ps1
new file mode 100644
index 000000000000..5d8e49a766d9
--- /dev/null
+++ b/Tools/Update-LicenseSKUFiles.ps1
@@ -0,0 +1,53 @@
+<#
+.SYNOPSIS
+Updates license SKU files and JSON files in the CIPP project.
+
+.DESCRIPTION
+This script downloads the latest license SKU CSV file from Microsoft and updates the ConversionTable.csv files with the latest license SKU data. It also updates the license SKU data in the CIPP repo JSON files.
+
+.PARAMETER None
+
+.EXAMPLE
+Update-LicenseSKUFiles.ps1
+
+This example runs the script to update the license SKU files and JSON files in the CIPP project.
+
+.NOTES
+Date: 2024-09-02
+Version: 1.0 - Initial script
+
+Needs to be run from the "Tools" folder in the CIPP-API project.
+#>
+
+
+# TODO: Convert this to a GitHub Action
+
+# Download the latest license SKU CSV file from Microsoft. Saved to the TEMP folder to circumvent a bug where "???" is added to the first property name.
+$licenseCsvURL = 'https://download.microsoft.com/download/e/3/e/e3e9faf2-f28b-490a-9ada-c6089a1fc5b0/Product%20names%20and%20service%20plan%20identifiers%20for%20licensing.csv'
+$TempLicenseDataFile = "$ENV:TEMP\LicenseSKUs.csv"
+Invoke-WebRequest -Uri $licenseCsvURL -OutFile $TempLicenseDataFile
+$LicenseDataFile = Get-Item -Path $TempLicenseDataFile
+$LicenseData = Import-Csv -Path $LicenseDataFile.FullName -Encoding utf8BOM
+# Update ConversionTable.csv with the latest license SKU data
+Set-Location $PSScriptRoot
+Set-Location ..
+$ConversionTableFiles = Get-ChildItem -Path *ConversionTable.csv -Recurse -File
+
+foreach ($File in $ConversionTableFiles) {
+ $LicenseData | Export-Csv -Path $File.FullName -NoTypeInformation -Force -Encoding utf8 -UseQuotes Never
+}
+
+
+# Update the license SKU data in the CIPP repo JSON files
+Set-Location $PSScriptRoot
+Set-Location ..
+Set-Location ..
+Set-Location CIPP\src\data
+$LicenseJSONFiles = Get-ChildItem -Path *M365Licenses.json -File
+
+foreach ($File in $LicenseJSONFiles) {
+ ConvertTo-Json -InputObject $LicenseData -Depth 100 | Set-Content -Path $File.FullName -Encoding utf8
+}
+
+# Clean up the temporary license SKU CSV file
+Remove-Item -Path $TempLicenseDataFile -Force
diff --git a/UpdatePermissions/function.json b/UpdatePermissions/function.json
deleted file mode 100644
index 7e97fe568d29..000000000000
--- a/UpdatePermissions/function.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 0 * * *"
- },
- {
- "name": "starter",
- "type": "durableClient",
- "direction": "in"
- }
- ]
-}
diff --git a/UpdatePermissions/run.ps1 b/UpdatePermissions/run.ps1
deleted file mode 100644
index 8f9ca5b8652a..000000000000
--- a/UpdatePermissions/run.ps1
+++ /dev/null
@@ -1,30 +0,0 @@
-# Input bindings are passed in via param block.
-param($Timer)
-
-try {
- $Tenants = Get-Tenants -IncludeAll | Where-Object { $_.customerId -ne $env:TenantID -and $_.Excluded -eq $false }
- $CPVTable = Get-CIPPTable -TableName cpvtenants
- $CPVRows = Get-CIPPAzDataTableEntity @CPVTable
- $ModuleRoot = (Get-Module CIPPCore).ModuleBase
- $SAMManifest = Get-Item -Path "$ModuleRoot\Public\SAMManifest.json"
- $AdditionalPermissions = Get-Item -Path "$ModuleRoot\Public\AdditionalPermissions.json"
- $Tenants = $Tenants | ForEach-Object {
- $CPVRow = $CPVRows | Where-Object -Property Tenant -EQ $_.customerId
- if (!$CPVRow -or $env:ApplicationID -notin $CPVRow.applicationId -or $SAMManifest.LastWriteTime.ToUniversalTime() -gt $CPVRow.Timestamp.DateTime -or $AdditionalPermissions.LastWriteTime.ToUniversalTime() -ge $CPVRow.Timestamp.DateTime -or $CPVRow.Timestamp.DateTime -le (Get-Date).AddDays(-7).ToUniversalTime() -or !$_.defaultDomainName) {
- $_
- }
- }
- $TenantCount = ($Tenants | Measure-Object).Count
- if ($TenantCount -gt 0) {
- $Queue = New-CippQueueEntry -Name 'Update Permissions' -TotalTasks $TenantCount
- $TenantBatch = $Tenants | Select-Object defaultDomainName, customerId, displayName, @{n = 'FunctionName'; exp = { 'UpdatePermissionsQueue' } }, @{n = 'QueueId'; exp = { $Queue.RowKey } }
- $InputObject = [PSCustomObject]@{
- OrchestratorName = 'UpdatePermissionsOrchestrator'
- Batch = @($TenantBatch)
- }
- $InstanceId = Start-NewOrchestration -FunctionName 'CIPPOrchestrator' -InputObject ($InputObject | ConvertTo-Json -Depth 5 -Compress)
- Write-Host "Started permissions orchestration with ID = '$InstanceId'"
- } else {
- Write-Host 'No tenants require permissions update'
- }
-} catch {}
diff --git a/UpdateTokens/function.json b/UpdateTokens/function.json
deleted file mode 100644
index 828a2484ee7d..000000000000
--- a/UpdateTokens/function.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "bindings": [
- {
- "name": "Timer",
- "type": "timerTrigger",
- "direction": "in",
- "schedule": "0 0 0 * * 0"
- }
- ]
-}
\ No newline at end of file
diff --git a/UpdateTokens/run.ps1 b/UpdateTokens/run.ps1
deleted file mode 100644
index ed20d6a67fbf..000000000000
--- a/UpdateTokens/run.ps1
+++ /dev/null
@@ -1,33 +0,0 @@
-# Input bindings are passed in via param block.
-param($Timer)
-
-# Get the current universal time in the default string format.
-$currentUTCtime = (Get-Date).ToUniversalTime()
-
-$Refreshtoken = (Get-GraphToken -ReturnRefresh $true).Refresh_token
-
-if ($env:AzureWebJobsStorage -eq 'UseDevelopmentStorage=true') {
- $Table = Get-CIPPTable -tablename 'DevSecrets'
- $Secret = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'Secret' and RowKey eq 'Secret'"
- if ($Secret) {
- $Secret.RefreshToken = $Refreshtoken
- Add-AzDataTableEntity @Table -Entity $Secret
- } else {
- Write-LogMessage -message 'Could not update refresh token. Will try again in 7 days.' -sev 'CRITICAL'
- }
-} else {
- if ($env:MSI_SECRET) {
- Disable-AzContextAutosave -Scope Process | Out-Null
- $AzSession = Connect-AzAccount -Identity
- }
- $KV = $ENV:WEBSITE_DEPLOYMENT_ID
- if ($Refreshtoken) {
- Set-AzKeyVaultSecret -VaultName $kv -Name 'RefreshToken' -SecretValue (ConvertTo-SecureString -String $Refreshtoken -AsPlainText -Force)
- } else {
- Write-LogMessage -message 'Could not update refresh token. Will try again in 7 days.' -sev 'CRITICAL'
- }
-}
-
-# Write an information log with the current time.
-Write-Host "PowerShell timer trigger function ran! TIME: $currentUTCtime"
-
diff --git a/Z_CIPPQueueTrigger/function.json b/Z_CIPPQueueTrigger/function.json
deleted file mode 100644
index a400b2e81f43..000000000000
--- a/Z_CIPPQueueTrigger/function.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "scriptFile": "../Modules/CippEntrypoints/CippEntrypoints.psm1",
- "entryPoint": "Receive-CippQueueTrigger",
- "bindings": [
- {
- "name": "QueueItem",
- "type": "queueTrigger",
- "direction": "in",
- "queueName": "CIPPGenericQueue"
- },
- {
- "type": "queue",
- "direction": "out",
- "name": "QueueItemOut",
- "queueName": "CIPPGenericQueue"
- }
- ]
-}
diff --git a/host.json b/host.json
index ca55c68073d2..4e9888399363 100644
--- a/host.json
+++ b/host.json
@@ -9,9 +9,6 @@
},
"functionTimeout": "00:10:00",
"extensions": {
- "queues": {
- "maxDequeueCount": 1
- },
"durableTask": {
"maxConcurrentActivityFunctions": 1,
"maxConcurrentOrchestratorFunctions": 1
diff --git a/profile.ps1 b/profile.ps1
index c4f49830181a..173bc71ffb8c 100644
--- a/profile.ps1
+++ b/profile.ps1
@@ -26,7 +26,7 @@
if ($env:ExternalDurablePowerShellSDK -eq $true) {
try {
Import-Module AzureFunctions.PowerShell.Durable.SDK -ErrorAction Stop
- Write-Host 'External Durable SDK enabled'
+ Write-Information 'External Durable SDK enabled'
} catch {
Write-LogMessage -message 'Failed to import module - AzureFunctions.PowerShell.Durable.SDK' -LogData (Get-CippException -Exception $_) -Sev 'debug'
$_.Exception.Message
@@ -39,7 +39,7 @@ try {
try {
if (!$ENV:SetFromProfile) {
- Write-Host "We're reloading from KV"
+ Write-Information "We're reloading from KV"
$Auth = Get-CIPPAuthentication
}
} catch {
@@ -49,16 +49,17 @@ try {
Set-Location -Path $PSScriptRoot
$CurrentVersion = (Get-Content .\version_latest.txt).trim()
$Table = Get-CippTable -tablename 'Version'
-$LastStartup = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'Version' and RowKey eq 'Version'"
-if ($CurrentVersion -ne $LastStartup.Version) {
- Write-Host "Version has changed from $($LastStartup.Version) to $CurrentVersion"
+Write-Information "Function: $($env:WEBSITE_SITE_NAME) Version: $CurrentVersion"
+$LastStartup = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'Version' and RowKey eq '$($env:WEBSITE_SITE_NAME)'"
+if (!$LastStartup -or $CurrentVersion -ne $LastStartup.Version) {
+ Write-Information "Version has changed from $($LastStartup.Version ?? 'None') to $CurrentVersion"
Clear-CippDurables
if ($LastStartup) {
$LastStartup.Version = $CurrentVersion
} else {
$LastStartup = [PSCustomObject]@{
PartitionKey = 'Version'
- RowKey = 'Version'
+ RowKey = $env:WEBSITE_SITE_NAME
Version = $CurrentVersion
}
}
diff --git a/version_latest.txt b/version_latest.txt
index 19b860c1872d..f22d756da39d 100644
--- a/version_latest.txt
+++ b/version_latest.txt
@@ -1 +1 @@
-6.4.0
+6.5.0