+ CIPP has the ability to send alerts to your PSA, Webhook or Email. You can configure
+ these settings under > Tenant Administration > Alert Configuration.
+
+
+
+
+ If you imported baselines, or want to set tenants to your own baseline, you should
+ check out our standards under these settings under > Tenant Administration >
+ Standards.
+
+
+
+
+ If you want to use our integrations, you should set these up under > CIPP >
+ Integrations. Some examples are CSP integrations, Password Pusher, PSA, and more.
+
+
+
+
+ Adding more users to CIPP? you can do this via CIPP > Advanced > Super Admin.
+
+
+
+
+ You can deploy Windows Applications too, directly using intune. We have Chocolately,
+ WinGet, and RMM apps under > Intune > Applications. Some examples are CSP
+ integrations, Password Pusher, PSA, and more.
+
+
+
+
+ Tenants can be grouped, and you can implement custom variables for your tenants under
+ WinGet, and RMM apps under Tenant Administrator > Administration > Tenants.
+
+
+
+
+ Have an enterprise app you want to deploy? Check out our tools{" "}
+ section. This menu also contains useful things such as our geo-ip lookup, and more.
+
+
+
+
+
+
+
+ );
+};
+
+export default CippAlertsStep;
diff --git a/src/components/CippWizard/CippBaselinesStep.jsx b/src/components/CippWizard/CippBaselinesStep.jsx
new file mode 100644
index 000000000000..0343e8a33f1c
--- /dev/null
+++ b/src/components/CippWizard/CippBaselinesStep.jsx
@@ -0,0 +1,105 @@
+import { Alert, Stack, Typography, FormControl, FormLabel, Box } from "@mui/material";
+import CippFormComponent from "../CippComponents/CippFormComponent";
+import { CippWizardStepButtons } from "./CippWizardStepButtons";
+import { CippFormCondition } from "../CippComponents/CippFormCondition";
+
+export const CippBaselinesStep = (props) => {
+ const { formControl, onPreviousStep, onNextStep, currentStep } = props;
+
+ return (
+
+
+
+
+ Baselines are template configurations that can be used as examples for setting up your
+ environment. Don't want to configure these yet? No problem! You can find the templates
+ at Tools - Community Repositories
+
+
+ Downloading these baselines will create templates in your CIPP instance. These templates
+ won't make any changes to your environment, but can be used as examples on how to setup
+ environments. Each template library contains multiple templates,
+
+
+ CIPP Templates by CyberDrain contain several example standards, including low,
+ medium, and high priority standards
+
+
+ JoeyV's Conditional Access Baseline contains a Microsoft approved baseline for
+ Conditional Access, following the Microsoft best practices.
+
+
+ OpenIntuneBaseline contains Intune templates, the baseline is a community driven
+ baseline for Intune, based on CIS, NIST, and more benchmarks. It's considered the
+ leading baseline for Intune.
+
+
+
+
+
+
+ Baseline Configuration
+
+
+
+
+
+
+
+
+ Select baselines to download:
+
+ `${option.Name} (${option.Owner})`,
+ valueField: "FullName",
+ addedFields: {
+ templateRepoBranch: "main",
+ },
+ }}
+ multiple={true}
+ placeholder="Select one or more baselines"
+ />
+
+
+
+
+
+
+ );
+};
+
+export default CippBaselinesStep;
diff --git a/src/components/CippWizard/CippCAForm.jsx b/src/components/CippWizard/CippCAForm.jsx
index b99d69c8e55c..d0ee1a657186 100644
--- a/src/components/CippWizard/CippCAForm.jsx
+++ b/src/components/CippWizard/CippCAForm.jsx
@@ -1,4 +1,4 @@
-import { Grid, Stack } from "@mui/material";
+import { Stack } from "@mui/material";
import { CippWizardStepButtons } from "./CippWizardStepButtons";
import CippJsonView from "../CippFormPages/CippJSONView";
import CippFormComponent from "../CippComponents/CippFormComponent";
@@ -9,7 +9,7 @@ import { useWatch } from "react-hook-form";
export const CippCAForm = (props) => {
const { formControl, onPreviousStep, onNextStep, currentStep } = props;
const values = formControl.getValues();
- const CATemplates = ApiGetCall({ url: "/api/ListCATemplates" });
+ const CATemplates = ApiGetCall({ url: "/api/ListCATemplates", queryKey: "CATemplates" });
const [JSONData, setJSONData] = useState();
const watcher = useWatch({ control: formControl.control, name: "TemplateList" });
useEffect(() => {
@@ -82,6 +82,13 @@ export const CippCAForm = (props) => {
label="Overwrite Existing Policy"
formControl={formControl}
/>
+
+ {
/>
-
+ {
compareType="is"
compareValue="customGroup"
>
-
+ {
return null;
}
return uniquePlaceholders.map((placeholder) => (
-
+
{selectedTenants.map((tenant, idx) => (
{
+ const { formControl, onPreviousStep, onNextStep, currentStep } = props;
+
+ return (
+
+
+ Notification Settings
+
+ Configure your notification settings. These settings will determine how you receive alerts
+ from CIPP. You can test your configuration using the "Send Test Alert" button. Don't want
+ to setup notifications yet? You can skip this step and configure it later via Application
+ Settings - Notifications
+
+ {/* Use the reusable notification form component */}
+
+
+
+ {/* Use the wizard step buttons for navigation */}
+
+
+ );
+};
+
+export default CippNotificationsStep;
diff --git a/src/components/CippWizard/CippPSACredentialsStep.js b/src/components/CippWizard/CippPSACredentialsStep.jsx
similarity index 100%
rename from src/components/CippWizard/CippPSACredentialsStep.js
rename to src/components/CippWizard/CippPSACredentialsStep.jsx
diff --git a/src/components/CippWizard/CippPSASyncOptions.js b/src/components/CippWizard/CippPSASyncOptions.jsx
similarity index 100%
rename from src/components/CippWizard/CippPSASyncOptions.js
rename to src/components/CippWizard/CippPSASyncOptions.jsx
diff --git a/src/components/CippWizard/CippSAMDeploy.jsx b/src/components/CippWizard/CippSAMDeploy.jsx
new file mode 100644
index 000000000000..a38a27bf8af6
--- /dev/null
+++ b/src/components/CippWizard/CippSAMDeploy.jsx
@@ -0,0 +1,133 @@
+import { useEffect, useState } from "react";
+import { Alert, Stack, Box, Link } from "@mui/material";
+import { CIPPM365OAuthButton } from "../CippComponents/CIPPM365OAuthButton";
+import { CippApiResults } from "../CippComponents/CippApiResults";
+import { ApiPostCall } from "../../api/ApiCall";
+import { CippWizardStepButtons } from "./CippWizardStepButtons";
+
+export const CippSAMDeploy = (props) => {
+ const { formControl, currentStep, onPreviousStep, onNextStep } = props;
+ const [authStatus, setAuthStatus] = useState({
+ success: false,
+ error: null,
+ loading: false,
+ });
+
+ // Block next step until SAM app is created
+ formControl.register("SAMWizard", {
+ required: true,
+ });
+
+ // Set SAMWizard = true if auth is successful
+ useEffect(() => {
+ if (authStatus.success) {
+ formControl.setValue("SAMWizard", true);
+ formControl.trigger("SAMWizard");
+ }
+ }, [authStatus, formControl]);
+
+ const createSamApp = ApiPostCall({ urlfromdata: true });
+
+ const handleAuthSuccess = (tokenData) => {
+ setAuthStatus({
+ success: false,
+ error: null,
+ loading: true,
+ });
+
+ createSamApp.mutate({
+ url: "/api/ExecCreateSamApp",
+ data: { access_token: tokenData.accessToken },
+ });
+ };
+
+ const handleAuthError = (error) => {
+ setAuthStatus({
+ success: false,
+ error: error.errorMessage || "Authentication failed",
+ loading: false,
+ });
+ };
+
+ useEffect(() => {
+ if (createSamApp.isSuccess && authStatus.loading && createSamApp.data) {
+ const data = createSamApp.data?.data;
+ if (data.severity === "error") {
+ setAuthStatus({
+ success: false,
+ error: data.message || "Failed to create SAM application",
+ loading: false,
+ });
+ } else if (data.severity === "success") {
+ setAuthStatus({
+ success: true,
+ error: null,
+ loading: false,
+ });
+ }
+ }
+ }, [createSamApp, authStatus]);
+
+ useEffect(() => {
+ if (createSamApp.isError && authStatus.loading) {
+ setAuthStatus({
+ success: false,
+ error: "An error occurred while creating the SAM application",
+ loading: false,
+ });
+ }
+ }, [createSamApp, authStatus]);
+
+ return (
+
+
+ To run this setup you will need the following prerequisites:
+
+ A CIPP Service Account. For more information on how to create a service account, click{" "}
+
+ here
+
+
+
(Temporary) Global Administrator permissions for the CIPP Service Account
+
+ Multi-factor authentication enabled for the CIPP Service Account, with no trusted
+ locations or other exclusions.
+
+
+
+ {authStatus.error && (
+
+ {authStatus.error}
+
+ )}
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CippSAMDeploy;
diff --git a/src/components/CippWizard/CippTenantModeDeploy.jsx b/src/components/CippWizard/CippTenantModeDeploy.jsx
new file mode 100644
index 000000000000..8f8683af405e
--- /dev/null
+++ b/src/components/CippWizard/CippTenantModeDeploy.jsx
@@ -0,0 +1,130 @@
+import { useEffect } from "react";
+import { Stack, Box, Typography, Link } from "@mui/material";
+import { CIPPM365OAuthButton } from "../CippComponents/CIPPM365OAuthButton";
+import { CippApiResults } from "../CippComponents/CippApiResults";
+import { ApiPostCall } from "../../api/ApiCall";
+import { CippWizardStepButtons } from "./CippWizardStepButtons";
+import { CippTenantTable } from "./CippTenantTable";
+
+export const CippTenantModeDeploy = (props) => {
+ const { formControl, currentStep, onPreviousStep, onNextStep } = props;
+
+ formControl.register("GDAPAuth", {
+ required: true,
+ });
+
+ const updateRefreshToken = ApiPostCall({ urlfromdata: true });
+ const addTenant = ApiPostCall({ urlfromdata: true });
+
+ useEffect(() => {
+ if (updateRefreshToken.isSuccess) {
+ formControl.setValue("GDAPAuth", true);
+ formControl.trigger("GDAPAuth");
+ }
+ if (addTenant.isSuccess) {
+ // Reset the form control for the next tenant addition
+ formControl.setValue("GDAPAuth", true);
+ formControl.trigger("GDAPAuth");
+ }
+ }, [updateRefreshToken.isSuccess, formControl, addTenant.isSuccess]);
+
+ return (
+
+
+
+ {/* Partner Tenant (GDAP) */}
+
+
+ Partner Tenant
+
+
+ Using GDAP is recommended for CIPP, however you can also authenticate to individual
+ tenants. It is still highly recommended to connect to your partner tenant first, even if
+ you are not a Microsoft CSP. This allows CIPP to send notifications, perform permission
+ checks, and update permissions when required.
+
+
+ Please remember to log onto a service account dedicated for CIPP. More info? Check out the{" "}
+
+ service account documentation
+
+ .
+
+
+
+
+ {
+ const updatedTokenData = {
+ ...tokenData,
+ tenantMode: "GDAP",
+ };
+ updateRefreshToken.mutate({
+ url: "/api/ExecUpdateRefreshToken",
+ data: updatedTokenData,
+ });
+ }}
+ buttonText="Connect to Partner Tenant (Recommended)"
+ showSuccessAlert={false}
+ />
+
+
+
+
+ {/* Per-Tenant */}
+
+
+ Per-Tenant Authentication
+
+
+ Click the button below to connect to individual tenants. You can authenticate to multiple
+ tenants by repeating this step for each tenant you want to add. Accidentally added the
+ wrong tenant? Use the table below to remove it.
+
+
+
+
+ {
+ const updatedTokenData = {
+ ...tokenData,
+ tenantMode: "perTenant",
+ };
+ addTenant.mutate({
+ url: "/api/ExecAddTenant",
+ data: updatedTokenData,
+ });
+ }}
+ buttonText="Connect to Separate Tenants"
+ showSuccessAlert={false}
+ />
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CippTenantModeDeploy;
diff --git a/src/components/CippWizard/CippTenantStep.jsx b/src/components/CippWizard/CippTenantStep.jsx
index 4d41b814ce1a..90399921d0cd 100644
--- a/src/components/CippWizard/CippTenantStep.jsx
+++ b/src/components/CippWizard/CippTenantStep.jsx
@@ -23,6 +23,7 @@ export const CippTenantStep = (props) => {
formControl={formControl}
allTenants={allTenants}
type={type}
+ preselectedEnabled={true}
/>
{
+ const createDialog = useDialog();
+
+ // Actions formatted as per your guidelines
+ const actions = [
+ {
+ label: "Exclude Tenants",
+ type: "POST",
+ url: `/api/ExecExcludeTenant?AddExclusion=true`,
+ icon: ,
+ data: { value: "customerId" },
+ confirmText: "Are you sure you want to exclude [displayName]?",
+ multiPost: false,
+ condition: (row) => row.displayName !== "*Partner Tenant",
+ },
+ {
+ label: "Include Tenants",
+ type: "POST",
+ url: `/api/ExecExcludeTenant?RemoveExclusion=true`,
+ icon: ,
+ data: { value: "customerId" },
+ confirmText: "Are you sure you want to include [displayName]?",
+ multiPost: false,
+ condition: (row) => row.displayName !== "*Partner Tenant",
+ },
+ {
+ label: "Refresh CPV Permissions",
+ type: "POST",
+ url: `/api/ExecCPVPermissions`,
+ icon: ,
+ data: { tenantFilter: "customerId" },
+ confirmText: "Are you sure you want to refresh the CPV permissions for [displayName]?",
+ multiPost: false,
+ },
+ {
+ label: "Reset CPV Permissions",
+ type: "POST",
+ url: `/api/ExecCPVPermissions?&ResetSP=true`,
+ icon: ,
+ data: { tenantFilter: "customerId" },
+ confirmText:
+ "Are you sure you want to reset the CPV permissions for [displayName]? (This will delete the Service Principal and re-add it.)",
+ multiPost: false,
+ condition: (row) =>
+ row.displayName !== "*Partner Tenant" && row.delegatedPrivilegeStatus !== "directTenant",
+ },
+ {
+ label: "Remove Tenant",
+ type: "POST",
+ url: `/api/ExecRemoveTenant`,
+ icon: ,
+ data: { TenantID: "customerId" },
+ confirmText:
+ "Are you sure you want to remove [displayName]? If this is a Direct Tenant, this will no longer be accessible until you add it via the Setup Wizard.",
+ multiPost: false,
+ condition: (row) => row.displayName !== "*Partner Tenant",
+ },
+ ];
+
+ // Offcanvas details
+ const offCanvas = {
+ extendedInfoFields: [
+ "displayName",
+ "defaultDomainName",
+ "delegatedPrivilegeStatus",
+ "Excluded",
+ "ExcludeDate",
+ "ExcludeUser",
+ ],
+ actions: actions,
+ };
+
+ // Columns for the table
+ const columns = customColumns || [
+ "displayName", // Tenant Name
+ "defaultDomainName", // Default Domain
+ "delegatedPrivilegeStatus", // Delegated Privilege Status
+ "Excluded", // Excluded Status
+ "ExcludeDate", // Exclude Date
+ "ExcludeUser", // Exclude User
+ ];
+
+ // Default filters
+ const defaultFilters = [
+ {
+ filterName: "Included tenants",
+ value: [{ id: "Excluded", value: "No" }],
+ type: "column",
+ },
+ {
+ filterName: "Excluded tenants",
+ value: [{ id: "Excluded", value: "Yes" }],
+ type: "column",
+ },
+ ];
+
+ const filters = customFilters || defaultFilters;
+
+ return (
+ <>
+
+
+
+
+ Force Refresh
+
+ ) : null
+ }
+ tenantInTitle={tenantInTitle}
+ apiUrl="/api/ExecExcludeTenant?ListAll=True"
+ actions={actions}
+ offCanvas={offCanvas}
+ simpleColumns={columns}
+ filters={filters}
+ showTenantSelector={showTenantSelector}
+ showAllTenantsSelector={showAllTenantsSelector}
+ />
+ {showCardButton && !onRefreshButtonClick && (
+
+ )}
+ >
+ );
+};
+
+export default CippTenantTable;
diff --git a/src/components/CippWizard/CippWizard.jsx b/src/components/CippWizard/CippWizard.jsx
index f0cc5f3013b3..b1a5457be67e 100644
--- a/src/components/CippWizard/CippWizard.jsx
+++ b/src/components/CippWizard/CippWizard.jsx
@@ -1,11 +1,29 @@
import { useCallback, useMemo, useState } from "react";
import { Card, CardContent, Container, Stack } from "@mui/material";
-import Grid from "@mui/material/Grid2";
+import { Grid } from "@mui/system";
import { WizardSteps } from "./wizard-steps";
-import { useForm } from "react-hook-form";
+import { useForm, useWatch } from "react-hook-form";
export const CippWizard = (props) => {
const { postUrl, orientation = "horizontal", steps } = props;
+
+ const formControl = useForm({ mode: "onChange", defaultValues: props.initialState });
+ const formWatcher = useWatch({
+ control: formControl.control,
+ });
+
+ const stepsWithVisibility = useMemo(() => {
+ return steps.filter((step) => {
+ if (step.hideStepWhen) {
+ return !step.hideStepWhen(formWatcher);
+ }
+ if (step.showStepWhen) {
+ return step.showStepWhen(formWatcher);
+ }
+ return true;
+ });
+ }, [steps, formWatcher]);
+
const [activeStep, setActiveStep] = useState(0);
const handleBack = useCallback(() => {
setActiveStep((prevState) => (prevState > 0 ? prevState - 1 : prevState));
@@ -14,40 +32,40 @@ export const CippWizard = (props) => {
const handleNext = useCallback(() => {
setActiveStep((prevState) => (prevState < steps.length - 1 ? prevState + 1 : prevState));
}, []);
- const formControl = useForm({ mode: "onChange", defaultValues: props.initialState });
+
const content = useMemo(() => {
- const StepComponent = steps[activeStep].component;
+ const StepComponent = stepsWithVisibility[activeStep].component;
return (
);
- }, [activeStep, handleNext, handleBack, steps, formControl]);
+ }, [activeStep, handleNext, handleBack, stepsWithVisibility, formControl]);
return (
{orientation === "vertical" ? (
-
+
-
+
{content}
@@ -59,7 +77,7 @@ export const CippWizard = (props) => {
postUrl={postUrl}
activeStep={activeStep}
orientation={orientation}
- steps={steps}
+ steps={stepsWithVisibility}
/>
{content}
diff --git a/src/components/CippWizard/CippWizardAppApproval.jsx b/src/components/CippWizard/CippWizardAppApproval.jsx
index a32eef3a32de..ba53800a2cb2 100644
--- a/src/components/CippWizard/CippWizardAppApproval.jsx
+++ b/src/components/CippWizard/CippWizardAppApproval.jsx
@@ -1,51 +1,205 @@
-import { Stack } from "@mui/material";
+import { Stack, Alert } from "@mui/material";
import CippWizardStepButtons from "./CippWizardStepButtons";
import { Grid } from "@mui/system";
import CippFormComponent from "../CippComponents/CippFormComponent";
import { getCippValidator } from "../../utils/get-cipp-validator";
import { CippFormCondition } from "../CippComponents/CippFormCondition";
+import CippPermissionPreview from "../CippComponents/CippPermissionPreview";
+import { useWatch } from "react-hook-form";
+import { CippPropertyListCard } from "../CippCards/CippPropertyListCard";
export const CippWizardAppApproval = (props) => {
const { postUrl, formControl, onPreviousStep, onNextStep, currentStep } = props;
+ // Watch for the selected template to access permissions and type
+ const selectedTemplate = useWatch({
+ control: formControl.control,
+ name: "selectedTemplate",
+ });
+
return (
-
-
-
+
+ {/* Mode Selector */}
+
+
+ {/* Template Mode */}
+
+
+
+ Select an app approval template to deploy. Templates contain predefined permissions that
+ will be applied to the application.
+ getCippValidator(value, "guid"),
+ type="autoComplete"
+ name="selectedTemplate"
+ label="Select App Template"
+ api={{
+ url: "/api/ListAppApprovalTemplates",
+ queryKey: "appApprovalTemplates",
+ labelField: (item) => `${item.TemplateName}`,
+ valueField: "TemplateId",
+ addedField: {
+ AppId: "AppId",
+ AppName: "AppName",
+ AppType: "AppType",
+ GalleryTemplateId: "GalleryTemplateId",
+ GalleryInformation: "GalleryInformation",
+ PermissionSetId: "PermissionSetId",
+ PermissionSetName: "PermissionSetName",
+ Permissions: "Permissions",
+ ApplicationManifest: "ApplicationManifest",
+ },
+ showRefresh: true,
}}
- name="AppId"
+ validators={{ required: "A template is required" }}
formControl={formControl}
+ multiple={false}
/>
-
-
-
+
+ {selectedTemplate?.addedFields?.AppName && (
+
+
+ {(selectedTemplate.addedFields.AppType || "EnterpriseApp") === "EnterpriseApp" ? (
+
+ ) : (selectedTemplate.addedFields.AppType || "EnterpriseApp") ===
+ "ApplicationManifest" ? (
+
+ ) : (
+
+ )}
+
+ )}
+
+
+
+ {/* Manual Mode */}
+
+
+ getCippValidator(value, "guid"),
+ }}
+ name="AppId"
+ formControl={formControl}
+ />
+
+
+
+
+
+
+
+
{
api={{
...api,
tenantFilter: currentTenant ? currentTenant.value : undefined,
- queryKey: `${api.url}-${currentTenant ? currentTenant.value : "default"}`,
+ queryKey: api.queryKey ? api.queryKey.replace('{tenant}', currentTenant ? currentTenant.value : "default") : `${api.url}-${currentTenant ? currentTenant.value : "default"}`,
}}
multiple={type === "single" ? false : true}
disableClearable={true}
diff --git a/src/components/CippWizard/CippWizardAutopilotImport.jsx b/src/components/CippWizard/CippWizardAutopilotImport.jsx
new file mode 100644
index 000000000000..fc7876e34698
--- /dev/null
+++ b/src/components/CippWizard/CippWizardAutopilotImport.jsx
@@ -0,0 +1,483 @@
+import {
+ Button,
+ Link,
+ Stack,
+ Box,
+ Typography,
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ DialogActions,
+ TextField,
+ Alert,
+} from "@mui/material";
+import { Grid } from "@mui/system";
+import { CippWizardStepButtons } from "./CippWizardStepButtons";
+import { CippDataTable } from "../CippTable/CippDataTable";
+import { useWatch } from "react-hook-form";
+import { Delete, FileDownload, Upload, Add } from "@mui/icons-material";
+import { useEffect, useState } from "react";
+import React from "react";
+
+export const CippWizardAutopilotImport = (props) => {
+ const {
+ onNextStep,
+ formControl,
+ currentStep,
+ onPreviousStep,
+ fields,
+ name,
+ nameToCSVMapping,
+ fileName = "template",
+ } = props;
+ const tableData = useWatch({ control: formControl.control, name: name });
+ const [newTableData, setTableData] = useState([]);
+ const fileInputRef = React.useRef(null);
+ const [manualDialogOpen, setManualDialogOpen] = useState(false);
+ const [manualInputs, setManualInputs] = useState([{}]);
+ const inputRefs = React.useRef([]);
+ const [validationErrors, setValidationErrors] = useState([]);
+
+ const handleRemoveItem = (row) => {
+ if (row === undefined) return false;
+ const index = tableData?.findIndex((item) => item === row);
+ const newTableData = [...tableData];
+ newTableData.splice(index, 1);
+ setTableData(newTableData);
+ };
+
+ const handleFileSelect = (event) => {
+ const file = event.target.files[0];
+ if (file) {
+ const reader = new FileReader();
+ reader.onload = (e) => {
+ const text = e.target.result;
+ const lines = text.split('\n');
+ const firstLine = lines[0].split(',').map(header => header.trim());
+
+ // Check if this is a headerless CSV (no recognizable headers)
+ const hasHeaders = firstLine.some(header => {
+ // Check if any header matches our expected field names
+ return fields.some(field =>
+ header === field.propertyName ||
+ header === field.friendlyName ||
+ (field.alternativePropertyNames && field.alternativePropertyNames.includes(header))
+ );
+ });
+
+ let headers, headerMapping;
+
+ if (hasHeaders) {
+ // Normal CSV with headers
+ headers = firstLine;
+
+ // Create mapping for property names and alternative property names
+ headerMapping = {};
+ fields.forEach(field => {
+ // Map primary property name to itself
+ headerMapping[field.propertyName] = field.propertyName;
+ // Map friendly name to property name
+ headerMapping[field.friendlyName] = field.propertyName;
+ // Map alternative property names to the primary property name
+ if (field.alternativePropertyNames) {
+ field.alternativePropertyNames.forEach(altName => {
+ headerMapping[altName] = field.propertyName;
+ });
+ }
+ });
+
+ // Check if all required columns are present (using any of the supported formats)
+ const missingColumns = fields.filter(field => {
+ // Only serial number is required
+ if (field.propertyName !== 'SerialNumber') {
+ return false; // Skip non-required fields
+ }
+
+ const hasPropertyName = headers.includes(field.propertyName);
+ const hasFriendlyName = headers.includes(field.friendlyName);
+ const hasAlternativeName = field.alternativePropertyNames ?
+ field.alternativePropertyNames.some(altName => headers.includes(altName)) : false;
+ return !hasPropertyName && !hasFriendlyName && !hasAlternativeName;
+ });
+
+ if (missingColumns.length > 0) {
+ const missingFormats = missingColumns.map(f => {
+ const formats = [f.propertyName, f.friendlyName];
+ if (f.alternativePropertyNames) {
+ formats.push(...f.alternativePropertyNames);
+ }
+ return `"${formats.join('" or "')}"`;
+ }).join(', ');
+ console.error(`CSV is missing required columns: ${missingFormats}`);
+ return;
+ }
+ } else {
+ // Headerless CSV - assume order: serial, productid, hash
+ headers = ['SerialNumber', 'productKey', 'hardwareHash'];
+ headerMapping = {
+ 'SerialNumber': 'SerialNumber',
+ 'productKey': 'productKey',
+ 'hardwareHash': 'hardwareHash'
+ };
+
+ // Check if we have at least 3 columns for the expected order
+ if (firstLine.length < 3) {
+ console.error('Headerless CSV must have at least 3 columns in order: Serial Number, Product ID, Hardware Hash');
+ return;
+ }
+ }
+
+ const data = lines.slice(hasHeaders ? 1 : 0) // Skip first line only if it has headers
+ .filter(line => line.trim() !== '') // Remove empty lines
+ .map(line => {
+ const values = line.split(',');
+ // Initialize with all fields as empty strings
+ const row = fields.reduce((obj, field) => {
+ obj[field.propertyName] = '';
+ return obj;
+ }, {});
+ // Fill in the values from the CSV
+ headers.forEach((header, i) => {
+ const propertyName = headerMapping[header];
+ if (propertyName) {
+ row[propertyName] = values[i]?.trim() || '';
+ }
+ });
+ return row;
+ });
+
+ setTableData(data);
+ formControl.setValue(name, data, { shouldValidate: true });
+ };
+ reader.readAsText(file);
+ }
+ };
+
+ const handleManualInputChange = (rowIndex, field, value) => {
+ setManualInputs(prev => {
+ const newInputs = [...prev];
+ if (!newInputs[rowIndex]) {
+ newInputs[rowIndex] = {};
+ }
+ newInputs[rowIndex][field] = value;
+ return newInputs;
+ });
+ };
+
+ const handleAddRow = () => {
+ setManualInputs(prev => [...prev, {}]);
+ };
+
+ const validateRows = (rows) => {
+ const errors = [];
+ const seenSerials = new Set();
+ const seenProductKeys = new Set();
+
+ rows.forEach((row, index) => {
+ const serialField = fields.find(f => f.propertyName === 'SerialNumber');
+ const productKeyField = fields.find(f => f.propertyName === 'productKey');
+ const manufacturerField = fields.find(f => f.propertyName === 'oemManufacturerName');
+ const modelField = fields.find(f => f.propertyName === 'modelName');
+ const hardwareHashField = fields.find(f => f.propertyName === 'hardwareHash');
+
+ if (serialField && row[serialField.propertyName] && seenSerials.has(row[serialField.propertyName])) {
+ errors.push(`Row ${index + 1}: Duplicate serial number "${row[serialField.propertyName]}"`);
+ }
+ if (serialField && row[serialField.propertyName]) {
+ seenSerials.add(row[serialField.propertyName]);
+ }
+
+ if (productKeyField && row[productKeyField.propertyName] && seenProductKeys.has(row[productKeyField.propertyName])) {
+ errors.push(`Row ${index + 1}: Duplicate product key "${row[productKeyField.propertyName]}"`);
+ }
+ if (productKeyField && row[productKeyField.propertyName]) {
+ seenProductKeys.add(row[productKeyField.propertyName]);
+ }
+
+ // Validate Product ID length (must be exactly 13 characters)
+ if (productKeyField && row[productKeyField.propertyName] && row[productKeyField.propertyName].length !== 13) {
+ errors.push(`Row ${index + 1}: Product ID must be exactly 13 characters long`);
+ }
+
+ // Validate Serial Number requirements: must have either Manufacturer+Model OR Hardware Hash
+ if (serialField && row[serialField.propertyName] && row[serialField.propertyName].trim() !== '') {
+ const hasManufacturer = manufacturerField && row[manufacturerField.propertyName] && row[manufacturerField.propertyName].trim() !== '';
+ const hasModel = modelField && row[modelField.propertyName] && row[modelField.propertyName].trim() !== '';
+ const hasHardwareHash = hardwareHashField && row[hardwareHashField.propertyName] && row[hardwareHashField.propertyName].trim() !== '';
+
+ const hasManufacturerAndModel = hasManufacturer && hasModel;
+ const hasHash = hasHardwareHash;
+
+ if (!hasManufacturerAndModel && !hasHash) {
+ errors.push(`Row ${index + 1}: Serial Number must be accompanied by either both Manufacturer and Model, or Hardware Hash`);
+ }
+ }
+ });
+
+ setValidationErrors(errors);
+ return errors.length === 0;
+ };
+
+ const handleManualAdd = () => {
+ const newRows = manualInputs.filter(row =>
+ Object.values(row).some(value => value && value.trim() !== '')
+ ).map(row => {
+ // Ensure all fields exist in the row
+ return fields.reduce((obj, field) => {
+ obj[field.propertyName] = row[field.propertyName] || '';
+ return obj;
+ }, {});
+ });
+
+ if (newRows.length === 0) {
+ setManualDialogOpen(false);
+ setManualInputs([{}]);
+ return;
+ }
+
+ if (!validateRows(newRows)) {
+ return;
+ }
+
+ const updatedData = [...tableData, ...newRows];
+ setTableData(updatedData);
+ formControl.setValue(name, updatedData, { shouldValidate: true });
+ setManualInputs([{}]);
+ setManualDialogOpen(false);
+ };
+
+ const handleDialogClose = () => {
+ setManualDialogOpen(false);
+ setManualInputs([{}]);
+ };
+
+ const handleKeyPress = (event, rowIndex) => {
+ const productKeyField = fields.find(f => f.propertyName === 'productKey');
+ if (event.key === 'Enter' && productKeyField && manualInputs[rowIndex]?.[productKeyField.propertyName]) {
+ if (rowIndex === manualInputs.length - 1) {
+ const newRowIndex = manualInputs.length;
+ setManualInputs(prev => [...prev, {}]);
+ // Wait for the next render cycle to set focus
+ setTimeout(() => {
+ const newInput = inputRefs.current[newRowIndex]?.[productKeyField.propertyName];
+ if (newInput) {
+ newInput.focus();
+ }
+ }, 0);
+ }
+ }
+ };
+
+ const handleRemoveRow = (rowIndex) => {
+ setManualInputs(prev => prev.filter((_, index) => index !== rowIndex));
+ };
+
+ useEffect(() => {
+ console.log('Table Data:', newTableData);
+ formControl.setValue(name, newTableData, {
+ shouldValidate: true,
+ });
+ }, [newTableData]);
+
+ // Add effect to validate rows when manualInputs changes
+ useEffect(() => {
+ validateRows(manualInputs);
+ }, [manualInputs]);
+
+ const actions = [
+ {
+ icon: ,
+ label: "Delete Row",
+ confirmText: "Are you sure you want to delete this row?",
+ customFunction: handleRemoveItem,
+ noConfirm: true,
+ },
+ ];
+
+ return (
+
+ f.propertyName)}
+ cardButton={
+
+ f.propertyName).join(",") + "\n")}`}
+ download={`${fileName}.csv`}
+ startIcon={}
+ size="small"
+ >
+ Download Template
+
+
+ }
+ onClick={() => fileInputRef.current?.click()}
+ size="small"
+ >
+ Import from CSV
+
+ }
+ onClick={() => setManualDialogOpen(true)}
+ size="small"
+ >
+ Manual Import
+
+
+ }
+ />
+
+
+ Manual Import
+
+
+ {validationErrors.length > 0 && (
+
+
+ Please fix the following validation errors:
+
+ {validationErrors.map((error, index) => (
+
+ • {error}
+
+ ))}
+
+ )}
+ {manualInputs.map((row, rowIndex) => (
+
+ {/* Row identifier */}
+
+ {rowIndex + 1}
+
+ {fields.map((field) => (
+
+ {
+ if (!inputRefs.current[rowIndex]) {
+ inputRefs.current[rowIndex] = {};
+ }
+ inputRefs.current[rowIndex][field.propertyName] = el;
+ }}
+ label={field.friendlyName}
+ value={row[field.propertyName] || ''}
+ onChange={(e) => handleManualInputChange(rowIndex, field.propertyName, e.target.value)}
+ onKeyDown={(e) => field.propertyName === 'productKey' && handleKeyPress(e, rowIndex)}
+ fullWidth
+ size="small"
+ />
+
+ ))}
+ handleRemoveRow(rowIndex)}
+ disabled={manualInputs.length === 1}
+ sx={{
+ minWidth: '48px',
+ height: '40px',
+ fontSize: '24px',
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ alignSelf: 'center',
+ mr: 2
+ }}
+ color="error"
+ >
+ ×
+
+
+ ))}
+
+ value && value.trim() !== '')}
+ sx={{
+ minWidth: '48px',
+ height: '40px',
+ fontSize: '24px',
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ alignSelf: 'center',
+ mr: 2
+ }}
+ >
+ +
+
+
+
+
+
+ Cancel
+ 0 || !Object.values(manualInputs[manualInputs.length - 1]).some(value => value && value.trim() !== '')}
+ >
+ Add
+
+
+
+
+
+
+ );
+};
diff --git a/src/components/CippWizard/CippWizardAutopilotOptions.jsx b/src/components/CippWizard/CippWizardAutopilotOptions.jsx
index 154eebbab74b..a289a0589c89 100644
--- a/src/components/CippWizard/CippWizardAutopilotOptions.jsx
+++ b/src/components/CippWizard/CippWizardAutopilotOptions.jsx
@@ -1,4 +1,5 @@
-import { Grid, Stack } from "@mui/material";
+import { Stack } from "@mui/material";
+import { Grid } from "@mui/system";
import CippWizardStepButtons from "./CippWizardStepButtons";
import CippFormComponent from "../CippComponents/CippFormComponent";
export const CippWizardAutopilotOptions = (props) => {
@@ -8,7 +9,7 @@ export const CippWizardAutopilotOptions = (props) => {
<>
-
+ {
<>
-
+ {
formControl={formControl}
/>
-
+ {
const [newTableData, setTableData] = useState([]);
const [open, setOpen] = useState(false);
+ // Register form field with validation
+ formControl.register(name, {
+ validate: (value) => Array.isArray(value) && value.length > 0,
+ });
+
const handleRemoveItem = (row) => {
if (row === undefined) return false;
const index = tableData?.findIndex((item) => item === row);
@@ -49,7 +46,9 @@ export const CippWizardCSVImport = (props) => {
};
useEffect(() => {
- formControl.setValue(name, newTableData);
+ formControl.setValue(name, newTableData, {
+ shouldValidate: true,
+ });
}, [newTableData]);
const actions = [
@@ -80,7 +79,7 @@ export const CippWizardCSVImport = (props) => {
{fields.map((field) => (
<>
-
+ {
>
))}
-
+ handleAddItem()}>
Add Item
@@ -109,7 +108,7 @@ export const CippWizardCSVImport = (props) => {
{!manualFields && (
<>
-
+ setOpen(true)}>
Add Item
@@ -120,7 +119,7 @@ export const CippWizardCSVImport = (props) => {
{fields.map((field) => (
-
+ {
/>
);
-};
+};
\ No newline at end of file
diff --git a/src/components/CippWizard/CippWizardConfirmation.js b/src/components/CippWizard/CippWizardConfirmation.js
deleted file mode 100644
index 3e8ae6c78bff..000000000000
--- a/src/components/CippWizard/CippWizardConfirmation.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import { Card, Stack, Grid } from "@mui/material";
-import { PropertyList } from "../property-list";
-import CippWizardStepButtons from "./CippWizardStepButtons";
-import { PropertyListItem } from "../property-list-item";
-import { getCippTranslation } from "../../utils/get-cipp-translation";
-import { getCippFormatting } from "../../utils/get-cipp-formatting";
-
-export const CippWizardConfirmation = (props) => {
- const { postUrl, lastStep, formControl, onPreviousStep, onNextStep, currentStep } = props;
- const formValues = formControl.getValues();
- const formEntries = Object.entries(formValues);
- //remove all entries in "blacklist" from showing on confirmation page
- const blacklist = [
- "selectedOption",
- "GUID",
- "ID",
- "noSubmitButton",
- "RAWJson",
- "TemplateList",
- "addrow",
- ];
-
- const tenantEntry = formEntries.find(([key]) => key === "tenantFilter" || key === "tenant");
- const userEntry = formEntries.find(([key]) =>
- ["user", "userPrincipalName", "username"].includes(key)
- );
- const filteredEntries = formEntries.filter(
- ([key]) =>
- !blacklist.includes(key) &&
- key !== "tenantFilter" &&
- key !== "tenant" &&
- !["user", "userPrincipalName", "username"].includes(key)
- );
-
- const halfIndex = Math.ceil(filteredEntries.length / 2);
- const firstHalf = filteredEntries.slice(0, halfIndex);
- const secondHalf = filteredEntries.slice(halfIndex);
-
- if (tenantEntry) {
- firstHalf.unshift(tenantEntry);
- }
-
- if (userEntry) {
- secondHalf.unshift(userEntry);
- }
-
- return (
-
-
-
-
-
- {firstHalf.map(([key, value]) => {
- const formattedValue = getCippFormatting(value, key);
- const label = getCippTranslation(key);
- return ;
- })}
-
-
-
-
- {secondHalf.map(([key, value]) => {
- const formattedValue = getCippFormatting(value, key);
- const label = getCippTranslation(key);
- return ;
- })}
-
-
-
-
-
-
-
- );
-};
-
-export default CippWizardConfirmation;
diff --git a/src/components/CippWizard/CippWizardConfirmation.jsx b/src/components/CippWizard/CippWizardConfirmation.jsx
new file mode 100644
index 000000000000..b0d497670b43
--- /dev/null
+++ b/src/components/CippWizard/CippWizardConfirmation.jsx
@@ -0,0 +1,110 @@
+import { Card, Stack, Typography } from "@mui/material";
+import { Grid } from "@mui/system";
+import { PropertyList } from "../property-list";
+import { PropertyListItem } from "../property-list-item";
+import CippWizardStepButtons from "./CippWizardStepButtons";
+import { getCippTranslation } from "../../utils/get-cipp-translation";
+import { getCippFormatting } from "../../utils/get-cipp-formatting";
+
+export const CippWizardConfirmation = (props) => {
+ const { postUrl, lastStep, formControl, onPreviousStep, onNextStep, currentStep } = props;
+ const formValues = formControl.getValues();
+ const formEntries = Object.entries(formValues);
+
+ const blacklist = [
+ "selectedOption",
+ "GDAPAuth",
+ "SAMWizard",
+ "GUID",
+ "ID",
+ "noSubmitButton",
+ "RAWJson",
+ "TemplateList",
+ "addrow",
+ ];
+
+ // Filter out null values and undefined values which could be from hidden conditional fields
+ const filteredFormEntries = formEntries.filter(
+ ([_, value]) => value !== null && value !== undefined
+ );
+
+ const tenantEntry = filteredFormEntries.find(
+ ([key]) => key === "tenantFilter" || key === "tenant"
+ );
+ const userEntry = filteredFormEntries.find(([key]) =>
+ ["user", "userPrincipalName", "username"].includes(key)
+ );
+
+ const filteredEntries = formEntries.filter(
+ ([key]) =>
+ !blacklist.includes(key) &&
+ key !== "tenantFilter" &&
+ key !== "tenant" &&
+ !["user", "userPrincipalName", "username"].includes(key)
+ );
+
+ const halfIndex = Math.ceil(filteredEntries.length / 2);
+ const firstHalf = filteredEntries.slice(0, halfIndex);
+ const secondHalf = filteredEntries.slice(halfIndex);
+
+ if (tenantEntry) {
+ firstHalf.unshift(tenantEntry);
+ }
+
+ if (userEntry) {
+ secondHalf.unshift(userEntry);
+ }
+
+ return (
+
+ {firstHalf.length === 0 ? (
+
+
+
+ You've completed the steps in this wizard. Hit submit to save your changes.
+
+
+
+ ) : (
+
+
+
+
+ {firstHalf.map(([key, value]) => (
+
+ ))}
+
+
+
+
+ {secondHalf.map(([key, value]) => (
+
+ ))}
+
+
+
+
+ )}
+
+
+
+ );
+};
+
+export default CippWizardConfirmation;
diff --git a/src/components/CippWizard/CippWizardGroupTemplates.jsx b/src/components/CippWizard/CippWizardGroupTemplates.jsx
index 215d22a0509f..488f97c65950 100644
--- a/src/components/CippWizard/CippWizardGroupTemplates.jsx
+++ b/src/components/CippWizard/CippWizardGroupTemplates.jsx
@@ -19,18 +19,19 @@ export const CippWizardGroupTemplates = (props) => {
];
useEffect(() => {
if (watcher?.value) {
+ console.log(watcher);
formControl.setValue("groupType", watcher.addedFields.groupType);
formControl.setValue("Displayname", watcher.addedFields.Displayname);
formControl.setValue("Description", watcher.addedFields.Description);
formControl.setValue("username", watcher.addedFields.username);
formControl.setValue("allowExternal", watcher.addedFields.allowExternal);
- formControl.setValue("MembershipRules", watcher.addedFields.MembershipRules);
+ formControl.setValue("membershipRules", watcher.addedFields.membershipRules);
}
}, [watcher]);
return (
-
+ {
excludeTenantFilter: true,
url: "/api/ListGroupTemplates",
queryKey: "ListGroupTemplates",
- labelField: (option) => `${option.Displayname} (${option.groupType})`,
+ labelField: (option) =>
+ `${option.Displayname || option.displayName} (${option.groupType})`,
valueField: "GUID",
addedField: {
groupType: "groupType",
- Displayname: "Displayname",
- Description: "Description",
+ Displayname: "displayName",
+ Description: "description",
username: "username",
allowExternal: "allowExternal",
- MembershipRules: "MembershipRules",
+ membershipRules: "membershipRules",
},
+ showRefresh: true,
}}
/>
-
+ {
validators={{ required: "Please select a group type" }}
/>
-
+ {
validators={{ required: "Group display name is required" }}
/>
-
+ {
formControl={formControl}
/>
-
+ {
formControl={formControl}
/>
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
{
const { postUrl, formControl, onPreviousStep, onNextStep, currentStep } = props;
const currentTenant = formControl.watch("tenantFilter");
const selectedUsers = useWatch({ control: formControl.control, name: "user" });
const [showAlert, setShowAlert] = useState(false);
+ const userSettingsDefaults = useSettings().userSettingsDefaults;
+ const disableForwarding = useWatch({ control: formControl.control, name: "disableForwarding" });
useEffect(() => {
- if (selectedUsers.length >= 4) {
+ if (selectedUsers.length >= 3) {
setShowAlert(true);
formControl.setValue("Scheduled.enabled", true);
}
}, [selectedUsers]);
+ useEffect(() => {
+ if (userSettingsDefaults?.offboardingDefaults) {
+ userSettingsDefaults.offboardingDefaults.forEach((setting) => {
+ formControl.setValue(setting.name, setting.value);
+ });
+ }
+ }, [userSettingsDefaults]);
+
+ useEffect(() => {
+ if (disableForwarding) {
+ formControl.setValue("forward", null);
+ formControl.setValue("KeepCopy", false);
+ }
+ }, [disableForwarding, formControl]);
+
return (
-
+
@@ -47,7 +65,7 @@ export const CippWizardOffboarding = (props) => {
/>
@@ -87,6 +105,12 @@ export const CippWizardOffboarding = (props) => {
type="switch"
formControl={formControl}
/>
+ {
-
+
@@ -131,6 +155,7 @@ export const CippWizardOffboarding = (props) => {
dataKey: "Results",
labelField: (option) => `${option.displayName} (${option.userPrincipalName})`,
valueField: "id",
+ queryKey: "Offboarding-Users",
data: {
Endpoint: "users",
manualPagination: true,
@@ -155,6 +180,7 @@ export const CippWizardOffboarding = (props) => {
url: "/api/ListGraphRequest",
dataKey: "Results",
tenantFilter: currentTenant ? currentTenant.value : undefined,
+ queryKey: "Offboarding-Users",
data: {
Endpoint: "users",
manualPagination: true,
@@ -179,6 +205,7 @@ export const CippWizardOffboarding = (props) => {
valueField: "id",
url: "/api/ListGraphRequest",
dataKey: "Results",
+ queryKey: "Offboarding-Users",
data: {
Endpoint: "users",
manualPagination: true,
@@ -194,36 +221,51 @@ export const CippWizardOffboarding = (props) => {
Email Forwarding
`${option.displayName} (${option.userPrincipalName})`,
- valueField: "id",
- url: "/api/ListGraphRequest",
- dataKey: "Results",
- data: {
- Endpoint: "users",
- manualPagination: true,
- $select: "id,userPrincipalName,displayName",
- $count: true,
- $orderby: "displayName",
- $top: 999,
- },
- }}
/>
-
+ field={"disableForwarding"}
+ compareType="isNot"
+ compareValue={true}
+ >
+ `${option.displayName} (${option.userPrincipalName})`,
+ valueField: "id",
+ url: "/api/ListGraphRequest",
+ dataKey: "Results",
+ queryKey: "Offboarding-Users",
+ data: {
+ Endpoint: "users",
+ manualPagination: true,
+ $select: "id,userPrincipalName,displayName",
+ $count: true,
+ $orderby: "displayName",
+ $top: 999,
+ },
+ }}
+ />
+
+
+
{
{showAlert && (
- You have selected more than 3 users. This offboarding must be scheduled.
+ You have selected more than 2 users. This offboarding must be scheduled.
)}
@@ -248,7 +290,7 @@ export const CippWizardOffboarding = (props) => {
-
+ {
compareType="is"
compareValue={true}
>
-
+ Scheduled Offboarding Date {
/>
-
+ Send results to:
-
+
diff --git a/src/components/CippWizard/CippWizardOptionsList.jsx b/src/components/CippWizard/CippWizardOptionsList.jsx
index cea2d3488674..9fe448e6da63 100644
--- a/src/components/CippWizard/CippWizardOptionsList.jsx
+++ b/src/components/CippWizard/CippWizardOptionsList.jsx
@@ -3,10 +3,19 @@ import { useEffect, useState } from "react";
import { CippWizardStepButtons } from "./CippWizardStepButtons";
export const CippWizardOptionsList = (props) => {
- const { onNextStep, options, title, subtext, formControl, currentStep, onPreviousStep } = props;
+ const {
+ onNextStep,
+ options,
+ title,
+ subtext,
+ formControl,
+ currentStep,
+ onPreviousStep,
+ name = "selectedOption",
+ } = props;
const [selectedOption, setSelectedOption] = useState(null);
- // Register the "selectedOption" field in react-hook-form
- formControl.register("selectedOption", {
+ // Register the name field in react-hook-form
+ formControl.register(name, {
required: true,
});
@@ -24,7 +33,7 @@ export const CippWizardOptionsList = (props) => {
const handleOptionClick = (value) => {
setSelectedOption(value); // Visually select the option
- formControl.setValue("selectedOption", value); // Update form value in React Hook Form
+ formControl.setValue(name, value); // Update form value in React Hook Form
formControl.trigger();
};
diff --git a/src/components/CippWizard/CippWizardPage.jsx b/src/components/CippWizard/CippWizardPage.jsx
index e0960bad2a02..ed092bf2ce6b 100644
--- a/src/components/CippWizard/CippWizardPage.jsx
+++ b/src/components/CippWizard/CippWizardPage.jsx
@@ -1,8 +1,8 @@
-import Head from "next/head";
import { Box, Button, Container, Stack, SvgIcon } from "@mui/material";
import { CippWizard } from "./CippWizard";
import { useRouter } from "next/router";
import { ArrowLeftIcon } from "@mui/x-date-pickers";
+import { CippHead } from "../CippComponents/CippHead";
const CippWizardPage = (props) => {
const router = useRouter();
@@ -17,9 +17,7 @@ const CippWizardPage = (props) => {
} = props;
return (
<>
-
- {wizardTitle}
-
+ {
const newData = {};
Object.keys(values).forEach((key) => {
const value = values[key];
- if (replacementBehaviour !== "removeNulls") {
+ // Only add non-null values if removeNulls is specified
+ if (replacementBehaviour !== "removeNulls" || value !== null) {
newData[key] = value;
- } else if (row[value] !== undefined) {
- newData[key] = row[value];
}
});
sendForm.mutate({ url: postUrl, data: newData });
diff --git a/src/components/CippWizard/CustomerForm.jsx b/src/components/CippWizard/CustomerForm.jsx
new file mode 100644
index 000000000000..7eedc7a7e456
--- /dev/null
+++ b/src/components/CippWizard/CustomerForm.jsx
@@ -0,0 +1,86 @@
+import "@mui/material";
+import { Grid } from "@mui/system";
+import CippFormComponent from "../CippComponents/CippFormComponent";
+
+export const CustomerForm = (props) => {
+ const { formControl } = props;
+
+ const fields = [
+ { name: "Domain", label: "Domain", type: "textField", required: true },
+ { name: "CompanyName", label: "Company Name", type: "textField", required: true },
+ { name: "FirstName", label: "First Name", type: "textField", required: true },
+ { name: "LastName", label: "Last Name", type: "textField", required: true },
+ { name: "Email", label: "Email", type: "email", required: true },
+ { name: "PhoneNumber", label: "Phone Number", type: "textField", required: true },
+ { name: "Country", label: "Country", type: "textField", required: true },
+ { name: "City", label: "City", type: "textField", required: true },
+ { name: "State", label: "State", type: "textField", required: true },
+ { name: "AddressLine1", label: "Address Line 1", type: "textField", required: true },
+ { name: "AddressLine2", label: "Address Line 2", type: "textField", required: false },
+ { name: "PostalCode", label: "Postal Code", type: "textField", required: true },
+ ];
+
+ const transformPayload = (formData) => {
+ const payload = {
+ enableGDAPByDefault: false,
+ Id: null,
+ CommerceId: null,
+ CompanyProfile: {
+ TenantId: null,
+ Domain: formData.Domain,
+ CompanyName: formData.CompanyName,
+ Attributes: { ObjectType: "CustomerCompanyProfile" },
+ },
+ BillingProfile: {
+ Id: null,
+ FirstName: formData.FirstName,
+ LastName: formData.LastName,
+ Email: formData.Email,
+ Culture: "EN-US",
+ Language: "En",
+ CompanyName: formData.CompanyName,
+ DefaultAddress: {
+ Country: formData.Country,
+ Region: null,
+ City: formData.City,
+ State: formData.State,
+ AddressLine1: formData.AddressLine1,
+ AddressLine2: formData.AddressLine2,
+ PostalCode: formData.PostalCode,
+ FirstName: formData.FirstName,
+ LastName: formData.LastName,
+ PhoneNumber: formData.PhoneNumber,
+ },
+ Attributes: { ObjectType: "CustomerBillingProfile" },
+ },
+ RelationshipToPartner: "none",
+ AllowDelegatedAccess: null,
+ UserCredentials: null,
+ CustomDomains: null,
+ Attributes: { ObjectType: "Customer" },
+ };
+
+ if (formData.ResellerType === "Tier2" && associatedPartnerId) {
+ payload.AssociatedPartnerId = associatedPartnerId;
+ }
+
+ return payload;
+ };
+
+ return (
+
+ {fields.map((field, index) => (
+
+
+
+ ))}
+
+ );
+};
diff --git a/src/components/CippWizard/wizard-steps.js b/src/components/CippWizard/wizard-steps.js
index 70c2d1e910e2..61e1c84d572c 100644
--- a/src/components/CippWizard/wizard-steps.js
+++ b/src/components/CippWizard/wizard-steps.js
@@ -127,7 +127,9 @@ export const WizardSteps = (props) => {
{steps.map((step) => (
- {step.title}
+
+ {`Step ${steps.indexOf(step) ? steps.indexOf(step) + 1 : 1}`}
+
{step.description}
diff --git a/src/components/ExecutiveReportButton.js b/src/components/ExecutiveReportButton.js
new file mode 100644
index 000000000000..c0fa5088694a
--- /dev/null
+++ b/src/components/ExecutiveReportButton.js
@@ -0,0 +1,2386 @@
+import React, { useState, useMemo } from "react";
+import {
+ Button,
+ Tooltip,
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ DialogActions,
+ Box,
+ Typography,
+ FormControlLabel,
+ Switch,
+ Grid,
+ Paper,
+ IconButton,
+ Divider,
+} from "@mui/material";
+import { PictureAsPdf, Visibility, Download, Close, Settings } from "@mui/icons-material";
+import {
+ Document,
+ Page,
+ Text,
+ View,
+ StyleSheet,
+ PDFDownloadLink,
+ PDFViewer,
+ Image,
+ Svg,
+ Path,
+ Circle,
+ Line,
+ Rect,
+} from "@react-pdf/renderer";
+import { useSettings } from "../hooks/use-settings";
+import { useSecureScore } from "../hooks/use-securescore";
+import { ApiGetCall } from "../api/ApiCall";
+
+// PRODUCTION-GRADE PDF SYSTEM WITH CONDITIONAL RENDERING
+const ExecutiveReportDocument = ({
+ tenantName,
+ userStats,
+ brandingSettings,
+ secureScoreData,
+ licensingData,
+ deviceData,
+ conditionalAccessData,
+ standardsCompareData,
+ sectionConfig = {
+ executiveSummary: true,
+ securityStandards: true,
+ secureScore: true,
+ licenseManagement: true,
+ deviceManagement: true,
+ conditionalAccess: true,
+ infographics: true,
+ },
+}) => {
+ const currentDate = new Date().toLocaleDateString("en-US", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ });
+ const brandColor = brandingSettings?.colour || "#F77F00";
+
+ // ENTERPRISE DESIGN SYSTEM - JOBS/RAMS/IVE PRINCIPLES
+ const styles = StyleSheet.create({
+ // FOUNDATION - CONSISTENT STATE OWNERSHIP (FLORENCE)
+ page: {
+ flexDirection: "column",
+ backgroundColor: "#FFFFFF",
+ fontFamily: "Helvetica",
+ fontSize: 10,
+ lineHeight: 1.4,
+ color: "#2D3748",
+ padding: 40, // Consistent base padding
+ },
+
+ // COVER PAGE - PROPORTIONAL & INTENTIONAL (JOBS/RAMS/IVE)
+ coverPage: {
+ flexDirection: "column",
+ backgroundColor: "#FFFFFF",
+ fontFamily: "Helvetica",
+ padding: 60,
+ justifyContent: "space-between",
+ minHeight: "100%",
+ },
+
+ coverHeader: {
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "center",
+ marginBottom: 80,
+ },
+
+ logoSection: {
+ flexDirection: "row",
+ alignItems: "center",
+ },
+
+ logo: {
+ height: 100,
+ marginRight: 12,
+ },
+
+ headerLogo: {
+ height: 30,
+ },
+
+ brandName: {
+ fontSize: 12,
+ fontWeight: "bold",
+ color: brandColor,
+ letterSpacing: 1,
+ textTransform: "uppercase",
+ },
+
+ dateStamp: {
+ fontSize: 9,
+ color: "#000000",
+ textTransform: "uppercase",
+ letterSpacing: 0.5,
+ },
+
+ // MODERN HERO SECTION
+ coverHero: {
+ flex: 1,
+ justifyContent: "flex-start",
+ alignItems: "flex-start",
+ paddingTop: 40,
+ },
+
+ coverLabel: {
+ backgroundColor: brandColor,
+ color: "#FFFFFF",
+ fontSize: 10,
+ fontWeight: "bold",
+ textTransform: "uppercase",
+ letterSpacing: 1,
+ paddingHorizontal: 16,
+ paddingVertical: 8,
+ borderRadius: 20,
+ marginBottom: 30,
+ alignSelf: "flex-start",
+ },
+
+ mainTitle: {
+ fontSize: 48,
+ fontWeight: "bold",
+ color: "#1A202C",
+ lineHeight: 1.1,
+ marginBottom: 20,
+ letterSpacing: -1,
+ textTransform: "uppercase",
+ },
+
+ titleAccent: {
+ color: brandColor,
+ },
+
+ subtitle: {
+ fontSize: 14,
+ color: "#000000",
+ fontWeight: "normal",
+ lineHeight: 1.5,
+ marginBottom: 40,
+ maxWidth: 400,
+ },
+
+ tenantCard: {
+ backgroundColor: "transparent",
+ padding: 0,
+ maxWidth: 400,
+ },
+
+ tenantName: {
+ fontSize: 18,
+ fontWeight: "bold",
+ color: "#000000",
+ marginBottom: 8,
+ textAlign: "center",
+ },
+
+ tenantMeta: {
+ fontSize: 11,
+ color: "#333333",
+ textAlign: "center",
+ },
+
+ coverFooter: {
+ textAlign: "center",
+ marginTop: 60,
+ },
+
+ confidential: {
+ fontSize: 9,
+ color: "#A0AEC0",
+ textTransform: "uppercase",
+ letterSpacing: 1,
+ },
+
+ // CONTENT PAGES - MODULAR COMPOSITION (FROST)
+ pageHeader: {
+ borderBottom: `1px solid ${brandColor}`,
+ paddingBottom: 12,
+ marginBottom: 24,
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "flex-start",
+ pageBreakAfter: "avoid",
+ breakAfter: "avoid",
+ },
+
+ pageHeaderContent: {
+ flex: 1,
+ },
+
+ pageTitle: {
+ fontSize: 20,
+ fontWeight: "bold",
+ color: "#1A202C",
+ marginBottom: 8,
+ },
+
+ pageSubtitle: {
+ fontSize: 11,
+ color: "#4A5568",
+ fontWeight: "normal",
+ },
+
+ // SECTIONS - REPEATABLE PATTERNS (FROST)
+ section: {
+ marginBottom: 24,
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ },
+
+ sectionTitle: {
+ fontSize: 14,
+ fontWeight: "bold",
+ color: brandColor,
+ marginBottom: 12,
+ pageBreakAfter: "avoid",
+ breakAfter: "avoid",
+ orphans: 3,
+ widows: 3,
+ },
+
+ bodyText: {
+ fontSize: 9,
+ color: "#2D3748",
+ lineHeight: 1.5,
+ marginBottom: 12,
+ textAlign: "justify",
+ },
+
+ // STATS GRID - PERFECT ALIGNMENT (SPOOL)
+ statsGrid: {
+ flexDirection: "row",
+ gap: 12,
+ marginBottom: 20,
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ },
+
+ statCard: {
+ flex: 1,
+ backgroundColor: "#FFFFFF",
+ border: `1px solid #E2E8F0`,
+ borderRadius: 6,
+ padding: 16,
+ alignItems: "center",
+ borderTop: `3px solid ${brandColor}`,
+ },
+
+ statNumber: {
+ fontSize: 16,
+ fontWeight: "bold",
+ color: brandColor,
+ marginBottom: 4,
+ },
+
+ statLabel: {
+ fontSize: 7,
+ color: "#4A5568",
+ textTransform: "uppercase",
+ letterSpacing: 0.5,
+ textAlign: "center",
+ fontWeight: "bold",
+ },
+
+ // COMPLIANCE BARS - VISUAL CONFIDENCE (SPOOL)
+ complianceList: {
+ gap: 8,
+ },
+
+ complianceItem: {
+ flexDirection: "row",
+ alignItems: "center",
+ backgroundColor: "#FFFFFF",
+ padding: 10,
+ borderRadius: 4,
+ border: `1px solid #F0F0F0`,
+ },
+
+ complianceLabel: {
+ fontSize: 8,
+ color: "#2D3748",
+ width: 80,
+ fontWeight: "bold",
+ },
+
+ complianceBarContainer: {
+ flex: 1,
+ height: 6,
+ backgroundColor: "#E2E8F0",
+ marginHorizontal: 10,
+ borderRadius: 3,
+ overflow: "hidden",
+ },
+
+ complianceBar: {
+ height: 6,
+ backgroundColor: brandColor,
+ borderRadius: 3,
+ },
+
+ complianceValue: {
+ fontSize: 8,
+ color: "#2D3748",
+ width: 25,
+ textAlign: "right",
+ fontWeight: "bold",
+ },
+
+ // SECURE SCORE CARDS - ENTERPRISE GRADE
+ scoreGrid: {
+ flexDirection: "row",
+ gap: 12,
+ marginBottom: 20,
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ },
+
+ scoreCard: {
+ flex: 1,
+ backgroundColor: "#FFFFFF",
+ border: `1px solid #E2E8F0`,
+ borderRadius: 6,
+ padding: 16,
+ alignItems: "center",
+ borderTop: `3px solid ${brandColor}`,
+ },
+
+ scoreNumber: {
+ fontSize: 20,
+ fontWeight: "bold",
+ color: brandColor,
+ marginBottom: 8,
+ },
+
+ scoreLabel: {
+ fontSize: 7,
+ color: "#4A5568",
+ textTransform: "uppercase",
+ letterSpacing: 0.5,
+ textAlign: "center",
+ fontWeight: "bold",
+ },
+
+ // CHART AREA - BROWSER CONSTRAINTS (RAUCH)
+ chartContainer: {
+ backgroundColor: "#FFFFFF",
+ border: `1px solid #E2E8F0`,
+ borderRadius: 6,
+ padding: 16,
+ marginBottom: 20,
+ alignItems: "center",
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ },
+
+ chartTitle: {
+ fontSize: 10,
+ fontWeight: "bold",
+ color: "#2D3748",
+ marginBottom: 12,
+ },
+
+ chartData: {
+ fontSize: 9,
+ color: "#4A5568",
+ textAlign: "center",
+ lineHeight: 1.4,
+ },
+
+ // CONTROLS TABLE - HIGH PERFORMANCE (RAUCH)
+ controlsTable: {
+ border: `1px solid #E2E8F0`,
+ borderRadius: 6,
+ overflow: "hidden",
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ },
+
+ tableHeader: {
+ flexDirection: "row",
+ backgroundColor: brandColor,
+ paddingVertical: 10,
+ paddingHorizontal: 12,
+ },
+
+ headerCell: {
+ fontSize: 7,
+ fontWeight: "bold",
+ color: "#FFFFFF",
+ textTransform: "uppercase",
+ letterSpacing: 0.5,
+ },
+
+ headerName: {
+ width: 100,
+ },
+
+ headerDesc: {
+ flex: 1,
+ marginLeft: 12,
+ },
+
+ headerStatus: {
+ width: 60,
+ textAlign: "center",
+ marginLeft: 12,
+ },
+
+ tableRow: {
+ flexDirection: "row",
+ borderBottomWidth: 1,
+ borderBottomColor: "#F7FAFC",
+ paddingVertical: 8,
+ paddingHorizontal: 12,
+ alignItems: "center",
+ },
+
+ cellName: {
+ width: 100,
+ fontSize: 8,
+ fontWeight: "bold",
+ color: "#2D3748",
+ },
+
+ cellDesc: {
+ flex: 1,
+ marginLeft: 12,
+ fontSize: 7,
+ color: "#4A5568",
+ lineHeight: 1.3,
+ },
+
+ cellStatus: {
+ width: 60,
+ marginLeft: 12,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+
+ // STATUS TEXT - SIMPLE APPROACH
+ statusText: {
+ fontSize: 7,
+ fontWeight: "bold",
+ textAlign: "center",
+ textTransform: "uppercase",
+ letterSpacing: 0.3,
+ },
+
+ statusCompliant: {
+ color: "#22543D",
+ },
+
+ statusPartial: {
+ color: "#744210",
+ },
+
+ statusReview: {
+ color: "#742A2A",
+ },
+
+ // INFO BOXES - CONSISTENT PATTERNS (FROST)
+ infoBox: {
+ backgroundColor: "#FFFFFF",
+ border: `1px solid #E2E8F0`,
+ borderLeft: `4px solid ${brandColor}`,
+ borderRadius: 4,
+ padding: 12,
+ marginBottom: 12,
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ orphans: 3,
+ widows: 3,
+ },
+
+ infoTitle: {
+ fontSize: 9,
+ fontWeight: "bold",
+ color: "#2D3748",
+ marginBottom: 6,
+ },
+
+ infoText: {
+ fontSize: 8,
+ color: "#4A5568",
+ lineHeight: 1.4,
+ },
+
+ // RECOMMENDATIONS - SCALABLE SECTIONS (FROST)
+ recommendationsList: {
+ gap: 8,
+ pageBreakInside: "avoid",
+ breakInside: "avoid",
+ },
+
+ recommendationItem: {
+ flexDirection: "row",
+ alignItems: "flex-start",
+ },
+
+ recommendationBullet: {
+ fontSize: 8,
+ color: brandColor,
+ marginRight: 6,
+ fontWeight: "bold",
+ marginTop: 1,
+ },
+
+ recommendationText: {
+ fontSize: 8,
+ color: "#2D3748",
+ lineHeight: 1.4,
+ flex: 1,
+ },
+
+ recommendationLabel: {
+ fontWeight: "bold",
+ },
+
+ // FOOTER - DETERMINISTIC PAGINATION (FLORENCE)
+ footer: {
+ position: "absolute",
+ bottom: 20,
+ left: 40,
+ right: 40,
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "center",
+ borderTop: "1px solid #E2E8F0",
+ paddingTop: 8,
+ },
+
+ footerText: {
+ fontSize: 7,
+ color: "#718096",
+ },
+
+ pageNumber: {
+ fontSize: 7,
+ color: "#718096",
+ fontWeight: "bold",
+ },
+
+ // BLACK STATISTIC PAGES - MODERN DESIGN
+ statPage: {
+ flexDirection: "column",
+ backgroundColor: "#000000",
+ fontFamily: "Helvetica",
+ padding: 0,
+ justifyContent: "center",
+ alignItems: "flex-start",
+ minHeight: "100%",
+ position: "relative",
+ },
+
+ statOverlay: {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ padding: 60,
+ justifyContent: "center",
+ alignItems: "flex-start",
+ zIndex: 10,
+ backgroundColor: "rgba(0, 0, 0, 0.7)",
+ },
+
+ statMainText: {
+ fontSize: 18,
+ color: "#FFFFFF",
+ fontWeight: "bold",
+ lineHeight: 1.4,
+ marginBottom: 8,
+ },
+
+ statHighlight: {
+ fontSize: 72,
+ color: brandColor,
+ fontWeight: "900",
+ lineHeight: 1,
+ marginBottom: 8,
+ },
+
+ statBackground: {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ opacity: 0.5,
+ },
+
+ statSubText: {
+ fontSize: 14,
+ color: "#FFFFFF",
+ fontWeight: "bold",
+ lineHeight: 1.3,
+ marginBottom: 40,
+ },
+
+ statFooterText: {
+ position: "absolute",
+ bottom: 60,
+ right: 60,
+ fontSize: 12,
+ color: "#FFFFFF",
+ fontWeight: "bold",
+ textAlign: "right",
+ lineHeight: 1.3,
+ },
+
+ statBrandFooter: {
+ position: "absolute",
+ bottom: 60,
+ left: 60,
+ fontSize: 8,
+ color: "#666666",
+ textTransform: "uppercase",
+ letterSpacing: 1,
+ },
+
+ // CENTERED IMAGE STYLE
+ centeredImage: {
+ width: 300,
+ height: 200,
+ alignSelf: "center",
+ marginVertical: 20,
+ borderRadius: 8,
+ },
+
+ // SVG CHART STYLES
+ svgChartContainer: {
+ alignItems: "center",
+ marginVertical: 12,
+ },
+
+ svgChart: {
+ width: 400,
+ height: 200,
+ marginBottom: 8,
+ },
+
+ chartSummaryText: {
+ fontSize: 8,
+ fontWeight: "bold",
+ color: brandColor,
+ textAlign: "center",
+ marginTop: 8,
+ },
+ });
+
+ // PROCESS REAL STANDARDS DATA
+ const processStandardsData = (apiData) => {
+ // Try to fetch standards data dynamically
+ let standardsData = null;
+ try {
+ standardsData = require("../data/standards.json");
+ } catch (error) {}
+
+ if (!apiData || !Array.isArray(apiData) || apiData.length === 0) {
+ return [];
+ }
+
+ const processedStandards = [];
+ const tenantData = apiData[0]; // Get the first tenant's data
+
+ // Process each standard from the API response
+ Object.keys(tenantData).forEach((key) => {
+ if (key.startsWith("standards.") && key !== "tenantFilter") {
+ const standardKey = key;
+ const standardValue = tenantData[key];
+ const standardDef = standardsData?.find((std) => std.name === standardKey);
+
+ if (standardDef) {
+ // Determine compliance status
+ let status = "Review";
+ if (standardValue && typeof standardValue === "object" && standardValue.Value === true) {
+ status = "Compliant";
+ } else if (standardValue && standardValue.Value === true) {
+ status = "Compliant";
+ }
+ // Get tags for display - fix the tags access
+ const tags =
+ standardDef.tag && Array.isArray(standardDef.tag) && standardDef.tag.length > 0
+ ? standardDef.tag.slice(0, 2).join(", ") // Show first 2 tags
+ : "No tags";
+ processedStandards.push({
+ name: standardDef.label,
+ description:
+ standardDef.executiveText || standardDef.helpText || "No description available",
+ status: status,
+ tags: tags,
+ });
+ } else {
+ // If no definition found, still add it with basic info
+ let status = "Review";
+ if (standardValue && typeof standardValue === "object" && standardValue.Value === true) {
+ status = "Compliant";
+ } else if (standardValue && standardValue.Value === true) {
+ status = "Compliant";
+ }
+
+ // Create a proper name from the key
+ const displayName = standardKey
+ .replace("standards.", "")
+ .replace(/([A-Z])/g, " $1") // Add space before capital letters
+ .replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter
+ .trim();
+
+ processedStandards.push({
+ name: displayName,
+ description: "Security standard implementation",
+ status: status,
+ tags: "No tags",
+ });
+ }
+ }
+ });
+
+ return processedStandards;
+ };
+
+ let securityControls = processStandardsData(standardsCompareData);
+
+ const getBadgeStyle = (status) => {
+ switch (status) {
+ case "Compliant":
+ return [styles.statusText, styles.statusCompliant];
+ case "Partial":
+ return [styles.statusText, styles.statusPartial];
+ case "Review":
+ case "Review Required":
+ return [styles.statusText, styles.statusReview];
+ default:
+ return styles.statusText;
+ }
+ };
+
+ return (
+
+ {/* COVER PAGE - JOBS/RAMS/IVE PERFECTION */}
+
+
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+ {currentDate}
+
+
+
+ SECURITY ASSESSMENT
+
+
+ Executive{"\n"}
+ Summary
+
+
+
+ Security & Compliance Assessment for {tenantName || "your organization"}
+
+
+
+ {tenantName || "Organization Name"}
+
+
+
+
+ Confidential & Proprietary
+
+
+
+ {/* EXECUTIVE SUMMARY - MODULAR COMPOSITION (FROST) */}
+ {sectionConfig.executiveSummary && (
+
+
+
+ Executive Summary
+
+ Strategic overview of your Microsoft 365 security posture
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+
+
+
+ This security assessment for{" "}
+ {tenantName || "your organization"}{" "}
+ provides a clear picture of your organization's cybersecurity posture and readiness
+ against modern threats. We've evaluated your current security measures against
+ industry best practices to identify strengths and opportunities for improvement.
+
+
+
+ Our assessment follows globally recognized security standards to ensure your
+ organization meets regulatory requirements and industry benchmarks. This approach
+ helps protect your business assets, maintain customer trust, and reduce operational
+ risks from cyber threats.
+
+
+
+
+ Environment Overview
+
+
+
+ {userStats?.licensedUsers || "0"}
+ Licensed Users
+
+
+ {userStats?.unlicensedUsers || "0"}
+ Unlicensed Users
+
+
+ {userStats?.guests || "0"}
+ Guest Users
+
+
+ {userStats?.globalAdmins || "0"}
+ Global Admins
+
+
+
+
+
+ `Page ${pageNumber} of ${totalPages}`}
+ />
+
+
+ )}
+
+ {/* STATISTIC PAGE 1 - CHAPTER SPLITTER */}
+ {sectionConfig.infographics && (
+
+
+
+ 83%
+
+ of organizations experienced{"\n"}
+ more than one cyberattack
+ {"\n"}
+ in the past year
+
+
+
+ Proactive security prevents{"\n"}
+ repeated attacks
+
+
+ )}
+
+ {/* SECURITY CONTROLS - Only show if standards data is available and enabled */}
+ {sectionConfig.securityStandards &&
+ (() => {
+ return securityControls && securityControls.length > 0;
+ })() && (
+
+
+
+ Security Standards Assessment
+
+ Detailed evaluation of implemented security standards
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+
+
+
+ Your security standards have been carefully evaluated against industry best
+ practices to protect your business from cyber threats while ensuring smooth daily
+ operations. These standards help maintain business continuity, protect sensitive
+ data, and meet regulatory requirements that are essential for your industry.
+
+
+
+
+ Security Standards Status
+
+
+
+ Standard
+ Description
+ Tags
+
+ Status
+
+
+
+ {securityControls.map((control, index) => (
+
+
+ {control.name}
+
+
+ {control.description}
+
+
+ {(() => {
+ if (typeof control.tags === "object") {
+ console.log(
+ "DEBUG: control.tags is an object:",
+ control.tags,
+ "for control:",
+ control.name
+ );
+ }
+ return control.tags;
+ })()}
+
+
+ {control.status}
+
+
+ ))}
+
+
+
+
+ Key Recommendations
+
+
+
+ •
+
+ Immediate Actions: Address
+ standards marked as "Review" to enhance security posture
+
+
+
+ •
+
+ Compliance: Ensure all security
+ standards are properly implemented and maintained
+
+
+
+ •
+
+ Monitoring: Establish regular
+ review cycles for all security standards
+
+
+
+ •
+
+ Training: Implement security
+ awareness programs to reduce human risk factors
+
+
+
+
+
+
+ `Page ${pageNumber} of ${totalPages}`}
+ />
+
+
+ )}
+
+ {/* STATISTIC PAGE 2 - CHAPTER SPLITTER - Only show if secure score data is available and enabled */}
+ {sectionConfig.infographics &&
+ sectionConfig.secureScore &&
+ secureScoreData &&
+ secureScoreData?.isSuccess &&
+ secureScoreData?.translatedData && (
+
+
+
+ 95%
+
+ of successful cyber attacks{"\n"}
+ could have been prevented with{"\n"}
+ proactive security measures
+
+
+
+ Your security resilience is{"\n"}
+ our primary mission
+
+
+ )}
+
+ {/* MICROSOFT SECURE SCORE - DEDICATED PAGE - Only show if secure score data is available and enabled */}
+ {sectionConfig.secureScore &&
+ secureScoreData &&
+ secureScoreData?.isSuccess &&
+ secureScoreData?.translatedData && (
+
+
+
+ Microsoft Secure Score
+
+ Comprehensive security posture measurement and benchmarking
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+
+
+
+ Microsoft Secure Score measures how well your organization is protected against
+ cyber threats. This score reflects the effectiveness of your current security
+ measures and helps identify areas where additional protection could strengthen your
+ business resilience.
+
+
+
+
+ Score Comparison
+
+
+
+
+ {secureScoreData?.translatedData?.currentScore || "N/A"}
+
+ Current Score
+
+
+
+ {secureScoreData?.translatedData?.maxScore || "N/A"}
+
+ Max Score
+
+
+
+ {secureScoreData?.translatedData?.percentageVsSimilar || "N/A"}%
+
+ vs Similar Orgs
+
+
+
+ {secureScoreData?.translatedData?.percentageVsAllTenants || "N/A"}%
+
+ vs All Orgs
+
+
+
+
+
+ 7-Day Score Trend
+
+
+ Secure Score Progress
+ {secureScoreData?.secureScore?.data?.Results &&
+ secureScoreData.secureScore.data.Results.length > 0 ? (
+
+
+ {/* Chart Background */}
+
+
+ {/* Chart Grid Lines */}
+ {[0, 1, 2, 3, 4].map((i) => (
+
+ ))}
+
+ {/* Chart Data Points and Area */}
+ {(() => {
+ const data = secureScoreData.secureScore.data.Results.slice().reverse();
+ const maxScore = secureScoreData?.translatedData?.maxScore || 100;
+ const minScore = 0; // Always start from 0
+ const scoreRange = maxScore; // Full range from 0 to max
+ const chartWidth = 320;
+ const chartHeight = 140;
+ const pointSpacing = chartWidth / Math.max(data.length - 1, 1);
+
+ // Generate path for area chart
+ let pathData = `M 40 ${
+ 160 - (data[0].currentScore / scoreRange) * chartHeight
+ }`;
+ data.forEach((point, index) => {
+ if (index > 0) {
+ const x = 40 + index * pointSpacing;
+ const y = 160 - (point.currentScore / scoreRange) * chartHeight;
+ pathData += ` L ${x} ${y}`;
+ }
+ });
+ pathData += ` L ${40 + (data.length - 1) * pointSpacing} 160 L 40 160 Z`;
+
+ // Generate line path (without area fill)
+ let lineData = `M 40 ${
+ 160 - (data[0].currentScore / scoreRange) * chartHeight
+ }`;
+ data.forEach((point, index) => {
+ if (index > 0) {
+ const x = 40 + index * pointSpacing;
+ const y = 160 - (point.currentScore / scoreRange) * chartHeight;
+ lineData += ` L ${x} ${y}`;
+ }
+ });
+
+ return (
+ <>
+ {/* Area Fill */}
+
+
+ {/* Line */}
+
+
+ {/* Data Points */}
+ {data.map((point, index) => {
+ const x = 40 + index * pointSpacing;
+ const y = 160 - (point.currentScore / scoreRange) * chartHeight;
+ return ;
+ })}
+
+ {/* X-axis Labels */}
+ {data.map((point, index) => {
+ const x = 40 + index * pointSpacing;
+ const date = new Date(point.createdDateTime);
+ const label = date.toLocaleDateString("en-US", {
+ month: "short",
+ day: "numeric",
+ });
+ return (
+
+ {label}
+
+ );
+ })}
+
+ {/* Y-axis Labels */}
+ {[
+ 0,
+ Math.round(maxScore * 0.25),
+ Math.round(maxScore * 0.5),
+ Math.round(maxScore * 0.75),
+ maxScore,
+ ].map((score, index) => (
+
+ {score}
+
+ ))}
+ >
+ );
+ })()}
+
+
+
+ Current: {secureScoreData?.translatedData?.currentScore || "N/A"} /{" "}
+ {secureScoreData?.translatedData?.maxScore || "N/A"}(
+ {secureScoreData?.translatedData?.percentageCurrent || "N/A"}%)
+
+
+ ) : (
+
+ Current Score: {secureScoreData?.translatedData?.currentScore || "N/A"} /{" "}
+ {secureScoreData?.translatedData?.maxScore || "N/A"}
+ {"\n"}
+ Achievement Rate: {secureScoreData?.translatedData?.percentageCurrent || "N/A"}%
+ {"\n"}
+ Historical data not available
+
+ )}
+
+
+
+
+ What Your Score Means
+
+ Your current score of {secureScoreData?.translatedData?.currentScore || "N/A"}{" "}
+ represents {secureScoreData?.translatedData?.percentageCurrent || "N/A"}% of the
+ maximum protection level available. This indicates how well your organization is
+ currently defended against common cyber threats and data breaches.
+
+
+
+
+ Why Scores Change
+
+ • Business growth and new employees may temporarily lower scores until security
+ measures are applied{"\n"}• Changes in software licenses can affect available
+ security features{"\n"}• New security threats require updated protections, which may
+ impact scores{"\n"}• Regular security improvements help maintain and increase your
+ protection level
+
+
+
+
+ `Page ${pageNumber} of ${totalPages}`}
+ />
+
+
+ )}
+
+ {/* LICENSING PAGE - Only show if license data is available */}
+ {sectionConfig.licenseManagement &&
+ licensingData &&
+ Array.isArray(licensingData) &&
+ licensingData.length > 0 && (
+ <>
+ {/* STATISTIC PAGE 3 - CHAPTER SPLITTER */}
+ {sectionConfig.infographics && (
+
+
+
+ Every
+ 39
+ seconds
+
+ a business falls victim to{"\n"}
+ ransomware attacks
+
+
+
+ Proactive defense beats{"\n"}
+ reactive recovery
+
+
+ )}
+
+
+
+ License Management
+
+ Microsoft 365 license allocation and utilization analysis
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+
+
+
+ Smart license management helps control costs while ensuring your team has the
+ tools they need to be productive. This analysis shows how your current licenses
+ are being used and identifies opportunities to optimize spending without
+ compromising business operations.
+
+
+
+
+ License Allocation Summary
+
+
+
+ License Type
+
+ Used
+
+
+ Available
+
+
+ Total
+
+
+
+ {licensingData.map((license, index) => (
+
+
+ {(() => {
+ const licenseValue = license.License || license.license || "N/A";
+ if (typeof licenseValue === "object") {
+ console.log(
+ "DEBUG: license name is an object:",
+ licenseValue,
+ "full license:",
+ license
+ );
+ }
+ return licenseValue;
+ })()}
+
+
+ {(() => {
+ const countUsed = license.CountUsed || license.countUsed || "0";
+ if (typeof countUsed === "object") {
+ console.log(
+ "DEBUG: license.CountUsed is an object:",
+ countUsed,
+ "full license:",
+ license
+ );
+ }
+ return countUsed;
+ })()}
+
+
+ {(() => {
+ const countAvailable =
+ license.CountAvailable || license.countAvailable || "0";
+ if (typeof countAvailable === "object") {
+ console.log(
+ "DEBUG: license.CountAvailable is an object:",
+ countAvailable,
+ "full license:",
+ license
+ );
+ }
+ return countAvailable;
+ })()}
+
+
+ {(() => {
+ const totalLicenses =
+ license.TotalLicenses || license.totalLicenses || "0";
+ if (typeof totalLicenses === "object") {
+ console.log(
+ "DEBUG: license.TotalLicenses is an object:",
+ totalLicenses,
+ "full license:",
+ license
+ );
+ }
+ return totalLicenses;
+ })()}
+
+
+ ))}
+
+
+
+
+ License Optimization Recommendations
+
+
+
+ •
+
+ Usage Monitoring: Track how
+ licenses are being used to identify cost-saving opportunities
+
+
+
+ •
+
+ Cost Control: Review unused
+ licenses to reduce unnecessary spending
+
+
+
+ •
+
+ Growth Planning: Ensure you
+ have enough licenses for business expansion without overspending
+
+
+
+ •
+
+ Regular Reviews: Conduct
+ quarterly reviews to maintain cost-effective license allocation
+
+
+
+
+
+
+ `Page ${pageNumber} of ${totalPages}`}
+ />
+
+
+ >
+ )}
+
+ {/* DEVICES PAGE - Only show if device data is available */}
+ {sectionConfig.deviceManagement &&
+ deviceData &&
+ Array.isArray(deviceData) &&
+ deviceData.length > 0 && (
+ <>
+ {/* STATISTIC PAGE 4 - CHAPTER SPLITTER */}
+ {sectionConfig.infographics && (
+
+
+
+ $4.45M
+
+ average cost of a{"\n"}
+ data breach in 2024
+
+
+
+ Investment in security
+ {"\n"}
+ saves millions in recovery
+
+
+ )}
+
+
+
+ Device Management
+
+ Device compliance status and management overview
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+
+
+
+ Managing employee devices is essential for protecting your business data and
+ maintaining productivity. This analysis shows which devices meet your security
+ standards and identifies any that may need attention to prevent data breaches or
+ operational disruptions.
+
+
+
+
+ Device Compliance Overview
+
+
+
+ {deviceData.length}
+ Total Devices
+
+
+
+ {
+ deviceData.filter(
+ (device) =>
+ device.complianceState === "compliant" ||
+ device.ComplianceState === "compliant"
+ ).length
+ }
+
+ Compliant
+
+
+
+ {
+ deviceData.filter(
+ (device) =>
+ device.complianceState !== "compliant" &&
+ device.ComplianceState !== "compliant"
+ ).length
+ }
+
+ Non-Compliant
+
+
+
+ {Math.round(
+ (deviceData.filter(
+ (device) =>
+ device.complianceState === "Compliant" ||
+ device.ComplianceState === "Compliant"
+ ).length /
+ deviceData.length) *
+ 100
+ )}
+ %
+
+ Compliance Rate
+
+
+
+
+
+ Device Management Summary
+
+
+
+ Device Name
+ OS
+ Compliance
+ Last Sync
+
+
+ {deviceData.slice(0, 8).map((device, index) => {
+ const lastSync = device.lastSyncDateTime
+ ? new Date(device.lastSyncDateTime).toLocaleDateString()
+ : "N/A";
+ return (
+
+
+ {(() => {
+ const deviceName = device.deviceName || "N/A";
+ if (typeof deviceName === "object") {
+ console.log(
+ "DEBUG: device.deviceName is an object:",
+ deviceName,
+ "full device:",
+ device
+ );
+ }
+ return deviceName;
+ })()}
+
+
+ {(() => {
+ const operatingSystem = device.operatingSystem || "N/A";
+ if (typeof operatingSystem === "object") {
+ console.log(
+ "DEBUG: device.operatingSystem is an object:",
+ operatingSystem,
+ "full device:",
+ device
+ );
+ }
+ return operatingSystem;
+ })()}
+
+
+
+ {(() => {
+ const complianceState = device.complianceState || "Unknown";
+ if (typeof complianceState === "object") {
+ console.log(
+ "DEBUG: device.complianceState is an object:",
+ complianceState,
+ "full device:",
+ device
+ );
+ }
+ return complianceState;
+ })()}
+
+
+ {lastSync}
+
+ );
+ })}
+
+
+
+
+ Device Insights
+
+
+
+
+ {deviceData.filter((device) => device.operatingSystem === "Windows").length}
+
+ Windows Devices
+
+
+
+ {deviceData.filter((device) => device.operatingSystem === "iOS").length}
+
+ iOS Devices
+
+
+
+ {deviceData.filter((device) => device.operatingSystem === "Android").length}
+
+ Android Devices
+
+
+
+ {deviceData.filter((device) => device.isEncrypted === true).length}
+
+ Encrypted
+
+
+
+
+
+ Device Management Recommendations
+
+ Keep devices updated and secure to protect business data. Regularly check that all
+ employee devices meet security standards and address any issues promptly. Consider
+ automated policies to maintain consistent security across all devices and conduct
+ regular reviews to identify potential risks.
+
+
+
+
+ `Page ${pageNumber} of ${totalPages}`}
+ />
+
+
+ >
+ )}
+
+ {/* CONDITIONAL ACCESS POLICIES PAGE - Only show if data is available */}
+ {sectionConfig.conditionalAccess &&
+ conditionalAccessData &&
+ Array.isArray(conditionalAccessData) &&
+ conditionalAccessData.length > 0 && (
+ <>
+ {/* STATISTIC PAGE 5 - CHAPTER SPLITTER */}
+ {sectionConfig.infographics && (
+
+
+
+ 277
+ days
+
+ average time to identify and{"\n"}
+ contain a data breach
+
+
+
+ Early detection minimizes{"\n"}
+ business impact
+
+
+ )}
+
+
+
+ Conditional Access Policies
+
+ Identity and access management security controls
+
+
+ {brandingSettings?.logo && (
+
+ )}
+
+
+
+
+ Access control policies help protect your business by ensuring only the right
+ people can access sensitive information under appropriate circumstances. These
+ smart security measures automatically evaluate each access request and apply
+ additional verification when needed, balancing security with employee
+ productivity.
+
+
+
+
+ How Access Controls Protect Your Business
+
+ These policies work like intelligent security guards, making decisions based on
+ who is trying to access what, from where, and when. For example, accessing email
+ from the office might be seamless, but accessing it from an unusual location might
+ require additional verification. This approach protects your data while minimizing
+ disruption to daily work.
+
+
+
+
+ Current Policy Configuration
+
+
+
+ Policy Name
+ State
+ Applications
+ Controls
+
+
+ {conditionalAccessData.slice(0, 8).map((policy, index) => {
+ const getStateStyle = (state) => {
+ switch (state) {
+ case "enabled":
+ return styles.statusCompliant;
+ case "enabledForReportingButNotEnforced":
+ return styles.statusPartial;
+ case "disabled":
+ return styles.statusReview;
+ default:
+ return styles.statusText;
+ }
+ };
+
+ const getStateDisplay = (state) => {
+ switch (state) {
+ case "enabled":
+ return "Enabled";
+ case "enabledForReportingButNotEnforced":
+ return "Report Only";
+ case "disabled":
+ return "Disabled";
+ default:
+ return state || "Unknown";
+ }
+ };
+
+ const getControlsText = (policy) => {
+ const controls = [];
+ if (policy.builtInControls) {
+ if (policy.builtInControls.includes("mfa")) controls.push("MFA");
+ if (policy.builtInControls.includes("block")) controls.push("Block");
+ if (policy.builtInControls.includes("compliantDevice"))
+ controls.push("Compliant Device");
+ }
+ return controls.length > 0 ? controls.join(", ") : "Custom";
+ };
+
+ return (
+
+
+ {(() => {
+ const displayName = policy.displayName || "N/A";
+ if (typeof displayName === "object") {
+ console.log(
+ "DEBUG: policy.displayName is an object:",
+ displayName,
+ "full policy:",
+ policy
+ );
+ }
+ return displayName;
+ })()}
+
+
+
+ {getStateDisplay(policy.state)}
+
+
+
+ {(() => {
+ const includeApplications = policy.includeApplications || "All";
+ if (typeof includeApplications === "object") {
+ console.log(
+ "DEBUG: policy.includeApplications is an object:",
+ includeApplications,
+ "full policy:",
+ policy
+ );
+ }
+ return includeApplications;
+ })()}
+
+
+ {getControlsText(policy)}
+
+
+ );
+ })}
+
+
+
+
+ Policy Overview
+
+
+
+ {conditionalAccessData.length}
+ Total Policies
+
+
+
+ {conditionalAccessData.filter((policy) => policy.state === "enabled").length}
+
+ Enabled
+
+
+
+ {
+ conditionalAccessData.filter(
+ (policy) => policy.state === "enabledForReportingButNotEnforced"
+ ).length
+ }
+
+ Report Only
+
+
+
+ {
+ conditionalAccessData.filter(
+ (policy) =>
+ policy.builtInControls && policy.builtInControls.includes("mfa")
+ ).length
+ }
+
+ MFA Policies
+
+
+
+
+
+ Policy Analysis
+
+
+
+ •
+
+ Policy Coverage:{" "}
+ {conditionalAccessData.length} conditional access policies configured
+
+
+
+ •
+
+ Enforcement Status:{" "}
+ {conditionalAccessData.filter((policy) => policy.state === "enabled").length}{" "}
+ policies actively enforced
+
+
+
+ •
+
+ Testing Phase:{" "}
+ {
+ conditionalAccessData.filter(
+ (policy) => policy.state === "enabledForReportingButNotEnforced"
+ ).length
+ }{" "}
+ policies in report-only mode
+
+
+
+ •
+
+ Security Controls:{" "}
+ Multi-factor authentication and access blocking implemented
+
+
+
+
+
+
+ Access Control Recommendations
+
+ {conditionalAccessData.filter(
+ (policy) => policy.state === "enabledForReportingButNotEnforced"
+ ).length > 0
+ ? `Consider activating ${
+ conditionalAccessData.filter(
+ (policy) => policy.state === "enabledForReportingButNotEnforced"
+ ).length
+ } policies currently in testing mode after ensuring they don't disrupt business operations. `
+ : "Your access controls are properly configured. "}
+ Regularly review how these policies affect employee productivity and adjust as
+ needed. Consider additional location-based protections for enhanced security
+ without impacting daily operations.
+
+
+
+
+ `Page ${pageNumber} of ${totalPages}`}
+ />
+
+
+ >
+ )}
+
+ );
+};
+
+export const ExecutiveReportButton = (props) => {
+ const { tenantName, tenantId, userStats, standardsData, organizationData, ...other } = props;
+ console.log(props);
+ const settings = useSettings();
+ const brandingSettings = settings.customBranding;
+
+ // Preview state
+ const [previewOpen, setPreviewOpen] = useState(false);
+ const [sectionConfig, setSectionConfig] = useState({
+ executiveSummary: true,
+ securityStandards: true,
+ secureScore: true,
+ licenseManagement: true,
+ deviceManagement: true,
+ conditionalAccess: true,
+ infographics: true,
+ });
+
+ // Get real secure score data
+ const secureScore = useSecureScore();
+
+ // Get real license data
+ const licenseData = ApiGetCall({
+ url: "/api/ListLicenses",
+ data: {
+ tenantFilter: settings.currentTenant,
+ },
+ queryKey: `licenses-report-${settings.currentTenant}`,
+ });
+ // Get real device data
+ const deviceData = ApiGetCall({
+ url: "/api/ListDevices",
+ data: {
+ tenantFilter: settings.currentTenant,
+ },
+ queryKey: `devices-report-${settings.currentTenant}`,
+ });
+
+ // Get real conditional access policy data
+ const conditionalAccessData = ApiGetCall({
+ url: "/api/ListConditionalAccessPolicies",
+ data: {
+ tenantFilter: settings.currentTenant,
+ },
+ queryKey: `ca-policies-report-${settings.currentTenant}`,
+ });
+
+ // Get real standards data
+ const standardsCompareData = ApiGetCall({
+ url: "/api/ListStandardsCompare",
+ data: {
+ tenantFilter: settings.currentTenant,
+ },
+ queryKey: `standards-compare-report-${settings.currentTenant}`,
+ });
+
+ // Check if all data is loaded (either successful or failed)
+ const isDataLoading =
+ secureScore.isFetching ||
+ licenseData.isFetching ||
+ deviceData.isFetching ||
+ conditionalAccessData.isFetching ||
+ standardsCompareData.isFetching;
+
+ const hasAllDataFinished =
+ (secureScore.isSuccess || secureScore.isError) &&
+ (licenseData.isSuccess || licenseData.isError) &&
+ (deviceData.isSuccess || deviceData.isError) &&
+ (conditionalAccessData.isSuccess || conditionalAccessData.isError) &&
+ (standardsCompareData.isSuccess || standardsCompareData.isError);
+
+ // Show button when all data is finished loading (regardless of success/failure)
+ const shouldShowButton = hasAllDataFinished && !isDataLoading;
+
+ const fileName = `Executive_Report_${tenantName?.replace(/[^a-zA-Z0-9]/g, "_") || "Tenant"}_${
+ new Date().toISOString().split("T")[0]
+ }.pdf`;
+
+ // Memoize the document to prevent unnecessary re-renders
+ const reportDocument = useMemo(() => {
+ console.log("Creating report document with:", {
+ tenantName,
+ tenantId,
+ userStats,
+ standardsData,
+ organizationData,
+ brandingSettings,
+ secureScore: secureScore.isSuccess ? secureScore : null,
+ licensingData: licenseData.isSuccess ? licenseData?.data : null,
+ deviceData: deviceData.isSuccess ? deviceData?.data : null,
+ conditionalAccessData: conditionalAccessData.isSuccess ? conditionalAccessData?.data : null,
+ standardsCompareData: standardsCompareData.isSuccess ? standardsCompareData?.data : null,
+ sectionConfig,
+ });
+
+ try {
+ return (
+
+ );
+ } catch (error) {
+ console.error("Error creating ExecutiveReportDocument:", error);
+ return (
+
+
+
+ Error creating document: {error.message}
+
+
+
+ );
+ }
+ }, [
+ tenantName,
+ tenantId,
+ userStats,
+ standardsData,
+ organizationData,
+ brandingSettings,
+ secureScore,
+ licenseData,
+ deviceData,
+ conditionalAccessData,
+ standardsCompareData,
+ sectionConfig,
+ ]);
+
+ // Handle section toggle
+ const handleSectionToggle = (sectionKey) => {
+ setSectionConfig((prev) => {
+ // Count currently enabled sections
+ const enabledSections = Object.values(prev).filter(Boolean).length;
+
+ // If trying to disable the last remaining section, prevent it
+ if (prev[sectionKey] && enabledSections === 1) {
+ return prev; // Don't change state
+ }
+
+ return {
+ ...prev,
+ [sectionKey]: !prev[sectionKey],
+ };
+ });
+ };
+
+ // Section configuration options
+ const sectionOptions = [
+ {
+ key: "executiveSummary",
+ label: "Executive Summary",
+ description: "High-level overview and statistics",
+ },
+ {
+ key: "securityStandards",
+ label: "Security Standards",
+ description: "Compliance assessment and standards evaluation",
+ },
+ {
+ key: "secureScore",
+ label: "Microsoft Secure Score",
+ description: "Security posture measurement and trends",
+ },
+ {
+ key: "licenseManagement",
+ label: "License Management",
+ description: "License allocation and optimization",
+ },
+ {
+ key: "deviceManagement",
+ label: "Device Management",
+ description: "Device compliance and insights",
+ },
+ {
+ key: "conditionalAccess",
+ label: "Conditional Access",
+ description: "Access control policies and analysis",
+ },
+ {
+ key: "infographics",
+ label: "Infographic Pages",
+ description: "Statistical pages with visual elements between sections",
+ },
+ ];
+
+ // Don't render the button if data is not ready
+ if (!shouldShowButton) {
+ return (
+
+ }
+ disabled={true}
+ sx={{
+ fontWeight: "bold",
+ textTransform: "none",
+ borderRadius: 2,
+ boxShadow: "0 2px 8px rgba(0,0,0,0.15)",
+ transition: "all 0.2s ease-in-out",
+ }}
+ {...other}
+ >
+ Loading Data...
+
+
+ );
+ }
+
+ return (
+ <>
+ {/* Main Executive Summary Button */}
+
+ }
+ onClick={() => setPreviewOpen(true)}
+ sx={{
+ fontWeight: "bold",
+ textTransform: "none",
+ borderRadius: 2,
+ boxShadow: "0 2px 8px rgba(0,0,0,0.15)",
+ transition: "all 0.2s ease-in-out",
+ }}
+ {...other}
+ >
+ Executive Summary
+
+
+
+ {/* Combined Preview and Configuration Dialog */}
+ setPreviewOpen(false)}
+ maxWidth="xl"
+ fullWidth
+ sx={{
+ "& .MuiDialog-paper": {
+ height: "95vh",
+ maxHeight: "95vh",
+ },
+ }}
+ >
+
+
+ Executive Report - {tenantName}
+
+ setPreviewOpen(false)} size="small">
+
+
+
+
+
+ {/* Left Panel - Section Configuration */}
+
+
+
+
+ Report Sections
+
+
+ Configure which sections to include in your executive report. Changes are reflected
+ in real-time.
+
+
+
+ {sectionOptions.map((option) => (
+
+
+ {
+ event.stopPropagation();
+ handleSectionToggle(option.key);
+ }}
+ color="primary"
+ size="small"
+ disabled={
+ // Disable if this is the last enabled section
+ sectionConfig[option.key] &&
+ Object.values(sectionConfig).filter(Boolean).length === 1
+ }
+ />
+ }
+ label={
+ handleSectionToggle(option.key)}>
+
+ {option.label}
+
+
+ {option.description}
+
+
+ }
+ sx={{ margin: 0, width: "100%" }}
+ />
+
+
+ ))}
+
+
+
+
+ 💡 Pro Tip
+
+
+ Enable only the sections relevant to your audience to create focused, impactful
+ reports. At least one section must be enabled.
+
+
+
+
+
+ {/* Right Panel - PDF Preview */}
+
+
+ {reportDocument}
+
+
+
+
+
+
+
+ Sections enabled: {Object.values(sectionConfig).filter(Boolean).length} of{" "}
+ {sectionOptions.length}
+
+
+
+ }
+ disabled={!shouldShowButton}
+ sx={{ minWidth: 140 }}
+ onClick={() => {
+ // Create document dynamically when download is clicked
+ const downloadDocument = (
+
+ );
+
+ // Use react-pdf's pdf() function to generate and download
+ import("@react-pdf/renderer").then(({ pdf }) => {
+ pdf(downloadDocument)
+ .toBlob()
+ .then((blob) => {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement("a");
+ link.href = url;
+ link.download = fileName;
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ URL.revokeObjectURL(url);
+ })
+ .catch((error) => {
+ console.error("Error generating PDF:", error);
+ });
+ });
+ }}
+ >
+ Download PDF
+
+
+ setPreviewOpen(false)} variant="outlined">
+ Close
+
+
+
+ >
+ );
+};
diff --git a/src/components/PrivateRoute.js b/src/components/PrivateRoute.js
index 65a21fd62452..c39642c0fa91 100644
--- a/src/components/PrivateRoute.js
+++ b/src/components/PrivateRoute.js
@@ -1,31 +1,73 @@
import { ApiGetCall } from "../api/ApiCall.jsx";
import UnauthenticatedPage from "../pages/unauthenticated.js";
+import LoadingPage from "../pages/loading.js";
+import ApiOfflinePage from "../pages/api-offline.js";
export const PrivateRoute = ({ children, routeType }) => {
- const {
- data: profile,
- error,
- isFetching,
- } = ApiGetCall({
+ const session = ApiGetCall({
url: "/.auth/me",
+ queryKey: "authmeswa",
+ refetchOnWindowFocus: true,
+ staleTime: 120000, // 2 minutes
+ });
+
+ const apiRoles = ApiGetCall({
+ url: "/api/me",
queryKey: "authmecipp",
+ retry: 2, // Reduced retry count to show offline message sooner
+ waiting: !session.isSuccess || session.data?.clientPrincipal === null,
});
- if (isFetching) {
- return "Loading...";
+ // Check if the session is still loading before determining authentication status
+ if (
+ session.isLoading ||
+ apiRoles.isLoading ||
+ (apiRoles.isFetching && (apiRoles.data === null || apiRoles.data === undefined))
+ ) {
+ return ;
+ }
+
+ // Check if the API is offline (404 error from /api/me endpoint)
+ // Or other network errors that would indicate API is unavailable
+ if (
+ apiRoles?.error?.response?.status === 404 || // API endpoint not found
+ apiRoles?.error?.response?.status === 502 || // Service unavailable
+ (apiRoles?.isSuccess && !apiRoles?.data) // No client principal data, indicating API might be offline
+ ) {
+ return ;
+ }
+
+ // if not logged into swa
+ if (null === session?.data?.clientPrincipal || session?.data === undefined) {
+ return ;
}
let roles = null;
- if (null !== profile?.clientPrincipal) {
- roles = profile?.clientPrincipal.userRoles;
- } else if (null === profile?.clientPrincipal) {
+
+ if (
+ session?.isSuccess &&
+ apiRoles?.isSuccess &&
+ undefined !== apiRoles?.data?.clientPrincipal &&
+ session?.data?.clientPrincipal?.userDetails &&
+ apiRoles?.data?.clientPrincipal?.userDetails &&
+ session?.data?.clientPrincipal?.userDetails !== apiRoles?.data?.clientPrincipal?.userDetails
+ ) {
+ // refetch the profile if the user details are different
+ apiRoles.refetch();
+ }
+
+ if (null !== apiRoles?.data?.clientPrincipal && undefined !== apiRoles?.data) {
+ roles = apiRoles?.data?.clientPrincipal?.userRoles ?? [];
+ } else if (null === apiRoles?.data?.clientPrincipal || undefined === apiRoles?.data) {
return ;
}
if (null === roles) {
return ;
} else {
- const isAuthenticated = roles.includes("authenticated") && !error;
- const isAdmin = roles.includes("admin");
+ const blockedRoles = ["anonymous", "authenticated"];
+ const userRoles = roles?.filter((role) => !blockedRoles.includes(role)) ?? [];
+ const isAuthenticated = userRoles.length > 0 && !apiRoles?.error;
+ const isAdmin = roles?.includes("admin") || roles?.includes("superadmin");
if (routeType === "admin") {
return !isAdmin ? : children;
} else {
diff --git a/src/components/actions-menu.js b/src/components/actions-menu.js
index 92ef2f90f4fd..b63ed33e74c8 100644
--- a/src/components/actions-menu.js
+++ b/src/components/actions-menu.js
@@ -11,7 +11,16 @@ export const ActionsMenu = (props) => {
const popover = usePopover();
const [actionData, setActionData] = useState({ data: {}, action: {}, ready: false });
const createDialog = useDialog();
-
+ const handleActionDisabled = (row, action) => {
+ //add nullsaftey for row. It can sometimes be undefined(still loading) or null(no data)
+ if (!row) {
+ return true;
+ }
+ if (action?.condition) {
+ return !action?.condition(row);
+ }
+ return false;
+ };
return (
<>
{
}}
>
{actions
- ?.filter((action) => !action.link)
+ ?.filter((action) => !action.link || action.showInActionsMenu)
.map((action, index) => (
{
setActionData({
diff --git a/src/components/bulk-actions-menu.js b/src/components/bulk-actions-menu.js
index b4ceba4c48bd..fd15898e28a3 100644
--- a/src/components/bulk-actions-menu.js
+++ b/src/components/bulk-actions-menu.js
@@ -2,6 +2,33 @@ import PropTypes from "prop-types";
import ChevronDownIcon from "@heroicons/react/24/outline/ChevronDownIcon";
import { Button, Link, ListItemText, Menu, MenuItem, SvgIcon } from "@mui/material";
import { usePopover } from "../hooks/use-popover";
+import { FilePresent, Laptop, Mail, Share, Shield, ShieldMoon } from "@mui/icons-material";
+import { GlobeAltIcon, UsersIcon, ServerIcon } from "@heroicons/react/24/outline";
+
+function getIconByName(iconName) {
+ switch (iconName) {
+ case "GlobeAltIcon":
+ return ;
+ case "Mail":
+ return ;
+ case "UsersIcon":
+ return ;
+ case "FilePresent":
+ return ;
+ case "ServerIcon":
+ return ;
+ case "Laptop":
+ return ;
+ case "Share":
+ return ;
+ case "Shield":
+ return ;
+ case "ShieldMoon":
+ return ;
+ default:
+ return null;
+ }
+}
export const BulkActionsMenu = (props) => {
const { buttonName, sx, row, actions = [], ...other } = props;
@@ -55,12 +82,14 @@ export const BulkActionsMenu = (props) => {
target="_blank"
rel="noreferrer"
>
+ {getIconByName(action.icon)}
);
} else {
return (
+ {getIconByName(action.icon)}
);
diff --git a/src/components/csvExportButton.js b/src/components/csvExportButton.js
index 8f5c80d49a77..1d1dedddbb28 100644
--- a/src/components/csvExportButton.js
+++ b/src/components/csvExportButton.js
@@ -8,36 +8,85 @@ const csvConfig = mkConfig({
useKeysAsHeaders: true,
});
+const flattenObject = (obj, parentKey = "") => {
+ const flattened = {};
+ Object.keys(obj).forEach((key) => {
+ const fullKey = parentKey ? `${parentKey}.${key}` : key;
+ if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) {
+ Object.assign(flattened, flattenObject(obj[key], fullKey));
+ } else if (Array.isArray(obj[key]) && typeof obj[key][0] === "string") {
+ flattened[fullKey] = obj[key];
+ } else if (Array.isArray(obj[key])) {
+ let testFormatting = getCippFormatting(obj[key], key, "text", false, false);
+ if (typeof testFormatting === "string" && !testFormatting.includes("[object Object]")) {
+ flattened[fullKey] = testFormatting;
+ } else {
+ flattened[fullKey] = obj[key]
+ .map((item) =>
+ typeof item === "object"
+ ? JSON.stringify(
+ Object.fromEntries(
+ Object.entries(flattenObject(item)).map(([k, v]) => [
+ k,
+ getCippFormatting(v, k, "text", false),
+ ])
+ )
+ )
+ : getCippFormatting(item, fullKey, "text", false, false)
+ )
+ .join(", ");
+ }
+ } else {
+ flattened[fullKey] = obj[key];
+ }
+ });
+ return flattened;
+};
+
export const CSVExportButton = (props) => {
- const { rows, columns, reportName, columnVisibility } = props;
+ const { rows, columns, reportName, columnVisibility, ...other } = props;
const handleExportRows = (rows) => {
- const rowData = rows.map((row) => row.original);
+ const rowData = rows.map((row) => flattenObject(row.original));
const columnKeys = columns.filter((c) => columnVisibility[c.id]).map((c) => c.id);
- rowData.forEach((row) => {
- Object.keys(row).forEach((key) => {
- if (!columnKeys.includes(key)) {
- delete row[key];
+
+ const filterRowData = (row, allowedKeys) => {
+ const filteredRow = {};
+ allowedKeys.forEach((key) => {
+ if (key in row) {
+ filteredRow[key] = row[key];
}
});
- });
+ return filteredRow;
+ };
+
+ const filteredData = rowData.map((row) => filterRowData(row, columnKeys));
- //for every existing row, get the valid formatting using getCippFormatting.
- const formattedData = rowData.map((row) => {
+ const formattedData = filteredData.map((row) => {
const formattedRow = {};
- Object.keys(row).forEach((key) => {
- formattedRow[key] = getCippFormatting(row[key], key, "text", false);
+ columnKeys.forEach((key) => {
+ const value = row[key];
+ // check for string and do not format
+ if (typeof value === "string") {
+ formattedRow[key] = value;
+ return;
+ }
+
+ // Pass flattened data to the formatter for CSV export
+ formattedRow[key] = getCippFormatting(value, key, "text", false);
});
return formattedRow;
});
+
const csv = generateCsv(csvConfig)(formattedData);
csvConfig["filename"] = `${reportName}`;
download(csvConfig)(csv);
};
+
return (
- handleExportRows(rows)}>
+ handleExportRows(rows)} {...other}>
diff --git a/src/components/linearProgressWithLabel.jsx b/src/components/linearProgressWithLabel.jsx
index b12d467287fa..55b4db2967bd 100644
--- a/src/components/linearProgressWithLabel.jsx
+++ b/src/components/linearProgressWithLabel.jsx
@@ -1,12 +1,65 @@
-import { Box, LinearProgress, Typography } from "@mui/material";
+import { Box, LinearProgress } from "@mui/material";
export const LinearProgressWithLabel = (props) => {
+ const { value, colourLevels, addedLabel, ...otherProps } = props;
+
+ // Function to determine color based on value and colourLevels
+ const getProgressColor = (value, colourLevels) => {
+ if (!colourLevels) {
+ return undefined; // Use default MUI color
+ }
+
+ // Check if flipped mode is enabled
+ const isFlipped = colourLevels === 'flipped' || colourLevels.flipped === true;
+
+ if (isFlipped) {
+ // Flipped color order: green -> yellow -> orange -> red
+ if (value >= 0 && value < 25) {
+ return "#4caf50"; // Green for low values when flipped
+ } else if (value >= 25 && value < 50) {
+ return "#ffeb3b"; // Yellow
+ } else if (value >= 50 && value < 75) {
+ return "#ff9800"; // Orange
+ } else if (value >= 75 && value <= 100) {
+ return "#f44336"; // Red for high values when flipped
+ }
+ } else {
+ // Normal color order: red -> orange -> yellow -> green
+ if (value >= 0 && value < 25) {
+ return colourLevels.level0to25 || "#f44336"; // Default red
+ } else if (value >= 25 && value < 50) {
+ return colourLevels.level25to50 || "#ff9800"; // Default orange
+ } else if (value >= 50 && value < 75) {
+ return colourLevels.level50to75 || "#ffeb3b"; // Default yellow
+ } else if (value >= 75 && value <= 100) {
+ return colourLevels.level75to100 || "#4caf50"; // Default green
+ }
+ }
+
+ return undefined; // Fallback to default
+ };
+
+ const progressColor = getProgressColor(value, colourLevels);
+
return (
-
+
- {`${Math.round(props.value)}%`}
+ {`${Math.round(value)}% ${addedLabel ?? ""}`}
);
};
diff --git a/src/components/pdfExportButton.js b/src/components/pdfExportButton.js
index a23b14cbdcb1..c95c27911bc4 100644
--- a/src/components/pdfExportButton.js
+++ b/src/components/pdfExportButton.js
@@ -3,10 +3,12 @@ import { PictureAsPdf } from "@mui/icons-material";
import jsPDF from "jspdf";
import autoTable from "jspdf-autotable";
import { getCippFormatting } from "../utils/get-cipp-formatting";
+import { useSettings } from "../hooks/use-settings";
export const PDFExportButton = (props) => {
- const { rows, columns, reportName, columnVisibility } = props;
-
+ const { rows, columns, reportName, columnVisibility, ...other } = props;
+ const brandingSettings = useSettings().customBranding;
+ //we need to use jspdf here because the react-pdf library gets killed with our amount of data.
const handleExportRows = (rows) => {
const unit = "pt";
const size = "A3"; // Use A1, A2, A3 or A4
@@ -27,12 +29,98 @@ export const PDFExportButton = (props) => {
return formattedRow;
});
+ // Add custom branding logo if available
+ let logoHeight = 0;
+ if (brandingSettings?.logo) {
+ try {
+ const logoSize = 60; // Fixed logo height
+ const logoX = 40; // Left margin
+ const logoY = 30; // Top margin
+
+ // Add the base64 image to the PDF
+ doc.addImage(brandingSettings.logo, "PNG", logoX, logoY, logoSize, logoSize);
+ logoHeight = logoSize + 20; // Logo height plus some spacing
+ } catch (error) {
+ console.warn("Failed to add logo to PDF:", error);
+ }
+ }
+
+ // Calculate column widths based on content and available space
+ const pageWidth = doc.internal.pageSize.getWidth();
+ const margin = 40; // Consistent margins from edges
+ const availableWidth = pageWidth - 2 * margin;
+ const columnCount = exportColumns.length;
+
+ // Calculate dynamic column widths based on content length
+ const columnWidths = exportColumns.map((col) => {
+ const headerLength = col.header.length;
+ const maxContentLength = Math.max(
+ ...formattedData.map((row) => String(row[col.dataKey] || "").length)
+ );
+ const estimatedWidth = Math.max(headerLength, maxContentLength) * 6; // 6 points per character
+ return Math.min(estimatedWidth, (availableWidth / columnCount) * 1.5); // Cap at 1.5x average
+ });
+
+ // Normalize widths to fit available space
+ const totalEstimatedWidth = columnWidths.reduce((sum, width) => sum + width, 0);
+ const normalizedWidths = columnWidths.map(
+ (width) => (width / totalEstimatedWidth) * availableWidth
+ );
+
+ // Convert hex color to RGB if custom branding color is provided
+ const getHeaderColor = () => {
+ if (brandingSettings?.colour) {
+ const hex = brandingSettings.colour.replace("#", "");
+ const r = parseInt(hex.substr(0, 2), 16);
+ const g = parseInt(hex.substr(2, 2), 16);
+ const b = parseInt(hex.substr(4, 2), 16);
+ return [r, g, b];
+ }
+ return [247, 127, 0]; // Default orange color
+ };
+
let content = {
- startY: 100,
- columns: exportColumns,
- body: formattedData,
+ startY: 100 + logoHeight, // Adjust table start position based on logo
+ head: [exportColumns.map((col) => col.header)],
+ body: formattedData.map((row) => exportColumns.map((col) => String(row[col.dataKey] || ""))),
theme: "striped",
- headStyles: { fillColor: [247, 127, 0] },
+ headStyles: {
+ fillColor: getHeaderColor(),
+ textColor: [255, 255, 255],
+ fontStyle: "bold",
+ halign: "center",
+ valign: "middle",
+ fontSize: 10,
+ cellPadding: 8,
+ },
+ bodyStyles: {
+ fontSize: 9,
+ cellPadding: 6,
+ valign: "top",
+ overflow: "linebreak",
+ cellWidth: "wrap",
+ },
+ columnStyles: exportColumns.reduce((styles, col, index) => {
+ styles[index] = {
+ cellWidth: normalizedWidths[index],
+ halign: "left",
+ valign: "top",
+ };
+ return styles;
+ }, {}),
+ margin: {
+ top: margin,
+ right: margin,
+ bottom: margin,
+ left: margin,
+ },
+ tableWidth: "auto",
+ styles: {
+ overflow: "linebreak",
+ cellWidth: "wrap",
+ fontSize: 9,
+ cellPadding: 6,
+ },
};
autoTable(doc, content);
@@ -41,7 +129,7 @@ export const PDFExportButton = (props) => {
return (
- handleExportRows(rows)}>
+ handleExportRows(rows)} {...other}>
diff --git a/src/components/query-field.js b/src/components/query-field.js
index f1078830ee60..dfeb6f37e1a4 100644
--- a/src/components/query-field.js
+++ b/src/components/query-field.js
@@ -29,7 +29,6 @@ export const QueryField = (props) => {
inputRef.current.focus();
}
},
- // eslint-disable-next-line react-hooks/exhaustive-deps
[disabled]);
const handleChange = useCallback((event) => {
diff --git a/src/components/resource-loading.js b/src/components/resource-loading.js
index 743a53baea03..d80a6b09452a 100644
--- a/src/components/resource-loading.js
+++ b/src/components/resource-loading.js
@@ -1,5 +1,5 @@
import PropTypes from "prop-types";
-import { CircularProgress, SvgIcon, Typography } from "@mui/material";
+import { CircularProgress, Typography } from "@mui/material";
import { styled } from "@mui/material/styles";
const ResourceLoadingRoot = styled("div")(({ theme }) => ({
diff --git a/src/components/toaster.js b/src/components/toaster.js
index aa26b5c462c6..933adf625de1 100644
--- a/src/components/toaster.js
+++ b/src/components/toaster.js
@@ -1,5 +1,5 @@
import { CloseSharp } from "@mui/icons-material";
-import { Alert, Button, IconButton, Snackbar } from "@mui/material";
+import { Alert, IconButton, Snackbar } from "@mui/material";
import { useSelector } from "react-redux";
import { useDispatch } from "react-redux";
import { closeToast } from "../store/toasts";
diff --git a/src/contexts/settings-context.js b/src/contexts/settings-context.js
index 76a29de26948..e85cd2574530 100644
--- a/src/contexts/settings-context.js
+++ b/src/contexts/settings-context.js
@@ -70,8 +70,14 @@ const storeSettings = (value) => {
const initialSettings = {
direction: "ltr",
paletteMode: "light",
+ currentTheme: { value: "light", label: "light" },
pinNav: true,
currentTenant: null,
+ showDevtools: false,
+ customBranding: {
+ colour: "#F77F00",
+ logo: null,
+ },
};
const initialState = {
@@ -94,6 +100,10 @@ export const SettingsProvider = (props) => {
const restored = restoreSettings();
if (restored) {
+ if (!restored.currentTheme && restored.paletteMode) {
+ restored.currentTheme = { value: restored.paletteMode, label: restored.paletteMode };
+ }
+
setState((prevState) => ({
...prevState,
...restored,
@@ -128,6 +138,7 @@ export const SettingsProvider = (props) => {
return !isEqual(initialSettings, {
direction: state.direction,
paletteMode: state.paletteMode,
+ currentTheme: state.currentTheme,
pinNav: state.pinNav,
});
}, [state]);
diff --git a/src/data/AuditLogSchema.json b/src/data/AuditLogSchema.json
index 4ed181f46654..93122adbc4cf 100644
--- a/src/data/AuditLogSchema.json
+++ b/src/data/AuditLogSchema.json
@@ -16,7 +16,10 @@
"CIPPGeoLocation": "List:countryList",
"CIPPBadRepIP": "String",
"CIPPHostedIP": "String",
- "CIPPIPDetected": "String"
+ "CIPPIPDetected": "String",
+ "CIPPUserId": "String",
+ "CIPPUserKey": "String",
+ "CIPPUsername": "String"
},
"Audit.Exchange": {
"Id": "Combination GUID",
@@ -71,40 +74,126 @@
"LogonError": "String"
},
"List:Operation": [
- { "value": "UserLoggedIn", "label": "A user logged in" },
- { "value": "mailitemsaccessed", "label": "accessed mailbox items" },
- { "value": "add delegation entry.", "label": "added delegation entry" },
- { "value": "add domain to company.", "label": "added domain to company" },
- { "value": "add group.", "label": "added group" },
- { "value": "add member to group.", "label": "added member to group" },
- { "value": "add-mailboxpermission", "label": "added delegate mailbox permissions" },
- { "value": "add member to role.", "label": "added member to role" },
- { "value": "add partner to company.", "label": "added a partner to the directory" },
- { "value": "add service principal.", "label": "added service principal" },
+ {
+ "value": "UserLoggedIn",
+ "label": "A user logged in"
+ },
+ {
+ "value": "mailitemsaccessed",
+ "label": "accessed mailbox items"
+ },
+ {
+ "value": "add delegation entry.",
+ "label": "added delegation entry"
+ },
+ {
+ "value": "add domain to company.",
+ "label": "added domain to company"
+ },
+ {
+ "value": "add group.",
+ "label": "added group"
+ },
+ {
+ "value": "add member to group.",
+ "label": "added member to group"
+ },
+ {
+ "value": "add-mailboxpermission",
+ "label": "added delegate mailbox permissions"
+ },
+ {
+ "value": "add member to role.",
+ "label": "added member to role"
+ },
+ {
+ "value": "add partner to company.",
+ "label": "added a partner to the directory"
+ },
+ {
+ "value": "add service principal.",
+ "label": "added service principal"
+ },
{
"value": "add service principal credentials.",
"label": "added credentials to a service principal"
},
- { "value": "add user.", "label": "added user" },
- { "value": "addfolderpermissions", "label": "added permissions to folder" },
- { "value": "applyrecordlabel", "label": "labeled message as a record" },
- { "value": "change user license.", "label": "changed user license" },
- { "value": "change user password.", "label": "changed user password" },
- { "value": "copy", "label": "copied messages to another folder" },
- { "value": "create", "label": "created mailbox item" },
- { "value": "delete group.", "label": "deleted group" },
- { "value": "delete user.", "label": "deleted user" },
- { "value": "harddelete", "label": "purged messages from the mailbox" },
- { "value": "mailboxlogin", "label": "user signed in to mailbox" },
- { "value": "move", "label": "moved messages to another folder" },
- { "value": "movetodeleteditems", "label": "moved messages to deleted items folder" },
- { "value": "new-inboxrule", "label": "created new inbox rule in outlook web app" },
- { "value": "remove delegation entry.", "label": "removed delegation entry" },
- { "value": "remove domain from company.", "label": "removed domain from company" },
- { "value": "remove member from group.", "label": "removed member from group" },
- { "value": "remove member from a role.", "label": "remove member from a role" },
- { "value": "Disable Strong Authentication.", "label": "Disable Strong Authentication." },
-
+ {
+ "value": "add user.",
+ "label": "added user"
+ },
+ {
+ "value": "addfolderpermissions",
+ "label": "added permissions to folder"
+ },
+ {
+ "value": "applyrecordlabel",
+ "label": "labeled message as a record"
+ },
+ {
+ "value": "change user license.",
+ "label": "changed user license"
+ },
+ {
+ "value": "change user password.",
+ "label": "changed user password"
+ },
+ {
+ "value": "copy",
+ "label": "copied messages to another folder"
+ },
+ {
+ "value": "create",
+ "label": "created mailbox item"
+ },
+ {
+ "value": "delete group.",
+ "label": "deleted group"
+ },
+ {
+ "value": "delete user.",
+ "label": "deleted user"
+ },
+ {
+ "value": "harddelete",
+ "label": "purged messages from the mailbox"
+ },
+ {
+ "value": "mailboxlogin",
+ "label": "user signed in to mailbox"
+ },
+ {
+ "value": "move",
+ "label": "moved messages to another folder"
+ },
+ {
+ "value": "movetodeleteditems",
+ "label": "moved messages to deleted items folder"
+ },
+ {
+ "value": "new-inboxrule",
+ "label": "created new inbox rule in outlook web app"
+ },
+ {
+ "value": "remove delegation entry.",
+ "label": "removed delegation entry"
+ },
+ {
+ "value": "remove domain from company.",
+ "label": "removed domain from company"
+ },
+ {
+ "value": "remove member from group.",
+ "label": "removed member from group"
+ },
+ {
+ "value": "remove member from a role.",
+ "label": "remove member from a role"
+ },
+ {
+ "value": "Disable Strong Authentication.",
+ "label": "Disable Strong Authentication."
+ },
{
"value": "remove service principal.",
"label": "removed a service principal from the directory"
@@ -113,19 +202,58 @@
"value": "remove service principal credentials.",
"label": "removed credentials from a service principal"
},
- { "value": "remove-mailboxpermission", "label": "removed delegate mailbox permissions" },
- { "value": "remove member from role.", "label": "removed a user from a directory role" },
- { "value": "remove partner from company.", "label": "removed a partner from the directory" },
- { "value": "removefolderpermissions", "label": "removed permissions from folder" },
- { "value": "reset user password.", "label": "reset user password" },
- { "value": "send", "label": "sent message" },
- { "value": "sendas", "label": "sent message using send as permissions" },
- { "value": "sendonbehalf", "label": "sent message using send on behalf permissions" },
- { "value": "set company contact information.", "label": "set company contact information" },
- { "value": "set company information.", "label": "set company information" },
- { "value": "set delegation entry.", "label": "set delegation entry" },
- { "value": "set dirsyncenabled flag.", "label": "turned on azure ad sync" },
- { "value": "set domain authentication.", "label": "set domain authentication" },
+ {
+ "value": "remove-mailboxpermission",
+ "label": "removed delegate mailbox permissions"
+ },
+ {
+ "value": "remove member from role.",
+ "label": "removed a user from a directory role"
+ },
+ {
+ "value": "remove partner from company.",
+ "label": "removed a partner from the directory"
+ },
+ {
+ "value": "removefolderpermissions",
+ "label": "removed permissions from folder"
+ },
+ {
+ "value": "reset user password.",
+ "label": "reset user password"
+ },
+ {
+ "value": "send",
+ "label": "sent message"
+ },
+ {
+ "value": "sendas",
+ "label": "sent message using send as permissions"
+ },
+ {
+ "value": "sendonbehalf",
+ "label": "sent message using send on behalf permissions"
+ },
+ {
+ "value": "set company contact information.",
+ "label": "set company contact information"
+ },
+ {
+ "value": "set company information.",
+ "label": "set company information"
+ },
+ {
+ "value": "set delegation entry.",
+ "label": "set delegation entry"
+ },
+ {
+ "value": "set dirsyncenabled flag.",
+ "label": "turned on azure ad sync"
+ },
+ {
+ "value": "set domain authentication.",
+ "label": "set domain authentication"
+ },
{
"value": "set federation settings on domain.",
"label": "updated the federation settings for a domain"
@@ -134,29 +262,69 @@
"value": "set force change user password.",
"label": "set property that forces user to change password"
},
- { "value": "set-inboxrule", "label": "modified inbox rule from outlook web app" },
- { "value": "set license properties.", "label": "set license properties" },
- { "value": "set password policy.", "label": "set password policy" },
- { "value": "softdelete", "label": "deleted messages from deleted items folder" },
- { "value": "update", "label": "updated message" },
- { "value": "update user.", "label": "updated user" },
- { "value": "update group.", "label": "updated group" },
- { "value": "update domain.", "label": "updated domain" },
+ {
+ "value": "set-inboxrule",
+ "label": "modified inbox rule from outlook web app"
+ },
+ {
+ "value": "set license properties.",
+ "label": "set license properties"
+ },
+ {
+ "value": "set password policy.",
+ "label": "set password policy"
+ },
+ {
+ "value": "softdelete",
+ "label": "deleted messages from deleted items folder"
+ },
+ {
+ "value": "update",
+ "label": "updated message"
+ },
+ {
+ "value": "update user.",
+ "label": "updated user"
+ },
+ {
+ "value": "update group.",
+ "label": "updated group"
+ },
+ {
+ "value": "update domain.",
+ "label": "updated domain"
+ },
{
"value": "updatecalendardelegation",
"label": "added or removed user with delegate access to calendar folder"
},
- { "value": "updatefolderpermissions", "label": "modified folder permission" },
- { "value": "updateinboxrules", "label": "updated inbox rules from outlook client" },
- { "value": "verify domain.", "label": "verified domain" },
- { "value": "verify email verified domain.", "label": "verified email verified domain" },
+ {
+ "value": "updatefolderpermissions",
+ "label": "modified folder permission"
+ },
+ {
+ "value": "updateinboxrules",
+ "label": "updated inbox rules from outlook client"
+ },
+ {
+ "value": "verify domain.",
+ "label": "verified domain"
+ },
+ {
+ "value": "verify email verified domain.",
+ "label": "verified email verified domain"
+ },
{
"value": "Update StsRefreshTokenValidFrom Timestamp.",
"label": "Update StsRefreshTokenValidFrom Timestamp."
}
],
"List:LogonType": [
- { "value": 0, "Membername": "Owner", "label": "The mailbox owner." },
+ {
+ "value": 0,
+ "Membername": "Owner",
+ "label": "The mailbox owner."
+ },
{
"value": 1,
"Membername": "Admin",
@@ -177,19 +345,63 @@
"Membername": "SystemService",
"label": "A service account in the Microsoft datacenter"
},
- { "value": 5, "Membername": "BestAccess", "label": "Reserved for internal use." },
- { "value": 6, "Membername": "DelegatedAdmin", "label": "A delegated administrator." }
+ {
+ "value": 5,
+ "Membername": "BestAccess",
+ "label": "Reserved for internal use."
+ },
+ {
+ "value": 6,
+ "Membername": "DelegatedAdmin",
+ "label": "A delegated administrator."
+ }
],
"List:UserType": [
- { "value": 0, "Membername": "Regular", "label": "A regular user." },
- { "value": 1, "Membername": "Reserved", "label": "A reserved user." },
- { "value": 2, "Membername": "Admin", "label": "An administrator." },
- { "value": 3, "Membername": "DcAdmin", "label": "A Microsoft datacenter operator." },
- { "value": 4, "Membername": "System", "label": "A system account." },
- { "value": 5, "Membername": "Application", "label": "An application." },
- { "value": 6, "Membername": "ServicePrincipal", "label": "A service principal." },
- { "value": 7, "Membername": "CustomPolicy", "label": "A custom policy." },
- { "value": 8, "Membername": "SystemPolicy", "label": "A system policy." }
+ {
+ "value": 0,
+ "Membername": "Regular",
+ "label": "A regular user."
+ },
+ {
+ "value": 1,
+ "Membername": "Reserved",
+ "label": "A reserved user."
+ },
+ {
+ "value": 2,
+ "Membername": "Admin",
+ "label": "An administrator."
+ },
+ {
+ "value": 3,
+ "Membername": "DcAdmin",
+ "label": "A Microsoft datacenter operator."
+ },
+ {
+ "value": 4,
+ "Membername": "System",
+ "label": "A system account."
+ },
+ {
+ "value": 5,
+ "Membername": "Application",
+ "label": "An application."
+ },
+ {
+ "value": 6,
+ "Membername": "ServicePrincipal",
+ "label": "A service principal."
+ },
+ {
+ "value": 7,
+ "Membername": "CustomPolicy",
+ "label": "A custom policy."
+ },
+ {
+ "value": 8,
+ "Membername": "SystemPolicy",
+ "label": "A system policy."
+ }
],
"List:AuditLogRecordType": [
{
@@ -207,13 +419,21 @@
"Membername": "ExchangeItemGroup",
"label": "Events from an Exchange mailbox audit log for actions that can be performed on multiple items, such as moving or deleted one or more email messages."
},
- { "value": 4, "Membername": "SharePoint", "label": "SharePoint events." },
+ {
+ "value": 4,
+ "Membername": "SharePoint",
+ "label": "SharePoint events."
+ },
{
"value": 6,
"Membername": "SharePointFileOperation",
"label": "SharePoint file operation events."
},
- { "value": 7, "Membername": "OneDrive", "label": "OneDrive for Business events." },
+ {
+ "value": 7,
+ "Membername": "OneDrive",
+ "label": "OneDrive for Business events."
+ },
{
"value": 8,
"Membername": "AzureActiveDirectory",
@@ -269,9 +489,21 @@
"Membername": "ExchangeAggregatedOperation",
"label": "Aggregated Exchange mailbox auditing events."
},
- { "value": 20, "Membername": "PowerBIAudit", "label": "Power BI events." },
- { "value": 21, "Membername": "CRM", "label": "Dynamics 365 events." },
- { "value": 22, "Membername": "Yammer", "label": "Yammer events." },
+ {
+ "value": 20,
+ "Membername": "PowerBIAudit",
+ "label": "Power BI events."
+ },
+ {
+ "value": 21,
+ "Membername": "CRM",
+ "label": "Dynamics 365 events."
+ },
+ {
+ "value": 22,
+ "Membername": "Yammer",
+ "label": "Yammer events."
+ },
{
"value": 23,
"Membername": "SkypeForBusinessCmdlets",
@@ -282,7 +514,11 @@
"Membername": "Discovery",
"label": "Events for eDiscovery activities performed by running content searches and managing eDiscovery cases in the Security & Compliance Center."
},
- { "value": 25, "Membername": "MicrosoftTeams", "label": "Events from Microsoft Teams." },
+ {
+ "value": 25,
+ "Membername": "MicrosoftTeams",
+ "label": "Events from Microsoft Teams."
+ },
{
"value": 28,
"Membername": "ThreatIntelligence",
@@ -298,8 +534,16 @@
"Membername": "MicrosoftFlow",
"label": "Microsoft Power Automate (formerly called Microsoft Flow) events."
},
- { "value": 31, "Membername": "AeD", "label": "Advanced eDiscovery events." },
- { "value": 32, "Membername": "MicrosoftStream", "label": "Microsoft Stream events." },
+ {
+ "value": 31,
+ "Membername": "AeD",
+ "label": "Advanced eDiscovery events."
+ },
+ {
+ "value": 32,
+ "Membername": "MicrosoftStream",
+ "label": "Microsoft Stream events."
+ },
{
"value": 33,
"Membername": "ComplianceDLPSharePointClassification",
@@ -310,7 +554,11 @@
"Membername": "ThreatFinder",
"label": "Campaign-related events from Microsoft Defender for Office 365."
},
- { "value": 35, "Membername": "Project", "label": "Microsoft Project events." },
+ {
+ "value": 35,
+ "Membername": "Project",
+ "label": "Microsoft Project events."
+ },
{
"value": 36,
"Membername": "SharePointListOperation",
@@ -326,7 +574,11 @@
"Membername": "DataGovernance",
"label": "Events related to retention policies and retention labels in the Security & Compliance Center"
},
- { "value": 39, "Membername": "Kaizala", "label": "Kaizala events." },
+ {
+ "value": 39,
+ "Membername": "Kaizala",
+ "label": "Kaizala events."
+ },
{
"value": 40,
"Membername": "SecurityComplianceAlerts",
@@ -352,7 +604,11 @@
"Membername": "WorkplaceAnalytics",
"label": "Workplace Analytics events."
},
- { "value": 45, "Membername": "PowerAppsApp", "label": "Power Apps events." },
+ {
+ "value": 45,
+ "Membername": "PowerAppsApp",
+ "label": "Power Apps events."
+ },
{
"value": 46,
"Membername": "PowerAppsPlan",
@@ -408,13 +664,21 @@
"Membername": "SharePointFieldOperation",
"label": "SharePoint list field events."
},
- { "value": 57, "Membername": "MicrosoftTeamsAdmin", "label": "Teams admin events." },
+ {
+ "value": 57,
+ "Membername": "MicrosoftTeamsAdmin",
+ "label": "Teams admin events."
+ },
{
"value": 58,
"Membername": "HRSignal",
"label": "Events related to HR data signals that support the Insider risk management solution."
},
- { "value": 59, "Membername": "MicrosoftTeamsDevice", "label": "Teams device events." },
+ {
+ "value": 59,
+ "Membername": "MicrosoftTeamsDevice",
+ "label": "Teams device events."
+ },
{
"value": 60,
"Membername": "MicrosoftTeamsAnalytics",
@@ -430,15 +694,31 @@
"Membername": "Campaign",
"label": "Email campaign events from Microsoft Defender for Office 365."
},
- { "value": 63, "Membername": "DLPEndpoint", "label": "Endpoint DLP events." },
+ {
+ "value": 63,
+ "Membername": "DLPEndpoint",
+ "label": "Endpoint DLP events."
+ },
{
"value": 64,
"Membername": "AirInvestigation",
"label": "Automated incident response (AIR) events."
},
- { "value": 65, "Membername": "Quarantine", "label": "Quarantine events." },
- { "value": 66, "Membername": "MicrosoftForms", "label": "Microsoft Forms events." },
- { "value": 67, "Membername": "ApplicationAudit", "label": "Application audit events." },
+ {
+ "value": 65,
+ "Membername": "Quarantine",
+ "label": "Quarantine events."
+ },
+ {
+ "value": 66,
+ "Membername": "MicrosoftForms",
+ "label": "Microsoft Forms events."
+ },
+ {
+ "value": 67,
+ "Membername": "ApplicationAudit",
+ "label": "Application audit events."
+ },
{
"value": 68,
"Membername": "ComplianceSupervisionExchange",
@@ -464,13 +744,21 @@
"Membername": "MipAutoLabelSharePointPolicyLocation",
"label": "Auto-labeling policy events in SharePoint."
},
- { "value": 73, "Membername": "MicrosoftTeamsShifts", "label": "Teams Shifts events." },
+ {
+ "value": 73,
+ "Membername": "MicrosoftTeamsShifts",
+ "label": "Teams Shifts events."
+ },
{
"value": 75,
"Membername": "MipAutoLabelExchangeItem",
"label": "Auto-labeling events in Exchange."
},
- { "value": 76, "Membername": "CortanaBriefing", "label": "Briefing email events." },
+ {
+ "value": 76,
+ "Membername": "CortanaBriefing",
+ "label": "Briefing email events."
+ },
{
"value": 78,
"Membername": "WDATPAlerts",
@@ -526,15 +814,31 @@
"Membername": "PhysicalBadgingSignal",
"label": "Events related to physical badging signals that support the Insider risk management solution."
},
- { "value": 93, "Membername": "AipDiscover", "label": "AIP scanner events" },
+ {
+ "value": 93,
+ "Membername": "AipDiscover",
+ "label": "AIP scanner events"
+ },
{
"value": 94,
"Membername": "AipSensitivityLabelAction",
"label": "AIP sensitivity label events"
},
- { "value": 95, "Membername": "AipProtectionAction", "label": "AIP protection events" },
- { "value": 96, "Membername": "AipFileDeleted", "label": "AIP file deletion events" },
- { "value": 97, "Membername": "AipHeartBeat", "label": "AIP heartbeat events" },
+ {
+ "value": 95,
+ "Membername": "AipProtectionAction",
+ "label": "AIP protection events"
+ },
+ {
+ "value": 96,
+ "Membername": "AipFileDeleted",
+ "label": "AIP file deletion events"
+ },
+ {
+ "value": 97,
+ "Membername": "AipHeartBeat",
+ "label": "AIP heartbeat events"
+ },
{
"value": 98,
"Membername": "MCASAlerts",
@@ -560,8 +864,16 @@
"Membername": "SharePointSearch",
"label": "Events related to searching an organization's SharePoint home site."
},
- { "value": 103, "Membername": "PrivacyInsights", "label": "Privacy insight events." },
- { "value": 105, "Membername": "MyAnalyticsSettings", "label": "MyAnalytics events." },
+ {
+ "value": 103,
+ "Membername": "PrivacyInsights",
+ "label": "Privacy insight events."
+ },
+ {
+ "value": 105,
+ "Membername": "MyAnalyticsSettings",
+ "label": "MyAnalytics events."
+ },
{
"value": 106,
"Membername": "SecurityComplianceUserChange",
@@ -617,13 +929,21 @@
"Membername": "PowerPagesSite",
"label": "Activities related to Power Pages site."
},
- { "value": 188, "Membername": "PlannerPlan", "label": "Microsoft Planner plan events." },
+ {
+ "value": 188,
+ "Membername": "PlannerPlan",
+ "label": "Microsoft Planner plan events."
+ },
{
"value": 189,
"Membername": "PlannerCopyPlan",
"label": "Microsoft Planner copy plan events."
},
- { "value": 190, "Membername": "PlannerTask", "label": "Microsoft Planner task events." },
+ {
+ "value": 190,
+ "Membername": "PlannerTask",
+ "label": "Microsoft Planner task events."
+ },
{
"value": 191,
"Membername": "PlannerRoster",
@@ -674,7 +994,11 @@
"Membername": "ProjectForThewebRoadmapSettings",
"label": "Microsoft Project for the web roadmap tenant settings events."
},
- { "value": 216, "Membername": "Viva Goals", "label": "Viva Goals events." },
+ {
+ "value": 216,
+ "Membername": "Viva Goals",
+ "label": "Viva Goals events."
+ },
{
"value": 217,
"Membername": "MicrosoftGraphDataConnectConsent",
@@ -685,7 +1009,11 @@
"Membername": "AttackSimAdmin",
"label": "Events related to admin activities in Attack Simulation & Training in Microsoft Defender for Office 365."
},
- { "value": 230, "Membername": "TeamsUpStrings", "label": "Teams UpStrings App Events." },
+ {
+ "value": 230,
+ "Membername": "TeamsUpStrings",
+ "label": "Teams UpStrings App Events."
+ },
{
"value": 231,
"Membername": "PlannerRosterSensitivityLabel",
@@ -718,257 +1046,1013 @@
}
],
"List:countryList": [
- { "value": "AF", "label": "Afghanistan" },
- { "value": "AX", "label": "\u00c5land Islands" },
- { "value": "AL", "label": "Albania" },
- { "value": "DZ", "label": "Algeria" },
- { "value": "AS", "label": "American Samoa" },
- { "value": "AD", "label": "Andorra" },
- { "value": "AO", "label": "Angola" },
- { "value": "AI", "label": "Anguilla" },
- { "value": "AQ", "label": "Antarctica" },
- { "value": "AG", "label": "Antigua and Barbuda" },
- { "value": "AR", "label": "Argentina" },
- { "value": "AM", "label": "Armenia" },
- { "value": "AW", "label": "Aruba" },
- { "value": "AC", "label": "Ascension Island" },
- { "value": "AU", "label": "Australia" },
- { "value": "AT", "label": "Austria" },
- { "value": "AZ", "label": "Azerbaijan" },
- { "value": "BS", "label": "Bahamas" },
- { "value": "BH", "label": "Bahrain" },
- { "value": "BD", "label": "Bangladesh" },
- { "value": "BB", "label": "Barbados" },
- { "value": "BY", "label": "Belarus" },
- { "value": "BE", "label": "Belgium" },
- { "value": "BZ", "label": "Belize" },
- { "value": "BJ", "label": "Benin" },
- { "value": "BM", "label": "Bermuda" },
- { "value": "BT", "label": "Bhutan" },
- { "value": "BO", "label": "Bolivia, Plurinational State of" },
- { "value": "BQ", "label": "Bonaire, Sint Eustatius and Saba" },
- { "value": "BA", "label": "Bosnia and Herzegovina" },
- { "value": "BW", "label": "Botswana" },
- { "value": "BV", "label": "Bouvet Island" },
- { "value": "BR", "label": "Brazil" },
- { "value": "IO", "label": "British Indian Ocean Territory" },
- { "value": "BN", "label": "Brunei Darussalam" },
- { "value": "BG", "label": "Bulgaria" },
- { "value": "BF", "label": "Burkina Faso" },
- { "value": "BI", "label": "Burundi" },
- { "value": "KH", "label": "Cambodia" },
- { "value": "CM", "label": "Cameroon" },
- { "value": "CA", "label": "Canada" },
- { "value": "CV", "label": "Cape Verde" },
- { "value": "KY", "label": "Cayman Islands" },
- { "value": "CF", "label": "Central African Republic" },
- { "value": "TD", "label": "Chad" },
- { "value": "CL", "label": "Chile" },
- { "value": "CN", "label": "China" },
- { "value": "CX", "label": "Christmas Island" },
- { "value": "CC", "label": "Cocos (Keeling) Islands" },
- { "value": "CO", "label": "Colombia" },
- { "value": "KM", "label": "Comoros" },
- { "value": "CG", "label": "Congo" },
- { "value": "CD", "label": "Congo, the Democratic Republic of the" },
- { "value": "CK", "label": "Cook Islands" },
- { "value": "CR", "label": "Costa Rica" },
- { "value": "CI", "label": "C\u00f4te d'Ivoire" },
- { "value": "HR", "label": "Croatia" },
- { "value": "CU", "label": "Cuba" },
- { "value": "CW", "label": "Cura\u00e7ao" },
- { "value": "CY", "label": "Cyprus" },
- { "value": "CZ", "label": "Czech Republic" },
- { "value": "DK", "label": "Denmark" },
- { "value": "DG", "label": "Diego Garcia" },
- { "value": "DJ", "label": "Djibouti" },
- { "value": "DM", "label": "Dominica" },
- { "value": "DO", "label": "Dominican Republic" },
- { "value": "EC", "label": "Ecuador" },
- { "value": "EG", "label": "Egypt" },
- { "value": "SV", "label": "El Salvador" },
- { "value": "GQ", "label": "Equatorial Guinea" },
- { "value": "ER", "label": "Eritrea" },
- { "value": "EE", "label": "Estonia" },
- { "value": "ET", "label": "Ethiopia" },
- { "value": "FK", "label": "Falkland Islands (Malvinas)" },
- { "value": "FO", "label": "Faroe Islands" },
- { "value": "FJ", "label": "Fiji" },
- { "value": "FI", "label": "Finland" },
- { "value": "FR", "label": "France" },
- { "value": "GF", "label": "French Guiana" },
- { "value": "PF", "label": "French Polynesia" },
- { "value": "TF", "label": "French Southern Territories" },
- { "value": "GA", "label": "Gabon" },
- { "value": "GM", "label": "Gambia" },
- { "value": "GE", "label": "Georgia" },
- { "value": "DE", "label": "Germany" },
- { "value": "GH", "label": "Ghana" },
- { "value": "GI", "label": "Gibraltar" },
- { "value": "GR", "label": "Greece" },
- { "value": "GL", "label": "Greenland" },
- { "value": "GD", "label": "Grenada" },
- { "value": "GP", "label": "Guadeloupe" },
- { "value": "GU", "label": "Guam" },
- { "value": "GT", "label": "Guatemala" },
- { "value": "GG", "label": "Guernsey" },
- { "value": "GN", "label": "Guinea" },
- { "value": "GW", "label": "Guinea-Bissau" },
- { "value": "GY", "label": "Guyana" },
- { "value": "HT", "label": "Haiti" },
- { "value": "HM", "label": "Heard Island and McDonald Islands" },
- { "value": "VA", "label": "Holy See (Vatican City State)" },
- { "value": "HN", "label": "Honduras" },
- { "value": "HK", "label": "Hong Kong" },
- { "value": "HU", "label": "Hungary" },
- { "value": "IS", "label": "Iceland" },
- { "value": "IN", "label": "India" },
- { "value": "ID", "label": "Indonesia" },
- { "value": "IR", "label": "Iran, Islamic Republic of" },
- { "value": "IQ", "label": "Iraq" },
- { "value": "IE", "label": "Ireland" },
- { "value": "IM", "label": "Isle of Man" },
- { "value": "IL", "label": "Israel" },
- { "value": "IT", "label": "Italy" },
- { "value": "JM", "label": "Jamaica" },
- { "value": "JP", "label": "Japan" },
- { "value": "JE", "label": "Jersey" },
- { "value": "JO", "label": "Jordan" },
- { "value": "KZ", "label": "Kazakhstan" },
- { "value": "KE", "label": "Kenya" },
- { "value": "KI", "label": "Kiribati" },
- { "value": "KP", "label": "Korea, Democratic People's Republic of" },
- { "value": "KR", "label": "Korea, Republic of" },
- { "value": "XK", "label": "Kosovo" },
- { "value": "KW", "label": "Kuwait" },
- { "value": "KG", "label": "Kyrgyzstan" },
- { "value": "LA", "label": "Lao People's Democratic Republic" },
- { "value": "LV", "label": "Latvia" },
- { "value": "LB", "label": "Lebanon" },
- { "value": "LS", "label": "Lesotho" },
- { "value": "LR", "label": "Liberia" },
- { "value": "LY", "label": "Libya" },
- { "value": "LI", "label": "Liechtenstein" },
- { "value": "LT", "label": "Lithuania" },
- { "value": "LU", "label": "Luxembourg" },
- { "value": "MO", "label": "Macao" },
- { "value": "MK", "label": "Macedonia, the Former Yugoslav Republic of" },
- { "value": "MG", "label": "Madagascar" },
- { "value": "MW", "label": "Malawi" },
- { "value": "MY", "label": "Malaysia" },
- { "value": "MV", "label": "Maldives" },
- { "value": "ML", "label": "Mali" },
- { "value": "MT", "label": "Malta" },
- { "value": "MH", "label": "Marshall Islands" },
- { "value": "MQ", "label": "Martinique" },
- { "value": "MR", "label": "Mauritania" },
- { "value": "MU", "label": "Mauritius" },
- { "value": "YT", "label": "Mayotte" },
- { "value": "MX", "label": "Mexico" },
- { "value": "FM", "label": "Micronesia, Federated States of" },
- { "value": "MD", "label": "Moldova, Republic of" },
- { "value": "MC", "label": "Monaco" },
- { "value": "MN", "label": "Mongolia" },
- { "value": "ME", "label": "Montenegro" },
- { "value": "MS", "label": "Montserrat" },
- { "value": "MA", "label": "Morocco" },
- { "value": "MZ", "label": "Mozambique" },
- { "value": "MM", "label": "Myanmar" },
- { "value": "NA", "label": "Namibia" },
- { "value": "NR", "label": "Nauru" },
- { "value": "NP", "label": "Nepal" },
- { "value": "NL", "label": "Netherlands" },
- { "value": "NC", "label": "New Caledonia" },
- { "value": "NZ", "label": "New Zealand" },
- { "value": "NI", "label": "Nicaragua" },
- { "value": "NE", "label": "Niger" },
- { "value": "NG", "label": "Nigeria" },
- { "value": "NU", "label": "Niue" },
- { "value": "NF", "label": "Norfolk Island" },
- { "value": "MP", "label": "Northern Mariana Islands" },
- { "value": "NO", "label": "Norway" },
- { "value": "OM", "label": "Oman" },
- { "value": "PK", "label": "Pakistan" },
- { "value": "PW", "label": "Palau" },
- { "value": "PS", "label": "Palestine, State of" },
- { "value": "PA", "label": "Panama" },
- { "value": "PG", "label": "Papua New Guinea" },
- { "value": "PY", "label": "Paraguay" },
- { "value": "PE", "label": "Peru" },
- { "value": "PH", "label": "Philippines" },
- { "value": "PN", "label": "Pitcairn" },
- { "value": "PL", "label": "Poland" },
- { "value": "PT", "label": "Portugal" },
- { "value": "PR", "label": "Puerto Rico" },
- { "value": "QA", "label": "Qatar" },
- { "value": "RE", "label": "R\u00e9union" },
- { "value": "RO", "label": "Romania" },
- { "value": "RU", "label": "Russian Federation" },
- { "value": "RW", "label": "Rwanda" },
- { "value": "BL", "label": "Saint Barth\u00e9lemy" },
- { "value": "SH", "label": "Saint Helena, Ascension and Tristan da Cunha" },
- { "value": "KN", "label": "Saint Kitts and Nevis" },
- { "value": "LC", "label": "Saint Lucia" },
- { "value": "MF", "label": "Saint Martin (French part)" },
- { "value": "PM", "label": "Saint Pierre and Miquelon" },
- { "value": "VC", "label": "Saint Vincent and the Grenadines" },
- { "value": "WS", "label": "Samoa" },
- { "value": "SM", "label": "San Marino" },
- { "value": "ST", "label": "Sao Tome and Principe" },
- { "value": "SA", "label": "Saudi Arabia" },
- { "value": "SN", "label": "Senegal" },
- { "value": "RS", "label": "Serbia" },
- { "value": "SC", "label": "Seychelles" },
- { "value": "SL", "label": "Sierra Leone" },
- { "value": "SG", "label": "Singapore" },
- { "value": "SX", "label": "Sint Maarten (Dutch part)" },
- { "value": "SK", "label": "Slovakia" },
- { "value": "SI", "label": "Slovenia" },
- { "value": "SB", "label": "Solomon Islands" },
- { "value": "SO", "label": "Somalia" },
- { "value": "ZA", "label": "South Africa" },
- { "value": "GS", "label": "South Georgia and the South Sandwich Islands" },
- { "value": "SS", "label": "South Sudan" },
- { "value": "ES", "label": "Spain" },
- { "value": "LK", "label": "Sri Lanka" },
- { "value": "SD", "label": "Sudan" },
- { "value": "SR", "label": "Suriname" },
- { "value": "SJ", "label": "Svalbard and Jan Mayen" },
- { "value": "SZ", "label": "Swaziland" },
- { "value": "SE", "label": "Sweden" },
- { "value": "CH", "label": "Switzerland" },
- { "value": "SY", "label": "Syrian Arab Republic" },
- { "value": "TW", "label": "Taiwan, Province of China" },
- { "value": "TJ", "label": "Tajikistan" },
- { "value": "TZ", "label": "Tanzania, United Republic of" },
- { "value": "TH", "label": "Thailand" },
- { "value": "TL", "label": "Timor-Leste" },
- { "value": "TG", "label": "Togo" },
- { "value": "TK", "label": "Tokelau" },
- { "value": "TO", "label": "Tonga" },
- { "value": "TT", "label": "Trinidad and Tobago" },
- { "value": "TN", "label": "Tunisia" },
- { "value": "TR", "label": "Turkey" },
- { "value": "TM", "label": "Turkmenistan" },
- { "value": "TC", "label": "Turks and Caicos Islands" },
- { "value": "TV", "label": "Tuvalu" },
- { "value": "UG", "label": "Uganda" },
- { "value": "UA", "label": "Ukraine" },
- { "value": "AE", "label": "United Arab Emirates" },
- { "value": "GB", "label": "United Kingdom" },
- { "value": "US", "label": "United States" },
- { "value": "UM", "label": "United States Minor Outlying Islands" },
- { "value": "UY", "label": "Uruguay" },
- { "value": "UZ", "label": "Uzbekistan" },
- { "value": "VU", "label": "Vanuatu" },
- { "value": "VE", "label": "Venezuela, Bolivarian Republic of" },
- { "value": "VN", "label": "Viet Nam" },
- { "value": "VG", "label": "Virgin Islands, British" },
- { "value": "VI", "label": "Virgin Islands, U.S." },
- { "value": "WF", "label": "Wallis and Futuna" },
- { "value": "EH", "label": "Western Sahara" },
- { "value": "YE", "label": "Yemen" },
- { "value": "ZM", "label": "Zambia" },
- { "value": "ZW", "label": "Zimbabwe" }
+ {
+ "value": "AF",
+ "label": "Afghanistan"
+ },
+ {
+ "value": "AX",
+ "label": "\u00c5land Islands"
+ },
+ {
+ "value": "AL",
+ "label": "Albania"
+ },
+ {
+ "value": "DZ",
+ "label": "Algeria"
+ },
+ {
+ "value": "AS",
+ "label": "American Samoa"
+ },
+ {
+ "value": "AD",
+ "label": "Andorra"
+ },
+ {
+ "value": "AO",
+ "label": "Angola"
+ },
+ {
+ "value": "AI",
+ "label": "Anguilla"
+ },
+ {
+ "value": "AQ",
+ "label": "Antarctica"
+ },
+ {
+ "value": "AG",
+ "label": "Antigua and Barbuda"
+ },
+ {
+ "value": "AR",
+ "label": "Argentina"
+ },
+ {
+ "value": "AM",
+ "label": "Armenia"
+ },
+ {
+ "value": "AW",
+ "label": "Aruba"
+ },
+ {
+ "value": "AC",
+ "label": "Ascension Island"
+ },
+ {
+ "value": "AU",
+ "label": "Australia"
+ },
+ {
+ "value": "AT",
+ "label": "Austria"
+ },
+ {
+ "value": "AZ",
+ "label": "Azerbaijan"
+ },
+ {
+ "value": "BS",
+ "label": "Bahamas"
+ },
+ {
+ "value": "BH",
+ "label": "Bahrain"
+ },
+ {
+ "value": "BD",
+ "label": "Bangladesh"
+ },
+ {
+ "value": "BB",
+ "label": "Barbados"
+ },
+ {
+ "value": "BY",
+ "label": "Belarus"
+ },
+ {
+ "value": "BE",
+ "label": "Belgium"
+ },
+ {
+ "value": "BZ",
+ "label": "Belize"
+ },
+ {
+ "value": "BJ",
+ "label": "Benin"
+ },
+ {
+ "value": "BM",
+ "label": "Bermuda"
+ },
+ {
+ "value": "BT",
+ "label": "Bhutan"
+ },
+ {
+ "value": "BO",
+ "label": "Bolivia, Plurinational State of"
+ },
+ {
+ "value": "BQ",
+ "label": "Bonaire, Sint Eustatius and Saba"
+ },
+ {
+ "value": "BA",
+ "label": "Bosnia and Herzegovina"
+ },
+ {
+ "value": "BW",
+ "label": "Botswana"
+ },
+ {
+ "value": "BV",
+ "label": "Bouvet Island"
+ },
+ {
+ "value": "BR",
+ "label": "Brazil"
+ },
+ {
+ "value": "IO",
+ "label": "British Indian Ocean Territory"
+ },
+ {
+ "value": "BN",
+ "label": "Brunei Darussalam"
+ },
+ {
+ "value": "BG",
+ "label": "Bulgaria"
+ },
+ {
+ "value": "BF",
+ "label": "Burkina Faso"
+ },
+ {
+ "value": "BI",
+ "label": "Burundi"
+ },
+ {
+ "value": "KH",
+ "label": "Cambodia"
+ },
+ {
+ "value": "CM",
+ "label": "Cameroon"
+ },
+ {
+ "value": "CA",
+ "label": "Canada"
+ },
+ {
+ "value": "CV",
+ "label": "Cape Verde"
+ },
+ {
+ "value": "KY",
+ "label": "Cayman Islands"
+ },
+ {
+ "value": "CF",
+ "label": "Central African Republic"
+ },
+ {
+ "value": "TD",
+ "label": "Chad"
+ },
+ {
+ "value": "CL",
+ "label": "Chile"
+ },
+ {
+ "value": "CN",
+ "label": "China"
+ },
+ {
+ "value": "CX",
+ "label": "Christmas Island"
+ },
+ {
+ "value": "CC",
+ "label": "Cocos (Keeling) Islands"
+ },
+ {
+ "value": "CO",
+ "label": "Colombia"
+ },
+ {
+ "value": "KM",
+ "label": "Comoros"
+ },
+ {
+ "value": "CG",
+ "label": "Congo"
+ },
+ {
+ "value": "CD",
+ "label": "Congo, the Democratic Republic of the"
+ },
+ {
+ "value": "CK",
+ "label": "Cook Islands"
+ },
+ {
+ "value": "CR",
+ "label": "Costa Rica"
+ },
+ {
+ "value": "CI",
+ "label": "C\u00f4te d'Ivoire"
+ },
+ {
+ "value": "HR",
+ "label": "Croatia"
+ },
+ {
+ "value": "CU",
+ "label": "Cuba"
+ },
+ {
+ "value": "CW",
+ "label": "Cura\u00e7ao"
+ },
+ {
+ "value": "CY",
+ "label": "Cyprus"
+ },
+ {
+ "value": "CZ",
+ "label": "Czech Republic"
+ },
+ {
+ "value": "DK",
+ "label": "Denmark"
+ },
+ {
+ "value": "DG",
+ "label": "Diego Garcia"
+ },
+ {
+ "value": "DJ",
+ "label": "Djibouti"
+ },
+ {
+ "value": "DM",
+ "label": "Dominica"
+ },
+ {
+ "value": "DO",
+ "label": "Dominican Republic"
+ },
+ {
+ "value": "EC",
+ "label": "Ecuador"
+ },
+ {
+ "value": "EG",
+ "label": "Egypt"
+ },
+ {
+ "value": "SV",
+ "label": "El Salvador"
+ },
+ {
+ "value": "GQ",
+ "label": "Equatorial Guinea"
+ },
+ {
+ "value": "ER",
+ "label": "Eritrea"
+ },
+ {
+ "value": "EE",
+ "label": "Estonia"
+ },
+ {
+ "value": "ET",
+ "label": "Ethiopia"
+ },
+ {
+ "value": "FK",
+ "label": "Falkland Islands (Malvinas)"
+ },
+ {
+ "value": "FO",
+ "label": "Faroe Islands"
+ },
+ {
+ "value": "FJ",
+ "label": "Fiji"
+ },
+ {
+ "value": "FI",
+ "label": "Finland"
+ },
+ {
+ "value": "FR",
+ "label": "France"
+ },
+ {
+ "value": "GF",
+ "label": "French Guiana"
+ },
+ {
+ "value": "PF",
+ "label": "French Polynesia"
+ },
+ {
+ "value": "TF",
+ "label": "French Southern Territories"
+ },
+ {
+ "value": "GA",
+ "label": "Gabon"
+ },
+ {
+ "value": "GM",
+ "label": "Gambia"
+ },
+ {
+ "value": "GE",
+ "label": "Georgia"
+ },
+ {
+ "value": "DE",
+ "label": "Germany"
+ },
+ {
+ "value": "GH",
+ "label": "Ghana"
+ },
+ {
+ "value": "GI",
+ "label": "Gibraltar"
+ },
+ {
+ "value": "GR",
+ "label": "Greece"
+ },
+ {
+ "value": "GL",
+ "label": "Greenland"
+ },
+ {
+ "value": "GD",
+ "label": "Grenada"
+ },
+ {
+ "value": "GP",
+ "label": "Guadeloupe"
+ },
+ {
+ "value": "GU",
+ "label": "Guam"
+ },
+ {
+ "value": "GT",
+ "label": "Guatemala"
+ },
+ {
+ "value": "GG",
+ "label": "Guernsey"
+ },
+ {
+ "value": "GN",
+ "label": "Guinea"
+ },
+ {
+ "value": "GW",
+ "label": "Guinea-Bissau"
+ },
+ {
+ "value": "GY",
+ "label": "Guyana"
+ },
+ {
+ "value": "HT",
+ "label": "Haiti"
+ },
+ {
+ "value": "HM",
+ "label": "Heard Island and McDonald Islands"
+ },
+ {
+ "value": "VA",
+ "label": "Holy See (Vatican City State)"
+ },
+ {
+ "value": "HN",
+ "label": "Honduras"
+ },
+ {
+ "value": "HK",
+ "label": "Hong Kong"
+ },
+ {
+ "value": "HU",
+ "label": "Hungary"
+ },
+ {
+ "value": "IS",
+ "label": "Iceland"
+ },
+ {
+ "value": "IN",
+ "label": "India"
+ },
+ {
+ "value": "ID",
+ "label": "Indonesia"
+ },
+ {
+ "value": "IR",
+ "label": "Iran, Islamic Republic of"
+ },
+ {
+ "value": "IQ",
+ "label": "Iraq"
+ },
+ {
+ "value": "IE",
+ "label": "Ireland"
+ },
+ {
+ "value": "IM",
+ "label": "Isle of Man"
+ },
+ {
+ "value": "IL",
+ "label": "Israel"
+ },
+ {
+ "value": "IT",
+ "label": "Italy"
+ },
+ {
+ "value": "JM",
+ "label": "Jamaica"
+ },
+ {
+ "value": "JP",
+ "label": "Japan"
+ },
+ {
+ "value": "JE",
+ "label": "Jersey"
+ },
+ {
+ "value": "JO",
+ "label": "Jordan"
+ },
+ {
+ "value": "KZ",
+ "label": "Kazakhstan"
+ },
+ {
+ "value": "KE",
+ "label": "Kenya"
+ },
+ {
+ "value": "KI",
+ "label": "Kiribati"
+ },
+ {
+ "value": "KP",
+ "label": "Korea, Democratic People's Republic of"
+ },
+ {
+ "value": "KR",
+ "label": "Korea, Republic of"
+ },
+ {
+ "value": "XK",
+ "label": "Kosovo"
+ },
+ {
+ "value": "KW",
+ "label": "Kuwait"
+ },
+ {
+ "value": "KG",
+ "label": "Kyrgyzstan"
+ },
+ {
+ "value": "LA",
+ "label": "Lao People's Democratic Republic"
+ },
+ {
+ "value": "LV",
+ "label": "Latvia"
+ },
+ {
+ "value": "LB",
+ "label": "Lebanon"
+ },
+ {
+ "value": "LS",
+ "label": "Lesotho"
+ },
+ {
+ "value": "LR",
+ "label": "Liberia"
+ },
+ {
+ "value": "LY",
+ "label": "Libya"
+ },
+ {
+ "value": "LI",
+ "label": "Liechtenstein"
+ },
+ {
+ "value": "LT",
+ "label": "Lithuania"
+ },
+ {
+ "value": "LU",
+ "label": "Luxembourg"
+ },
+ {
+ "value": "MO",
+ "label": "Macao"
+ },
+ {
+ "value": "MK",
+ "label": "Macedonia, the Former Yugoslav Republic of"
+ },
+ {
+ "value": "MG",
+ "label": "Madagascar"
+ },
+ {
+ "value": "MW",
+ "label": "Malawi"
+ },
+ {
+ "value": "MY",
+ "label": "Malaysia"
+ },
+ {
+ "value": "MV",
+ "label": "Maldives"
+ },
+ {
+ "value": "ML",
+ "label": "Mali"
+ },
+ {
+ "value": "MT",
+ "label": "Malta"
+ },
+ {
+ "value": "MH",
+ "label": "Marshall Islands"
+ },
+ {
+ "value": "MQ",
+ "label": "Martinique"
+ },
+ {
+ "value": "MR",
+ "label": "Mauritania"
+ },
+ {
+ "value": "MU",
+ "label": "Mauritius"
+ },
+ {
+ "value": "YT",
+ "label": "Mayotte"
+ },
+ {
+ "value": "MX",
+ "label": "Mexico"
+ },
+ {
+ "value": "FM",
+ "label": "Micronesia, Federated States of"
+ },
+ {
+ "value": "MD",
+ "label": "Moldova, Republic of"
+ },
+ {
+ "value": "MC",
+ "label": "Monaco"
+ },
+ {
+ "value": "MN",
+ "label": "Mongolia"
+ },
+ {
+ "value": "ME",
+ "label": "Montenegro"
+ },
+ {
+ "value": "MS",
+ "label": "Montserrat"
+ },
+ {
+ "value": "MA",
+ "label": "Morocco"
+ },
+ {
+ "value": "MZ",
+ "label": "Mozambique"
+ },
+ {
+ "value": "MM",
+ "label": "Myanmar"
+ },
+ {
+ "value": "NA",
+ "label": "Namibia"
+ },
+ {
+ "value": "NR",
+ "label": "Nauru"
+ },
+ {
+ "value": "NP",
+ "label": "Nepal"
+ },
+ {
+ "value": "NL",
+ "label": "Netherlands"
+ },
+ {
+ "value": "NC",
+ "label": "New Caledonia"
+ },
+ {
+ "value": "NZ",
+ "label": "New Zealand"
+ },
+ {
+ "value": "NI",
+ "label": "Nicaragua"
+ },
+ {
+ "value": "NE",
+ "label": "Niger"
+ },
+ {
+ "value": "NG",
+ "label": "Nigeria"
+ },
+ {
+ "value": "NU",
+ "label": "Niue"
+ },
+ {
+ "value": "NF",
+ "label": "Norfolk Island"
+ },
+ {
+ "value": "MP",
+ "label": "Northern Mariana Islands"
+ },
+ {
+ "value": "NO",
+ "label": "Norway"
+ },
+ {
+ "value": "OM",
+ "label": "Oman"
+ },
+ {
+ "value": "PK",
+ "label": "Pakistan"
+ },
+ {
+ "value": "PW",
+ "label": "Palau"
+ },
+ {
+ "value": "PS",
+ "label": "Palestine, State of"
+ },
+ {
+ "value": "PA",
+ "label": "Panama"
+ },
+ {
+ "value": "PG",
+ "label": "Papua New Guinea"
+ },
+ {
+ "value": "PY",
+ "label": "Paraguay"
+ },
+ {
+ "value": "PE",
+ "label": "Peru"
+ },
+ {
+ "value": "PH",
+ "label": "Philippines"
+ },
+ {
+ "value": "PN",
+ "label": "Pitcairn"
+ },
+ {
+ "value": "PL",
+ "label": "Poland"
+ },
+ {
+ "value": "PT",
+ "label": "Portugal"
+ },
+ {
+ "value": "PR",
+ "label": "Puerto Rico"
+ },
+ {
+ "value": "QA",
+ "label": "Qatar"
+ },
+ {
+ "value": "RE",
+ "label": "R\u00e9union"
+ },
+ {
+ "value": "RO",
+ "label": "Romania"
+ },
+ {
+ "value": "RU",
+ "label": "Russian Federation"
+ },
+ {
+ "value": "RW",
+ "label": "Rwanda"
+ },
+ {
+ "value": "BL",
+ "label": "Saint Barth\u00e9lemy"
+ },
+ {
+ "value": "SH",
+ "label": "Saint Helena, Ascension and Tristan da Cunha"
+ },
+ {
+ "value": "KN",
+ "label": "Saint Kitts and Nevis"
+ },
+ {
+ "value": "LC",
+ "label": "Saint Lucia"
+ },
+ {
+ "value": "MF",
+ "label": "Saint Martin (French part)"
+ },
+ {
+ "value": "PM",
+ "label": "Saint Pierre and Miquelon"
+ },
+ {
+ "value": "VC",
+ "label": "Saint Vincent and the Grenadines"
+ },
+ {
+ "value": "WS",
+ "label": "Samoa"
+ },
+ {
+ "value": "SM",
+ "label": "San Marino"
+ },
+ {
+ "value": "ST",
+ "label": "Sao Tome and Principe"
+ },
+ {
+ "value": "SA",
+ "label": "Saudi Arabia"
+ },
+ {
+ "value": "SN",
+ "label": "Senegal"
+ },
+ {
+ "value": "RS",
+ "label": "Serbia"
+ },
+ {
+ "value": "SC",
+ "label": "Seychelles"
+ },
+ {
+ "value": "SL",
+ "label": "Sierra Leone"
+ },
+ {
+ "value": "SG",
+ "label": "Singapore"
+ },
+ {
+ "value": "SX",
+ "label": "Sint Maarten (Dutch part)"
+ },
+ {
+ "value": "SK",
+ "label": "Slovakia"
+ },
+ {
+ "value": "SI",
+ "label": "Slovenia"
+ },
+ {
+ "value": "SB",
+ "label": "Solomon Islands"
+ },
+ {
+ "value": "SO",
+ "label": "Somalia"
+ },
+ {
+ "value": "ZA",
+ "label": "South Africa"
+ },
+ {
+ "value": "GS",
+ "label": "South Georgia and the South Sandwich Islands"
+ },
+ {
+ "value": "SS",
+ "label": "South Sudan"
+ },
+ {
+ "value": "ES",
+ "label": "Spain"
+ },
+ {
+ "value": "LK",
+ "label": "Sri Lanka"
+ },
+ {
+ "value": "SD",
+ "label": "Sudan"
+ },
+ {
+ "value": "SR",
+ "label": "Suriname"
+ },
+ {
+ "value": "SJ",
+ "label": "Svalbard and Jan Mayen"
+ },
+ {
+ "value": "SZ",
+ "label": "Swaziland"
+ },
+ {
+ "value": "SE",
+ "label": "Sweden"
+ },
+ {
+ "value": "CH",
+ "label": "Switzerland"
+ },
+ {
+ "value": "SY",
+ "label": "Syrian Arab Republic"
+ },
+ {
+ "value": "TW",
+ "label": "Taiwan, Province of China"
+ },
+ {
+ "value": "TJ",
+ "label": "Tajikistan"
+ },
+ {
+ "value": "TZ",
+ "label": "Tanzania, United Republic of"
+ },
+ {
+ "value": "TH",
+ "label": "Thailand"
+ },
+ {
+ "value": "TL",
+ "label": "Timor-Leste"
+ },
+ {
+ "value": "TG",
+ "label": "Togo"
+ },
+ {
+ "value": "TK",
+ "label": "Tokelau"
+ },
+ {
+ "value": "TO",
+ "label": "Tonga"
+ },
+ {
+ "value": "TT",
+ "label": "Trinidad and Tobago"
+ },
+ {
+ "value": "TN",
+ "label": "Tunisia"
+ },
+ {
+ "value": "TR",
+ "label": "Turkey"
+ },
+ {
+ "value": "TM",
+ "label": "Turkmenistan"
+ },
+ {
+ "value": "TC",
+ "label": "Turks and Caicos Islands"
+ },
+ {
+ "value": "TV",
+ "label": "Tuvalu"
+ },
+ {
+ "value": "UG",
+ "label": "Uganda"
+ },
+ {
+ "value": "UA",
+ "label": "Ukraine"
+ },
+ {
+ "value": "AE",
+ "label": "United Arab Emirates"
+ },
+ {
+ "value": "GB",
+ "label": "United Kingdom"
+ },
+ {
+ "value": "US",
+ "label": "United States"
+ },
+ {
+ "value": "UM",
+ "label": "United States Minor Outlying Islands"
+ },
+ {
+ "value": "UY",
+ "label": "Uruguay"
+ },
+ {
+ "value": "UZ",
+ "label": "Uzbekistan"
+ },
+ {
+ "value": "VU",
+ "label": "Vanuatu"
+ },
+ {
+ "value": "VE",
+ "label": "Venezuela, Bolivarian Republic of"
+ },
+ {
+ "value": "VN",
+ "label": "Viet Nam"
+ },
+ {
+ "value": "VG",
+ "label": "Virgin Islands, British"
+ },
+ {
+ "value": "VI",
+ "label": "Virgin Islands, U.S."
+ },
+ {
+ "value": "WF",
+ "label": "Wallis and Futuna"
+ },
+ {
+ "value": "EH",
+ "label": "Western Sahara"
+ },
+ {
+ "value": "YE",
+ "label": "Yemen"
+ },
+ {
+ "value": "ZM",
+ "label": "Zambia"
+ },
+ {
+ "value": "ZW",
+ "label": "Zimbabwe"
+ }
]
-}
+}
\ No newline at end of file
diff --git a/src/data/CIPPDefaultGDAPRoles.json b/src/data/CIPPDefaultGDAPRoles.json
index a41017a4e8b7..f59aa19422aa 100644
--- a/src/data/CIPPDefaultGDAPRoles.json
+++ b/src/data/CIPPDefaultGDAPRoles.json
@@ -4,47 +4,47 @@
"value": "9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3"
},
{
- "label": "User Administrator",
- "value": "fe930be7-5e62-47db-91af-98c3a49a38b1"
+ "label": "Authentication Policy Administrator",
+ "value": "0526716b-113d-4c15-b2c8-68e3c22b9f80"
},
{
- "label": "Intune Administrator",
- "value": "3a2c62db-5318-420d-8d74-23affee5d9d5"
+ "label": "Cloud App Security Administrator",
+ "value": "892c5842-a9a6-463a-8041-72aa08ca3cf6"
+ },
+ {
+ "label": "Cloud Device Administrator",
+ "value": "7698a772-787b-4ac8-901f-60d6b08affd2"
},
{
"label": "Exchange Administrator",
"value": "29232cdf-9323-42fd-ade2-1d097af3e4de"
},
{
- "label": "Security Administrator",
- "value": "194ae4cb-b126-40b2-bd5b-6091b380977d"
+ "label": "Intune Administrator",
+ "value": "3a2c62db-5318-420d-8d74-23affee5d9d5"
},
{
- "label": "Cloud App Security Administrator",
- "value": "892c5842-a9a6-463a-8041-72aa08ca3cf6"
+ "label": "Privileged Authentication Administrator",
+ "value": "7be44c8a-adaf-4e2a-84d6-ab2649e08a13"
},
{
- "label": "Cloud Device Administrator",
- "value": "7698a772-787b-4ac8-901f-60d6b08affd2"
+ "label": "Privileged Role Administrator",
+ "value": "e8611ab8-c189-46e8-94e1-60213ab1f814"
},
{
- "label": "Teams Administrator",
- "value": "69091246-20e8-4a56-aa4d-066075b2a7a8"
+ "label": "Security Administrator",
+ "value": "194ae4cb-b126-40b2-bd5b-6091b380977d"
},
{
"label": "SharePoint Administrator",
"value": "f28a1f50-f6e7-4571-818b-6a12f2af6b6c"
},
{
- "label": "Authentication Policy Administrator",
- "value": "0526716b-113d-4c15-b2c8-68e3c22b9f80"
- },
- {
- "label": "Privileged Role Administrator",
- "value": "e8611ab8-c189-46e8-94e1-60213ab1f814"
+ "label": "Teams Administrator",
+ "value": "69091246-20e8-4a56-aa4d-066075b2a7a8"
},
{
- "label": "Privileged Authentication Administrator",
- "value": "7be44c8a-adaf-4e2a-84d6-ab2649e08a13"
+ "label": "User Administrator",
+ "value": "fe930be7-5e62-47db-91af-98c3a49a38b1"
}
]
diff --git a/src/data/Extensions.json b/src/data/Extensions.json
index 0110e7d63729..4d8bcc01386c 100644
--- a/src/data/Extensions.json
+++ b/src/data/Extensions.json
@@ -7,19 +7,12 @@
"logo": "/assets/integrations/cipp-api.png",
"forceSyncButton": false,
"hideTestButton": true,
- "disableWhenhosted": true,
- "description": "Enable the CIPP API to access CIPP data outside of CIPP using a RESTful API.",
- "helpText": "This integration allows you to enable CIPP-API access outside of CIPP. Requires Global Administrator permissions inside your tenant for activation of the API. The API credentials will only be shown once.",
- "SettingOptions": [
- {
- "type": "switch",
- "name": "cippapi.ResetPassword",
- "label": "Reset application secret - this will invalidate all existing API tokens"
- },
+ "description": "The CIPP API allows you to access CIPP data outside of CIPP using a RESTful API.",
+ "helpText": "This integration allows you to enable CIPP-API access outside of CIPP. This is useful for integrations with other systems or custom scripts.",
+ "links": [
{
- "type": "switch",
- "name": "cippapi.Enabled",
- "label": "Enable Integration"
+ "name": "CIPP API Documentation",
+ "url": "https://docs.cipp.app/api-documentation/setup-and-authentication"
}
],
"mappingRequired": false
@@ -35,10 +28,6 @@
"helpText": "This integration allows you to manage your CSP licensing from CIPP. Purchase new licenses while adding or editing users in CIPP. Not a Sherweb partner? Sign up for the Sherweb Cloud Services for MSPs program.",
"mappingRequired": true,
"links": [
- {
- "name": "Register for beta",
- "url": "https://go.cyberdrain.com/sherweb"
- },
{
"name": "Sherweb Cloud Services for MSPs",
"url": "https://info.sherweb.com/sherweb-cloud-services-for-msps"
@@ -55,33 +44,159 @@
"name": "Sherweb.clientId",
"label": "Client ID",
"placeholder": "Enter your Sherweb Client ID",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "Sherweb.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
"name": "Sherweb.SubscriptionKey",
"label": "Subscription Key",
"placeholder": "Enter your Sherweb Subscription Key",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "Sherweb.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "password",
"name": "Sherweb.APIKey",
"label": "Client Secret",
"placeholder": "Enter your Sherweb Client Secret",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "Sherweb.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "autoComplete",
"name": "Sherweb.AllowedCustomRoles",
- "label": "Select custom roles that are allowed to purchase licenses",
+ "label": "Select CIPP roles that are allowed to purchase licenses",
"api": {
- "url": "/api/ExecCustomRole",
+ "url": "/api/ListCustomRole",
"queryKey": "CustomRoles",
- "labelField": "RowKey",
- "valueField": "RowKey"
+ "labelField": "RoleName",
+ "valueField": "RoleName"
},
- "multiple": true
+ "multiple": true,
+ "condition": {
+ "field": "Sherweb.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
+ },
+ {
+ "type": "switch",
+ "name": "Sherweb.AutoMigrations",
+ "label": "Enable automated migration to Sherweb",
+ "condition": {
+ "field": "Sherweb.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
+ },
+ {
+ "type": "autoComplete",
+ "name": "Sherweb.migrationMethods",
+ "label": "Select how you'd like automated migrations to be handled",
+ "options": [
+ {
+ "label": "Notify only - This will notify you when a subscription is in its cancellation window for non Sherweb subscriptions",
+ "value": "notifyOnly"
+ },
+ {
+ "label": "Buy and notify - This will automatically buy the subscription and notify you when a subscription is in its cancellation window for non Sherweb subscriptions",
+ "value": "buyAndNotify"
+ },
+ {
+ "label": "Buy and cancel - This will automatically buy the subscription and cancel the old subscription when a subscription is in its cancellation window for non Sherweb subscriptions",
+ "value": "buyAndCancel"
+ }
+ ],
+ "multiple": false,
+ "condition": {
+ "field": "Sherweb.AutoMigrations",
+ "compareType": "is",
+ "compareValue": true
+ }
+ },
+ {
+ "type": "autoComplete",
+ "name": "Sherweb.migrateFrom",
+ "label": "Select the vendor to automatically migrate from",
+ "options": [
+ {
+ "label": "Pax8",
+ "value": "Pax8"
+ }
+ ],
+ "multiple": false,
+ "condition": {
+ "field": "Sherweb.migrationMethods",
+ "compareType": "is",
+ "compareValue": "buyAndCancel"
+ }
+ },
+ {
+ "type": "autoComplete",
+ "name": "Sherweb.migrateToLicense",
+ "label": "Select the type of license to automatically migrate to",
+ "options": [
+ {
+ "label": "Yearly",
+ "value": "Y1Y"
+ },
+ {
+ "label": "Annual paid monthly",
+ "value": "M1Y"
+ },
+ {
+ "label": "Monthly",
+ "value": "M2M"
+ }
+ ],
+ "multiple": false,
+ "condition": {
+ "field": "Sherweb.migrationMethods",
+ "compareType": "contains",
+ "compareValue": "buy"
+ }
+ },
+ {
+ "type": "password",
+ "name": "Pax8.clientId",
+ "label": "Pax8 Client ID",
+ "placeholder": "Enter your Pax8 Client ID",
+ "required": true,
+ "condition": {
+ "field": "Sherweb.migrateFrom",
+ "compareType": "is",
+ "compareValue": "Pax8"
+ }
+ },
+ {
+ "type": "password",
+ "name": "Pax8.APIKey",
+ "label": "Pax8 Client Secret",
+ "placeholder": "Enter your Pax Client Secret",
+ "required": true,
+ "condition": {
+ "field": "Sherweb.migrateFrom",
+ "compareType": "is",
+ "compareValue": "Pax8"
+ }
}
]
},
@@ -102,29 +217,47 @@
}
],
"SettingOptions": [
+ {
+ "type": "switch",
+ "name": "Gradient.Enabled",
+ "label": "Enable Integration"
+ },
{
"type": "textField",
"name": "Gradient.VendorKey",
"label": "Gradient Vendor API Key",
"placeholder": "Enter your Gradient Vendor Key.",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "Gradient.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "password",
"name": "Gradient.APIKey",
"label": "Gradient Partner API Key",
"placeholder": "Enter your Gradient Partner Key. Leave blank to keep your current key.",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "Gradient.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "Gradient.BillingEnabled",
- "label": "Enable sending all license information to Gradient"
- },
- {
- "type": "switch",
- "name": "Gradient.Enabled",
- "label": "Enable Integration"
+ "label": "Enable sending all license information to Gradient",
+ "condition": {
+ "field": "Gradient.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
}
],
"mappingRequired": false
@@ -145,52 +278,110 @@
}
],
"SettingOptions": [
+ {
+ "type": "switch",
+ "name": "HaloPSA.Enabled",
+ "label": "Enable Integration"
+ },
+ {
+ "type": "switch",
+ "name": "HaloPSA.ConsolidateTickets",
+ "label": "Consolidate Tickets",
+ "placeholder": "Consolidate tickets for the same alert into one ticket.",
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
+ },
{
"type": "textField",
"name": "HaloPSA.ResourceURL",
"label": "HaloPSA Resource Server URL",
"placeholder": "Enter your HaloPSA Resource Server URL.",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
"name": "HaloPSA.AuthURL",
"label": "HaloPSA Authorisation Endpoint URL",
"placeholder": "Enter your HaloPSA Authorisation Endpoint URL.",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
"name": "HaloPSA.Tenant",
"label": "HaloPSA Tenant",
- "placeholder": "Enter your HaloPSA Tenant (Leave blank if self-hosted",
- "required": true
+ "placeholder": "Enter your HaloPSA Tenant (Leave blank if self-hosted)",
+ "required": true,
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
- "type": "textField",
+ "type": "autoComplete",
"name": "HaloPSA.TicketType",
- "label": "HaloPSA Ticket Type ID",
- "placeholder": "Enter your HaloPSA ticket type to use for CIPP Tickets. Leave blank for default.",
- "required": true
+ "label": "Select your HaloPSA Ticket Type, leave blank for default.",
+ "multiple": false,
+ "api": {
+ "url": "/api/ExecExtensionMapping",
+ "data": {
+ "List": "HaloPSAFields"
+ },
+ "queryKey": "HaloTicketTypes",
+ "dataKey": "TicketTypes",
+ "labelField": "name",
+ "valueField": "id",
+ "showRefresh": true
+ },
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
"name": "HaloPSA.ClientID",
"label": "HaloPSA Client ID",
"placeholder": "Enter your HaloPSA Client ID",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "password",
"name": "HaloPSA.APIKey",
"label": "HaloPSA Client Secret",
"placeholder": "Enter your client Secret. Leave blank to keep your current key.",
- "required": true
- },
- {
- "type": "switch",
- "name": "HaloPSA.Enabled",
- "label": "Enable Integration"
+ "required": true,
+ "condition": {
+ "field": "HaloPSA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
}
],
"mappingRequired": true
@@ -212,46 +403,82 @@
}
],
"SettingOptions": [
+ {
+ "type": "switch",
+ "name": "NinjaOne.Enabled",
+ "label": "Enable Integration"
+ },
{
"type": "textField",
"name": "NinjaOne.Instance",
"label": "Please enter your NinjaOne Instance hostname",
"placeholder": "app.ninjarmm.com, eu.ninjarmm.com, oc.ninjarmm.com, ca.ninjarmm.com, us2.ninjarmm.com",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "NinjaOne.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
"name": "NinjaOne.ClientID",
"label": "NinjaOne API Client ID",
"placeholder": "Enter your NinjaOne API Client ID",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "NinjaOne.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "password",
"name": "NinjaOne.APIKey",
"label": "NinjaOne API Client Secret",
"placeholder": "Enter your NinjaOne API Client Secret",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "NinjaOne.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "NinjaOne.LicenseDocumentsEnabled",
- "label": "Sync Licenses (Requires NinjaOne Documentation)"
+ "label": "Sync Licenses (Requires NinjaOne Documentation)",
+ "condition": {
+ "field": "NinjaOne.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "NinjaOne.UserDocumentsEnabled",
- "label": "Sync Users (Requires NinjaOne Documentation)"
+ "label": "Sync Users (Requires NinjaOne Documentation)",
+ "condition": {
+ "field": "NinjaOne.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "NinjaOne.LicensedOnly",
- "label": "Only Sync Licensed Users (Requires NinjaOne Documentation)"
- },
- {
- "type": "switch",
- "name": "NinjaOne.Enabled",
- "label": "Enable Integration"
+ "label": "Only Sync Licensed Users (Requires NinjaOne Documentation)",
+ "condition": {
+ "field": "NinjaOne.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
}
],
"mappingRequired": true,
@@ -276,49 +503,102 @@
}
],
"SettingOptions": [
+ {
+ "type": "switch",
+ "name": "Hudu.Enabled",
+ "label": "Enable Integration"
+ },
{
"type": "textField",
"name": "Hudu.BaseUrl",
"label": "Please enter your Hudu URL",
"placeholder": "https://yourcompany.huducloud.com",
- "required": true
+ "required": true,
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "password",
"name": "Hudu.APIKey",
"label": "Hudu API Key",
"placeholder": "Enter your Hudu API Key",
- "required": true
- },
- {
- "type": "switch",
- "name": "Hudu.Enabled",
- "label": "Enable Integration"
+ "required": true,
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "Hudu.CreateMissingUsers",
- "label": "Create missing users in Hudu"
+ "label": "Create missing users in Hudu",
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "Hudu.CreateMissingDevices",
- "label": "Create missing devices in Hudu"
+ "label": "Create missing devices in Hudu",
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
"name": "Hudu.ExcludeSerials",
- "label": "Exclude device serials (comma separated)"
+ "label": "Exclude device serials (comma separated)",
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "Hudu.ImportDomains",
- "label": "Import domains from M365"
+ "label": "Import domains from M365",
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "Hudu.MonitorDomains",
- "label": "Monitor domains in Hudu"
+ "label": "Monitor domains in Hudu",
+ "condition": {
+ "field": "Hudu.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
+ },
+ {
+ "_comment": "I have added this switch as a logic check for the Hudu integration script to check against when CIPP first connects to the Hudu Instance via Connect-HuduAPI.ps1",
+ "type": "switch",
+ "name": "Hudu.CFEnabled",
+ "label": "Connect to HUDU through CloudFlare Tunnel with the Service Account credentials.",
+ "condition": {
+ "field": "CFZTNA.Enabled",
+ "compareType": "is",
+ "compareValue": true
+ }
}
],
"mappingRequired": true,
@@ -334,7 +614,7 @@
"logoDark": "/assets/integrations/pwpush_dark.png",
"forceSyncButton": false,
"description": "Enable the PasswordPusher integration to generate password links instead of plain text passwords.",
- "helpText": "This integration allows you to generate password links instead of plain text passwords. Configure authentication and expiration settings that will apply to all generated passwords. If you are a PWPush Pro customer and utilizing custom domains, please do not enter your custom domain in the Base URL field.",
+ "helpText": "This integration allows you to generate password links instead of plain text passwords. Configure authentication and expiration settings that will apply to all generated passwords. If you are a Hosted PWPush Pro customer you can also select an account for branding if you enable Bearer Authentication. Self-Hosted must use the Email Address and API Key method for authenticated pushes.",
"links": [
{
"name": "PWPush Documentation",
@@ -349,47 +629,119 @@
{
"type": "switch",
"name": "PWPush.Enabled",
- "label": "Enable Integration - Replace passwords with PWPush links"
+ "label": "Enable Integration"
},
{
- "type": "textField",
- "name": "PWPush.BaseUrl",
- "label": "PWPush URL",
- "placeholder": "Enter your PWPush URL. (default: https://pwpush.com)"
+ "type": "switch",
+ "name": "PWPush.UseBearerAuth",
+ "label": "Use Bearer Authentication (Hosted only)",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "textField",
- "name": "PWPush.EmailAddress",
- "label": "PWPush email address",
- "placeholder": "Enter your email address for PWPush. (optional)"
+ "name": "PWPush.BaseUrl",
+ "label": "PWPush URL",
+ "placeholder": "Enter your PWPush URL. (default: https://pwpush.com)",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "password",
"name": "PWPush.APIKey",
"label": "PWPush API Key",
- "placeholder": "Enter your PWPush API Key. (optional)"
+ "placeholder": "Enter your PWPush API Key. (optional)",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
- "type": "switch",
- "name": "PWPush.RetrievalStep",
- "label": "Click to retrieve password (recommended)"
+ "type": "textField",
+ "name": "PWPush.EmailAddress",
+ "label": "PWPush email address",
+ "placeholder": "Enter your email address for PWPush. (Email & API Key auth)",
+ "condition": {
+ "field": "PWPush.UseBearerAuth",
+ "compareType": "is",
+ "compareValue": false
+ }
+ },
+ {
+ "type": "autoComplete",
+ "name": "PWPush.AccountId",
+ "label": "Select your PWPush Account for branding (Pro/Premium only, optional with Custom Domain)",
+ "multiple": false,
+ "creatable": false,
+ "api": {
+ "url": "/api/ExecExtensionMapping?List=PWPushFields",
+ "queryKey": "PWPushAccounts",
+ "dataKey": "Accounts",
+ "labelField": "name",
+ "valueField": "id",
+ "showRefresh": true
+ },
+ "condition": {
+ "field": "PWPush.UseBearerAuth",
+ "compareType": "is",
+ "compareValue": true
+ }
},
{
"type": "number",
"name": "PWPush.ExpireAfterDays",
"label": "Expiration in Days",
- "placeholder": "Expiration time in days. (optional)"
+ "placeholder": "Expiration time in days. (optional)",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "number",
"name": "PWPush.ExpireAfterViews",
"label": "Expiration after views",
- "placeholder": "Expiration after views. (optional)"
+ "placeholder": "Expiration after views. (optional)",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
+ },
+ {
+ "type": "switch",
+ "name": "PWPush.RetrievalStep",
+ "label": "Click to retrieve password (recommended)",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
"name": "PWPush.DeletableByViewer",
- "label": "Allow deletion of passwords"
+ "label": "Allow deletion of passwords",
+ "condition": {
+ "field": "PWPush.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
}
],
"mappingRequired": false
@@ -414,7 +766,13 @@
{
"type": "password",
"name": "HIBP.APIKey",
- "label": "Enter your own HIBP API Key. When you are a CyberDrain hosted partner, leave this key blank."
+ "label": "Enter your own HIBP API Key. When you are a CyberDrain hosted partner, leave this key blank.",
+ "condition": {
+ "field": "HIBP.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
"type": "switch",
@@ -426,7 +784,7 @@
},
{
"name": "CloudFlare ZTNA Tunnel",
- "id": "CTZTNA",
+ "id": "CFZTNA",
"type": "ztna",
"cat": "Zero Trust Network Tunnel",
"logo": "/assets/integrations/cloudflare.png",
@@ -446,20 +804,68 @@
],
"SettingOptions": [
{
- "type": "password",
- "name": "CloudFlareClientID.APIKey",
- "label": "CloudFlare Tunnel Service Account Client ID"
+ "type": "switch",
+ "name": "CFZTNA.Enabled",
+ "label": "Enable Integration"
},
{
- "type": "password",
- "name": "CloudFlareAPIKey.APIKey",
- "label": "CloudFlare Tunnel Service Account Client Secret"
+ "type": "textField",
+ "name": "CFZTNA.ClientID",
+ "label": "CloudFlare Tunnel Service Account Client ID",
+ "condition": {
+ "field": "CFZTNA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
},
{
- "_comment": "I have added this switch as a logic check for the Hudu integration script to check against when CIPP first connects to the Hudu Instance via Connect-HuduAPI.ps1",
+ "type": "password",
+ "name": "CFZTNA.APIKey",
+ "label": "CloudFlare Tunnel Service Account Client Secret",
+ "condition": {
+ "field": "CFZTNA.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
+ }
+ ],
+ "mappingRequired": false
+ },
+ {
+ "name": "GitHub",
+ "id": "GitHub",
+ "type": "DevOps",
+ "cat": "Source Control",
+ "logo": "/assets/integrations/github.png",
+ "logoDark": "/assets/integrations/github_dark.png",
+ "description": "Enable the GitHub integration to manage your repositories from CIPP.",
+ "helpText": "This integration allows you to manage GitHub repositories from CIPP, including the Community Repositories functionality. Requires a GitHub Personal Access Token (PAT) with a minimum of repo:public_repo permissions. If you plan on saving your templates to GitHub or accessing private/internal repositories, you will need to grant the whole repo scope. You can create a PAT in your GitHub account settings, see the GitHub Token documentation for more info. If you do not enable the extension, a read-only API will be provided.",
+ "links": [
+ {
+ "name": "GitHub Token",
+ "url": "https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token"
+ }
+ ],
+ "SettingOptions": [
+ {
"type": "switch",
- "name": "Hudu.CFEnabled",
- "label": " Connect to HUDU through CloudFlare Tunnel with the above Service Account credentials."
+ "name": "GitHub.Enabled",
+ "label": "Enable Integration"
+ },
+ {
+ "type": "password",
+ "name": "GitHub.APIKey",
+ "label": "GitHub Personal Access Token",
+ "placeholder": "Enter your GitHub PAT",
+ "required": true,
+ "condition": {
+ "field": "GitHub.Enabled",
+ "compareType": "is",
+ "compareValue": true,
+ "action": "disable"
+ }
}
],
"mappingRequired": false
diff --git a/src/data/GDAPRoles.json b/src/data/GDAPRoles.json
index 22553236b533..1d3ca9b38094 100644
--- a/src/data/GDAPRoles.json
+++ b/src/data/GDAPRoles.json
@@ -63,6 +63,22 @@
"Name": "Attribute Definition Reader",
"ObjectId": "1d336d2c-4ae8-42ef-9711-b3604ce3fc2c"
},
+ {
+ "ExtensionData": {},
+ "Description": "Read audit logs and configure diagnostic settings for events related to custom security attributes.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Attribute Log Administrator",
+ "ObjectId": "5b784334-f94b-471a-a387-e7219fc49ca2"
+ },
+ {
+ "ExtensionData": {},
+ "Description": "Read audit logs related to custom security attributes.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Attribute Log Reader",
+ "ObjectId": "9c99539d-8186-4804-835f-fd51ef9e2dcd"
+ },
{
"ExtensionData": {},
"Description": "Allowed to view, set and reset authentication method information for any non-admin user.",
@@ -79,6 +95,14 @@
"Name": "Authentication Policy Administrator",
"ObjectId": "0526716b-113d-4c15-b2c8-68e3c22b9f80"
},
+ {
+ "ExtensionData": {},
+ "Description": "Customize sign in and sign up experiences for users by creating and managing custom authentication extensions.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Authentication Extensibility Administrator",
+ "ObjectId": "25a516ed-2fa0-40ea-a2d0-12923a21473a"
+ },
{
"ExtensionData": {},
"Description": "Users assigned to this role are added to the local administrators group on Azure AD-joined devices.",
@@ -255,6 +279,14 @@
"Name": "Dynamics 365 Administrator",
"ObjectId": "44367163-eba1-44c3-98af-f5787879f96a"
},
+ {
+ "ExtensionData": {},
+ "Description": "Access and perform all administrative tasks on Dynamics 365 Business Central environments.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Dynamics 365 Business Central Administrator",
+ "ObjectId": "963797fb-eb3b-4cde-8ce3-5878b3f32a3f"
+ },
{
"ExtensionData": {},
"Description": "Manage all aspects of Microsoft Edge.",
@@ -311,6 +343,14 @@
"Name": "Global Reader",
"ObjectId": "f2ef992c-3afb-46b9-b7cf-a126ee74c451"
},
+ {
+ "ExtensionData": {},
+ "Description": "Create and manage all aspects of Microsoft Entra Internet Access and Microsoft Entra Private Access, including managing access to public and private endpoints.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Global Secure Access Administrator",
+ "ObjectId": "ac434307-12b9-4fa1-a708-88bf58caabc1"
+ },
{
"ExtensionData": {},
"Description": "Members of this role can create/manage groups, create/manage groups settings like naming and expiration policies, and view groups activity and audit reports.",
@@ -439,6 +479,30 @@
"Name": "Message Center Reader",
"ObjectId": "790c1fb9-7f7d-4f88-86a1-ef1f95c05c1b"
},
+ {
+ "ExtensionData": {},
+ "Description": "Perform all migration functionality to migrate content to Microsoft 365 using Migration Manager.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Microsoft 365 Migration Administrator",
+ "ObjectId": "8c8b803f-96e1-4129-9349-20738d9f9652"
+ },
+ {
+ "ExtensionData": {},
+ "Description": "Create and manage all aspects warranty claims and entitlements for Microsoft manufactured hardware, like Surface and HoloLens.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Microsoft Hardware Warranty Administrator",
+ "ObjectId": "1501b917-7653-4ff9-a4b5-203eaf33784f"
+ },
+ {
+ "ExtensionData": {},
+ "Description": "Create and read warranty claims for Microsoft manufactured hardware, like Surface and HoloLens.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Microsoft Hardware Warranty Specialist",
+ "ObjectId": "281fe777-fb20-4fbb-b7a3-ccebce5b0d96"
+ },
{
"ExtensionData": {},
"Description": "Can manage network locations and review enterprise network design insights for Microsoft 365 Software as a Service applications.",
@@ -455,6 +519,14 @@
"Name": "Office Apps Administrator",
"ObjectId": "2b745bdf-0803-4d80-aa65-822c4493daac"
},
+ {
+ "ExtensionData": {},
+ "Description": "Write, publish, manage, and review the organizational messages for end-users through Microsoft product surfaces.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Organizational Messages Writer",
+ "ObjectId": "507f53e4-4e52-4077-abd3-d2e1558b6ea2"
+ },
{
"ExtensionData": {},
"Description": "Can reset passwords for non-administrators and Password Administrators.",
@@ -583,6 +655,14 @@
"Name": "SharePoint Administrator",
"ObjectId": "f28a1f50-f6e7-4571-818b-6a12f2af6b6c"
},
+ {
+ "ExtensionData": {},
+ "Description": "Manage all aspects of SharePoint Embedded containers.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "SharePoint Embedded Administrator",
+ "ObjectId": "1a7d78b6-429f-476b-8eb-35fb715fffd4"
+ },
{
"ExtensionData": {},
"Description": "Can manage all aspects of the Skype for Business product.",
@@ -631,6 +711,22 @@
"Name": "Teams Devices Administrator",
"ObjectId": "3d762c5a-1b6c-493f-843e-55a3b42923d4"
},
+ {
+ "ExtensionData": {},
+ "Description": "Manage voice and telephony features and troubleshoot communication issues within the Microsoft Teams service.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Teams Telephony Administrator",
+ "ObjectId": "aa38014f-0993-46e9-9b45-30501a20909d"
+ },
+ {
+ "ExtensionData": {},
+ "Description": "Create new Microsoft Entra or Azure AD B2C tenants.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "Tenant Creator",
+ "ObjectId": "112ca1a2-15ad-4102-995e-45b0bc479a6a"
+ },
{
"ExtensionData": {},
"Description": "Can see only tenant level aggregates in Microsoft 365 Usage Analytics and Productivity Score.",
@@ -647,6 +743,14 @@
"Name": "User Administrator",
"ObjectId": "fe930be7-5e62-47db-91af-98c3a49a38b1"
},
+ {
+ "ExtensionData": {},
+ "Description": "View product feedback, survey results, and reports to find training and communication opportunities.",
+ "IsEnabled": true,
+ "IsSystem": true,
+ "Name": "User Experience Success Manager",
+ "ObjectId": "27460883-1df1-4691-b032-3b79643e5e63"
+ },
{
"ExtensionData": {},
"Description": "Manage and share Virtual Visits information and metrics from admin centers or the Virtual Visits app.",
diff --git a/src/data/GraphExplorerPresets.json b/src/data/GraphExplorerPresets.json
index f6ed62774ab1..f5c549347713 100644
--- a/src/data/GraphExplorerPresets.json
+++ b/src/data/GraphExplorerPresets.json
@@ -105,7 +105,8 @@
"params": {
"endpoint": "/reports/authenticationMethods/userRegistrationDetails",
"$filter": "",
- "$select": ""
+ "$select": "",
+ "AsApp": true
},
"isBuiltin": true
},
@@ -125,7 +126,8 @@
"params": {
"endpoint": "/reports/authenticationMethods/userRegistrationDetails",
"$filter": "IsAdmin eq true",
- "$select": ""
+ "$select": "",
+ "AsApp": true
},
"isBuiltin": true
},
diff --git a/src/data/M365Licenses.json b/src/data/M365Licenses.json
index de1119503969..098fdfb04710 100644
--- a/src/data/M365Licenses.json
+++ b/src/data/M365Licenses.json
@@ -1,4 +1,20 @@
[
+ {
+ "Product_Display_Name": "10-Year Audit Log Retention Add On",
+ "String_Id": "10_ALR_ADDON",
+ "GUID": "c2e41e49-e2a2-4c55-832a-cf13ffba1d6a",
+ "Service_Plan_Name": "Auditing_10Year_ Retention_ Add_On",
+ "Service_Plan_Id": "7d16094b-4db8-41ff-a182-372a90a85407",
+ "Service_Plans_Included_Friendly_Names": "Auditing 10Year Retention Add On"
+ },
+ {
+ "Product_Display_Name": "Advanced Communications",
+ "String_Id": "ADV_COMMS",
+ "GUID": "e4654015-5daf-4a48-9b37-4f309dddd88b",
+ "Service_Plan_Name": "TEAMS_ADVCOMMS",
+ "Service_Plan_Id": "604ec28a-ae18-4bc6-91b0-11da94504ba9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Advanced Communications"
+ },
{
"Product_Display_Name": "AI Builder Capacity add-on",
"String_Id": "CDSAICAPACITY",
@@ -55,6 +71,30 @@
"Service_Plan_Id": "2e6ffd72-52d1-4541-8f6c-938f9a8d4cdc",
"Service_Plans_Included_Friendly_Names": "Microsoft Application Protection and Governance (D)"
},
+ {
+ "Product_Display_Name": "Azure Information Protection Premium P1 for Government",
+ "String_Id": "RIGHTSMANAGEMENT_CE_GOV\t",
+ "GUID": "78362de1-6942-4bb8-83a1-a32aa67e6e2c",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION_GOV",
+ "Service_Plan_Id": "922ba911-5694-4e99-a794-73aed9bfeec8",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation for Government"
+ },
+ {
+ "Product_Display_Name": "Azure Information Protection Premium P1 for Government",
+ "String_Id": "RIGHTSMANAGEMENT_CE_GOV\t",
+ "GUID": "78362de1-6942-4bb8-83a1-a32aa67e6e2c",
+ "Service_Plan_Name": "RMS_S_PREMIUM_GOV",
+ "Service_Plan_Id": "1b66aedf-8ca1-4f73-af76-ec76c6180f98",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1 for GCC"
+ },
+ {
+ "Product_Display_Name": "Azure Information Protection Premium P1 for Government",
+ "String_Id": "RIGHTSMANAGEMENT_CE_GOV\t",
+ "GUID": "78362de1-6942-4bb8-83a1-a32aa67e6e2c",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE_GOV",
+ "Service_Plan_Id": "6a76346d-5d6e-4051-9fe3-ed3f312b5597",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ },
{
"Product_Display_Name": "Career Coach for faculty",
"String_Id": "CAREERCOACH_FACULTY",
@@ -127,6 +167,14 @@
"Service_Plan_Id": "f7e5b77d-f293-410a-bae8-f941f19fe680",
"Service_Plans_Included_Friendly_Names": "OneDrive for Business (Clipchamp)"
},
+ {
+ "Product_Display_Name": "Clipchamp Premium Add-on",
+ "String_Id": "Clipchamp_Premium_Add_on",
+ "GUID": "4b2c20e4-939d-4bf4-9dd8-6870240cfe19",
+ "Service_Plan_Name": "CLIPCHAMP_PREMIUM",
+ "Service_Plan_Id": "430b908f-78e1-4812-b045-cf83320e7d5d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp Premium"
+ },
{
"Product_Display_Name": "Microsoft 365 Audio Conferencing",
"String_Id": "MCOMEETADV",
@@ -1279,6 +1327,30 @@
"Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
"Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
},
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Service Voice Channel Add-in",
+ "String_Id": "DYN365_CS_VOICE",
+ "GUID": "dadd2312-b5b1-4fa0-8c15-0903de3e2303",
+ "Service_Plan_Name": "DYN365_CS_VOICE",
+ "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Service Voice Channel Add-in",
+ "String_Id": "DYN365_CS_VOICE",
+ "GUID": "dadd2312-b5b1-4fa0-8c15-0903de3e2303",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE",
+ "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Service Voice Channel Add-in",
+ "String_Id": "DYN365_CS_VOICE",
+ "GUID": "dadd2312-b5b1-4fa0-8c15-0903de3e2303",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
{
"Product_Display_Name": "Dynamics 365 Customer Insights Standalone",
"String_Id": "DYN365_CUSTOMER_INSIGHTS_BASE",
@@ -1855,6 +1927,30 @@
"Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
"Service_Plans_Included_Friendly_Names": "Exchange Foundation"
},
+ {
+ "Product_Display_Name": "Dynamics 365 Field Service Contractor",
+ "String_Id": "D365_FIELD_SERVICE_CONTRACTOR",
+ "GUID": "23e6e135-e869-4ce4-9ae4-5710cd69ac13",
+ "Service_Plan_Name": "CDS_FIELD_SERVICE_CONTRACTOR",
+ "Service_Plan_Id": "f4614a66-d632-443a-bc77-afe92987b322",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service Field service Part Time Contractors"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Field Service Contractor",
+ "String_Id": "D365_FIELD_SERVICE_CONTRACTOR",
+ "GUID": "23e6e135-e869-4ce4-9ae4-5710cd69ac13",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Field Service Contractor",
+ "String_Id": "D365_FIELD_SERVICE_CONTRACTOR",
+ "GUID": "23e6e135-e869-4ce4-9ae4-5710cd69ac13",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
{
"Product_Display_Name": "Dynamics 365 Field Service Contractor for Government",
"String_Id": "D365_FIELD_SERVICE_CONTRACTOR_GOV",
@@ -1967,6 +2063,118 @@
"Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
"Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
},
+ {
+ "Product_Display_Name": "Dynamics 365 for Finance Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_FINANCE_ATTACH",
+ "GUID": "d721f2e4-099b-4105-b40e-872e46cad402",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Finance Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_FINANCE_ATTACH",
+ "GUID": "d721f2e4-099b-4105-b40e-872e46cad402",
+ "Service_Plan_Name": "CDS_AI_Capacity_FI",
+ "Service_Plan_Id": "5d85ec34-44e5-43b6-a9aa-d1b4c1d3aa3b",
+ "Service_Plans_Included_Friendly_Names": "AI Builder Capacity Add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Finance Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_FINANCE_ATTACH",
+ "GUID": "d721f2e4-099b-4105-b40e-872e46cad402",
+ "Service_Plan_Name": "DYN365_CDS_FINANCE",
+ "Service_Plan_Id": "e95d7060-d4d9-400a-a2bd-a244bf0b609e",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Dynamics 365 Finance"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Finance Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_FINANCE_ATTACH",
+ "GUID": "d721f2e4-099b-4105-b40e-872e46cad402",
+ "Service_Plan_Name": "DYN365_REGULATORY_SERVICE",
+ "Service_Plan_Id": "c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Finance Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_FINANCE_ATTACH",
+ "GUID": "d721f2e4-099b-4105-b40e-872e46cad402",
+ "Service_Plan_Name": "D365_Finance_Attach",
+ "Service_Plan_Id": "223e33cb-eee0-462d-b1bd-e9a5febf8e85",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Finance Attach"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Finance Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_FINANCE_ATTACH",
+ "GUID": "d721f2e4-099b-4105-b40e-872e46cad402",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "D365_ProjectOperationsCDSAttach",
+ "Service_Plan_Id": "e564d403-7eaf-4c91-b92f-bb0dc62026e1",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Project Operations CDS Attach"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "CDS_AI_Capacity_FI",
+ "Service_Plan_Id": "5d85ec34-44e5-43b6-a9aa-d1b4c1d3aa3b",
+ "Service_Plans_Included_Friendly_Names": "AI Builder Capacity Add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "D365_Finance_Attach",
+ "Service_Plan_Id": "223e33cb-eee0-462d-b1bd-e9a5febf8e85",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Finance Attach"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "D365_ProjectOperationsAttach",
+ "Service_Plan_Id": "fa7675bd-6717-40e7-8172-d0bbcbe1ab12",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Project Operations Attach"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "PROJECT_FOR_PROJECT_OPERATIONS_ATTACH",
+ "Service_Plan_Id": "6d8e07c6-9613-484f-8cc1-a66c5c3979bb",
+ "Service_Plans_Included_Friendly_Names": "Project for Project Operations Attach"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Finance Attach to Qualifying Base Offer Embedded with Project Management & Accounting",
+ "String_Id": "DYN365_FINANCE_ATTACH_ISVEMB_PROJOPS",
+ "GUID": "db5bd06c-b99a-4c54-98e9-90fea5164c88",
+ "Service_Plan_Name": "SHAREPOINTSTANDARD",
+ "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)"
+ },
{
"Product_Display_Name": "Dynamics 365 for Case Management Enterprise Edition",
"String_Id": "DYN365_ENTERPRISE_CASE_MANAGEMENT",
@@ -2263,6 +2471,542 @@
"Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
"Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
},
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "DYN365_CC",
+ "Service_Plan_Id": "2a9d72b3-1714-440f-babf-bf92bf9683d8",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Contact Center"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING_TPS",
+ "Service_Plan_Id": "47c2b191-a5fb-4129-b690-00c474d2f623",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "DYN365_CS_VOICE",
+ "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE",
+ "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER",
+ "GUID": "dfb1700c-013e-4132-8bce-0d319c43a95d",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "DYN365_CC",
+ "Service_Plan_Id": "2a9d72b3-1714-440f-babf-bf92bf9683d8",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Contact Center"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING_TPS",
+ "Service_Plan_Id": "47c2b191-a5fb-4129-b690-00c474d2f623",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "DYN365_CS_VOICE",
+ "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE",
+ "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "39a78eb6-3a8a-4e1e-878a-575a5c8984e7",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "DYN365_CC_DIGITAL",
+ "Service_Plan_Id": "0ef2b4e3-0a2b-450d-8c5f-a52203c40f50",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Contact Center Digital"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING_TPS",
+ "Service_Plan_Id": "47c2b191-a5fb-4129-b690-00c474d2f623",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING",
+ "Service_Plan_Id": "43b076f2-1123-45ba-a339-2e170ee58c53",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging Application Integration"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL",
+ "GUID": "59d3d0bf-df39-4b8b-8601-ea6c09a7fd66",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "DYN365_CC_DIGITAL",
+ "Service_Plan_Id": "0ef2b4e3-0a2b-450d-8c5f-a52203c40f50",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Contact Center Digital"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING_TPS",
+ "Service_Plan_Id": "47c2b191-a5fb-4129-b690-00c474d2f623",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING",
+ "Service_Plan_Id": "43b076f2-1123-45ba-a339-2e170ee58c53",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging Application Integration"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Digital Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_DIGITAL_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "7e6e6091-1680-4532-9370-6cd4598483ac",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "DYN365_CC_VOICE",
+ "Service_Plan_Id": "57517633-b4ad-4db8-8c1a-65f443424490",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Contact Center Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "DYN365_CS_VOICE",
+ "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE",
+ "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE",
+ "GUID": "79e2368c-4568-48d5-a352-b0344afabcf8",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "DYN365_CC_VOICE",
+ "Service_Plan_Id": "57517633-b4ad-4db8-8c1a-65f443424490",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Contact Center Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "DYN365_CS_VOICE",
+ "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE",
+ "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Contact Center Voice Add-on for Customer Service Enterprise",
+ "String_Id": "DYNAMICS_365_CONTACT_CENTER_VOICE_ADD_ON_FOR_CUSTOMER_SERVICE_ENTERPRISE",
+ "GUID": "73e8b747-20bf-463d-8ffd-274a7d65d0bc",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Attach",
+ "String_Id": "Dynamics_365_Customer_Insights_Attach_New",
+ "GUID": "ff22b8d4-5073-4b24-ba45-84ad5d9b6642",
+ "Service_Plan_Name": "CDS_CUSTOMER_INSIGHTS_BASE",
+ "Service_Plan_Id": "d04ca659-b119-4a92-b8fc-3ede584a9d65",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Cust Insights BASE"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Attach",
+ "String_Id": "Dynamics_365_Customer_Insights_Attach_New",
+ "GUID": "ff22b8d4-5073-4b24-ba45-84ad5d9b6642",
+ "Service_Plan_Name": "CDS_CUSTOMER_INSIGHTS_COMBINED_BASE",
+ "Service_Plan_Id": "d66ee5da-07d5-49d6-a1d8-45662c3f37be",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Customer Insights Combined Base"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Attach",
+ "String_Id": "Dynamics_365_Customer_Insights_Attach_New",
+ "GUID": "ff22b8d4-5073-4b24-ba45-84ad5d9b6642",
+ "Service_Plan_Name": "DYN365_CUSTOMER_INSIGHTS_JOURNEYS_BASE",
+ "Service_Plan_Id": "1720c3f7-7da3-4a11-8324-92aad283eb68",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Insights Journeys"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Attach",
+ "String_Id": "Dynamics_365_Customer_Insights_Attach_New",
+ "GUID": "ff22b8d4-5073-4b24-ba45-84ad5d9b6642",
+ "Service_Plan_Name": "Forms_Pro_Marketing_App",
+ "Service_Plan_Id": "22b657cf-0a9e-467b-8a91-5e31f21bc570",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Marketing Application"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Attach",
+ "String_Id": "Dynamics_365_Customer_Insights_Attach_New",
+ "GUID": "ff22b8d4-5073-4b24-ba45-84ad5d9b6642",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Journeys T3 Interacted People",
+ "String_Id": "Dynamics_365_Customer_Insights_Journeys_T3_Interacted_People",
+ "GUID": "05735051-46c0-4c84-9107-bb13d77d0b88",
+ "Service_Plan_Name": "CDS_CUSTOMER_INSIGHTS_JOURNEYS_ADD-ON",
+ "Service_Plan_Id": "2f2e81a6-15de-4041-9f33-73c06fed3801",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Customer Insights Journeys add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Journeys T3 Interacted People",
+ "String_Id": "Dynamics_365_Customer_Insights_Journeys_T3_Interacted_People",
+ "GUID": "05735051-46c0-4c84-9107-bb13d77d0b88",
+ "Service_Plan_Name": "DYN365_MARKETING_50K_CONTACT_ADDON",
+ "Service_Plan_Id": "e626a4ec-1ba2-409e-bf75-9bc0bc30cca7",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Marketing 50K Addnl Contacts"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights Journeys T3 Interacted People",
+ "String_Id": "Dynamics_365_Customer_Insights_Journeys_T3_Interacted_People",
+ "GUID": "05735051-46c0-4c84-9107-bb13d77d0b88",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights User License",
+ "String_Id": "Dynamics_365_Customer_Insights_User_License",
+ "GUID": "12b5a442-a6f2-49e4-868b-2d7408c2356f",
+ "Service_Plan_Name": "DYN365_MARKETING_MSE_USER",
+ "Service_Plan_Id": "2824c69a-1ac5-4397-8592-eae51cb8b581",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Marketing MSE User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights User License",
+ "String_Id": "Dynamics_365_Customer_Insights_User_License",
+ "GUID": "12b5a442-a6f2-49e4-868b-2d7408c2356f",
+ "Service_Plan_Name": "DYN365_MARKETING_USER",
+ "Service_Plan_Id": "5d7a6abc-eebd-46ab-96e1-e4a2f54a2248",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Marketing USL"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Customer Insights User License",
+ "String_Id": "Dynamics_365_Customer_Insights_User_License",
+ "GUID": "12b5a442-a6f2-49e4-868b-2d7408c2356f",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
{
"Product_Display_Name": "Dynamics 365 for Customer Service Chat",
"String_Id": "DYN365_CS_CHAT",
@@ -2727,6 +3471,62 @@
"Service_Plan_Id": "26fa8a18-2812-4b3d-96b4-864818ce26be",
"Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365 Mixed Reality"
},
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "Forms_Pro_Talent",
+ "Service_Plan_Id": "1c4ae475-5608-43fa-b3f7-d20e07cf24b4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Talent"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "D365_HR_SELF_SERVICE_OPS",
+ "Service_Plan_Id": "835b837b-63c1-410e-bf6b-bdef201ad129",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Human Resource Self Service"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "D365_HR_OPS",
+ "Service_Plan_Id": "8b21a5dc-5485-49ed-a2d4-0e772c830f6d",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Human Resources"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "D365_HR_Attach",
+ "Service_Plan_Id": "3219525a-4064-45ec-9c35-a33ea6b39a49",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Human Resources Attach"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "D365_HR_ATTACH_OPS",
+ "Service_Plan_Id": "90d8cb62-e98a-4639-8342-8c7d2c8215ba",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Human Resources Attach License"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Human Resources Attach to Qualifying Dynamics 365 Base Offer",
+ "String_Id": "DYN365_HUMAN_RESOURCES_ATTACH",
+ "GUID": "83c489a4-94b6-4dcc-9fdc-ff9b107a4621",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
{
"Product_Display_Name": "Dynamics 365 Hybrid Connector",
"String_Id": "CRM_HYBRIDCONNECTOR",
@@ -2759,6 +3559,22 @@
"Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
"Service_Plans_Included_Friendly_Names": "Exchange Foundation"
},
+ {
+ "Product_Display_Name": "Dynamics 365 for Marketing Addnl Contacts Tier 1",
+ "String_Id": "DYN365_MARKETING_CONTACT_ADDON",
+ "GUID": "fc4581aa-6b1f-459d-95b6-84bd49d6f843",
+ "Service_Plan_Name": "DYN365_MARKETING_CONTACT_ADDON",
+ "Service_Plan_Id": "18db5075-2c70-408d-a82b-929059d782af",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Marketing Additional Contacts Tier 1"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Marketing Addnl Contacts Tier 1",
+ "String_Id": "DYN365_MARKETING_CONTACT_ADDON",
+ "GUID": "fc4581aa-6b1f-459d-95b6-84bd49d6f843",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
{
"Product_Display_Name": "Dynamics 365 for Marketing Addnl Contacts Tier 3",
"String_Id": "DYN365_MARKETING_CONTACT_ADDON_T3",
@@ -2855,6 +3671,182 @@
"Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
"Service_Plans_Included_Friendly_Names": "Exchange Foundation"
},
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "CUSTOMER_VOICE_DYN365_VIRAL_TRIAL",
+ "Service_Plan_Id": "dbe07046-af68-4861-a20d-1c8cbda9194f",
+ "Service_Plans_Included_Friendly_Names": "Customer Voice for Dynamics 365 vTrial"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "DYN365_CS_MESSAGING_TPS",
+ "Service_Plan_Id": "47c2b191-a5fb-4129-b690-00c474d2f623",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging add-on"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "D365_CSI_EMBED_CSEnterprise",
+ "Service_Plan_Id": "5b1e5982-0e88-47bb-a95e-ae6085eda612",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Insights for CS Enterprise"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "DYN365_ENTERPRISE_CUSTOMER_SERVICE",
+ "Service_Plan_Id": "99340b49-fb81-4b1e-976b-8f2ae8e9394f",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "DYN365_CS_VOICE",
+ "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "DYN365_ENTERPRISE_FIELD_SERVICE",
+ "Service_Plan_Id": "8c66ef8a-177f-4c0d-853c-d4f219331d09",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Field Service"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "DYN365_MARKETING_APP",
+ "Service_Plan_Id": "a3a4fa10-5092-401a-af30-0462a95a7ac8",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Marketing"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "DYN365_ENTERPRISE_SALES",
+ "Service_Plan_Id": "2da8e897-7791-486b-b08f-cc63c8129df7",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Sales"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "Forms_Pro_FS",
+ "Service_Plan_Id": "9c439259-63b0-46cc-a258-72be4313a42d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Field Service"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "Forms_Pro_SalesEnt",
+ "Service_Plan_Id": "8839ef0e-91f1-4085-b485-62e06e7c7987",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Sales Enterprise"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE",
+ "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_MESSAGING",
+ "Service_Plan_Id": "2d2f174c-c3cc-4abe-9ce8-4dd86f469ab1",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Digital Messaging"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "GUIDES",
+ "Service_Plan_Id": "0b2c029c-dca0-454a-a336-887285d6ef07",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Guides"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "MICROSOFT_REMOTE_ASSIST",
+ "Service_Plan_Id": "4f4c7800-298a-4e22-8867-96b17850d4dd",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Remote Assist"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "POWERAPPS_GUIDES",
+ "Service_Plan_Id": "816971f4-37c5-424a-b12b-b56881f402e7",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Guides"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "TEAMS1",
+ "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "PROJECT_ESSENTIALS",
+ "Service_Plan_Id": "1259157c-8581-4875-bca7-2ffb18c51bda",
+ "Service_Plans_Included_Friendly_Names": "Project Online Essentials"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Multi-app",
+ "String_Id": "Dynamics_365_Multi_app_",
+ "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
{
"Product_Display_Name": "Dynamics 365 Operations – Activity",
"String_Id": "Dyn365_Operations_Activity",
@@ -3039,6 +4031,78 @@
"Service_Plan_Id": "3089c02b-e533-4b73-96a5-01fa648c3c3c",
"Service_Plans_Included_Friendly_Names": "PowerApps for Dynamics 365 for Government"
},
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "DYN365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "Service_Plan_Id": "1d8c8e0e-4308-4db5-8a41-b129dbdaea20",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Project Service Automation for Government"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "Forms_Pro_PS_GCC",
+ "Service_Plan_Id": "e98256c5-17d0-4987-becc-e991c52d55c6",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Project Service Automation for GCC"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION_GOV",
+ "Service_Plan_Id": "922ba911-5694-4e99-a794-73aed9bfeec8",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation for Government"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "SHAREPOINTWAC_GOV",
+ "Service_Plan_Id": "8f9f0f3b-ca90-406c-a842-95579171f8ec",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web for Government"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "PROJECT_CLIENT_SUBSCRIPTION_GOV",
+ "Service_Plan_Id": "45c6831b-ad74-4c7f-bd03-7c2b3fa39067",
+ "Service_Plans_Included_Friendly_Names": "Project Online Desktop Client"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "SHAREPOINT_PROJECT_GOV",
+ "Service_Plan_Id": "e57afa78-1f19-4542-ba13-b32cd4d8f472",
+ "Service_Plans_Included_Friendly_Names": "Project Online Service for Government"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE_GOV",
+ "Service_Plan_Id": "153f85dd-d912-4762-af6c-d6e0fb4f6692",
+ "Service_Plans_Included_Friendly_Names": "SharePoint Plan 2G"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "FLOW_DYN_APPS_GOV",
+ "Service_Plan_Id": "2c6af4f1-e7b6-4d59-bbc8-eaa884f42d69",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365 for Government"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 for Project Service Automation for Government",
+ "String_Id": "D365_ENTERPRISE_PROJECT_SERVICE_AUTOMATION_GOV",
+ "GUID": "6c827f0a-42cb-4cff-b1cd-f4104c16ede3",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS_GOV",
+ "Service_Plan_Id": "3089c02b-e533-4b73-96a5-01fa648c3c3c",
+ "Service_Plans_Included_Friendly_Names": "PowerApps for Dynamics 365 for Government"
+ },
{
"Product_Display_Name": "Dynamics 365 for Sales and Customer Service Enterprise Edition",
"String_Id": "DYN365_ENTERPRISE_SALES_CUSTOMERSERVICE",
@@ -3751,6 +4815,110 @@
"Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
"Service_Plans_Included_Friendly_Names": "POWERAPPS FOR DYNAMICS 365"
},
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "DYN365_CDS_SUPPLYCHAINMANAGEMENT",
+ "Service_Plan_Id": "b6a8b974-2956-4e14-ae81-f0384c363528",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Dynamics 365 Supply Chain Management"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "FLOW_FOR_IOM_USL",
+ "Service_Plan_Id": "9e6d1620-dce9-4655-8933-af8fa5bccc9c",
+ "Service_Plans_Included_Friendly_Names": "Data Integration for IOM with Power Automate USL"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "CDS_FOR_IOM",
+ "Service_Plan_Id": "2bb89402-51e9-4c5a-be33-e954a9dd1ba6",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for IOM"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "D365_DemandPlanning",
+ "Service_Plan_Id": "e8b616eb-1a6d-42b4-84c7-b63870791349",
+ "Service_Plans_Included_Friendly_Names": "DO NOT USE - Dynamics 365 Supply Chain Management Premium"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "DYN365_REGULATORY_SERVICE",
+ "Service_Plan_Id": "c7657ae3-c0b0-4eed-8c1d-6a7967bd9c65",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Finance and Operations, Enterprise edition - Regulatory Service"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "D365_SCM",
+ "Service_Plan_Id": "1224eae4-0d91-474a-8a52-27ec96a63fe7",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Supply Chain Management"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "DYN365_IOM",
+ "Service_Plan_Id": "616cf6e2-f52f-4738-b463-10003061fcd3",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Intelligent Order Management"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "DYN365_IOM_USER",
+ "Service_Plan_Id": "81375e2f-5ef7-4773-96aa-e3279f50bd21",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Intelligent Order Management USL"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "D365_SCM_Premium",
+ "Service_Plan_Id": "0363c8e5-c30d-4d7c-a621-7b6cab5e0482",
+ "Service_Plans_Included_Friendly_Names": "Dynamics 365 Supply Chain Management Premium"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "POWERAPPS_DYN_APPS",
+ "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Dynamics 365 Supply Chain Management Premium",
+ "String_Id": "Dynamics_365_Supply_Chain_Management_Premium",
+ "GUID": "9467fd84-2758-4287-b1fa-6a908c441b8a",
+ "Service_Plan_Name": "FLOW_DYN_APPS",
+ "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365"
+ },
{
"Product_Display_Name": "Dynamics 365 for Talent",
"String_Id": "SKU_Dynamics_365_for_HCM_Trial",
@@ -5087,6 +6255,22 @@
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
+ {
+ "Product_Display_Name": "Exchange Online (Plan 2) for GCC",
+ "String_Id": "EXCHANGEENTERPRISE_GOV",
+ "GUID": "7be8dc28-4da4-4e6d-b9b9-c60f2806df8a",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE_GOV",
+ "Service_Plan_Id": "8c3069c0-ccdb-44be-ab77-986203a67df2",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2) for Government"
+ },
+ {
+ "Product_Display_Name": "Exchange Online (Plan 2) for GCC",
+ "String_Id": "EXCHANGEENTERPRISE_GOV",
+ "GUID": "7be8dc28-4da4-4e6d-b9b9-c60f2806df8a",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
{
"Product_Display_Name": "Exchange Online (Plan 2)",
"String_Id": "EXCHANGEENTERPRISE",
@@ -5191,6 +6375,30 @@
"Service_Plan_Id": "326e2b78-9d27-42c9-8509-46c827743a17",
"Service_Plans_Included_Friendly_Names": "Exchange Online Protection"
},
+ {
+ "Product_Display_Name": "Flow Plan 1 for Government",
+ "String_Id": "FLOW_P1_GOV",
+ "GUID": "2b3b0c87-36af-4d15-8124-04a691cc2546",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION_GOV",
+ "Service_Plan_Id": "922ba911-5694-4e99-a794-73aed9bfeec8",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation for Government"
+ },
+ {
+ "Product_Display_Name": "Flow Plan 1 for Government",
+ "String_Id": "FLOW_P1_GOV",
+ "GUID": "2b3b0c87-36af-4d15-8124-04a691cc2546",
+ "Service_Plan_Name": "DYN365_CDS_P1_GOV",
+ "Service_Plan_Id": "ce361df2-f2a5-4713-953f-4050ba09aad8",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Government"
+ },
+ {
+ "Product_Display_Name": "Flow Plan 1 for Government",
+ "String_Id": "FLOW_P1_GOV",
+ "GUID": "2b3b0c87-36af-4d15-8124-04a691cc2546",
+ "Service_Plan_Name": "FLOW_P1_GOV",
+ "Service_Plan_Id": "774da41c-a8b3-47c1-8322-b9c1ab68be9f",
+ "Service_Plans_Included_Friendly_Names": "Power Automate (Plan 1) for Government"
+ },
{
"Product_Display_Name": "Intune",
"String_Id": "INTUNE_A",
@@ -6728,15 +7936,15 @@
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "AAD_BASIC_EDU",
"Service_Plan_Id": "1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID Basic for Education"
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory Basic for Education"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
@@ -6744,7 +7952,7 @@
"Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "CDS_O365_P3",
@@ -6752,7 +7960,7 @@
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "LOCKBOX_ENTERPRISE",
@@ -6760,7 +7968,15 @@
"Service_Plans_Included_Friendly_Names": "Customer Lockbox"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "CustomerLockboxA_Enterprise",
+ "Service_Plan_Id": "3ec18638-bd4c-4d3b-8905-479ed636b83e",
+ "Service_Plans_Included_Friendly_Names": "Customer Lockbox (A)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MIP_S_Exchange",
@@ -6768,7 +7984,15 @@
"Service_Plans_Included_Friendly_Names": "Data Classification in Microsoft 365"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "COMMON_DEFENDER_PLATFORM_FOR_OFFICE",
+ "Service_Plan_Id": "a312bdeb-1e21-40d0-84b1-0e73f128144f",
+ "Service_Plans_Included_Friendly_Names": "Defender Platform for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "EducationAnalyticsP1",
@@ -6776,7 +8000,7 @@
"Service_Plans_Included_Friendly_Names": "Education Analytics"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
@@ -6784,7 +8008,15 @@
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "INFORMATION_BARRIERS",
@@ -6792,7 +8024,7 @@
"Service_Plans_Included_Friendly_Names": "Information Barriers"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "Content_Explorer",
@@ -6800,7 +8032,7 @@
"Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics - Premium"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "ContentExplorer_Standard",
@@ -6808,7 +8040,7 @@
"Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MIP_S_CLP2",
@@ -6816,7 +8048,7 @@
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Premium"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MIP_S_CLP1",
@@ -6824,7 +8056,7 @@
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "M365_ADVANCED_AUDITING",
@@ -6832,15 +8064,15 @@
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Advanced Auditing"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "OFFICESUBSCRIPTION",
"Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Enterprise"
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MCOMEETADV",
@@ -6848,7 +8080,15 @@
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "M365_AUDIT_PLATFORM",
+ "Service_Plan_Id": "f6de4823-28fa-440b-b886-4783fa86ddba",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audit Platform"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MICROSOFT_COMMUNICATION_COMPLIANCE",
@@ -6856,7 +8096,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Communication Compliance"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MTP",
@@ -6864,7 +8104,15 @@
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Defender"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MCOEV",
@@ -6872,7 +8120,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
@@ -6880,7 +8128,15 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "COMMUNICATIONS_DLP",
@@ -6888,7 +8144,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Communications DLP"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "CUSTOMER_KEY",
@@ -6896,15 +8152,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Customer Key"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
- "String_Id": "M365EDU_A5_FACULTY",
- "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
- "Service_Plan_Name": "DATA_INVESTIGATIONS",
- "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
- "Service_Plans_Included_Friendly_Names": "Microsoft Data Investigations"
- },
- {
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "ATP_ENTERPRISE",
@@ -6912,7 +8160,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "THREAT_INTELLIGENCE",
@@ -6920,7 +8168,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "EXCEL_PREMIUM",
@@ -6928,7 +8176,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Excel Advanced Analytics"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "OFFICE_FORMS_PLAN_3",
@@ -6936,7 +8184,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "INFO_GOVERNANCE",
@@ -6944,7 +8192,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Information Governance"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "INSIDER_RISK",
@@ -6952,7 +8200,15 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
+ "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management - Exchange"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "KAIZALA_STANDALONE",
@@ -6960,7 +8216,15 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "ML_CLASSIFICATION",
@@ -6968,7 +8232,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft ML-Based Classification"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "EXCHANGE_ANALYTICS",
@@ -6976,7 +8240,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft MyAnalytics (Full)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
@@ -6984,7 +8248,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "RECORDS_MANAGEMENT",
@@ -6992,7 +8256,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Records Management"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MICROSOFT_SEARCH",
@@ -7000,7 +8264,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "Deskless",
@@ -7008,7 +8272,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "STREAM_O365_E5",
@@ -7016,7 +8280,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E5"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "TEAMS1",
@@ -7024,7 +8288,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Teams"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MINECRAFT_EDUCATION_EDITION",
@@ -7032,7 +8296,7 @@
"Service_Plans_Included_Friendly_Names": "Minecraft Education Edition"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "INTUNE_O365",
@@ -7040,7 +8304,7 @@
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "Nucleus",
@@ -7048,7 +8312,7 @@
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "EQUIVIO_ANALYTICS",
@@ -7056,7 +8320,7 @@
"Service_Plans_Included_Friendly_Names": "Office 365 Advanced eDiscovery"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "ADALLOM_S_O365",
@@ -7064,7 +8328,7 @@
"Service_Plans_Included_Friendly_Names": "Office 365 Cloud App Security"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "PAM_ENTERPRISE",
@@ -7072,7 +8336,7 @@
"Service_Plans_Included_Friendly_Names": "Office 365 Privileged Access Management"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "SAFEDOCS",
@@ -7080,7 +8344,7 @@
"Service_Plans_Included_Friendly_Names": "Office 365 SafeDocs"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "SHAREPOINTWAC_EDU",
@@ -7088,7 +8352,7 @@
"Service_Plans_Included_Friendly_Names": "Office for the Web for Education"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "POWERAPPS_O365_P3",
@@ -7096,7 +8360,7 @@
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365 (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "BI_AZURE_P2",
@@ -7104,7 +8368,7 @@
"Service_Plans_Included_Friendly_Names": "Power BI Pro"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "PREMIUM_ENCRYPTION",
@@ -7112,7 +8376,7 @@
"Service_Plans_Included_Friendly_Names": "Premium Encryption in Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "PROJECT_O365_P3",
@@ -7120,23 +8384,39 @@
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "COMMUNICATIONS_COMPLIANCE",
"Service_Plan_Id": "41fcdd7d-4733-4863-9cf4-c65b83ce2df4",
- "Service_Plans_Included_Friendly_Names": "Microsoft Communications Compliance"
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Microsoft Communications Compliance"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
- "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
- "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
- "Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management"
+ "Service_Plan_Name": "DATA_INVESTIGATIONS",
+ "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
+ "Service_Plans_Included_Friendly_Names": "Retired - Microsoft Data Investigations"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "SCHOOL_DATA_SYNC_P2",
@@ -7144,7 +8424,7 @@
"Service_Plans_Included_Friendly_Names": "School Data Sync (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "SHAREPOINTENTERPRISE_EDU",
@@ -7152,7 +8432,7 @@
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2) for Education"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MCOSTANDARD",
@@ -7160,7 +8440,7 @@
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "SWAY",
@@ -7168,7 +8448,7 @@
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "BPOS_S_TODO_3",
@@ -7176,7 +8456,7 @@
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
@@ -7184,7 +8464,7 @@
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "WHITEBOARD_PLAN3",
@@ -7192,7 +8472,7 @@
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "YAMMER_EDU",
@@ -7200,7 +8480,7 @@
"Service_Plans_Included_Friendly_Names": "Yammer for Academic"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "WINDEFATP",
@@ -7208,7 +8488,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MICROSOFTENDPOINTDLP",
@@ -7216,7 +8496,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Endpoint DLP"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
@@ -7224,7 +8504,7 @@
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "Virtualization Rights for Windows 10 (E3/E5+VDA)",
@@ -7232,7 +8512,7 @@
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
@@ -7240,23 +8520,7 @@
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
- "String_Id": "M365EDU_A5_FACULTY",
- "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
- "Service_Plan_Name": "AAD_PREMIUM",
- "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
- },
- {
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
- "String_Id": "M365EDU_A5_FACULTY",
- "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
- "Service_Plan_Name": "AAD_PREMIUM_P2",
- "Service_Plan_Id": "eec0eb4f-6444-4f95-aba0-50c24d67f998",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P2"
- },
- {
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "RMS_S_PREMIUM",
@@ -7264,7 +8528,7 @@
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "RMS_S_PREMIUM2",
@@ -7272,7 +8536,7 @@
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P2"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "DYN365_CDS_O365_P3",
@@ -7280,7 +8544,15 @@
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "Intune_ServiceNow",
+ "Service_Plan_Id": "3eeb8536-fecf-41bf-a3f8-d6f17a9f3efc",
+ "Service_Plans_Included_Friendly_Names": "Intune ServiceNow Integration"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "MFA_PREMIUM",
@@ -7288,7 +8560,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "ADALLOM_S_STANDALONE",
@@ -7296,7 +8568,7 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "ATA",
@@ -7304,23 +8576,39 @@
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Identity"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "AAD_PREMIUM_P2",
+ "Service_Plan_Id": "eec0eb4f-6444-4f95-aba0-50c24d67f998",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P2"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "INTUNE_EDU",
"Service_Plan_Id": "da24caf9-af8e-485c-b7c8-e73336da2693",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune for Education"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1 for Education"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "FLOW_O365_P3",
@@ -7328,20 +8616,28 @@
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 A5 for Faculty",
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
"String_Id": "M365EDU_A5_FACULTY",
"GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3",
"Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for faculty",
+ "String_Id": "M365EDU_A5_FACULTY",
+ "GUID": "e97c048c-37a4-45fb-ab50-922fbf07a370",
+ "Service_Plan_Name": "REMOTE_HELP",
+ "Service_Plan_Id": "a4c6cf29-1168-4076-ba5c-e8fe0e62b17e",
+ "Service_Plans_Included_Friendly_Names": "Remote help"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
"GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
"Service_Plan_Name": "AAD_BASIC_EDU",
"Service_Plan_Id": "1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID Basic for Education"
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory Basic for Education"
},
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
@@ -7367,6 +8663,14 @@
"Service_Plan_Id": "9f431833-0334-42de-a7dc-70aa40db46db",
"Service_Plans_Included_Friendly_Names": "Customer Lockbox"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "CustomerLockboxA_Enterprise",
+ "Service_Plan_Id": "3ec18638-bd4c-4d3b-8905-479ed636b83e",
+ "Service_Plans_Included_Friendly_Names": "Customer Lockbox (A)"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7375,6 +8679,14 @@
"Service_Plan_Id": "cd31b152-6326-4d1b-ae1b-997b625182e6",
"Service_Plans_Included_Friendly_Names": "Data Classification in Microsoft 365"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "COMMON_DEFENDER_PLATFORM_FOR_OFFICE",
+ "Service_Plan_Id": "a312bdeb-1e21-40d0-84b1-0e73f128144f",
+ "Service_Plans_Included_Friendly_Names": "Defender Platform for Office 365"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7391,6 +8703,14 @@
"Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7445,7 +8765,7 @@
"GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
"Service_Plan_Name": "OFFICESUBSCRIPTION",
"Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Enterprise"
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
},
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
@@ -7455,6 +8775,14 @@
"Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "M365_AUDIT_PLATFORM",
+ "Service_Plan_Id": "f6de4823-28fa-440b-b886-4783fa86ddba",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audit Platform"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7471,6 +8799,14 @@
"Service_Plan_Id": "bf28f719-7844-4079-9c78-c1307898e192",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Defender"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7487,6 +8823,14 @@
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7503,14 +8847,6 @@
"Service_Plan_Id": "6db1f1db-2b46-403f-be40-e39395f08dbb",
"Service_Plans_Included_Friendly_Names": "Microsoft Customer Key"
},
- {
- "Product_Display_Name": "Microsoft 365 A5 for Students",
- "String_Id": "M365EDU_A5_STUDENT",
- "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
- "Service_Plan_Name": "DATA_INVESTIGATIONS",
- "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
- "Service_Plans_Included_Friendly_Names": "Microsoft Data Investigations"
- },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7559,6 +8895,14 @@
"Service_Plan_Id": "d587c7a3-bda9-4f99-8776-9bcf59c84f75",
"Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
+ "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management - Exchange"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7567,6 +8911,14 @@
"Service_Plan_Id": "0898bdbb-73b0-471a-81e5-20f1fe4dd66e",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7719,6 +9071,22 @@
"Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7731,9 +9099,9 @@
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
"GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
- "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
- "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
- "Service_Plans_Included_Friendly_Names": "RETIRED - Microsoft Insider Risk Management"
+ "Service_Plan_Name": "DATA_INVESTIGATIONS",
+ "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
+ "Service_Plans_Included_Friendly_Names": "Retired - Microsoft Data Investigations"
},
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
@@ -7831,22 +9199,6 @@
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
- {
- "Product_Display_Name": "Microsoft 365 A5 for Students",
- "String_Id": "M365EDU_A5_STUDENT",
- "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
- "Service_Plan_Name": "AAD_PREMIUM",
- "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
- },
- {
- "Product_Display_Name": "Microsoft 365 A5 for Students",
- "String_Id": "M365EDU_A5_STUDENT",
- "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
- "Service_Plan_Name": "AAD_PREMIUM_P2",
- "Service_Plan_Id": "eec0eb4f-6444-4f95-aba0-50c24d67f998",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P2"
- },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7871,6 +9223,14 @@
"Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "Intune_ServiceNow",
+ "Service_Plan_Id": "3eeb8536-fecf-41bf-a3f8-d6f17a9f3efc",
+ "Service_Plans_Included_Friendly_Names": "Intune ServiceNow Integration"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
@@ -7895,13 +9255,29 @@
"Service_Plan_Id": "14ab5db5-e6c4-4b20-b4bc-13e36fd2227f",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Identity"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "AAD_PREMIUM_P2",
+ "Service_Plan_Id": "eec0eb4f-6444-4f95-aba0-50c24d67f998",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P2"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
"String_Id": "M365EDU_A5_STUDENT",
"GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
@@ -7909,7 +9285,7 @@
"GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
"Service_Plan_Name": "INTUNE_EDU",
"Service_Plan_Id": "da24caf9-af8e-485c-b7c8-e73336da2693",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune for Education"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1 for Education"
},
{
"Product_Display_Name": "Microsoft 365 A5 for Students",
@@ -7927,6 +9303,14 @@
"Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
+ {
+ "Product_Display_Name": "Microsoft 365 A5 for Students",
+ "String_Id": "M365EDU_A5_STUDENT",
+ "GUID": "46c119d4-0379-4a9d-85e4-97c66d3f909e",
+ "Service_Plan_Name": "REMOTE_HELP",
+ "Service_Plan_Id": "a4c6cf29-1168-4076-ba5c-e8fe0e62b17e",
+ "Service_Plans_Included_Friendly_Names": "Remote help"
+ },
{
"Product_Display_Name": "Microsoft 365 A5 for students use benefit",
"String_Id": "M365EDU_A5_STUUSEBNFT",
@@ -9255,6 +10639,278 @@
"Service_Plan_Id": "41bf139a-4e60-409f-9346-a1361efc6dfb",
"Service_Plans_Included_Friendly_Names": "YAMMER MIDSIZE"
},
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "CDS_O365_P1",
+ "Service_Plan_Id": "bed136c6-b799-4462-824d-fc045d3a9d25",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "EXCHANGE_S_STANDARD",
+ "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MYANALYTICS_P2",
+ "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
+ "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "FORMS_PLAN_E1",
+ "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "KAIZALA_O365_P2",
+ "Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
+ "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "Nucleus",
+ "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
+ "Service_Plans_Included_Friendly_Names": "Nucleus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "OFFICEMOBILE_SUBSCRIPTION",
+ "Service_Plan_Id": "c63d4d19-e8cb-460e-b37c-4d6c34603745",
+ "Service_Plans_Included_Friendly_Names": "Office Mobile Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "PLACES_CORE",
+ "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94",
+ "Service_Plans_Included_Friendly_Names": "Places Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "PROJECT_O365_P1",
+ "Service_Plan_Id": "a55dfd10-0864-46d9-a3cd-da5991a3e0e2",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "SHAREPOINTSTANDARD",
+ "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "STREAM_O365_SMB",
+ "Service_Plan_Id": "3c53ea51-d578-46fa-a4c0-fd0a92809a60",
+ "Service_Plans_Included_Friendly_Names": "Stream for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "SWAY",
+ "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
+ "Service_Plans_Included_Friendly_Names": "Sway"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "BPOS_S_TODO_1",
+ "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
+ "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
+ "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "WHITEBOARD_PLAN1",
+ "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "YAMMER_ENTERPRISE",
+ "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
+ "Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "DYN365_CDS_O365_P1",
+ "Service_Plan_Id": "40b010bb-0b69-4654-ac5e-ba161433f4b4",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "RMS_S_BASIC",
+ "Service_Plan_Id": "31cf2cfc-6b0d-4adc-a336-88b724ed8122",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Rights Management Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "POWERAPPS_O365_P1",
+ "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "FLOW_O365_P1",
+ "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)",
+ "String_Id": "Microsoft_365_Business_Basic_(no Teams)",
+ "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P1",
+ "Service_Plan_Id": "0683001c-0492-4d59-9515-d9a6426b5813",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ },
{
"Product_Display_Name": "Microsoft 365 Business Basic EEA (no Teams)",
"String_Id": "Microsoft_365_Business_Basic_EEA_(no_Teams)",
@@ -9775,6 +11431,286 @@
"Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "CDS_O365_P2",
+ "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "EXCHANGE_S_STANDARD",
+ "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MYANALYTICS_P2",
+ "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
+ "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "OFFICE_BUSINESS",
+ "Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Business"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "FORMS_PLAN_E1",
+ "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
+ "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "Deskless",
+ "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
+ "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "Nucleus",
+ "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
+ "Service_Plans_Included_Friendly_Names": "Nucleus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "PLACES_CORE",
+ "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94",
+ "Service_Plans_Included_Friendly_Names": "Places Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "PROJECT_O365_P2",
+ "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "SHAREPOINTSTANDARD",
+ "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "STREAM_O365_SMB",
+ "Service_Plan_Id": "3c53ea51-d578-46fa-a4c0-fd0a92809a60",
+ "Service_Plans_Included_Friendly_Names": "Stream for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "SWAY",
+ "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
+ "Service_Plans_Included_Friendly_Names": "Sway"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "BPOS_S_TODO_1",
+ "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
+ "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
+ "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "WHITEBOARD_PLAN1",
+ "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "DYN365_CDS_O365_P2",
+ "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "RMS_S_BASIC",
+ "Service_Plan_Id": "31cf2cfc-6b0d-4adc-a336-88b724ed8122",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Rights Management Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "POWERAPPS_O365_P1",
+ "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "FLOW_O365_P1",
+ "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)",
+ "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS",
+ "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
+ "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ },
{
"Product_Display_Name": "Microsoft 365 Business Standard EEA (no Teams)",
"String_Id": "Office_365_w/o_Teams_Bundle_Business_Standard",
@@ -10864,4129 +12800,5897 @@
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
"Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
"Service_Plans_Included_Friendly_Names": "Exchange Foundation"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "DYN365BC_MS_INVOICING",
"Service_Plan_Id": "39b5c996-467e-4e60-bd62-46066f572726",
"Service_Plans_Included_Friendly_Names": "Microsoft Invoicing"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
- "Service_Plan_Name": "Bing_Chat_Enterprise",
- "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
- "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "CDS_O365_P3",
"Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "BPOS_S_DlpAddOn",
"Service_Plan_Id": "9bec7e34-c9fa-40b7-a9d1-bd6d1165c7ed",
"Service_Plans_Included_Friendly_Names": "Data Loss Prevention"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "EXCHANGE_S_STANDARD",
"Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c",
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "EXCHANGE_S_ARCHIVE_ADDON",
"Service_Plan_Id": "176a09a6-7ec5-4039-ac02-b2791c6ba793",
"Service_Plans_Included_Friendly_Names": "Exchange Online Archiving"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "OFFICE_BUSINESS",
"Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for business"
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Business"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
"Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "MDE_SMB",
"Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "ATP_ENTERPRISE",
"Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "FORMS_PLAN_E1",
"Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "INTUNE_SMBIZ",
+ "Service_Plan_Id": "8e9ff0ff-aa7a-4b20-83c1-2f636b600ac2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "KAIZALA_O365_P2",
"Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "OFFICE_SHARED_COMPUTER_ACTIVATION",
"Service_Plan_Id": "276d6e8a-f056-4f70-b7e8-4fc27f79f809",
"Service_Plans_Included_Friendly_Names": "Office Shared Computer Activation"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "PLACES_CORE",
+ "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94",
+ "Service_Plans_Included_Friendly_Names": "Places Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "PROJECT_O365_P3",
"Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "O365_SB_Relationship_Management",
"Service_Plan_Id": "5bfe124c-bbdc-4494-8835-f1297d457d79",
"Service_Plans_Included_Friendly_Names": "RETIRED - Outlook Customer Manager"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "SHAREPOINTSTANDARD",
"Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1",
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "BPOS_S_TODO_1",
"Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c",
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "VIVAENGAGE_CORE",
"Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
"Service_Plans_Included_Friendly_Names": "Viva Engage Core"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "WHITEBOARD_PLAN1",
"Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d",
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "WINBIZ",
"Service_Plan_Id": "8e229017-d77b-43d5-9305-903395523b99",
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Business"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "AAD_SMB",
"Service_Plan_Id": "de377cbc-0019-4ec2-b77c-3f223947e102",
"Service_Plans_Included_Friendly_Names": "Azure Active Directory"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "DYN365_CDS_O365_P3",
"Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
- "Service_Plan_Name": "INTUNE_SMBIZ",
- "Service_Plan_Id": "8e9ff0ff-aa7a-4b20-83c1-2f636b600ac2",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "STREAM_O365_E1",
"Service_Plan_Id": "743dd19e-1ce3-4c62-a3ad-49ba8f63a2f6",
"Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E1"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "POWERAPPS_O365_P1",
"Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "FLOW_O365_P1",
"Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
- "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
- "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)",
+ "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)",
+ "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3",
"Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 Business Voice (US)",
- "String_Id": "BUSINESS_VOICE_MED2_TELCO",
- "GUID": "08d7bce8-6e16-490e-89db-1d508e5e9609",
- "Service_Plan_Name": "MCOMEETADV",
- "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (US)",
- "String_Id": "BUSINESS_VOICE_MED2_TELCO",
- "GUID": "08d7bce8-6e16-490e-89db-1d508e5e9609",
- "Service_Plan_Name": "MCOPSTN1",
- "Service_Plan_Id": "4ed3ff63-69d7-4fb7-b984-5aec7f605ca8",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
- "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
- "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
- "Service_Plan_Name": "MCOMEETADV",
- "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
- "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
- "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
- "Service_Plan_Name": "MCOEV",
- "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (UK",
- "String_Id": "BUSINESS_VOICE",
- "GUID": "e5a17adf-8f0d-4b57-bc14-d331235f9307",
- "Service_Plan_Name": "MCOMEETADV",
- "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (UK",
- "String_Id": "BUSINESS_VOICE",
- "GUID": "e5a17adf-8f0d-4b57-bc14-d331235f9307",
- "Service_Plan_Name": "MCOPSTN1",
- "Service_Plan_Id": "4ed3ff63-69d7-4fb7-b984-5aec7f605ca8",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (UK",
- "String_Id": "BUSINESS_VOICE",
- "GUID": "e5a17adf-8f0d-4b57-bc14-d331235f9307",
- "Service_Plan_Name": "MCOEV",
- "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan) for US",
- "String_Id": "BUSINESS_VOICE_DIRECTROUTING_MED",
- "GUID": "8330dae3-d349-44f7-9cad-1b23c64baabe",
- "Service_Plan_Name": "MCOMEETADV",
- "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan) for US",
- "String_Id": "BUSINESS_VOICE_DIRECTROUTING_MED",
- "GUID": "8330dae3-d349-44f7-9cad-1b23c64baabe",
- "Service_Plan_Name": "MCOEV",
- "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
- "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
- "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
- "Service_Plan_Name": "MCOMEETADV",
- "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
- "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
- "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
- "Service_Plan_Name": "MCOEV",
- "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice",
- "String_Id": "BUSINESS_VOICE_MED2",
- "GUID": "a6051f20-9cbc-47d2-930d-419183bf6cf1",
- "Service_Plan_Name": "MCOMEETADV",
- "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice",
- "String_Id": "BUSINESS_VOICE_MED2",
- "GUID": "a6051f20-9cbc-47d2-930d-419183bf6cf1",
- "Service_Plan_Name": "MCOPSTN1",
- "Service_Plan_Id": "4ed3ff63-69d7-4fb7-b984-5aec7f605ca8",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan"
- },
- {
- "Product_Display_Name": "Microsoft 365 Business Voice",
- "String_Id": "BUSINESS_VOICE_MED2",
- "GUID": "a6051f20-9cbc-47d2-930d-419183bf6cf1",
- "Service_Plan_Name": "MCOEV",
- "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
- },
- {
- "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
- "String_Id": "M365_Copilot",
- "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
- "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT",
- "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7",
- "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot"
- },
- {
- "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
- "String_Id": "M365_Copilot",
- "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
- "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH",
- "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d",
- "Service_Plans_Included_Friendly_Names": "Intelligent Search"
- },
- {
- "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
- "String_Id": "M365_Copilot",
- "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
- "Service_Plan_Name": "M365_COPILOT_TEAMS",
- "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams"
- },
- {
- "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
- "String_Id": "M365_Copilot",
- "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
- "Service_Plan_Name": "M365_COPILOT_APPS",
- "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps"
- },
- {
- "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
- "String_Id": "M365_Copilot",
- "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
- "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT",
- "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960",
- "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat"
- },
- {
- "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
- "String_Id": "M365_Copilot",
- "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
- "Service_Plan_Name": "M365_COPILOT_CONNECTORS",
- "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d",
- "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot"
- },
- {
- "Product_Display_Name": "Microsoft 365 Domestic Calling Plan (120 minutes) - US",
- "String_Id": "MCOPSTN5_US",
- "GUID": "d13e9d1b-316a-4946-98c6-362c97a4fdfe",
- "Service_Plan_Name": "PSTN5_US",
- "Service_Plan_Id": "1346d5e6-15a6-4b88-9693-806ff7296a7a",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan - US (120 minutes)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "DYN365BC_MS_INVOICING",
+ "Service_Plan_Id": "39b5c996-467e-4e60-bd62-46066f572726",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Invoicing"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
"Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
"Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
"Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
"Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "CDS_O365_P2",
- "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "CDS_O365_P3",
+ "Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
- "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
- "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "BPOS_S_DlpAddOn",
+ "Service_Plan_Id": "9bec7e34-c9fa-40b7-a9d1-bd6d1165c7ed",
+ "Service_Plans_Included_Friendly_Names": "Data Loss Prevention"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "EXCHANGE_S_STANDARD",
+ "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "EXCHANGE_S_ARCHIVE_ADDON",
+ "Service_Plan_Id": "176a09a6-7ec5-4039-ac02-b2791c6ba793",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online Archiving"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
"Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
"Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
"Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
"Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "ContentExplorer_Standard",
- "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
- "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "MIP_S_CLP1",
- "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
- "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "OFFICESUBSCRIPTION",
- "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "OFFICE_BUSINESS",
+ "Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Business"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
"Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "MDE_LITE",
- "Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
- "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "MDE_SMB",
+ "Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "FORMS_PLAN_E3",
- "Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
- "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "ATP_ENTERPRISE",
+ "Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "KAIZALA_O365_P3",
- "Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "FORMS_PLAN_E1",
+ "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "KAIZALA_O365_P2",
+ "Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MICROSOFT_LOOP",
"Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
"Service_Plans_Included_Friendly_Names": "Microsoft Loop"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "STREAM_O365_E3",
- "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
- "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "TEAMS1",
"Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
"Service_Plans_Included_Friendly_Names": "Microsoft Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "PROJECT_O365_P2",
- "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
- "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "OFFICE_SHARED_COMPUTER_ACTIVATION",
+ "Service_Plan_Id": "276d6e8a-f056-4f70-b7e8-4fc27f79f809",
+ "Service_Plans_Included_Friendly_Names": "Office Shared Computer Activation"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "PROJECT_O365_P3",
+ "Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "Bing_Chat_Enterprise",
"Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
"Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "SHAREPOINTENTERPRISE",
- "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
- "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "O365_SB_Relationship_Management",
+ "Service_Plan_Id": "5bfe124c-bbdc-4494-8835-f1297d457d79",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Outlook Customer Manager"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "SHAREPOINTSTANDARD",
+ "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "BPOS_S_TODO_2",
- "Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
- "Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "BPOS_S_TODO_1",
+ "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "VIVAENGAGE_CORE",
"Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
"Service_Plans_Included_Friendly_Names": "Viva Engage Core"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "WHITEBOARD_PLAN2",
- "Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
- "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "WHITEBOARD_PLAN1",
+ "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
- "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
- "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "Windows_Autopatch",
- "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
- "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "WINBIZ",
+ "Service_Plan_Id": "8e229017-d77b-43d5-9305-903395523b99",
+ "Service_Plans_Included_Friendly_Names": "Windows 10/11 Business"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "AAD_SMB",
+ "Service_Plan_Id": "de377cbc-0019-4ec2-b77c-3f223947e102",
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "DYN365_CDS_O365_P2",
- "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "DYN365_CDS_O365_P3",
+ "Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "INTUNE_SMBIZ",
+ "Service_Plan_Id": "8e9ff0ff-aa7a-4b20-83c1-2f636b600ac2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "POWERAPPS_O365_P2",
- "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "STREAM_O365_E1",
+ "Service_Plan_Id": "743dd19e-1ce3-4c62-a3ad-49ba8f63a2f6",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "POWERAPPS_O365_P1",
+ "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "FLOW_O365_P2",
- "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "FLOW_O365_P1",
+ "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3",
- "String_Id": "SPE_E3",
- "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
- "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
- "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
+ "Product_Display_Name": "Microsoft 365 Business Premium Donation",
+ "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)",
+ "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3",
+ "Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
- "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
- "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
- "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
- "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "DYN365BC_MS_INVOICING",
+ "Service_Plan_Id": "39b5c996-467e-4e60-bd62-46066f572726",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Invoicing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "CDS_O365_P2",
- "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "CDS_O365_P3",
+ "Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
- "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
- "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
- "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
- "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
- "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
- "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "BPOS_S_DlpAddOn",
+ "Service_Plan_Id": "9bec7e34-c9fa-40b7-a9d1-bd6d1165c7ed",
+ "Service_Plans_Included_Friendly_Names": "Data Loss Prevention"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "ContentExplorer_Standard",
- "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
- "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "EXCHANGE_S_STANDARD",
+ "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "MIP_S_CLP1",
- "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
- "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "EXCHANGE_S_ARCHIVE_ADDON",
+ "Service_Plan_Id": "176a09a6-7ec5-4039-ac02-b2791c6ba793",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online Archiving"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "OFFICESUBSCRIPTION",
- "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "OFFICE_BUSINESS",
+ "Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for business"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
"Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "MDE_LITE",
- "Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
- "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "MDE_SMB",
+ "Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "FORMS_PLAN_E3",
- "Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
- "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "ATP_ENTERPRISE",
+ "Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "KAIZALA_O365_P3",
- "Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
- "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "FORMS_PLAN_E1",
+ "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "MICROSOFT_LOOP",
- "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
- "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "KAIZALA_O365_P2",
+ "Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "STREAM_O365_E3",
- "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
- "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "PLACES_CORE",
- "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94",
- "Service_Plans_Included_Friendly_Names": "Places Core"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "OFFICE_SHARED_COMPUTER_ACTIVATION",
+ "Service_Plan_Id": "276d6e8a-f056-4f70-b7e8-4fc27f79f809",
+ "Service_Plans_Included_Friendly_Names": "Office Shared Computer Activation"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "PROJECT_O365_P2",
- "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
- "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "PROJECT_O365_P3",
+ "Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "Bing_Chat_Enterprise",
- "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
- "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "O365_SB_Relationship_Management",
+ "Service_Plan_Id": "5bfe124c-bbdc-4494-8835-f1297d457d79",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Outlook Customer Manager"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "SHAREPOINTENTERPRISE",
- "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
- "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "SHAREPOINTSTANDARD",
+ "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "BPOS_S_TODO_2",
- "Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
- "Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "BPOS_S_TODO_1",
+ "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "VIVAENGAGE_CORE",
"Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
"Service_Plans_Included_Friendly_Names": "Viva Engage Core"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "WHITEBOARD_PLAN2",
- "Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
- "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "WHITEBOARD_PLAN1",
+ "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
- "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
- "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "Windows_Autopatch",
- "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
- "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "WINBIZ",
+ "Service_Plan_Id": "8e229017-d77b-43d5-9305-903395523b99",
+ "Service_Plans_Included_Friendly_Names": "Windows 10/11 Business"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "AAD_SMB",
+ "Service_Plan_Id": "de377cbc-0019-4ec2-b77c-3f223947e102",
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "DYN365_CDS_O365_P2",
- "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "DYN365_CDS_O365_P3",
+ "Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "INTUNE_SMBIZ",
+ "Service_Plan_Id": "8e9ff0ff-aa7a-4b20-83c1-2f636b600ac2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "POWERAPPS_O365_P2",
- "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "STREAM_O365_E1",
+ "Service_Plan_Id": "743dd19e-1ce3-4c62-a3ad-49ba8f63a2f6",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "POWERAPPS_O365_P1",
+ "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "FLOW_O365_P2",
- "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "FLOW_O365_P1",
+ "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
- "String_Id": "Microsoft_365_E3_(no_Teams)",
- "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
- "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
- "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
+ "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)",
+ "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium",
+ "GUID": "a3f586b6-8cce-4d9b-99d6-55238397f77a",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3",
+ "Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ "Product_Display_Name": "Microsoft 365 Business Voice (US)",
+ "String_Id": "BUSINESS_VOICE_MED2_TELCO",
+ "GUID": "08d7bce8-6e16-490e-89db-1d508e5e9609",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "CDS_O365_P2",
- "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
- "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
+ "Product_Display_Name": "Microsoft 365 Business Voice (US)",
+ "String_Id": "BUSINESS_VOICE_MED2_TELCO",
+ "GUID": "08d7bce8-6e16-490e-89db-1d508e5e9609",
+ "Service_Plan_Name": "MCOPSTN1",
+ "Service_Plan_Id": "4ed3ff63-69d7-4fb7-b984-5aec7f605ca8",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "Bing_Chat_Enterprise",
- "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
- "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
+ "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
+ "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
+ "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
- "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
- "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
+ "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
+ "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
+ "Service_Plan_Name": "MCOEV",
+ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "ContentExplorer_Standard",
- "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
- "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
+ "Product_Display_Name": "Microsoft 365 Business Voice (UK",
+ "String_Id": "BUSINESS_VOICE",
+ "GUID": "e5a17adf-8f0d-4b57-bc14-d331235f9307",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MIP_S_CLP1",
- "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
- "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
+ "Product_Display_Name": "Microsoft 365 Business Voice (UK",
+ "String_Id": "BUSINESS_VOICE",
+ "GUID": "e5a17adf-8f0d-4b57-bc14-d331235f9307",
+ "Service_Plan_Name": "MCOPSTN1",
+ "Service_Plan_Id": "4ed3ff63-69d7-4fb7-b984-5aec7f605ca8",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MYANALYTICS_P2",
- "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
- "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
+ "Product_Display_Name": "Microsoft 365 Business Voice (UK",
+ "String_Id": "BUSINESS_VOICE",
+ "GUID": "e5a17adf-8f0d-4b57-bc14-d331235f9307",
+ "Service_Plan_Name": "MCOEV",
+ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "OFFICESUBSCRIPTION",
- "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
+ "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan) for US",
+ "String_Id": "BUSINESS_VOICE_DIRECTROUTING_MED",
+ "GUID": "8330dae3-d349-44f7-9cad-1b23c64baabe",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
- "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan) for US",
+ "String_Id": "BUSINESS_VOICE_DIRECTROUTING_MED",
+ "GUID": "8330dae3-d349-44f7-9cad-1b23c64baabe",
+ "Service_Plan_Name": "MCOEV",
+ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
- "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
+ "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
+ "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MICROSOFTBOOKINGS",
- "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
- "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ "Product_Display_Name": "Microsoft 365 Business Voice (without Calling Plan)",
+ "String_Id": "BUSINESS_VOICE_DIRECTROUTING",
+ "GUID": "d52db95a-5ecb-46b6-beb0-190ab5cda4a8",
+ "Service_Plan_Name": "MCOEV",
+ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "CLIPCHAMP",
- "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
- "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ "Product_Display_Name": "Microsoft 365 Business Voice",
+ "String_Id": "BUSINESS_VOICE_MED2",
+ "GUID": "a6051f20-9cbc-47d2-930d-419183bf6cf1",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MDE_LITE",
- "Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
- "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
+ "Product_Display_Name": "Microsoft 365 Business Voice",
+ "String_Id": "BUSINESS_VOICE_MED2",
+ "GUID": "a6051f20-9cbc-47d2-930d-419183bf6cf1",
+ "Service_Plan_Name": "MCOPSTN1",
+ "Service_Plan_Id": "4ed3ff63-69d7-4fb7-b984-5aec7f605ca8",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "FORMS_PLAN_E3",
- "Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
- "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
+ "Product_Display_Name": "Microsoft 365 Business Voice",
+ "String_Id": "BUSINESS_VOICE_MED2",
+ "GUID": "a6051f20-9cbc-47d2-930d-419183bf6cf1",
+ "Service_Plan_Name": "MCOEV",
+ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "KAIZALA_O365_P3",
- "Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
- "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "COPILOT_STUDIO_IN_COPILOT_FOR_M365",
+ "Service_Plan_Id": "fe6c28b3-d468-44ea-bbd0-a10a5167435c",
+ "Service_Plans_Included_Friendly_Names": "Copilot Studio in Copilot for M365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
- "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
- "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT",
+ "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MICROSOFT_SEARCH",
- "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
- "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH",
+ "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d",
+ "Service_Plans_Included_Friendly_Names": "Intelligent Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "Deskless",
- "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
- "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "M365_COPILOT_SHAREPOINT",
+ "Service_Plan_Id": "0aedf20c-091d-420b-aadf-30c042609612",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot for SharePoint"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "STREAM_O365_E3",
- "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
- "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "M365_COPILOT_TEAMS",
+ "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "INTUNE_O365",
- "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
- "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "M365_COPILOT_APPS",
+ "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "Nucleus",
- "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
- "Service_Plans_Included_Friendly_Names": "Nucleus"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT",
+ "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "SHAREPOINTWAC",
- "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
- "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)",
+ "String_Id": "Microsoft_365_Copilot_EDU",
+ "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436",
+ "Service_Plan_Name": "M365_COPILOT_CONNECTORS",
+ "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d",
+ "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "PROJECT_O365_P2",
- "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
- "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "COPILOT_STUDIO_IN_COPILOT_FOR_M365",
+ "Service_Plan_Id": "fe6c28b3-d468-44ea-bbd0-a10a5167435c",
+ "Service_Plans_Included_Friendly_Names": "Copilot Studio in Copilot for M365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "SHAREPOINTENTERPRISE",
- "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
- "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT",
+ "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MCOSTANDARD",
- "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
- "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH",
+ "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d",
+ "Service_Plans_Included_Friendly_Names": "Intelligent Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "SWAY",
- "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
- "Service_Plans_Included_Friendly_Names": "Sway"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_SHAREPOINT",
+ "Service_Plan_Id": "0aedf20c-091d-420b-aadf-30c042609612",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot for SharePoint"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "BPOS_S_TODO_2",
- "Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
- "Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_TEAMS",
+ "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "VIVAENGAGE_CORE",
- "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
- "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_APPS",
+ "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
- "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
- "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "Microsoft_Copilot_for_Sales",
+ "Service_Plan_Id": "a2194428-ead1-4fc1-bb81-ab8675125f42",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot for Sales"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "WHITEBOARD_PLAN2",
- "Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
- "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "Microsoft_Copilot_for_Sales_PowerAutomate",
+ "Service_Plan_Id": "0c1c2af2-6c51-43c7-9c55-fa487ac147ff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot for Sales with Power Automate"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "YAMMER_ENTERPRISE",
- "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
- "Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT",
+ "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "UNIVERSAL_PRINT_01",
- "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
- "Service_Plans_Included_Friendly_Names": "Universal Print"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "WORKPLACE_ANALYTICS_INSIGHTS_USER",
+ "Service_Plan_Id": "b622badb-1b45-48d5-920f-4b27a2c0996c",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Viva Insights"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
- "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
- "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "WORKPLACE_ANALYTICS_INSIGHTS_BACKEND",
+ "Service_Plan_Id": "ff7b261f-d98b-415b-827c-42a3fdf015af",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Viva Insights Backend"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "Windows_Autopatch",
- "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
- "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_CONNECTORS",
+ "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d",
+ "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
- "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
- "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
+ "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
+ "String_Id": "M365_Copilot",
+ "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT",
+ "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "RMS_S_PREMIUM",
- "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
- "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
+ "String_Id": "M365_Copilot",
+ "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
+ "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH",
+ "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d",
+ "Service_Plans_Included_Friendly_Names": "Intelligent Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "DYN365_CDS_O365_P2",
- "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
- "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
+ "String_Id": "M365_Copilot",
+ "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
+ "Service_Plan_Name": "M365_COPILOT_TEAMS",
+ "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "MFA_PREMIUM",
- "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
- "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
+ "String_Id": "M365_Copilot",
+ "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
+ "Service_Plan_Name": "M365_COPILOT_APPS",
+ "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "ADALLOM_S_DISCOVERY",
- "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
- "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
+ "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
+ "String_Id": "M365_Copilot",
+ "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
+ "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT",
+ "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "AAD_PREMIUM",
- "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "INTUNE_A",
- "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "POWERAPPS_O365_P2",
- "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
- "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "FLOW_O365_P2",
- "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
- "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ "Product_Display_Name": "Microsoft Copilot for Microsoft 365",
+ "String_Id": "M365_Copilot",
+ "GUID": "a809996b-059e-42e2-9866-db24b99a9782",
+ "Service_Plan_Name": "M365_COPILOT_CONNECTORS",
+ "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d",
+ "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
- "String_Id": "O365_w/o Teams Bundle_M3",
- "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
- "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
- "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
- "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ "Product_Display_Name": "Microsoft 365 Domestic Calling Plan (120 minutes) - US",
+ "String_Id": "MCOPSTN5_US",
+ "GUID": "d13e9d1b-316a-4946-98c6-362c97a4fdfe",
+ "Service_Plan_Name": "PSTN5_US",
+ "Service_Plan_Id": "1346d5e6-15a6-4b88-9693-806ff7296a7a",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan - US (120 minutes)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
"Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
"Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
- "Service_Plan_Name": "Bing_Chat_Enterprise",
- "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
- "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
- "Service_Plan_Name": "CLIPCHAMP",
- "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
- "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
- "Service_Plan_Name": "MICROSOFT_LOOP",
- "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
- "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
- "Service_Plan_Name": "UNIVERSAL_PRINT_01",
- "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
- "Service_Plans_Included_Friendly_Names": "Universal Print"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
- "Service_Plan_Name": "Windows_Autopatch",
- "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
- "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 Extra Features",
- "String_Id": "Microsoft_365_E3_Extra_Features",
- "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
- "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
- "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
- "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
- "Service_Plan_Name": "Bing_Chat_Enterprise",
- "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
- "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "CDS_O365_P2",
"Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
"Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "ContentExplorer_Standard",
+ "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
+ "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MIP_S_CLP1",
"Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
- "Service_Plan_Name": "OFFICESUBSCRIPTION_unattended",
- "Service_Plan_Id": "8d77e2d9-9e28-4450-8431-0def64078fc5",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Enterprise (Unattended)"
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION",
+ "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
"Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MDE_LITE",
"Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "FORMS_PLAN_E3",
"Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "KAIZALA_O365_P3",
"Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "STREAM_O365_E3",
"Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
"Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "TEAMS1",
+ "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "PROJECT_O365_P2",
"Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "SHAREPOINTENTERPRISE",
"Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "BPOS_S_TODO_2",
"Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "WHITEBOARD_PLAN2",
"Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "WIN10_PRO_ENT_SUB",
"Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "Windows_Autopatch",
"Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
"Service_Plans_Included_Friendly_Names": "Windows Autopatch"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "DYN365_CDS_O365_P2",
"Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "POWERAPPS_O365_P2",
"Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "FLOW_O365_P2",
"Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
- "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
- "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Product_Display_Name": "Microsoft 365 E3",
+ "String_Id": "SPE_E3",
+ "GUID": "05e9a617-0261-4cee-bb44-138d3ef5d965",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
"Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
"Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
"Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
"Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
"Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "CDS_O365_P2",
"Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
- "Service_Plan_Name": "Bing_Chat_Enterprise",
- "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
- "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
"Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "ContentExplorer_Standard",
+ "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
+ "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MIP_S_CLP1",
"Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
- "Service_Plan_Name": "OFFICESUBSCRIPTION_unattended",
- "Service_Plan_Id": "8d77e2d9-9e28-4450-8431-0def64078fc5",
- "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Enterprise (Unattended)"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION",
+ "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
"Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MDE_LITE",
"Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "FORMS_PLAN_E3",
"Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "KAIZALA_O365_P3",
"Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MICROSOFT_LOOP",
"Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
"Service_Plans_Included_Friendly_Names": "Microsoft Loop"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "STREAM_O365_E3",
"Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
"Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
- "Service_Plan_Name": "TEAMS1",
- "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
- "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "PLACES_CORE",
+ "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94",
+ "Service_Plans_Included_Friendly_Names": "Places Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "PROJECT_O365_P2",
"Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "SHAREPOINTENTERPRISE",
"Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "BPOS_S_TODO_2",
"Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "WHITEBOARD_PLAN2",
"Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "WIN10_PRO_ENT_SUB",
"Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "Windows_Autopatch",
"Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
"Service_Plans_Included_Friendly_Names": "Windows Autopatch"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "DYN365_CDS_O365_P2",
"Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "POWERAPPS_O365_P2",
"Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "FLOW_O365_P2",
"Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
- "String_Id": "SPE_E3_RPA1",
- "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Product_Display_Name": "Microsoft 365 E3 (no Teams)",
+ "String_Id": "Microsoft_365_E3_(no_Teams)",
+ "GUID": "dcf0408c-aaec-446c-afd4-43e3683943ea",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
"Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
- "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
- "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
- "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
- "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
- "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
- "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
"Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
"Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "CDS_O365_P2",
"Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "Bing_Chat_Enterprise",
"Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
"Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
"Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "ContentExplorer_Standard",
"Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
"Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MIP_S_CLP1",
"Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "OFFICESUBSCRIPTION",
"Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
"Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MDE_LITE",
"Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "FORMS_PLAN_E3",
"Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "KAIZALA_O365_P3",
"Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
- "Service_Plan_Name": "MICROSOFT_LOOP",
- "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
- "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "STREAM_O365_E3",
"Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
"Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
- "Service_Plan_Name": "TEAMS1",
- "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
- "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "PROJECT_O365_P2",
"Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "SHAREPOINTENTERPRISE",
"Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "BPOS_S_TODO_2",
"Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "WHITEBOARD_PLAN2",
"Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "WIN10_PRO_ENT_SUB",
"Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "Windows_Autopatch",
"Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
"Service_Plans_Included_Friendly_Names": "Windows Autopatch"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "DYN365_CDS_O365_P2",
"Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "POWERAPPS_O365_P2",
"Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "FLOW_O365_P2",
"Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
- "String_Id": "Microsoft_365_E3",
- "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams)",
+ "String_Id": "O365_w/o Teams Bundle_M3",
+ "GUID": "c2fe850d-fbbb-4858-b67d-bd0c6e746da3",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
"Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
"Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
"Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
"Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
"Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "EXCHANGE_S_DESKLESS",
- "Service_Plan_Id": "4a82b400-a79f-41a4-b4e2-e94f5787b113",
- "Service_Plans_Included_Friendly_Names": "Exchange Online Kiosk"
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
- "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
- "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "MICROSOFTBOOKINGS",
- "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
- "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "FORMS_PLAN_E1",
- "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
- "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Service_Plan_Name": "UNIVERSAL_PRINT_01",
+ "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
+ "Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "MICROSOFT_SEARCH",
- "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
- "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Service_Plan_Name": "Windows_Autopatch",
+ "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
+ "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "TEAMS1",
- "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
- "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
+ "Product_Display_Name": "Microsoft 365 E3 Extra Features",
+ "String_Id": "Microsoft_365_E3_Extra_Features",
+ "GUID": "f5b15d67-b99e-406b-90f1-308452f94de6",
+ "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
+ "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
+ "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "INTUNE_O365",
- "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
- "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "SHAREPOINTWAC",
- "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
- "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "CDS_O365_P2",
+ "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "ONEDRIVE_BASIC_P2",
- "Service_Plan_Id": "4495894f-534f-41ca-9d3b-0ebf1220a423",
- "Service_Plans_Included_Friendly_Names": "OneDrive for Business (Basic 2)"
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
+ "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft Teams EEA",
- "String_Id": "Microsoft_Teams_EEA_New",
- "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
- "Service_Plan_Name": "MCOIMP",
- "Service_Plan_Id": "afc06cb0-b4f4-4473-8286-d644f70d8faf",
- "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 1)"
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "MIP_S_CLP1",
+ "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
+ "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "MYANALYTICS_P2",
+ "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
+ "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION_unattended",
+ "Service_Plan_Id": "8d77e2d9-9e28-4450-8431-0def64078fc5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Enterprise (Unattended)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
+ "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "MDE_LITE",
"Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "FORMS_PLAN_E3",
"Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "KAIZALA_O365_P3",
"Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
- "Service_Plan_Name": "MICROSOFT_LOOP",
- "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
- "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
+ "Service_Plan_Name": "STREAM_O365_E3",
+ "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "PROJECT_O365_P2",
"Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "SHAREPOINTENTERPRISE",
"Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "BPOS_S_TODO_2",
"Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
- "Service_Plan_Name": "VIVAENGAGE_CORE",
- "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
- "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "WHITEBOARD_PLAN2",
"Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "WIN10_PRO_ENT_SUB",
"Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "Windows_Autopatch",
"Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
"Service_Plans_Included_Friendly_Names": "Windows Autopatch"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
"Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
"Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "DYN365_CDS_O365_P2",
"Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "ADALLOM_S_DISCOVERY",
"Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
- "Service_Plan_Name": "STREAM_O365_E3",
- "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
- "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "POWERAPPS_O365_P2",
"Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "FLOW_O365_P2",
"Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
- "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
- "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) - Unattended License",
+ "String_Id": "Microsoft_365_E3_EEA_(no_Teams)_Unattended_License",
+ "GUID": "a23dbafb-3396-48b3-ad9c-a304fe206043",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
"Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "AAD_PREMIUM",
- "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "RMS_S_PREMIUM",
- "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
- "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
- "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
- "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
"Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Microsoft Microsoft Entra Rights"
- },
- {
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "MFA_PREMIUM",
- "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
- "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "INTUNE_A",
- "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "CDS_O365_P2",
+ "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "STREAM_O365_E3",
- "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
- "Service_Plans_Included_Friendly_Names": "Microsoft Stream for O365 E3 SKU"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "TEAMS_AR_DOD",
- "Service_Plan_Id": "fd500458-c24c-478e-856c-a6067a8376cd",
- "Service_Plans_Included_Friendly_Names": "Microsoft Teams for DOD (AR)"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
+ "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "OFFICESUBSCRIPTION",
- "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Office 365 ProPlus"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MIP_S_CLP1",
+ "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
+ "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "SHAREPOINTWAC",
- "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
- "Service_Plans_Included_Friendly_Names": "Office Online"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MYANALYTICS_P2",
+ "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
+ "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "SHAREPOINTENTERPRISE",
- "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
- "Service_Plans_Included_Friendly_Names": "SharePoint Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION_unattended",
+ "Service_Plan_Id": "8d77e2d9-9e28-4450-8431-0def64078fc5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Enterprise (Unattended)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
- "String_Id": "SPE_E3_USGOV_DOD",
- "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
- "Service_Plan_Name": "MCOSTANDARD",
- "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
- "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "AAD_PREMIUM",
- "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
+ "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "RMS_S_PREMIUM",
- "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
- "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "ADALLOM_S_DISCOVERY",
- "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
- "Service_Plans_Included_Friendly_Names": "Cloud App Security Discovery"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
- "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
- "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MDE_LITE",
+ "Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Microsoft Microsoft Entra Rights"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "FORMS_PLAN_E3",
+ "Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "MFA_PREMIUM",
- "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
- "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "KAIZALA_O365_P3",
+ "Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "INTUNE_A",
- "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
- "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "Deskless",
+ "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
+ "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
"Service_Plan_Name": "STREAM_O365_E3",
"Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
- "Service_Plans_Included_Friendly_Names": "Microsoft Stream for O365 E3 SKU"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "TEAMS_AR_GCCHIGH",
- "Service_Plan_Id": "9953b155-8aef-4c56-92f3-72b0487fce41",
- "Service_Plans_Included_Friendly_Names": "Microsoft Teams for GCCHigh (AR)"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "TEAMS1",
+ "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
- "Service_Plan_Name": "OFFICESUBSCRIPTION",
- "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
- "Service_Plans_Included_Friendly_Names": "Office 365 ProPlus"
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "Nucleus",
+ "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
+ "Service_Plans_Included_Friendly_Names": "Nucleus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
- "Service_Plans_Included_Friendly_Names": "Office Online"
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "PROJECT_O365_P2",
+ "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
"Service_Plan_Name": "SHAREPOINTENTERPRISE",
"Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
- "Service_Plans_Included_Friendly_Names": "SharePoint Online (Plan 2)"
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
- "String_Id": "SPE_E3_USGOV_GCCHIGH",
- "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "SWAY",
+ "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
+ "Service_Plans_Included_Friendly_Names": "Sway"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "BPOS_S_TODO_2",
+ "Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
+ "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
+ "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "WHITEBOARD_PLAN2",
+ "Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "YAMMER_ENTERPRISE",
+ "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
+ "Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "UNIVERSAL_PRINT_01",
+ "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
+ "Service_Plans_Included_Friendly_Names": "Universal Print"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
+ "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
+ "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "Windows_Autopatch",
+ "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
+ "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
+ "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
+ "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "RMS_S_PREMIUM",
+ "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "DYN365_CDS_O365_P2",
+ "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "MFA_PREMIUM",
+ "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "ADALLOM_S_DISCOVERY",
+ "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "INTUNE_A",
+ "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "POWERAPPS_O365_P2",
+ "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "FLOW_O365_P2",
+ "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 - Unattended License",
+ "String_Id": "SPE_E3_RPA1",
+ "GUID": "c2ac2ee4-9bb1-47e4-8541-d689c7e83371",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
+ "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
"Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
"Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
"Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
"Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
"Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
"Service_Plan_Name": "RMS_S_ENTERPRISE",
"Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
"Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "CDS_O365_P2",
+ "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
"Service_Plan_Name": "Bing_Chat_Enterprise",
"Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
"Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
+ "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "ContentExplorer_Standard",
+ "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
+ "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MIP_S_CLP1",
+ "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
+ "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MYANALYTICS_P2",
+ "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
+ "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION",
+ "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
+ "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MDE_LITE",
+ "Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "FORMS_PLAN_E3",
+ "Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "KAIZALA_O365_P3",
+ "Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
+ "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "Deskless",
+ "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
+ "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "STREAM_O365_E3",
+ "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "TEAMS1",
+ "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "Nucleus",
+ "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
+ "Service_Plans_Included_Friendly_Names": "Nucleus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "PROJECT_O365_P2",
+ "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "SWAY",
+ "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
+ "Service_Plans_Included_Friendly_Names": "Sway"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "BPOS_S_TODO_2",
+ "Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
+ "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
+ "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "WHITEBOARD_PLAN2",
+ "Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "YAMMER_ENTERPRISE",
+ "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
+ "Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "UNIVERSAL_PRINT_01",
+ "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
+ "Service_Plans_Included_Friendly_Names": "Universal Print"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
+ "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
+ "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "Windows_Autopatch",
+ "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
+ "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
+ "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
+ "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "RMS_S_PREMIUM",
+ "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "DYN365_CDS_O365_P2",
+ "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "MFA_PREMIUM",
+ "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "ADALLOM_S_DISCOVERY",
+ "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "INTUNE_A",
+ "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "POWERAPPS_O365_P2",
+ "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "FLOW_O365_P2",
+ "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 (500 seats min)_HUB",
+ "String_Id": "Microsoft_365_E3",
+ "GUID": "0c21030a-7e60-4ec7-9a0f-0042e0e0211a",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
+ "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "EXCHANGE_S_DESKLESS",
+ "Service_Plan_Id": "4a82b400-a79f-41a4-b4e2-e94f5787b113",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online Kiosk"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "FORMS_PLAN_E1",
+ "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "TEAMS1",
+ "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "ONEDRIVE_BASIC_P2",
+ "Service_Plan_Id": "4495894f-534f-41ca-9d3b-0ebf1220a423",
+ "Service_Plans_Included_Friendly_Names": "OneDrive for Business (Basic 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams EEA",
+ "String_Id": "Microsoft_Teams_EEA_New",
+ "GUID": "7e74bd05-2c47-404e-829a-ba95c66fe8e5",
+ "Service_Plan_Name": "MCOIMP",
+ "Service_Plan_Id": "afc06cb0-b4f4-4473-8286-d644f70d8faf",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "MDE_LITE",
+ "Service_Plan_Id": "292cc034-7b7c-4950-aaf5-943befd3f1d4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint Plan 1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "FORMS_PLAN_E3",
+ "Service_Plan_Id": "2789c901-c14e-48ab-a76a-be334d9d793a",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "KAIZALA_O365_P3",
+ "Service_Plan_Id": "aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
+ "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "Deskless",
+ "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
+ "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "Nucleus",
+ "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
+ "Service_Plans_Included_Friendly_Names": "Nucleus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "PROJECT_O365_P2",
+ "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "SWAY",
+ "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
+ "Service_Plans_Included_Friendly_Names": "Sway"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "BPOS_S_TODO_2",
+ "Service_Plan_Id": "c87f142c-d1e9-4363-8630-aaea9c4d9ae5",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
+ "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
+ "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "WHITEBOARD_PLAN2",
+ "Service_Plan_Id": "94a54592-cd8b-425e-87c6-97868b000b91",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "YAMMER_ENTERPRISE",
+ "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
+ "Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "UNIVERSAL_PRINT_01",
+ "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
+ "Service_Plans_Included_Friendly_Names": "Universal Print"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
+ "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
+ "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "Windows_Autopatch",
+ "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
+ "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
+ "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
+ "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "RMS_S_PREMIUM",
+ "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "DYN365_CDS_O365_P2",
+ "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "MFA_PREMIUM",
+ "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "ADALLOM_S_DISCOVERY",
+ "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "INTUNE_A",
+ "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "STREAM_O365_E3",
+ "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E3"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "POWERAPPS_O365_P2",
+ "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "FLOW_O365_P2",
+ "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3 EEA (no Teams) (500 seats min)_HUB",
+ "String_Id": "O365_w/o Teams Bundle_M3_(500_seats_min)_HUB",
+ "GUID": "602e6573-55a3-46b1-a1a0-cc267991501a",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2",
+ "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "RMS_S_PREMIUM",
+ "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
+ "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Microsoft Entra Rights"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "MFA_PREMIUM",
+ "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "INTUNE_A",
+ "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "STREAM_O365_E3",
+ "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for O365 E3 SKU"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "TEAMS_AR_DOD",
+ "Service_Plan_Id": "fd500458-c24c-478e-856c-a6067a8376cd",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams for DOD (AR)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION",
+ "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
+ "Service_Plans_Included_Friendly_Names": "Office 365 ProPlus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office Online"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_DOD",
+ "String_Id": "SPE_E3_USGOV_DOD",
+ "GUID": "d61d61cc-f992-433f-a577-5bd016037eeb",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "RMS_S_PREMIUM",
+ "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "ADALLOM_S_DISCOVERY",
+ "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9",
+ "Service_Plans_Included_Friendly_Names": "Cloud App Security Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
+ "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Microsoft Entra Rights"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "MFA_PREMIUM",
+ "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "INTUNE_A",
+ "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
+ "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "STREAM_O365_E3",
+ "Service_Plan_Id": "9e700747-8b1d-45e5-ab8d-ef187ceec156",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for O365 E3 SKU"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "TEAMS_AR_GCCHIGH",
+ "Service_Plan_Id": "9953b155-8aef-4c56-92f3-72b0487fce41",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams for GCCHigh (AR)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION",
+ "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
+ "Service_Plans_Included_Friendly_Names": "Office 365 ProPlus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office Online"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E3_USGOV_GCCHIGH",
+ "String_Id": "SPE_E3_USGOV_GCCHIGH",
+ "GUID": "ca9d1dd9-dfe9-4fef-b97c-9bc1ea3c3658",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "CDS_O365_P3",
+ "Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "LOCKBOX_ENTERPRISE",
+ "Service_Plan_Id": "9f431833-0334-42de-a7dc-70aa40db46db",
+ "Service_Plans_Included_Friendly_Names": "Customer Lockbox"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "CustomerLockboxA_Enterprise",
+ "Service_Plan_Id": "3ec18638-bd4c-4d3b-8905-479ed636b83e",
+ "Service_Plans_Included_Friendly_Names": "Customer Lockbox (A)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MIP_S_Exchange",
+ "Service_Plan_Id": "cd31b152-6326-4d1b-ae1b-997b625182e6",
+ "Service_Plans_Included_Friendly_Names": "Data Classification in Microsoft 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
+ "Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
+ "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
+ "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
+ "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
+ "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "INFORMATION_BARRIERS",
+ "Service_Plan_Id": "c4801e8a-cb58-4c35-aca6-f2dcc106f287",
+ "Service_Plans_Included_Friendly_Names": "Information Barriers"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "Content_Explorer",
+ "Service_Plan_Id": "d9fa6af4-e046-4c89-9226-729a0786685d",
+ "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics - Premium"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "ContentExplorer_Standard",
+ "Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
+ "Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MIP_S_CLP2",
+ "Service_Plan_Id": "efb0351d-3b08-4503-993d-383af8de41e3",
+ "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Premium"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MIP_S_CLP1",
+ "Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
+ "Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MYANALYTICS_P2",
+ "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
+ "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "M365_ADVANCED_AUDITING",
+ "Service_Plan_Id": "2f442157-a11c-46b9-ae5b-6e39ff4e5849",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Advanced Auditing"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "OFFICESUBSCRIPTION",
+ "Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MCOMEETADV",
+ "Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "M365_AUDIT_PLATFORM",
+ "Service_Plan_Id": "f6de4823-28fa-440b-b886-4783fa86ddba",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Audit Platform"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MICROSOFT_COMMUNICATION_COMPLIANCE",
+ "Service_Plan_Id": "a413a9ff-720c-4822-98ef-2f37c2a21f4c",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Communication Compliance"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MTP",
+ "Service_Plan_Id": "bf28f719-7844-4079-9c78-c1307898e192",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Defender"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MCOEV",
+ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MICROSOFTBOOKINGS",
+ "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "CLIPCHAMP",
+ "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "COMMUNICATIONS_DLP",
+ "Service_Plan_Id": "6dc145d6-95dd-4191-b9c3-185575ee6f6b",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Communications DLP"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "CUSTOMER_KEY",
+ "Service_Plan_Id": "6db1f1db-2b46-403f-be40-e39395f08dbb",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Customer Key"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "DATA_INVESTIGATIONS",
+ "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Data Investigations"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "ATP_ENTERPRISE",
+ "Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "THREAT_INTELLIGENCE",
+ "Service_Plan_Id": "8e0c0a52-6a6c-4d40-8370-dd62790dcd70",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "EXCEL_PREMIUM",
+ "Service_Plan_Id": "531ee2f8-b1cb-453b-9c21-d2180d014ca5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Excel Advanced Analytics"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "FORMS_PLAN_E5",
+ "Service_Plan_Id": "e212cbc7-0961-4c40-9825-01117710dcb1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E5)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "INFO_GOVERNANCE",
+ "Service_Plan_Id": "e26c2fcc-ab91-4a61-b35c-03cdc8dddf66",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Information Governance"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "INSIDER_RISK",
+ "Service_Plan_Id": "d587c7a3-bda9-4f99-8776-9bcf59c84f75",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "KAIZALA_STANDALONE",
+ "Service_Plan_Id": "0898bdbb-73b0-471a-81e5-20f1fe4dd66e",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MICROSOFT_LOOP",
+ "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Loop"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "ML_CLASSIFICATION",
+ "Service_Plan_Id": "d2d51368-76c9-4317-ada2-a12c004c432f",
+ "Service_Plans_Included_Friendly_Names": "Microsoft ML-Based Classification"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "EXCHANGE_ANALYTICS",
+ "Service_Plan_Id": "34c0d7a0-a70f-4668-9238-47f9fc208882",
+ "Service_Plans_Included_Friendly_Names": "Microsoft MyAnalytics (Full)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "PROJECTWORKMANAGEMENT",
+ "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Planner"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "RECORDS_MANAGEMENT",
+ "Service_Plan_Id": "65cc641f-cccd-4643-97e0-a17e3045e541",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Records Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MICROSOFT_SEARCH",
+ "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "Deskless",
+ "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
+ "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "STREAM_O365_E5",
+ "Service_Plan_Id": "6c6042f5-6f01-4d67-b8c1-eb99d36eed3e",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E5"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "TEAMS1",
+ "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "INTUNE_O365",
+ "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
+ "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "Nucleus",
+ "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
+ "Service_Plans_Included_Friendly_Names": "Nucleus"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "EQUIVIO_ANALYTICS",
+ "Service_Plan_Id": "4de31727-a228-4ec3-a5bf-8e45b5ca48cc",
+ "Service_Plans_Included_Friendly_Names": "Office 365 Advanced eDiscovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "ADALLOM_S_O365",
+ "Service_Plan_Id": "8c098270-9dd4-4350-9b30-ba4703f3b36b",
+ "Service_Plans_Included_Friendly_Names": "Office 365 Cloud App Security"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "PAM_ENTERPRISE",
+ "Service_Plan_Id": "b1188c4c-1b36-4018-b48b-ee07604f6feb",
+ "Service_Plans_Included_Friendly_Names": "Office 365 Privileged Access Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "SAFEDOCS",
+ "Service_Plan_Id": "bf6f5520-59e3-4f82-974b-7dbbc4fd27c7",
+ "Service_Plans_Included_Friendly_Names": "Office 365 SafeDocs"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "SHAREPOINTWAC",
+ "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
+ "Service_Plans_Included_Friendly_Names": "Office for the Web"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "POWERAPPS_O365_P3",
+ "Service_Plan_Id": "9c0dab89-a30c-4117-86e7-97bda240acd2",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365 (Plan 3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "BI_AZURE_P2",
+ "Service_Plan_Id": "70d33638-9c74-4d01-bfd3-562de28bd4ba",
+ "Service_Plans_Included_Friendly_Names": "Power BI Pro"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "PREMIUM_ENCRYPTION",
+ "Service_Plan_Id": "617b097b-4b93-4ede-83de-5f075bb5fb2f",
+ "Service_Plans_Included_Friendly_Names": "Premium Encryption in Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "PROJECT_O365_P3",
+ "Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "COMMUNICATIONS_COMPLIANCE",
+ "Service_Plan_Id": "41fcdd7d-4733-4863-9cf4-c65b83ce2df4",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Microsoft Communications Compliance"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
+ "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Microsoft Insider Risk Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "SHAREPOINTENTERPRISE",
+ "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
+ "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MCOSTANDARD",
+ "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
+ "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "SWAY",
+ "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
+ "Service_Plans_Included_Friendly_Names": "Sway"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "BPOS_S_TODO_3",
+ "Service_Plan_Id": "3fb82609-8c27-4f7b-bd51-30634711ee67",
+ "Service_Plans_Included_Friendly_Names": "To-Do (Plan 3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "VIVAENGAGE_CORE",
+ "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
+ "Service_Plans_Included_Friendly_Names": "Viva Engage Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "VIVA_LEARNING_SEEDED",
+ "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
+ "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "WHITEBOARD_PLAN3",
+ "Service_Plan_Id": "4a51bca5-1eff-43f5-878c-177680f191af",
+ "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 3)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "YAMMER_ENTERPRISE",
+ "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
+ "Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "WINDEFATP",
+ "Service_Plan_Id": "871d91ec-ec1a-452b-a83f-bd76c7d770ef",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MICROSOFTENDPOINTDLP",
+ "Service_Plan_Id": "64bfac92-2b17-4482-b5e5-a0304429de3e",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Endpoint DLP"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "UNIVERSAL_PRINT_01",
+ "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
+ "Service_Plans_Included_Friendly_Names": "Universal Print"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "WIN10_PRO_ENT_SUB",
+ "Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
+ "Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "Windows_Autopatch",
+ "Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
+ "Service_Plans_Included_Friendly_Names": "Windows Autopatch"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
+ "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
+ "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "RMS_S_PREMIUM",
+ "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "RMS_S_PREMIUM2",
+ "Service_Plan_Id": "5689bec4-755d-4753-8b61-40975025187c",
+ "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P2"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "DYN365_CDS_O365_P3",
+ "Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "Defender_for_Iot_Enterprise",
+ "Service_Plan_Id": "99cd49a9-0e54-4e07-aea1-d8d9f5f704f5",
+ "Service_Plans_Included_Friendly_Names": "Defender for IoT - Enterprise IoT Security"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "MFA_PREMIUM",
+ "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "ADALLOM_S_STANDALONE",
+ "Service_Plan_Id": "2e2ddb96-6af9-4b1d-a3f0-d6ecfd22edb2",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "ATA",
+ "Service_Plan_Id": "14ab5db5-e6c4-4b20-b4bc-13e36fd2227f",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Identity"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "AAD_PREMIUM",
+ "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "AAD_PREMIUM_P2",
+ "Service_Plan_Id": "eec0eb4f-6444-4f95-aba0-50c24d67f998",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P2"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "INTUNE_A",
+ "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "FLOW_O365_P3",
+ "Service_Plan_Id": "07699545-9485-468e-95b6-2fca3738be01",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5",
+ "String_Id": "SPE_E5",
+ "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3",
+ "Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS",
+ "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS",
+ "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8",
+ "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "CDS_O365_P3",
"Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430",
"Service_Plans_Included_Friendly_Names": "Common Data Service for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "LOCKBOX_ENTERPRISE",
"Service_Plan_Id": "9f431833-0334-42de-a7dc-70aa40db46db",
"Service_Plans_Included_Friendly_Names": "Customer Lockbox"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "CustomerLockboxA_Enterprise",
"Service_Plan_Id": "3ec18638-bd4c-4d3b-8905-479ed636b83e",
"Service_Plans_Included_Friendly_Names": "Customer Lockbox (A)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MIP_S_Exchange",
"Service_Plan_Id": "cd31b152-6326-4d1b-ae1b-997b625182e6",
"Service_Plans_Included_Friendly_Names": "Data Classification in Microsoft 365"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "EXCHANGE_S_ENTERPRISE",
"Service_Plan_Id": "efb87545-963c-4e0d-99df-69c6916d9eb0",
"Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX",
"Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757",
"Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS",
"Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28",
"Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "INFORMATION_BARRIERS",
"Service_Plan_Id": "c4801e8a-cb58-4c35-aca6-f2dcc106f287",
"Service_Plans_Included_Friendly_Names": "Information Barriers"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "Content_Explorer",
"Service_Plan_Id": "d9fa6af4-e046-4c89-9226-729a0786685d",
"Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics - Premium"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "ContentExplorer_Standard",
"Service_Plan_Id": "2b815d45-56e4-4e3a-b65c-66cb9175b560",
"Service_Plans_Included_Friendly_Names": "Information Protection and Governance Analytics – Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MIP_S_CLP2",
"Service_Plan_Id": "efb0351d-3b08-4503-993d-383af8de41e3",
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Premium"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MIP_S_CLP1",
"Service_Plan_Id": "5136a095-5cf0-4aff-bec3-e84448b38ea5",
"Service_Plans_Included_Friendly_Names": "Information Protection for Office 365 - Standard"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MYANALYTICS_P2",
"Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a",
"Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "M365_ADVANCED_AUDITING",
"Service_Plan_Id": "2f442157-a11c-46b9-ae5b-6e39ff4e5849",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Advanced Auditing"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "OFFICESUBSCRIPTION",
"Service_Plan_Id": "43de0ff5-c92c-492b-9116-175376d08c38",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MCOMEETADV",
"Service_Plan_Id": "3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Audio Conferencing"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "M365_AUDIT_PLATFORM",
"Service_Plan_Id": "f6de4823-28fa-440b-b886-4783fa86ddba",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Audit Platform"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MICROSOFT_COMMUNICATION_COMPLIANCE",
"Service_Plan_Id": "a413a9ff-720c-4822-98ef-2f37c2a21f4c",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Communication Compliance"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MTP",
"Service_Plan_Id": "bf28f719-7844-4079-9c78-c1307898e192",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Defender"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
"Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MCOEV",
"Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MICROSOFTBOOKINGS",
"Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2",
"Service_Plans_Included_Friendly_Names": "Microsoft Bookings"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "CLIPCHAMP",
"Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472",
"Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "COMMUNICATIONS_DLP",
"Service_Plan_Id": "6dc145d6-95dd-4191-b9c3-185575ee6f6b",
"Service_Plans_Included_Friendly_Names": "Microsoft Communications DLP"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "CUSTOMER_KEY",
"Service_Plan_Id": "6db1f1db-2b46-403f-be40-e39395f08dbb",
"Service_Plans_Included_Friendly_Names": "Microsoft Customer Key"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
- "Service_Plan_Name": "DATA_INVESTIGATIONS",
- "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
- "Service_Plans_Included_Friendly_Names": "Microsoft Data Investigations"
- },
- {
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "ATP_ENTERPRISE",
"Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "THREAT_INTELLIGENCE",
"Service_Plan_Id": "8e0c0a52-6a6c-4d40-8370-dd62790dcd70",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "EXCEL_PREMIUM",
"Service_Plan_Id": "531ee2f8-b1cb-453b-9c21-d2180d014ca5",
"Service_Plans_Included_Friendly_Names": "Microsoft Excel Advanced Analytics"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "FORMS_PLAN_E5",
"Service_Plan_Id": "e212cbc7-0961-4c40-9825-01117710dcb1",
"Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E5)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "INFO_GOVERNANCE",
"Service_Plan_Id": "e26c2fcc-ab91-4a61-b35c-03cdc8dddf66",
"Service_Plans_Included_Friendly_Names": "Microsoft Information Governance"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "INSIDER_RISK",
"Service_Plan_Id": "d587c7a3-bda9-4f99-8776-9bcf59c84f75",
"Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
+ "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Insider Risk Management - Exchange"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "KAIZALA_STANDALONE",
"Service_Plan_Id": "0898bdbb-73b0-471a-81e5-20f1fe4dd66e",
"Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MICROSOFT_LOOP",
"Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda",
"Service_Plans_Included_Friendly_Names": "Microsoft Loop"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "ML_CLASSIFICATION",
"Service_Plan_Id": "d2d51368-76c9-4317-ada2-a12c004c432f",
"Service_Plans_Included_Friendly_Names": "Microsoft ML-Based Classification"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "EXCHANGE_ANALYTICS",
"Service_Plan_Id": "34c0d7a0-a70f-4668-9238-47f9fc208882",
"Service_Plans_Included_Friendly_Names": "Microsoft MyAnalytics (Full)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "PROJECTWORKMANAGEMENT",
"Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Planner"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "RECORDS_MANAGEMENT",
"Service_Plan_Id": "65cc641f-cccd-4643-97e0-a17e3045e541",
"Service_Plans_Included_Friendly_Names": "Microsoft Records Management"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MICROSOFT_SEARCH",
"Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff",
"Service_Plans_Included_Friendly_Names": "Microsoft Search"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "Deskless",
"Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3",
"Service_Plans_Included_Friendly_Names": "Microsoft StaffHub"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "STREAM_O365_E5",
"Service_Plan_Id": "6c6042f5-6f01-4d67-b8c1-eb99d36eed3e",
"Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E5"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
- "Service_Plan_Name": "TEAMS1",
- "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929",
- "Service_Plans_Included_Friendly_Names": "Microsoft Teams"
- },
- {
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "INTUNE_O365",
"Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117",
"Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "Nucleus",
"Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de",
"Service_Plans_Included_Friendly_Names": "Nucleus"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "EQUIVIO_ANALYTICS",
"Service_Plan_Id": "4de31727-a228-4ec3-a5bf-8e45b5ca48cc",
"Service_Plans_Included_Friendly_Names": "Office 365 Advanced eDiscovery"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "ADALLOM_S_O365",
"Service_Plan_Id": "8c098270-9dd4-4350-9b30-ba4703f3b36b",
"Service_Plans_Included_Friendly_Names": "Office 365 Cloud App Security"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "PAM_ENTERPRISE",
"Service_Plan_Id": "b1188c4c-1b36-4018-b48b-ee07604f6feb",
"Service_Plans_Included_Friendly_Names": "Office 365 Privileged Access Management"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "SAFEDOCS",
"Service_Plan_Id": "bf6f5520-59e3-4f82-974b-7dbbc4fd27c7",
"Service_Plans_Included_Friendly_Names": "Office 365 SafeDocs"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "SHAREPOINTWAC",
"Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014",
"Service_Plans_Included_Friendly_Names": "Office for the Web"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "PEOPLE_SKILLS_FOUNDATION",
+ "Service_Plan_Id": "13b6da2c-0d84-450e-9f69-a33e221387ca",
+ "Service_Plans_Included_Friendly_Names": "People Skills - Foundation"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "POWERAPPS_O365_P3",
"Service_Plan_Id": "9c0dab89-a30c-4117-86e7-97bda240acd2",
"Service_Plans_Included_Friendly_Names": "Power Apps for Office 365 (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "BI_AZURE_P2",
"Service_Plan_Id": "70d33638-9c74-4d01-bfd3-562de28bd4ba",
"Service_Plans_Included_Friendly_Names": "Power BI Pro"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "PREMIUM_ENCRYPTION",
"Service_Plan_Id": "617b097b-4b93-4ede-83de-5f075bb5fb2f",
"Service_Plans_Included_Friendly_Names": "Premium Encryption in Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "PROJECT_O365_P3",
"Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad",
"Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "PURVIEW_DISCOVERY",
"Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
"Service_Plans_Included_Friendly_Names": "Purview Discovery"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "COMMUNICATIONS_COMPLIANCE",
"Service_Plan_Id": "41fcdd7d-4733-4863-9cf4-c65b83ce2df4",
"Service_Plans_Included_Friendly_Names": "RETIRED - Microsoft Communications Compliance"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
- "Service_Plan_Name": "INSIDER_RISK_MANAGEMENT",
- "Service_Plan_Id": "9d0c4ee5-e4a1-4625-ab39-d82b619b1a34",
- "Service_Plans_Included_Friendly_Names": "RETIRED - Microsoft Insider Risk Management"
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "DATA_INVESTIGATIONS",
+ "Service_Plan_Id": "46129a58-a698-46f0-aa5b-17f6586297d9",
+ "Service_Plans_Included_Friendly_Names": "Retired - Microsoft Data Investigations"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "PLACES_CORE",
+ "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Places Core"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "SHAREPOINTENTERPRISE",
"Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72",
"Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MCOSTANDARD",
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "SWAY",
"Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97",
"Service_Plans_Included_Friendly_Names": "Sway"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "BPOS_S_TODO_3",
"Service_Plan_Id": "3fb82609-8c27-4f7b-bd51-30634711ee67",
"Service_Plans_Included_Friendly_Names": "To-Do (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "VIVAENGAGE_CORE",
"Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4",
"Service_Plans_Included_Friendly_Names": "Viva Engage Core"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "VIVA_LEARNING_SEEDED",
"Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86",
"Service_Plans_Included_Friendly_Names": "Viva Learning Seeded"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "WHITEBOARD_PLAN3",
"Service_Plan_Id": "4a51bca5-1eff-43f5-878c-177680f191af",
"Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 3)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "YAMMER_ENTERPRISE",
"Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653",
"Service_Plans_Included_Friendly_Names": "Yammer Enterprise"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "WINDEFATP",
"Service_Plan_Id": "871d91ec-ec1a-452b-a83f-bd76c7d770ef",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Endpoint"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MICROSOFTENDPOINTDLP",
"Service_Plan_Id": "64bfac92-2b17-4482-b5e5-a0304429de3e",
"Service_Plans_Included_Friendly_Names": "Microsoft Endpoint DLP"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "UNIVERSAL_PRINT_01",
"Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9",
"Service_Plans_Included_Friendly_Names": "Universal Print"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "WIN10_PRO_ENT_SUB",
"Service_Plan_Id": "21b439ba-a0ca-424f-a6cc-52f954a5b111",
"Service_Plans_Included_Friendly_Names": "Windows 10/11 Enterprise (Original)"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "Windows_Autopatch",
"Service_Plan_Id": "9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3",
"Service_Plans_Included_Friendly_Names": "Windows Autopatch"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE",
"Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365",
"Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "RMS_S_PREMIUM",
"Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "RMS_S_PREMIUM2",
"Service_Plan_Id": "5689bec4-755d-4753-8b61-40975025187c",
"Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P2"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "DYN365_CDS_O365_P3",
"Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "Defender_for_Iot_Enterprise",
"Service_Plan_Id": "99cd49a9-0e54-4e07-aea1-d8d9f5f704f5",
"Service_Plans_Included_Friendly_Names": "Defender for IoT - Enterprise IoT Security"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "MFA_PREMIUM",
"Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0",
"Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "ADALLOM_S_STANDALONE",
"Service_Plan_Id": "2e2ddb96-6af9-4b1d-a3f0-d6ecfd22edb2",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "ATA",
"Service_Plan_Id": "14ab5db5-e6c4-4b20-b4bc-13e36fd2227f",
"Service_Plans_Included_Friendly_Names": "Microsoft Defender for Identity"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "AAD_PREMIUM",
"Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "AAD_PREMIUM_P2",
"Service_Plan_Id": "eec0eb4f-6444-4f95-aba0-50c24d67f998",
"Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P2"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "INTUNE_A",
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "FLOW_O365_P3",
"Service_Plan_Id": "07699545-9485-468e-95b6-2fca3738be01",
"Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
},
{
- "Product_Display_Name": "Microsoft 365 E5",
- "String_Id": "SPE_E5",
- "GUID": "06ebc4ee-1bb5-47dd-8120-11324bc54e06",
+ "Product_Display_Name": "Microsoft 365 E5 (no Teams)",
+ "String_Id": "Microsoft_365_E5_(no_Teams)",
+ "GUID": "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e",
"Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3",
"Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014",
"Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365"
@@ -25767,6 +29471,310 @@
"Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d",
"Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot"
},
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "COPILOT_STUDIO_IN_COPILOT_FOR_M365",
+ "Service_Plan_Id": "fe6c28b3-d468-44ea-bbd0-a10a5167435c",
+ "Service_Plans_Included_Friendly_Names": "Copilot Studio in Copilot for M365"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT",
+ "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7",
+ "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH",
+ "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d",
+ "Service_Plans_Included_Friendly_Names": "Intelligent Search"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_SHAREPOINT",
+ "Service_Plan_Id": "0aedf20c-091d-420b-aadf-30c042609612",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot for SharePoint"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_TEAMS",
+ "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_APPS",
+ "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "Microsoft_Copilot_for_Sales",
+ "Service_Plan_Id": "a2194428-ead1-4fc1-bb81-ab8675125f42",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot for Sales"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "Microsoft_Copilot_for_Sales_PowerAutomate",
+ "Service_Plan_Id": "0c1c2af2-6c51-43c7-9c55-fa487ac147ff",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot for Sales with Power Automate"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT",
+ "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "WORKPLACE_ANALYTICS_INSIGHTS_USER",
+ "Service_Plan_Id": "b622badb-1b45-48d5-920f-4b27a2c0996c",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Viva Insights"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "WORKPLACE_ANALYTICS_INSIGHTS_BACKEND",
+ "Service_Plan_Id": "ff7b261f-d98b-415b-827c-42a3fdf015af",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Viva Insights Backend"
+ },
+ {
+ "Product_Display_Name": "Microsoft 365 Copilot for Sales",
+ "String_Id": "Microsoft_Copilot_for_Sales",
+ "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4",
+ "Service_Plan_Name": "M365_COPILOT_CONNECTORS",
+ "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d",
+ "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio",
+ "String_Id": "Power_Virtual_Agents",
+ "GUID": "75564b9c-51e8-431c-b8fe-d472d5a545c8",
+ "Service_Plan_Name": "CDS_VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "5dd1819f-0de7-487f-985b-c450a4c9cc1d",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Microsoft Copilot Studio"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio",
+ "String_Id": "Power_Virtual_Agents",
+ "GUID": "75564b9c-51e8-431c-b8fe-d472d5a545c8",
+ "Service_Plan_Name": "VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "7b0640f1-63cc-4f83-b8c6-0a4d78b8b988",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot Studio – Messages"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio",
+ "String_Id": "Power_Virtual_Agents",
+ "GUID": "75564b9c-51e8-431c-b8fe-d472d5a545c8",
+ "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "4b9ec373-ed29-4192-8a47-c9ab9048b079",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Microsoft Copilot Studio"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio for GCC",
+ "String_Id": "Power_Virtual_Agents_for_GCC_GCC",
+ "GUID": "d7974fa0-ddd7-4899-9589-1ea04273aa26",
+ "Service_Plan_Name": "CDS_VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "5dd1819f-0de7-487f-985b-c450a4c9cc1d",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Microsoft Copilot Studio"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio for GCC",
+ "String_Id": "Power_Virtual_Agents_for_GCC_GCC",
+ "GUID": "d7974fa0-ddd7-4899-9589-1ea04273aa26",
+ "Service_Plan_Name": "VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "7b0640f1-63cc-4f83-b8c6-0a4d78b8b988",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Copilot Studio – Messages"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio for GCC",
+ "String_Id": "Power_Virtual_Agents_for_GCC_GCC",
+ "GUID": "d7974fa0-ddd7-4899-9589-1ea04273aa26",
+ "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "4b9ec373-ed29-4192-8a47-c9ab9048b079",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Microsoft Copilot Studio"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio_USGOV_GCCHIGH",
+ "String_Id": "Power_Virtual_Agents_USGOV_GCCHIGH",
+ "GUID": "84ed7c30-3738-43a0-aa03-cf6c577d8dbb",
+ "Service_Plan_Name": "CDS_VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "5dd1819f-0de7-487f-985b-c450a4c9cc1d",
+ "Service_Plans_Included_Friendly_Names": "CDS_VIRTUAL_AGENT_BASE_MESSAGES"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio_USGOV_GCCHIGH",
+ "String_Id": "Power_Virtual_Agents_USGOV_GCCHIGH",
+ "GUID": "84ed7c30-3738-43a0-aa03-cf6c577d8dbb",
+ "Service_Plan_Name": "VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "7b0640f1-63cc-4f83-b8c6-0a4d78b8b988",
+ "Service_Plans_Included_Friendly_Names": "VIRTUAL_AGENT_BASE_MESSAGES"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio_USGOV_GCCHIGH",
+ "String_Id": "Power_Virtual_Agents_USGOV_GCCHIGH",
+ "GUID": "84ed7c30-3738-43a0-aa03-cf6c577d8dbb",
+ "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES",
+ "Service_Plan_Id": "4b9ec373-ed29-4192-8a47-c9ab9048b079",
+ "Service_Plans_Included_Friendly_Names": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License",
+ "String_Id": "VIRTUAL_AGENT_USL",
+ "GUID": "4b74a65c-8b4a-4fc8-9f6b-5177ed11ddfa",
+ "Service_Plan_Name": "CDS_VIRTUAL_AGENT_USL",
+ "Service_Plan_Id": "cb867b3c-7f38-4d0d-99ce-e29cd69812c8",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License",
+ "String_Id": "VIRTUAL_AGENT_USL",
+ "GUID": "4b74a65c-8b4a-4fc8-9f6b-5177ed11ddfa",
+ "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_USL",
+ "Service_Plan_Id": "82f141c9-2e87-4f43-8cb2-12d2701dc6b3",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Virtual Agent"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License",
+ "String_Id": "VIRTUAL_AGENT_USL",
+ "GUID": "4b74a65c-8b4a-4fc8-9f6b-5177ed11ddfa",
+ "Service_Plan_Name": "VIRTUAL_AGENT_USL",
+ "Service_Plan_Id": "1263586c-59a4-4ad0-85e1-d50bc7149501",
+ "Service_Plans_Included_Friendly_Names": "Virtual Agent"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC",
+ "String_Id": "VIRTUAL_AGENT_USL_GCC",
+ "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d",
+ "Service_Plan_Name": "CDS_Virtual_Agent_Usl_Gov",
+ "Service_Plan_Id": "bcc0702e-ba97-48d9-ae04-fa8689c53bba",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Virtual Agent USL for GCC"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC",
+ "String_Id": "VIRTUAL_AGENT_USL_GCC",
+ "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d",
+ "Service_Plan_Name": "Virtual_Agent_Usl_Gov",
+ "Service_Plan_Id": "00b6f978-853b-4041-9de0-a233d18669aa",
+ "Service_Plans_Included_Friendly_Names": "Virtual Agent for GCC"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC",
+ "String_Id": "VIRTUAL_AGENT_USL_GCC",
+ "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d",
+ "Service_Plan_Name": "CDS_Virtual_Agent_Usl_GCC",
+ "Service_Plan_Id": "95df1203-fee7-4726-b7e1-8037a8e899eb",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Virtual Agent USL for GCC"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC",
+ "String_Id": "VIRTUAL_AGENT_USL_GCC",
+ "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d",
+ "Service_Plan_Name": "Flow_Virtual_Agent_Usl_Gov",
+ "Service_Plan_Id": "0b939472-1861-45f1-ab6d-208f359c05cd",
+ "Service_Plans_Included_Friendly_Names": "Flow for Virtual Agent for GCC"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC",
+ "String_Id": "VIRTUAL_AGENT_USL_GCC",
+ "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d",
+ "Service_Plan_Name": "FLOW_Virtual_Agent_Base_Gov",
+ "Service_Plan_Id": "f9f6db16-ace6-4838-b11c-892ee75e810a",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Virtual Agent for GCC"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC",
+ "String_Id": "VIRTUAL_AGENT_USL_GCC",
+ "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d",
+ "Service_Plan_Name": "Power_Virtual_Agent_Usl_GCC",
+ "Service_Plan_Id": "0bdd5466-65c3-470a-9fa6-f679b48286b0",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agent USL for GCC"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH",
+ "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH",
+ "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44",
+ "Service_Plan_Name": "Virtual_Agent_Usl_Gov_High",
+ "Service_Plan_Id": "7ffee552-ebe8-4725-8678-5c1775c05847",
+ "Service_Plans_Included_Friendly_Names": "Virtual Agent for GCC High"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH",
+ "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH",
+ "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44",
+ "Service_Plan_Name": "CDS_VIRTUAL_AGENT_USL",
+ "Service_Plan_Id": "cb867b3c-7f38-4d0d-99ce-e29cd69812c8",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH",
+ "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH",
+ "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44",
+ "Service_Plan_Name": "FLOW_Virtual_Agent_Base_Gov_High",
+ "Service_Plan_Id": "225e52e5-7bbf-4793-8fb1-4307a7a1ae8e",
+ "Service_Plans_Included_Friendly_Names": "Flow for Virtual Agent for GCC High"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH",
+ "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH",
+ "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44",
+ "Service_Plan_Name": "Flow_Virtual_Agent_Usl_Gov_High",
+ "Service_Plan_Id": "aaae1744-dc7a-4811-9dd0-2bf926ff9d80",
+ "Service_Plans_Included_Friendly_Names": "Flow for Virtual Agent for GCC High"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH",
+ "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH",
+ "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44",
+ "Service_Plan_Name": "Power_Virtual_Agent_Usl_GCC_High",
+ "Service_Plan_Id": "3fbe8cdf-c735-44bf-bbfa-646724af4bb4",
+ "Service_Plans_Included_Friendly_Names": "Power Virtual Agent USL for GCC High"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio Viral Trial",
+ "String_Id": "CCIBOTS_PRIVPREV_VIRAL",
+ "GUID": "606b54a9-78d8-4298-ad8b-df6ef4481c80",
+ "Service_Plan_Name": "DYN365_CDS_CCI_BOTS",
+ "Service_Plan_Id": "cf7034ed-348f-42eb-8bbd-dddeea43ee81",
+ "Service_Plans_Included_Friendly_Names": "DYN365_CDS_CCI_BOTS"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio Viral Trial",
+ "String_Id": "CCIBOTS_PRIVPREV_VIRAL",
+ "GUID": "606b54a9-78d8-4298-ad8b-df6ef4481c80",
+ "Service_Plan_Name": "CCIBOTS_PRIVPREV_VIRAL",
+ "Service_Plan_Id": "ce312d15-8fdf-44c0-9974-a25a177125ee",
+ "Service_Plans_Included_Friendly_Names": "CCIBOTS_PRIVPREV_VIRAL"
+ },
+ {
+ "Product_Display_Name": "Microsoft Copilot Studio Viral Trial",
+ "String_Id": "CCIBOTS_PRIVPREV_VIRAL",
+ "GUID": "606b54a9-78d8-4298-ad8b-df6ef4481c80",
+ "Service_Plan_Name": "FLOW_CCI_BOTS",
+ "Service_Plan_Id": "5d798708-6473-48ad-9776-3acc301c40af",
+ "Service_Plans_Included_Friendly_Names": "FLOW_CCI_BOTS"
+ },
{
"Product_Display_Name": "Microsoft Cloud App Security",
"String_Id": "ADALLOM_STANDALONE",
@@ -25823,6 +29831,38 @@
"Service_Plan_Id": "17ab22cd-a0b3-4536-910a-cb6eb12696c0",
"Service_Plans_Included_Friendly_Names": "Common Data Service"
},
+ {
+ "Product_Display_Name": "Microsoft Defender for Business",
+ "String_Id": "MDE_SMB",
+ "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f",
+ "Service_Plan_Name": "Intune_Defender",
+ "Service_Plan_Id": "1689aade-3d6a-4bfc-b017-46d2672df5ad",
+ "Service_Plans_Included_Friendly_Names": "MDE_SecurityManagement"
+ },
+ {
+ "Product_Display_Name": "Microsoft Defender for Business",
+ "String_Id": "MDE_SMB",
+ "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
+ },
+ {
+ "Product_Display_Name": "Microsoft Defender for Business",
+ "String_Id": "MDE_SMB",
+ "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f",
+ "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1",
+ "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)"
+ },
+ {
+ "Product_Display_Name": "Microsoft Defender for Business",
+ "String_Id": "MDE_SMB",
+ "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f",
+ "Service_Plan_Name": "MDE_SMB",
+ "Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business"
+ },
{
"Product_Display_Name": "Microsoft Defender for Endpoint",
"String_Id": "WIN_DEF_ATP",
@@ -26095,6 +30135,38 @@
"Service_Plan_Id": "e866a266-3cff-43a3-acca-0c90a7e00c8b",
"Service_Plans_Included_Friendly_Names": "Entra Identity Governance"
},
+ {
+ "Product_Display_Name": "Microsoft Entra Suite Add-on for Microsoft Entra ID P2",
+ "String_Id": "Microsoft_Entra_Suite_Step_Up_for_Microsoft_Entra_ID_P2",
+ "GUID": "2ef3064c-c95c-426c-96dd-9ffeaa2f2c37",
+ "Service_Plan_Name": "Entra_Premium_Internet_Access",
+ "Service_Plan_Id": "8d23cb83-ab07-418f-8517-d7aca77307dc",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra Internet Access"
+ },
+ {
+ "Product_Display_Name": "Microsoft Entra Suite Add-on for Microsoft Entra ID P2",
+ "String_Id": "Microsoft_Entra_Suite_Step_Up_for_Microsoft_Entra_ID_P2",
+ "GUID": "2ef3064c-c95c-426c-96dd-9ffeaa2f2c37",
+ "Service_Plan_Name": "Entra_Premium_Private_Access",
+ "Service_Plan_Id": "f057aab1-b184-49b2-85c0-881b02a405c5",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Entra Private Access"
+ },
+ {
+ "Product_Display_Name": "Microsoft Entra Suite Add-on for Microsoft Entra ID P2",
+ "String_Id": "Microsoft_Entra_Suite_Step_Up_for_Microsoft_Entra_ID_P2",
+ "GUID": "2ef3064c-c95c-426c-96dd-9ffeaa2f2c37",
+ "Service_Plan_Name": "Verifiable_Credentials_Service_Request",
+ "Service_Plan_Id": "aae826b7-14cd-4691-8178-2b312f7072ea",
+ "Service_Plans_Included_Friendly_Names": "Verifiable Credentials Service Request"
+ },
+ {
+ "Product_Display_Name": "Microsoft Entra Suite Add-on for Microsoft Entra ID P2",
+ "String_Id": "Microsoft_Entra_Suite_Step_Up_for_Microsoft_Entra_ID_P2",
+ "GUID": "2ef3064c-c95c-426c-96dd-9ffeaa2f2c37",
+ "Service_Plan_Name": "Entra_Identity_Governance",
+ "Service_Plan_Id": "e866a266-3cff-43a3-acca-0c90a7e00c8b",
+ "Service_Plans_Included_Friendly_Names": "Entra Identity Governance"
+ },
{
"Product_Display_Name": "Microsoft Fabric (Free)",
"String_Id": "POWER_BI_STANDARD",
@@ -26111,6 +30183,14 @@
"Service_Plan_Id": "2049e525-b859-401b-b2a0-e0a31c4b1fe4",
"Service_Plans_Included_Friendly_Names": "Power BI (free)"
},
+ {
+ "Product_Display_Name": "Microsoft Fabric (Free)",
+ "String_Id": "POWER_BI_STANDARD",
+ "GUID": "a403ebcc-fae0-4ca2-8c8c-7a907fd6c235",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
{
"Product_Display_Name": "Microsoft Fabric (Free) for faculty",
"String_Id": "POWER_BI_STANDARD_FACULTY",
@@ -26151,6 +30231,14 @@
"Service_Plan_Id": "d736def0-1fde-43f0-a5be-e3f8b2de6e41",
"Service_Plans_Included_Friendly_Names": "MS IMAGINE ACADEMY"
},
+ {
+ "Product_Display_Name": "Microsoft Intune Advanced Analytics",
+ "String_Id": "Microsoft_Intune_Advanced_Analytics",
+ "GUID": "5e36d0d4-e9e5-4052-aba0-0257465c9b86",
+ "Service_Plan_Name": "Intune_AdvancedEA",
+ "Service_Plan_Id": "2a4baa0e-5e99-4c38-b1f2-6864960f1bd1",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Advanced Analytics"
+ },
{
"Product_Display_Name": "Microsoft Intune Device",
"String_Id": "INTUNE_A_D",
@@ -26199,6 +30287,22 @@
"Service_Plan_Id": "d216f254-796f-4dab-bbfa-710686e646b9",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune G"
},
+ {
+ "Product_Display_Name": "Microsoft Intune Plan 1 A VL",
+ "String_Id": "INTUNE_A_VL",
+ "GUID": "99fc2803-fa72-42d3-ae78-b055e177d275",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Microsoft Intune Plan 1 A VL",
+ "String_Id": "INTUNE_A_VL",
+ "GUID": "99fc2803-fa72-42d3-ae78-b055e177d275",
+ "Service_Plan_Name": "INTUNE_A_VL",
+ "Service_Plan_Id": "3e170737-c728-4eae-bbb9-3f3360f7184c",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
+ },
{
"Product_Display_Name": "Microsoft Intune Plan 1 A VL_USGOV_GCCHIGH",
"String_Id": "INTUNE_A_VL_USGOV_GCCHIGH",
@@ -26575,6 +30679,62 @@
"Service_Plan_Id": "83bced11-77ce-4071-95bd-240133796768",
"Service_Plans_Included_Friendly_Names": "Microsoft Stream Storage Add-On"
},
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium",
+ "String_Id": "Microsoft_Sustainability_Manager_Premium",
+ "GUID": "aecb477b-2f56-4e38-b711-b752c24fc19b",
+ "Service_Plan_Name": "CDS_CLOUD_FOR_SUSTAINABILITY_PLUS",
+ "Service_Plan_Id": "ba80223c-e515-4642-a838-3e7d66f70cb6",
+ "Service_Plans_Included_Friendly_Names": "Common Data Services for Cloud for Sustainability Plus"
+ },
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium",
+ "String_Id": "Microsoft_Sustainability_Manager_Premium",
+ "GUID": "aecb477b-2f56-4e38-b711-b752c24fc19b",
+ "Service_Plan_Name": "MCS_BIZAPPS_CLOUD_FOR_SUSTAINABILITY_PLUS",
+ "Service_Plan_Id": "ed29ae92-ff5f-4446-8460-83c54d0e7088",
+ "Service_Plans_Included_Friendly_Names": "MCS - BizApps Cloud for Sustainability Plus"
+ },
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium",
+ "String_Id": "Microsoft_Sustainability_Manager_Premium",
+ "GUID": "aecb477b-2f56-4e38-b711-b752c24fc19b",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium USL Plus",
+ "String_Id": "MICROSOFT_SUSTAINABILITY_MANAGER_PREMIUM_USL_ADDON",
+ "GUID": "9d576ffb-dd32-4c33-91ee-91625b61424a",
+ "Service_Plan_Name": "MCS_BIZAPPS_CLOUD_FOR_SUSTAINABILITY_USL_PLUS",
+ "Service_Plan_Id": "beaf5b5c-d11c-4417-b5cb-cd9f9e6719b0",
+ "Service_Plans_Included_Friendly_Names": "MCS - BizApps Cloud for Sustainability USL Plus"
+ },
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium USL Plus",
+ "String_Id": "MICROSOFT_SUSTAINABILITY_MANAGER_PREMIUM_USL_ADDON",
+ "GUID": "9d576ffb-dd32-4c33-91ee-91625b61424a",
+ "Service_Plan_Name": "POWER_APPS_FOR_MCS_USL_PLUS",
+ "Service_Plan_Id": "c5502fe7-406d-442a-827f-4948b821ba08",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Cloud for Sustainability USL Plus"
+ },
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium USL Plus",
+ "String_Id": "MICROSOFT_SUSTAINABILITY_MANAGER_PREMIUM_USL_ADDON",
+ "GUID": "9d576ffb-dd32-4c33-91ee-91625b61424a",
+ "Service_Plan_Name": "POWER_AUTOMATE_FOR_MCS_USL_PLUS",
+ "Service_Plan_Id": "1c22bb50-96fb-49e5-baa6-195cab19eee2",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Cloud for Sustainability USL Plus"
+ },
+ {
+ "Product_Display_Name": "Microsoft Sustainability Manager Premium USL Plus",
+ "String_Id": "MICROSOFT_SUSTAINABILITY_MANAGER_PREMIUM_USL_ADDON",
+ "GUID": "9d576ffb-dd32-4c33-91ee-91625b61424a",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
{
"Product_Display_Name": "Microsoft Sustainability Manager USL Essentials",
"String_Id": "Microsoft_Cloud_for_Sustainability_USL",
@@ -26679,6 +30839,22 @@
"Service_Plan_Id": "346d83bf-6fe6-42ca-b424-b9300d2e21bf",
"Service_Plans_Included_Friendly_Names": "Microsoft 365 Domestic Calling Plan (240 min)"
},
+ {
+ "Product_Display_Name": "Microsoft Teams Domestic Calling Plan for GCC",
+ "String_Id": "MCOPSTN_1_GOV",
+ "GUID": "923f58ab-fca1-46a1-92f9-89fda21238a8",
+ "Service_Plan_Name": "MCOPSTN1_GOV",
+ "Service_Plan_Id": "3c8a8792-7866-409b-bb61-1b20ace0368b",
+ "Service_Plans_Included_Friendly_Names": "Domestic Calling Plan for Government"
+ },
+ {
+ "Product_Display_Name": "Microsoft Teams Domestic Calling Plan for GCC",
+ "String_Id": "MCOPSTN_1_GOV",
+ "GUID": "923f58ab-fca1-46a1-92f9-89fda21238a8",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION_GOV",
+ "Service_Plan_Id": "922ba911-5694-4e99-a794-73aed9bfeec8",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation for Government"
+ },
{
"Product_Display_Name": "Microsoft Teams Essentials",
"String_Id": "Teams_Ess",
@@ -27461,7 +31637,7 @@
"GUID": "c25e2b36-e161-4946-bef2-69239729f690",
"Service_Plan_Name": "AAD_BASIC_EDU",
"Service_Plan_Id": "1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID Basic for Education"
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory Basic for Education"
},
{
"Product_Display_Name": "Microsoft Teams Rooms Pro for EDU",
@@ -27503,6 +31679,14 @@
"Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c",
"Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)"
},
+ {
+ "Product_Display_Name": "Microsoft Teams Rooms Pro for EDU",
+ "String_Id": "Microsoft_Teams_Rooms_Pro_FAC",
+ "GUID": "c25e2b36-e161-4946-bef2-69239729f690",
+ "Service_Plan_Name": "Teams_Rooms_Pro",
+ "Service_Plan_Id": "0374d34c-6be4-4dbb-b3f0-26105db0b28a",
+ "Service_Plans_Included_Friendly_Names": "Teams Rooms Pro"
+ },
{
"Product_Display_Name": "Microsoft Teams Rooms Pro for EDU",
"String_Id": "Microsoft_Teams_Rooms_Pro_FAC",
@@ -27551,6 +31735,14 @@
"Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5",
"Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1"
},
+ {
+ "Product_Display_Name": "Microsoft Teams Rooms Pro for EDU",
+ "String_Id": "Microsoft_Teams_Rooms_Pro_FAC",
+ "GUID": "c25e2b36-e161-4946-bef2-69239729f690",
+ "Service_Plan_Name": "SPECIALTY_DEVICES",
+ "Service_Plan_Id": "cfce7ae3-4b41-4438-999c-c0e91f3b7fb9",
+ "Service_Plans_Included_Friendly_Names": "Specialty devices"
+ },
{
"Product_Display_Name": "Microsoft Teams Rooms Pro for GCC",
"String_Id": "Microsoft_Teams_Rooms_Pro_GCC",
@@ -28309,15 +32501,15 @@
"GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
"Service_Plan_Name": "AAD_BASIC_EDU",
"Service_Plan_Id": "1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID Basic for Education"
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory Basic for Education"
},
{
"Product_Display_Name": "Office 365 A1 for faculty",
"String_Id": "STANDARDWOFFPACK_FACULTY",
"GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
- "Service_Plan_Name": "DYN365_CDS_O365_P1",
- "Service_Plan_Id": "40b010bb-0b69-4654-ac5e-ba161433f4b4",
- "Service_Plans_Included_Friendly_Names": "Common Data Service - O365 P1"
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
"Product_Display_Name": "Office 365 A1 for faculty",
@@ -28347,9 +32539,9 @@
"Product_Display_Name": "Office 365 A1 for faculty",
"String_Id": "STANDARDWOFFPACK_FACULTY",
"GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Microsoft Microsoft Entra Rights"
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
"Product_Display_Name": "Office 365 A1 for faculty",
@@ -28365,7 +32557,7 @@
"GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
"Service_Plan_Name": "KAIZALA_O365_P2",
"Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e",
- "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro Plan 2"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
"Product_Display_Name": "Office 365 A1 for faculty",
@@ -28443,25 +32635,17 @@
"Product_Display_Name": "Office 365 A1 for faculty",
"String_Id": "STANDARDWOFFPACK_FACULTY",
"GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
- "Service_Plan_Name": "POWERAPPS_O365_P2",
- "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
- "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
- },
- {
- "Product_Display_Name": "Office 365 A1 for faculty",
- "String_Id": "STANDARDWOFFPACK_FACULTY",
- "GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
- "Service_Plan_Name": "FLOW_O365_P2",
- "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
- "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ "Service_Plan_Name": "PROJECT_O365_P1",
+ "Service_Plan_Id": "a55dfd10-0864-46d9-a3cd-da5991a3e0e2",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E1)"
},
{
"Product_Display_Name": "Office 365 A1 for faculty",
"String_Id": "STANDARDWOFFPACK_FACULTY",
"GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
- "Service_Plan_Name": "PROJECT_O365_P1",
- "Service_Plan_Id": "a55dfd10-0864-46d9-a3cd-da5991a3e0e2",
- "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E1)"
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
},
{
"Product_Display_Name": "Office 365 A1 for faculty",
@@ -28527,6 +32711,30 @@
"Service_Plan_Id": "2078e8df-cff6-4290-98cb-5408261a760a",
"Service_Plans_Included_Friendly_Names": "Yammer for Academic"
},
+ {
+ "Product_Display_Name": "Office 365 A1 for faculty",
+ "String_Id": "STANDARDWOFFPACK_FACULTY",
+ "GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
+ "Service_Plan_Name": "DYN365_CDS_O365_P1",
+ "Service_Plan_Id": "40b010bb-0b69-4654-ac5e-ba161433f4b4",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Office 365 A1 for faculty",
+ "String_Id": "STANDARDWOFFPACK_FACULTY",
+ "GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
+ "Service_Plan_Name": "POWERAPPS_O365_P2",
+ "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Office 365 A1 for faculty",
+ "String_Id": "STANDARDWOFFPACK_FACULTY",
+ "GUID": "94763226-9b3c-4e75-a931-5c89701abe66",
+ "Service_Plan_Name": "FLOW_O365_P2",
+ "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
{
"Product_Display_Name": "Office 365 A1 Plus for faculty",
"String_Id": "STANDARDWOFFPACK_IW_FACULTY",
@@ -28749,15 +32957,15 @@
"GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
"Service_Plan_Name": "AAD_BASIC_EDU",
"Service_Plan_Id": "1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426",
- "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID Basic for Education"
+ "Service_Plans_Included_Friendly_Names": "Azure Active Directory Basic for Education"
},
{
"Product_Display_Name": "Office 365 A1 for students",
"String_Id": "STANDARDWOFFPACK_STUDENT",
"GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
- "Service_Plan_Name": "DYN365_CDS_O365_P1",
- "Service_Plan_Id": "40b010bb-0b69-4654-ac5e-ba161433f4b4",
- "Service_Plans_Included_Friendly_Names": "Common Data Service - O365 P1"
+ "Service_Plan_Name": "RMS_S_ENTERPRISE",
+ "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
+ "Service_Plans_Included_Friendly_Names": "Azure Rights Management"
},
{
"Product_Display_Name": "Office 365 A1 for students",
@@ -28787,9 +32995,9 @@
"Product_Display_Name": "Office 365 A1 for students",
"String_Id": "STANDARDWOFFPACK_STUDENT",
"GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
- "Service_Plan_Name": "RMS_S_ENTERPRISE",
- "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90",
- "Service_Plans_Included_Friendly_Names": "Microsoft Microsoft Entra Rights"
+ "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1",
+ "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487",
+ "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)"
},
{
"Product_Display_Name": "Office 365 A1 for students",
@@ -28805,7 +33013,7 @@
"GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
"Service_Plan_Name": "KAIZALA_O365_P2",
"Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e",
- "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro Plan 2"
+ "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro"
},
{
"Product_Display_Name": "Office 365 A1 for students",
@@ -28875,25 +33083,17 @@
"Product_Display_Name": "Office 365 A1 for students",
"String_Id": "STANDARDWOFFPACK_STUDENT",
"GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
- "Service_Plan_Name": "POWERAPPS_O365_P2",
- "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
- "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
- },
- {
- "Product_Display_Name": "Office 365 A1 for students",
- "String_Id": "STANDARDWOFFPACK_STUDENT",
- "GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
- "Service_Plan_Name": "FLOW_O365_P2",
- "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
- "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ "Service_Plan_Name": "PROJECT_O365_P1",
+ "Service_Plan_Id": "a55dfd10-0864-46d9-a3cd-da5991a3e0e2",
+ "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E1)"
},
{
"Product_Display_Name": "Office 365 A1 for students",
"String_Id": "STANDARDWOFFPACK_STUDENT",
"GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
- "Service_Plan_Name": "PROJECT_O365_P1",
- "Service_Plan_Id": "a55dfd10-0864-46d9-a3cd-da5991a3e0e2",
- "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E1)"
+ "Service_Plan_Name": "Bing_Chat_Enterprise",
+ "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba",
+ "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot"
},
{
"Product_Display_Name": "Office 365 A1 for students",
@@ -28951,6 +33151,30 @@
"Service_Plan_Id": "2078e8df-cff6-4290-98cb-5408261a760a",
"Service_Plans_Included_Friendly_Names": "Yammer for Academic"
},
+ {
+ "Product_Display_Name": "Office 365 A1 for students",
+ "String_Id": "STANDARDWOFFPACK_STUDENT",
+ "GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
+ "Service_Plan_Name": "DYN365_CDS_O365_P1",
+ "Service_Plan_Id": "40b010bb-0b69-4654-ac5e-ba161433f4b4",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Office 365 A1 for students",
+ "String_Id": "STANDARDWOFFPACK_STUDENT",
+ "GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
+ "Service_Plan_Name": "POWERAPPS_O365_P2",
+ "Service_Plan_Id": "c68f8d98-5534-41c8-bf36-22fa496fa792",
+ "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365"
+ },
+ {
+ "Product_Display_Name": "Office 365 A1 for students",
+ "String_Id": "STANDARDWOFFPACK_STUDENT",
+ "GUID": "314c4481-f395-4525-be8b-2ec4bb1e9d91",
+ "Service_Plan_Name": "FLOW_O365_P2",
+ "Service_Plan_Id": "76846ad7-7776-4c40-a281-a386362dd1b9",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365"
+ },
{
"Product_Display_Name": "Office 365 A1 Plus for students",
"String_Id": "STANDARDWOFFPACK_IW_STUDENT",
@@ -37045,7 +41269,7 @@
"GUID": "0f13a262-dc6f-4800-8dc6-a62f72c95fad",
"Service_Plan_Name": "CDSAICAPACITY_PERUSER",
"Service_Plan_Id": "91f50f7b-2204-4803-acac-5cf5668b8b39",
- "Service_Plans_Included_Friendly_Names": "DO NOT USE - AI Builder capacity Per User add-on"
+ "Service_Plans_Included_Friendly_Names": "AI Builder capacity Per User add-on"
},
{
"Product_Display_Name": "PowerApps & Flow GCC Test - O365 & Dyn365 Plans",
@@ -37467,9 +41691,9 @@
"Product_Display_Name": "Power Apps Premium",
"String_Id": "POWERAPPS_PER_USER",
"GUID": "b30411f5-fea1-4a59-9ad9-3db7c7ead579",
- "Service_Plan_Name": "DYN365_CDS_P2",
- "Service_Plan_Id": "6ea4c1ef-c259-46df-bce2-943342cd3cb2",
- "Service_Plans_Included_Friendly_Names": "Common Data Service - P2"
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
},
{
"Product_Display_Name": "Power Apps Premium",
@@ -37479,6 +41703,30 @@
"Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
"Service_Plans_Included_Friendly_Names": "Exchange Foundation"
},
+ {
+ "Product_Display_Name": "Power Apps Premium",
+ "String_Id": "POWERAPPS_PER_USER",
+ "GUID": "b30411f5-fea1-4a59-9ad9-3db7c7ead579",
+ "Service_Plan_Name": "CDSAICAPACITY_PERUSER_NEW",
+ "Service_Plan_Id": "74d93933-6f22-436e-9441-66d205435abb",
+ "Service_Plans_Included_Friendly_Names": "AI Builder capacity Per User add-on"
+ },
+ {
+ "Product_Display_Name": "Power Apps Premium",
+ "String_Id": "POWERAPPS_PER_USER",
+ "GUID": "b30411f5-fea1-4a59-9ad9-3db7c7ead579",
+ "Service_Plan_Name": "DYN365_CDS_P2",
+ "Service_Plan_Id": "6ea4c1ef-c259-46df-bce2-943342cd3cb2",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Power Apps Premium",
+ "String_Id": "POWERAPPS_PER_USER",
+ "GUID": "b30411f5-fea1-4a59-9ad9-3db7c7ead579",
+ "Service_Plan_Name": "CDSAICAPACITY_PERUSER",
+ "Service_Plan_Id": "91f50f7b-2204-4803-acac-5cf5668b8b39",
+ "Service_Plans_Included_Friendly_Names": "DO NOT USE - AI Builder capacity Per User add-on"
+ },
{
"Product_Display_Name": "Power Apps Premium",
"String_Id": "POWERAPPS_PER_USER",
@@ -37495,6 +41743,46 @@
"Service_Plan_Id": "dc789ed8-0170-4b65-a415-eb77d5bb350a",
"Service_Plans_Included_Friendly_Names": "Power Automate for Power Apps per User Plan"
},
+ {
+ "Product_Display_Name": "Power Apps Premium embedded",
+ "String_Id": "POWERAPPS_PER_USER_ISVEMB",
+ "GUID": "2a6fb3c6-30cc-4558-a69d-032425c1a3ba",
+ "Service_Plan_Name": "Power_Pages_Internal_User",
+ "Service_Plan_Id": "60bf28f9-2b70-4522-96f7-335f5e06c941",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Internal User"
+ },
+ {
+ "Product_Display_Name": "Power Apps Premium embedded",
+ "String_Id": "POWERAPPS_PER_USER_ISVEMB",
+ "GUID": "2a6fb3c6-30cc-4558-a69d-032425c1a3ba",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Power Apps Premium embedded",
+ "String_Id": "POWERAPPS_PER_USER_ISVEMB",
+ "GUID": "2a6fb3c6-30cc-4558-a69d-032425c1a3ba",
+ "Service_Plan_Name": "DYN365_CDS_P2",
+ "Service_Plan_Id": "6ea4c1ef-c259-46df-bce2-943342cd3cb2",
+ "Service_Plans_Included_Friendly_Names": "Common Data Service"
+ },
+ {
+ "Product_Display_Name": "Power Apps Premium embedded",
+ "String_Id": "POWERAPPS_PER_USER_ISVEMB",
+ "GUID": "2a6fb3c6-30cc-4558-a69d-032425c1a3ba",
+ "Service_Plan_Name": "POWERAPPS_PER_USER",
+ "Service_Plan_Id": "ea2cf03b-ac60-46ae-9c1d-eeaeb63cec86",
+ "Service_Plans_Included_Friendly_Names": "Power Apps per User Plan"
+ },
+ {
+ "Product_Display_Name": "Power Apps Premium embedded",
+ "String_Id": "POWERAPPS_PER_USER_ISVEMB",
+ "GUID": "2a6fb3c6-30cc-4558-a69d-032425c1a3ba",
+ "Service_Plan_Name": "Flow_PowerApps_PerUser",
+ "Service_Plan_Id": "dc789ed8-0170-4b65-a415-eb77d5bb350a",
+ "Service_Plans_Included_Friendly_Names": "Power Automate for Power Apps per User Plan"
+ },
{
"Product_Display_Name": "Power Apps Premium for Government",
"String_Id": "POWERAPPS_PER_USER_GCC",
@@ -37863,6 +42151,22 @@
"Service_Plan_Id": "fb613c67-1a58-4645-a8df-21e95a37d433",
"Service_Plans_Included_Friendly_Names": "Power Automate Attended RPA for Government"
},
+ {
+ "Product_Display_Name": "Power Automate Process",
+ "String_Id": "Power_Automate_per_process",
+ "GUID": "253ce8d3-6122-4240-8b04-f434a8fa831f",
+ "Service_Plan_Name": "EXCHANGE_S_FOUNDATION",
+ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318",
+ "Service_Plans_Included_Friendly_Names": "Exchange Foundation"
+ },
+ {
+ "Product_Display_Name": "Power Automate Process",
+ "String_Id": "Power_Automate_per_process",
+ "GUID": "253ce8d3-6122-4240-8b04-f434a8fa831f",
+ "Service_Plan_Name": "DATAVERSE_FOR_POWER_AUTOMATE_PER_PROCESS",
+ "Service_Plan_Id": "d7c3df99-6f58-40b9-8940-cd3a51679d85",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Power Automate Per Process"
+ },
{
"Product_Display_Name": "Power Automate unattended RPA add-on",
"String_Id": "POWERAUTOMATE_UNATTENDED_RPA",
@@ -38015,6 +42319,22 @@
"Service_Plan_Id": "0bf3c642-7bb5-4ccc-884e-59d09df0266c",
"Service_Plans_Included_Friendly_Names": "Power BI Premium Per User"
},
+ {
+ "Product_Display_Name": "Power BI Premium Per User Add-On for Faculty",
+ "String_Id": "PBI_PREMIUM_PER_USER_ADDON_FACULTY",
+ "GUID": "c05b235f-be75-4029-8851-6a4170758eef",
+ "Service_Plan_Name": "BI_AZURE_P3",
+ "Service_Plan_Id": "0bf3c642-7bb5-4ccc-884e-59d09df0266c",
+ "Service_Plans_Included_Friendly_Names": "Power BI Premium Per User"
+ },
+ {
+ "Product_Display_Name": "Power BI Premium Per User Add-On for Faculty",
+ "String_Id": "PBI_PREMIUM_PER_USER_ADDON_FACULTY",
+ "GUID": "c05b235f-be75-4029-8851-6a4170758eef",
+ "Service_Plan_Name": "PURVIEW_DISCOVERY",
+ "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522",
+ "Service_Plans_Included_Friendly_Names": "Purview Discovery"
+ },
{
"Product_Display_Name": "Power BI Premium Per User Add-On for GCC",
"String_Id": "PBI_PREMIUM_PER_USER_ADDON_CE_GCC",
@@ -38231,6 +42551,22 @@
"Service_Plan_Id": "18e74ca2-b5f0-4802-9a8b-00d2ff1e8322",
"Service_Plans_Included_Friendly_Names": "Power Pages Authenticated Users per site monthly capacity GCCH"
},
+ {
+ "Product_Display_Name": "Power Pages authenticated users T1 100 users/per site/month capacity pack CN_CN",
+ "String_Id": "Power Pages authenticated users T1_CN_CN",
+ "GUID": "9a3c2a19-06c0-41b1-b2ea-13528d7b2e17",
+ "Service_Plan_Name": "DV_PowerPages_Authenticated_User",
+ "Service_Plan_Id": "7aae746a-3463-4737-b295-3c1a16c31438",
+ "Service_Plans_Included_Friendly_Names": "Dataverse for Power Pages Authenticated users per site"
+ },
+ {
+ "Product_Display_Name": "Power Pages authenticated users T1 100 users/per site/month capacity pack CN_CN",
+ "String_Id": "Power Pages authenticated users T1_CN_CN",
+ "GUID": "9a3c2a19-06c0-41b1-b2ea-13528d7b2e17",
+ "Service_Plan_Name": "PowerPages_Authenticated_User_CN",
+ "Service_Plan_Id": "967d9574-a076-4bb7-ab89-f41f64bc142e",
+ "Service_Plans_Included_Friendly_Names": "Power Pages Authenticated Users per site monthly capacity China"
+ },
{
"Product_Display_Name": "Power Pages authenticated users T1 100 users/per site/month capacity pack_GCC",
"String_Id": "Power_Pages_authenticated_users_T1_100_users/per_site/month_capacity_pack_GCC",
@@ -40367,6 +44703,70 @@
"Service_Plan_Id": "78b58230-ec7e-4309-913c-93a45cc4735b",
"Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Webinar"
},
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "MICROSOFT_ECDN",
+ "Service_Plan_Id": "85704d55-2e73-47ee-93b4-4b8ea14db92b",
+ "Service_Plans_Included_Friendly_Names": "Microsoft eCDN"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "TEAMSPRO_MGMT",
+ "Service_Plan_Id": "0504111f-feb8-4a3c-992a-70280f9a2869",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Intelligent"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "TEAMSPRO_CUST",
+ "Service_Plan_Id": "cc8c0802-a325-43df-8cba-995d0c6cb373",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Personalized"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "TEAMSPRO_PROTECTION",
+ "Service_Plan_Id": "f8b44f54-18bb-46a3-9658-44ab58712968",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Secure"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "TEAMSPRO_VIRTUALAPPT",
+ "Service_Plan_Id": "9104f592-f2a7-4f77-904c-ca5a5715883f",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Virtual Appointment"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "MCO_VIRTUAL_APPT",
+ "Service_Plan_Id": "711413d0-b36e-4cd4-93db-0a50a4ab7ea3",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Virtual Appointments"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "TEAMSPRO_WEBINAR",
+ "Service_Plan_Id": "78b58230-ec7e-4309-913c-93a45cc4735b",
+ "Service_Plans_Included_Friendly_Names": "Microsoft Teams Premium Webinar"
+ },
+ {
+ "Product_Display_Name": "Teams Premium for Faculty",
+ "String_Id": "Teams_Premium_for_Faculty",
+ "GUID": "960a972f-d017-4a17-8f64-b42c8035bc7d",
+ "Service_Plan_Name": "QUEUES_APP",
+ "Service_Plan_Id": "ab2d4fb5-f80a-4bf1-a11d-7f1da254041b",
+ "Service_Plans_Included_Friendly_Names": "Queues app for Microsoft Teams"
+ },
{
"Product_Display_Name": "Teams Rooms Premium",
"String_Id": "MTR_PREM",
diff --git a/src/data/alerts.json b/src/data/alerts.json
index d027afab9869..aa5936ca4578 100644
--- a/src/data/alerts.json
+++ b/src/data/alerts.json
@@ -9,6 +9,11 @@
"label": "Alert on admins without any form of MFA",
"recommendedRunInterval": "1d"
},
+ {
+ "name": "LicenseAssignmentErrors",
+ "label": "Alert on license assignment errors",
+ "recommendedRunInterval": "1d"
+ },
{
"name": "NoCAConfig",
"label": "Alert on tenants without a Conditional Access policy, while having Conditional Access licensing available.",
@@ -28,6 +33,15 @@
"inputName": "InactiveLicensedUsersExcludeDisabled",
"recommendedRunInterval": "1d"
},
+ {
+ "name": "EntraConnectSyncStatus",
+ "label": "Alert if Entra Connect sync is enabled and has not run in the last X hours",
+ "requiresInput": true,
+ "inputType": "number",
+ "inputLabel": "Hours(Default:72)",
+ "inputName": "EntraConnectSyncStatusHours",
+ "recommendedRunInterval": "1d"
+ },
{
"name": "QuotaUsed",
"label": "Alert on % mailbox quota used",
@@ -46,6 +60,15 @@
"inputName": "SharePointQuota",
"recommendedRunInterval": "4h"
},
+ {
+ "name": "OneDriveQuota",
+ "label": "Alert on % OneDrive quota used",
+ "requiresInput": true,
+ "inputType": "textField",
+ "inputLabel": "Enter quota percentage (default: 90)",
+ "inputName": "OneDriveQuota",
+ "recommendedRunInterval": "4h"
+ },
{
"name": "ExpiringLicenses",
"label": "Alert on licenses expiring in 30 days",
@@ -71,6 +94,21 @@
"label": "Alert on Defender Malware found (Tenant must be on-boarded in Lighthouse)",
"recommendedRunInterval": "4h"
},
+ {
+ "name": "DefenderIncidents",
+ "label": "Alert on new Defender Incidents found",
+ "recommendedRunInterval": "4h"
+ },
+ {
+ "name": "Vulnerabilities",
+ "label": "Alert on vulnerabilities older than X hours",
+ "requiresInput": true,
+ "inputType": "number",
+ "inputLabel": "Alert on vulnerabilities first seen more than X hours ago (default: 24)",
+ "inputName": "AgeInHours",
+ "recommendedRunInterval": "4h",
+ "description": "Monitors for software vulnerabilities that were first discovered more than the specified number of hours ago. This helps identify lingering vulnerabilities that may have been missed or not yet remediated. Requires Defender for Endpoint/Business."
+ },
{
"name": "UnusedLicenses",
"label": "Alert on unused licenses",
@@ -81,6 +119,15 @@
"label": "Alert on overused licenses",
"recommendedRunInterval": "7d"
},
+ {
+ "name": "EntraLicenseUtilization",
+ "label": "Alert on Entra ID P1/P2 license over-utilization",
+ "recommendedRunInterval": "7d",
+ "requiresInput": true,
+ "inputType": "textField",
+ "inputLabel": "Alert when utilization exceeds % (default: 110)",
+ "inputName": "EntraLicenseUtilizationThreshold"
+ },
{
"name": "AppSecretExpiry",
"label": "Alert on expiring application secrets",
@@ -92,7 +139,7 @@
"recommendedRunInterval": "30d"
},
{
- "name": "AppCertificateExpiry ",
+ "name": "AppCertificateExpiry",
"label": "Alert on expiring application certificates",
"recommendedRunInterval": "1d"
},
@@ -130,6 +177,52 @@
"name": "HuntressRogueApps",
"label": "Alert on Huntress Rogue Apps detected",
"recommendedRunInterval": "4h",
- "description": "Huntress has provided a repository of known rogue apps that are commonly used in BEC, data exfiltration and other Microsoft 365 attacks. This alert will notify you if any of these apps are detected in the selected tenant(s). For more information, see https://huntresslabs.github.io/rogueapps/."
+ "description": "Huntress has provided a repository of known rogue apps that are commonly used in BEC, data exfiltration and other Microsoft 365 attacks. This alert will notify you if any of these apps are detected in the selected tenant(s). For more information, see https://huntresslabs.github.io/rogueapps/.",
+ "requiresInput": true,
+ "inputType": "switch",
+ "inputLabel": "Ignore Disabled Apps?",
+ "inputName": "IgnoreDisabledApps"
+ },
+ {
+ "name": "TERRL",
+ "label": "Alert when Tenant External Recipient Rate Limit exceeds X %",
+ "requiresInput": true,
+ "inputType": "number",
+ "inputLabel": "Alert % (default: 80)",
+ "inputName": "TERRLThreshold",
+ "recommendedRunInterval": "1h",
+ "description": "Monitors tenant outbound email volume against Microsoft's TERRL limits. Tenant data is updated every hour."
+ },
+ {
+ "name": "LowDomainScore",
+ "label": "Alert on domains with low security score",
+ "requiresInput": true,
+ "inputType": "number",
+ "inputLabel": "Alert when score is below % (default: 70)",
+ "inputName": "InputValue",
+ "recommendedRunInterval": "7d",
+ "description": "Monitors domain security scores from the DomainAnalyser and alerts when scores fall below the specified threshold."
+ },
+ {
+ "name": "GlobalAdminNoAltEmail",
+ "label": "Alert on Global Admin accounts without alternate email address",
+ "recommendedRunInterval": "7d",
+ "description": "Monitors Global Admin accounts and alerts when they don't have an alternate email address set, which is important for password recovery of key accounts."
+ },
+ {
+ "name": "NewRiskyUsers",
+ "label": "Alert on new risky users (P2 License Required)",
+ "recommendedRunInterval": "30m",
+ "description": "Monitors for new risky users in the tenant. Risky users are defined as users who have performed actions that are considered risky, such as password resets, MFA failures, or suspicious activity."
+ },
+ {
+ "name": "LowTenantAlignment",
+ "label": "Alert on low tenant alignment percentage",
+ "requiresInput": true,
+ "inputType": "number",
+ "inputLabel": "Alert when alignment is below % (default: 99)",
+ "inputName": "InputValue",
+ "recommendedRunInterval": "1d",
+ "description": "Monitors tenant alignment scores against standards templates and alerts when the alignment percentage falls below the specified threshold. This helps ensure compliance across all managed tenants."
}
]
diff --git a/src/data/cipp-roles.json b/src/data/cipp-roles.json
new file mode 100644
index 000000000000..f95e32fa18c6
--- /dev/null
+++ b/src/data/cipp-roles.json
@@ -0,0 +1,23 @@
+{
+ "readonly": {
+ "include": ["*.Read"],
+ "exclude": ["CIPP.SuperAdmin.*"]
+ },
+ "editor": {
+ "include": ["*.Read", "*.ReadWrite"],
+ "exclude": [
+ "CIPP.SuperAdmin.*",
+ "CIPP.Admin.*",
+ "CIPP.AppSettings.*",
+ "Tenant.Standards.ReadWrite"
+ ]
+ },
+ "admin": {
+ "include": ["*"],
+ "exclude": ["CIPP.SuperAdmin.*"]
+ },
+ "superadmin": {
+ "include": ["*"],
+ "exclude": []
+ }
+}
diff --git a/src/data/extensionDataMapping.json b/src/data/extensionDataMapping.json
new file mode 100644
index 000000000000..926f1effeafd
--- /dev/null
+++ b/src/data/extensionDataMapping.json
@@ -0,0 +1,111 @@
+{
+ "Mailboxes": {
+ "description": "List of user mailboxes mapped to their corresponding user via id. Properties can be mapped individually.",
+ "type": "object",
+ "targetObject": "user",
+ "sourceMatchProperty": "ExternalDirectoryObjectId",
+ "destinationMatchProperty": "id",
+ "storeAs": "value",
+ "properties": [
+ { "name": "Id", "dataType": "string" },
+ { "name": "ExchangeGuid", "dataType": "string" },
+ { "name": "ArchiveGuid", "dataType": "string" },
+ { "name": "WhenSoftDeleted", "dataType": "datetime" },
+ { "name": "ProhibitSendQuota", "dataType": "string" },
+ { "name": "ProhibitSendReceiveQuota", "dataType": "string" },
+ { "name": "LitigationHoldEnabled", "dataType": "boolean" },
+ { "name": "InPlaceHolds", "dataType": "array" },
+ { "name": "HiddenFromAddressListsEnabled", "dataType": "boolean" },
+ { "name": "UPN", "dataType": "string" },
+ { "name": "displayName", "dataType": "string" },
+ { "name": "primarySmtpAddress", "dataType": "string" },
+ { "name": "recipientType", "dataType": "string" },
+ { "name": "recipientTypeDetails", "dataType": "string" },
+ { "name": "AdditionalEmailAddresses", "dataType": "string" },
+ { "name": "ForwardingSmtpAddress", "dataType": "string" },
+ { "name": "InternalForwardingAddress", "dataType": "string" },
+ { "name": "DeliverToMailboxAndForward", "dataType": "boolean" },
+ { "name": "ExternalDirectoryObjectId", "dataType": "string" },
+ { "name": "MessageCopyForSendOnBehalfEnabled", "dataType": "boolean" },
+ { "name": "MessageCopyForSentAsEnabled", "dataType": "boolean" }
+ ]
+ },
+ "MailboxPermissions": {
+ "description": "List of mailbox permissions mapped to their corresponding user via id. Permissions are stored as JSON in a multi-value property for each entry.",
+ "type": "array",
+ "targetObject": "user",
+ "sourceMatchProperty": "Identity",
+ "destinationMatchProperty": ["id", "mailNickname"],
+ "storeAs": "json",
+ "select": "User,AccessRights"
+ },
+ "CASMailbox": {
+ "description": "List of CAS mailboxes mapped to their corresponding user via id. Properties can be mapped individually.",
+ "type": "object",
+ "targetObject": "user",
+ "sourceMatchProperty": "ExternalDirectoryObjectId",
+ "destinationMatchProperty": "id",
+ "storeAs": "value",
+ "properties": [
+ { "name": "ObjectKey", "dataType": "string" },
+ { "name": "ExternalDirectoryObjectId", "dataType": "string" },
+ { "name": "Identity", "dataType": "string" },
+ { "name": "PrimarySmtpAddress", "dataType": "string" },
+ { "name": "DisplayName", "dataType": "string" },
+ { "name": "Name", "dataType": "string" },
+ { "name": "Guid", "dataType": "string" },
+ { "name": "ServerLegacyDN", "dataType": "string" },
+ { "name": "ExchangeVersion", "dataType": "string" },
+ { "name": "ECPEnabled", "dataType": "boolean" },
+ { "name": "EmailAddresses", "dataType": "array" },
+ { "name": "OWAEnabled", "dataType": "boolean" },
+ { "name": "OrganizationId", "dataType": "string" },
+ { "name": "ImapEnabled", "dataType": "boolean" },
+ { "name": "PopEnabled", "dataType": "boolean" },
+ { "name": "MAPIEnabled", "dataType": "boolean" },
+ { "name": "EwsEnabled", "dataType": "boolean" },
+ { "name": "ActiveSyncEnabled", "dataType": "boolean" }
+ ]
+ },
+ "MailboxUsage": {
+ "description": "Mailbox usage mapped to their corresponding user via userPrincipalName. Properties can be mapped individually.",
+ "type": "object",
+ "targetObject": "user",
+ "sourceMatchProperty": "userPrincipalName",
+ "destinationMatchProperty": "userPrincipalName",
+ "storeAs": "value",
+ "properties": [
+ { "name": "reportPeriod", "dataType": "string" },
+ { "name": "totalItemSize", "dataType": "string" },
+ { "name": "deletedItemSize", "dataType": "string" },
+ { "name": "itemCount", "dataType": "integer" },
+ { "name": "deletedItemCount", "dataType": "integer" },
+ { "name": "storageLimitStatus", "dataType": "string" },
+ { "name": "issueWarningQuota", "dataType": "string" },
+ { "name": "prohibitSendQuota", "dataType": "string" },
+ { "name": "prohibitSendReceiveQuota", "dataType": "string" }
+ ]
+ },
+ "OneDriveUsage": {
+ "description": "OneDrive usage mapped to their corresponding user via ownerPrincipalName. Properties can be mapped individually.",
+ "type": "object",
+ "targetObject": "user",
+ "sourceMatchProperty": "ownerPrincipalName",
+ "destinationMatchProperty": "userPrincipalName",
+ "storeAs": "value",
+ "properties": [
+ { "name": "reportRefreshDate", "dataType": "datetime" },
+ { "name": "siteId", "dataType": "string" },
+ { "name": "siteUrl", "dataType": "string" },
+ { "name": "ownerDisplayName", "dataType": "string" },
+ { "name": "ownerPrincipalName", "dataType": "string" },
+ { "name": "isDeleted", "dataType": "boolean" },
+ { "name": "lastActivityDate", "dataType": "datetime" },
+ { "name": "fileCount", "dataType": "integer" },
+ { "name": "activeFileCount", "dataType": "integer" },
+ { "name": "storageUsedInBytes", "dataType": "integer" },
+ { "name": "storageAllocatedInBytes", "dataType": "integer" },
+ { "name": "reportPeriod", "dataType": "string" }
+ ]
+ }
+}
diff --git a/src/data/languageList.json b/src/data/languageList.json
index 3bd0ec3d8e82..c4e742af3a1e 100644
--- a/src/data/languageList.json
+++ b/src/data/languageList.json
@@ -5,6 +5,96 @@
"tag": "ar-SA",
"LCID": "1025"
},
+ {
+ "language": "Arabic",
+ "Geographic area": "Algeria",
+ "tag": "ar-DZ",
+ "LCID": "5121"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Egypt",
+ "tag": "ar-EG",
+ "LCID": "3073"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Bahrain",
+ "tag": "ar-BH",
+ "LCID": "15361"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Iraq",
+ "tag": "ar-IQ",
+ "LCID": "2049"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Jordan",
+ "tag": "ar-JO",
+ "LCID": "11265"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Kuwait",
+ "tag": "ar-KW",
+ "LCID": "13313"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Lebanon",
+ "tag": "ar-LB",
+ "LCID": "12289"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Libya",
+ "tag": "ar-LY",
+ "LCID": "4097"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Morocco",
+ "tag": "ar-MA",
+ "LCID": "6145"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Oman",
+ "tag": "ar-OM",
+ "LCID": "8193"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Qatar",
+ "tag": "ar-QA",
+ "LCID": "16385"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Syria",
+ "tag": "ar-SY",
+ "LCID": "10241"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Tunisia",
+ "tag": "ar-TN",
+ "LCID": "7169"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "UAE",
+ "tag": "ar-AE",
+ "LCID": "14337"
+ },
+ {
+ "language": "Arabic",
+ "Geographic area": "Yemen",
+ "tag": "ar-YE",
+ "LCID": "9217"
+ },
{
"language": "Bulgarian",
"Geographic area": "Bulgaria",
@@ -23,6 +113,12 @@
"tag": "zh-TW",
"LCID": "1028"
},
+ {
+ "language": "Chinese",
+ "Geographic area": "Hong Kong SAR",
+ "tag": "zh-HK",
+ "LCID": "3076"
+ },
{
"language": "Croatian",
"Geographic area": "Croatia",
@@ -53,6 +149,42 @@
"tag": "en-US",
"LCID": "1033"
},
+ {
+ "language": "English",
+ "Geographic area": "Australia",
+ "tag": "en-AU",
+ "LCID": "3081"
+ },
+ {
+ "language": "English",
+ "Geographic area": "United Kingdom",
+ "tag": "en-GB",
+ "LCID": "2057"
+ },
+ {
+ "language": "English",
+ "Geographic area": "New Zealand",
+ "tag": "en-NZ",
+ "LCID": "5129"
+ },
+ {
+ "language": "English",
+ "Geographic area": "Canada",
+ "tag": "en-CA",
+ "LCID": "4105"
+ },
+ {
+ "language": "English",
+ "Geographic area": "South Africa",
+ "tag": "en-ZA",
+ "LCID": "7177"
+ },
+ {
+ "language": "English",
+ "Geographic area": "Singapore",
+ "tag": "en-SG",
+ "LCID": "4100"
+ },
{
"language": "Estonian",
"Geographic area": "Estonia",
@@ -71,12 +203,30 @@
"tag": "fr-FR",
"LCID": "1036"
},
+ {
+ "language": "French",
+ "Geographic area": "Canada",
+ "tag": "fr-CA",
+ "LCID": "3084"
+ },
+ {
+ "language": "French",
+ "Geographic area": "Switzerland",
+ "tag": "fr-CH",
+ "LCID": "4108"
+ },
{
"language": "German",
"Geographic area": "Germany",
"tag": "de-DE",
"LCID": "1031"
},
+ {
+ "language": "German",
+ "Geographic area": "Switzerland",
+ "tag": "de-CH",
+ "LCID": "2055"
+ },
{
"language": "Greek",
"Geographic area": "Greece",
@@ -155,6 +305,12 @@
"tag": "nb-NO",
"LCID": "1044"
},
+ {
+ "language": "Persian",
+ "Geographic area": "Iran",
+ "tag": "fa-IR",
+ "LCID": "1065"
+ },
{
"language": "Polish",
"Geographic area": "Poland",
@@ -209,6 +365,108 @@
"tag": "es-ES",
"LCID": "3082"
},
+ {
+ "language": "Spanish",
+ "Geographic area": "Argentina",
+ "tag": "es-AR",
+ "LCID": "11274"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Bolivia",
+ "tag": "es-BO",
+ "LCID": "16394"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Chile",
+ "tag": "es-CL",
+ "LCID": "13322"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Colombia",
+ "tag": "es-CO",
+ "LCID": "9226"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Costa Rica",
+ "tag": "es-CR",
+ "LCID": "5130"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Dominican Republic",
+ "tag": "es-DO",
+ "LCID": "7178"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Ecuador",
+ "tag": "es-EC",
+ "LCID": "12298"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "El Salvador",
+ "tag": "es-SV",
+ "LCID": "17418"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Guatemala",
+ "tag": "es-GT",
+ "LCID": "4106"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Honduras",
+ "tag": "es-HN",
+ "LCID": "18442"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Mexico",
+ "tag": "es-MX",
+ "LCID": "2058"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Nicaragua",
+ "tag": "es-NI",
+ "LCID": "19466"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Panama",
+ "tag": "es-PA",
+ "LCID": "6154"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Paraguay",
+ "tag": "es-PY",
+ "LCID": "15370"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Peru",
+ "tag": "es-PE",
+ "LCID": "10250"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Uruguay",
+ "tag": "es-UY",
+ "LCID": "14346"
+ },
+ {
+ "language": "Spanish",
+ "Geographic area": "Venezuela",
+ "tag": "es-VE",
+ "LCID": "8202"
+ },
{
"language": "Swedish",
"Geographic area": "Sweden",
@@ -229,14 +487,26 @@
},
{
"language": "Ukrainian",
- "Geographic area": "Ukrainian",
+ "Geographic area": "Ukraine",
"tag": "uk-UA",
"LCID": "1058"
},
+ {
+ "language": "Urdu",
+ "Geographic area": "Pakistan",
+ "tag": "ur-PK",
+ "LCID": "1056"
+ },
{
"language": "Vietnamese",
"Geographic area": "Vietnam",
"tag": "vi-VN",
"LCID": "1066"
+ },
+ {
+ "language": "Welsh",
+ "Geographic area": "Wales",
+ "tag": "cy-GB",
+ "LCID": "1106"
}
]
diff --git a/src/data/portals.json b/src/data/portals.json
index 130c9f2d11e4..2a3d78cdd3ae 100644
--- a/src/data/portals.json
+++ b/src/data/portals.json
@@ -2,20 +2,20 @@
{
"label": "M365 Portal",
"name": "M365_Portal",
- "url": "https://admin.microsoft.com/Partner/BeginClientSession.aspx?CTID=customerId&CSDEST=o365admincenter",
- "variable": "customerId",
+ "url": "https://admin.cloud.microsoft/?delegatedOrg=initialDomainName",
+ "variable": "initialDomainName",
"target": "_blank",
"external": true,
- "icon": "cog"
+ "icon": "GlobeAltIcon"
},
{
"label": "Exchange Portal",
"name": "Exchange_Portal",
- "url": "https://admin.exchange.microsoft.com/?landingpage=homepage&form=mac_sidebar&delegatedOrg=defaultDomainName#",
- "variable": "defaultDomainName",
+ "url": "https://admin.cloud.microsoft/exchange?landingpage=homepage&form=mac_sidebar&delegatedOrg=initialDomainName#",
+ "variable": "initialDomainName",
"target": "_blank",
"external": true,
- "icon": "mail-bulk"
+ "icon": "Mail"
},
{
"label": "Entra Portal",
@@ -24,16 +24,16 @@
"variable": "defaultDomainName",
"target": "_blank",
"external": true,
- "icon": "users"
+ "icon": "UsersIcon"
},
{
"label": "Teams Portal",
"name": "Teams_Portal",
- "url": "https://admin.teams.microsoft.com/?delegatedOrg=defaultDomainName",
- "variable": "defaultDomainName",
+ "url": "https://admin.teams.microsoft.com/?delegatedOrg=initialDomainName",
+ "variable": "initialDomainName",
"target": "_blank",
"external": true,
- "icon": "comments"
+ "icon": "FilePresent"
},
{
"label": "Azure Portal",
@@ -42,7 +42,7 @@
"variable": "defaultDomainName",
"target": "_blank",
"external": true,
- "icon": "server"
+ "icon": "ServerIcon"
},
{
"label": "Intune Portal",
@@ -51,7 +51,16 @@
"variable": "defaultDomainName",
"target": "_blank",
"external": true,
- "icon": "laptop-code"
+ "icon": "Laptop"
+ },
+ {
+ "label": "SharePoint Admin",
+ "name": "SharePoint_Admin",
+ "url": "/api/ListSharePointAdminUrl?tenantFilter=defaultDomainName",
+ "variable": "defaultDomainName",
+ "target": "_blank",
+ "external": true,
+ "icon": "Share"
},
{
"label": "Security Portal",
@@ -60,7 +69,7 @@
"variable": "customerId",
"target": "_blank",
"external": true,
- "icon": "shield-alt"
+ "icon": "Shield"
},
{
"label": "Compliance Portal",
@@ -69,15 +78,6 @@
"variable": "customerId",
"target": "_blank",
"external": true,
- "icon": "shield-alt"
- },
- {
- "label": "SharePoint Admin",
- "name": "SharePoint_Admin",
- "url": "https://admin.microsoft.com/Partner/beginclientsession.aspx?CTID=customerId&CSDEST=SharePoint",
- "variable": "customerId",
- "target": "_blank",
- "external": true,
- "icon": "book"
+ "icon": "ShieldMoon"
}
-]
+]
\ No newline at end of file
diff --git a/src/data/standards.json b/src/data/standards.json
index 4a7a5527ae36..23505da2cd6a 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -2,9 +2,10 @@
{
"name": "standards.MailContacts",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Defines the email address to receive general updates and information related to M365 subscriptions. Leave a contact field blank if you do not want to update the contact information.",
"docsDescription": "",
+ "executiveText": "Establishes designated contact email addresses for receiving important Microsoft 365 subscription updates and notifications. This ensures proper communication channels are maintained for general, security, marketing, and technical matters, improving organizational responsiveness to critical system updates.",
"addedComponent": [
{
"type": "textField",
@@ -34,31 +35,125 @@
"label": "Set contact e-mails",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-03-13",
"powershellEquivalent": "Set-MsolCompanyContactInformation",
"recommendedBy": []
},
+ {
+ "name": "standards.DeployMailContact",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Creates a new mail contact in Exchange Online across all selected tenants. The contact will be visible in the Global Address List.",
+ "docsDescription": "This standard creates a new mail contact in Exchange Online. Mail contacts are useful for adding external email addresses to your organization's address book. They can be used for distribution lists, shared mailboxes, and other collaboration scenarios.",
+ "executiveText": "Automatically creates external email contacts in the organization's address book, enabling seamless communication with external partners and vendors. This standardizes contact management across all company locations and improves collaboration efficiency.",
+ "addedComponent": [
+ {
+ "type": "textField",
+ "name": "standards.DeployMailContact.ExternalEmailAddress",
+ "label": "External Email Address",
+ "required": true
+ },
+ {
+ "type": "textField",
+ "name": "standards.DeployMailContact.DisplayName",
+ "label": "Display Name",
+ "required": true
+ },
+ {
+ "type": "textField",
+ "name": "standards.DeployMailContact.FirstName",
+ "label": "First Name",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.DeployMailContact.LastName",
+ "label": "Last Name",
+ "required": false
+ }
+ ],
+ "label": "Deploy Mail Contact",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2024-03-19",
+ "powershellEquivalent": "New-MailContact",
+ "recommendedBy": ["CIPP"]
+ },
+ {
+ "name": "standards.DeployContactTemplates",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Creates new mail contacts in Exchange Online across all selected tenants based on the selected templates. The contact will be visible in the Global Address List unless hidden.",
+ "docsDescription": "This standard creates new mail contacts in Exchange Online based on the selected templates. Mail contacts are useful for adding external email addresses to your organization's address book. They can be used for distribution lists, shared mailboxes, and other collaboration scenarios.",
+ "executiveText": "Deploys standardized external contact templates across all company locations, ensuring consistent communication channels with key external partners, vendors, and stakeholders. This streamlines contact management and maintains uniform business relationships.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": false,
+ "label": "Select Mail Contact Templates",
+ "name": "standards.DeployContactTemplates.templateIds",
+ "api": {
+ "url": "/api/ListContactTemplates",
+ "labelField": "name",
+ "valueField": "GUID",
+ "queryKey": "Contact Templates"
+ }
+ }
+ ],
+ "label": "Deploy Mail Contact Template",
+ "disabledFeatures": {
+ "report": false,
+ "warn": false,
+ "remediate": false
+ },
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-05-31",
+ "powershellEquivalent": "New-MailContact",
+ "recommendedBy": ["CIPP"]
+ },
{
"name": "standards.AuditLog",
"cat": "Global Standards",
- "tag": ["lowimpact", "CIS", "mip_search_auditlog"],
+ "tag": ["CIS M365 5.0 (3.1.1)", "mip_search_auditlog", "NIST CSF 2.0 (DE.CM-09)"],
"helpText": "Enables the Unified Audit Log for tracking and auditing activities. Also runs Enable-OrganizationCustomization if necessary.",
+ "executiveText": "Activates comprehensive activity logging across Microsoft 365 services to track user actions, system changes, and security events. This provides essential audit trails for compliance requirements, security investigations, and regulatory reporting.",
"addedComponent": [],
"label": "Enable the Unified Audit Log",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Enable-OrganizationCustomization",
+ "recommendedBy": ["CIS", "CIPP"]
+ },
+ {
+ "name": "standards.RestrictThirdPartyStorageServices",
+ "cat": "Global Standards",
+ "tag": ["CIS M365 5.0 (1.3.7)"],
+ "helpText": "Restricts third-party storage services in Microsoft 365 on the web by managing the Microsoft 365 on the web service principal. This disables integrations with services like Dropbox, Google Drive, Box, and other third-party storage providers.",
+ "docsDescription": "Third-party storage can be enabled for users in Microsoft 365, allowing them to store and share documents using services such as Dropbox, alongside OneDrive and team sites. This standard ensures Microsoft 365 on the web third-party storage services are restricted by creating and disabling the Microsoft 365 on the web service principal (appId: c1f33bc0-bdb4-4248-ba9b-096807ddb43e). By using external storage services an organization may increase the risk of data breaches and unauthorized access to confidential information. Additionally, third-party services may not adhere to the same security standards as the organization, making it difficult to maintain data privacy and security. Impact is highly dependent upon current practices - if users do not use other storage providers, then minimal impact is likely. However, if users regularly utilize providers outside of the tenant this will affect their ability to continue to do so.",
+ "executiveText": "Prevents employees from using external cloud storage services like Dropbox, Google Drive, and Box within Microsoft 365, reducing data security risks and ensuring all company data remains within controlled corporate systems. This helps maintain data governance and prevents potential data leaks to unauthorized platforms.",
+ "addedComponent": [],
+ "label": "Restrict third-party storage services in Microsoft 365 on the web",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-06-06",
+ "powershellEquivalent": "New-MgServicePrincipal and Update-MgServicePrincipal",
"recommendedBy": ["CIS"]
},
{
"name": "standards.ProfilePhotos",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Controls whether users can set their own profile photos in Microsoft 365.",
"docsDescription": "Controls whether users can set their own profile photos in Microsoft 365. When disabled, only User and Global administrators can update profile photos for users.",
+ "executiveText": "Manages user profile photo permissions within Microsoft 365, allowing organizations to control whether employees can upload their own photos or require administrative approval. This helps maintain professional appearance standards and prevents inappropriate images in corporate directories.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select value",
"name": "standards.ProfilePhotos.state",
"options": [
@@ -76,18 +171,21 @@
"label": "Allow users to set profile photos",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2025-01-19",
"powershellEquivalent": "Set-OrganizationConfig -ProfilePhotoOptions EnablePhotos and Update-MgBetaAdminPeople",
"recommendedBy": []
},
{
"name": "standards.PhishProtection",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Adds branding to the logon page that only appears if the url is not login.microsoftonline.com. This potentially prevents AITM attacks via EvilNginx. This will also automatically generate alerts if a clone of your login page has been found when set to Remediate.",
+ "executiveText": "Implements advanced phishing protection by adding visual indicators to login pages that help users identify legitimate Microsoft login pages versus fraudulent copies. This security measure protects against sophisticated phishing attacks that attempt to steal employee credentials.",
"addedComponent": [],
"label": "Enable Phishing Protection system via branding CSS",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-22",
"disabledFeatures": {
"report": true,
"warn": true,
@@ -99,8 +197,9 @@
{
"name": "standards.Branding",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the branding for the tenant. This includes the login page, and the Office 365 portal.",
+ "executiveText": "Customizes Microsoft 365 login pages and portals with company branding, including logos, colors, and messaging. This creates a consistent corporate identity experience for employees and reinforces brand recognition while maintaining professional appearance across all Microsoft services.",
"addedComponent": [
{
"type": "textField",
@@ -120,7 +219,7 @@
"label": "Hide self-service password reset"
},
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Visual Template",
"name": "standards.Branding.layoutTemplateType",
@@ -149,82 +248,116 @@
"label": "Set branding for the tenant",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-05-13",
"powershellEquivalent": "Portal only",
"recommendedBy": []
},
{
"name": "standards.EnableCustomerLockbox",
"cat": "Global Standards",
- "tag": ["lowimpact", "CIS", "CustomerLockBoxEnabled"],
+ "tag": ["CIS M365 5.0 (1.3.6)", "CustomerLockBoxEnabled"],
"helpText": "Enables Customer Lockbox that offers an approval process for Microsoft support to access organization data",
"docsDescription": "Customer Lockbox ensures that Microsoft can't access your content to do service operations without your explicit approval. Customer Lockbox ensures only authorized requests allow access to your organizations data.",
+ "executiveText": "Requires explicit organizational approval before Microsoft support staff can access company data for service operations. This provides an additional layer of data protection and ensures the organization maintains control over who can access sensitive business information, even during technical support scenarios.",
"addedComponent": [],
"label": "Enable Customer Lockbox",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-08",
"powershellEquivalent": "Set-OrganizationConfig -CustomerLockBoxEnabled $true",
"recommendedBy": ["CIS"]
},
{
"name": "standards.EnablePronouns",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Enables the Pronouns feature for the tenant. This allows users to set their pronouns in their profile.",
+ "executiveText": "Allows employees to display their preferred pronouns in their Microsoft 365 profiles, supporting inclusive workplace practices and helping colleagues communicate respectfully. This feature enhances diversity and inclusion initiatives while fostering a more welcoming work environment.",
"addedComponent": [],
"label": "Enable Pronouns",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-06-05",
"powershellEquivalent": "Update-MgBetaAdminPeoplePronoun -IsEnabledInOrganization:$true",
"recommendedBy": []
},
+ {
+ "name": "standards.EnableNamePronunciation",
+ "cat": "Global Standards",
+ "tag": [],
+ "helpText": "Enables the Name Pronunciation feature for the tenant. This allows users to set their name pronunciation in their profile.",
+ "docsDescription": "Enables the Name Pronunciation feature for the tenant. This allows users to set their name pronunciation in their profile.",
+ "executiveText": "Enables employees to add pronunciation guides for their names in Microsoft 365 profiles, improving communication and respect in diverse workplaces. This feature helps colleagues pronounce names correctly, enhancing professional relationships and inclusive culture.",
+ "addedComponent": [],
+ "label": "Enable Name Pronunciation",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-06",
+ "recommendedBy": ["CIPP"]
+ },
{
"name": "standards.AnonReportDisable",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Shows usernames instead of pseudo anonymised names in reports. This standard is required for reporting to work correctly.",
"docsDescription": "Microsoft announced some APIs and reports no longer return names, to comply with compliance and legal requirements in specific countries. This proves an issue for a lot of MSPs because those reports are often helpful for engineers. This standard applies a setting that shows usernames in those API calls / reports.",
+ "executiveText": "Configures Microsoft 365 reports to display actual usernames instead of anonymized identifiers, enabling IT administrators to effectively troubleshoot issues and generate meaningful usage reports. This improves operational efficiency and system management capabilities.",
"addedComponent": [],
"label": "Enable Usernames instead of pseudo anonymised names in reports",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Update-MgBetaAdminReportSetting -BodyParameter @{displayConcealedNames = $true}",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.DisableGuestDirectory",
"cat": "Global Standards",
- "tag": ["lowimpact"],
+ "tag": [
+ "CIS M365 5.0 (5.1.6.2)",
+ "CISA (MS.AAD.5.1v1)",
+ "EIDSCA.AP14",
+ "EIDSCA.ST08",
+ "EIDSCA.ST09",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
"helpText": "Disables Guest access to enumerate directory objects. This prevents guest users from seeing other users or guests in the directory.",
"docsDescription": "Sets it so guests can view only their own user profile. Permission to view other users isn't allowed. Also restricts guest users from seeing the membership of groups they're in. See exactly what get locked down in the [Microsoft documentation.](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions)",
+ "executiveText": "Restricts external guest users from viewing the company's employee directory and organizational structure, protecting sensitive information about staff and internal groups. This security measure prevents unauthorized access to corporate contact information while still allowing necessary collaboration.",
"addedComponent": [],
"label": "Restrict guest user access to directory objects",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-05-04",
"powershellEquivalent": "Set-AzureADMSAuthorizationPolicy -GuestUserRoleId '2af84b1e-32c8-42b7-82bc-daa82404023b'",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.DisableBasicAuthSMTP",
"cat": "Global Standards",
- "tag": ["mediumimpact"],
- "helpText": "Disables SMTP AUTH for the organization and all users. This is the default for new tenants. ",
+ "tag": ["CIS M365 5.0 (6.5.4)", "NIST CSF 2.0 (PR.IR-01)"],
+ "helpText": "Disables SMTP AUTH for the organization and all users. This is the default for new tenants.",
"docsDescription": "Disables SMTP basic authentication for the tenant and all users with it explicitly enabled.",
+ "executiveText": "Disables outdated email authentication methods that are vulnerable to security attacks, forcing applications and devices to use modern, more secure authentication protocols. This reduces the risk of email-based security breaches and credential theft.",
"addedComponent": [],
"label": "Disable SMTP Basic Authentication",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Set-TransportConfig -SmtpClientAuthenticationDisabled $true",
- "recommendedBy": []
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.ActivityBasedTimeout",
"cat": "Global Standards",
- "tag": ["mediumimpact", "CIS", "spo_idle_session_timeout"],
+ "tag": ["CIS M365 5.0 (1.3.2)", "spo_idle_session_timeout", "NIST CSF 2.0 (PR.AA-03)"],
"helpText": "Enables and sets Idle session timeout for Microsoft 365 to 1 hour. This policy affects most M365 web apps",
+ "executiveText": "Automatically logs out inactive users from Microsoft 365 applications after a specified time period to prevent unauthorized access to company data on unattended devices. This security measure protects against data breaches when employees leave workstations unlocked.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select value",
"name": "standards.ActivityBasedTimeout.timeout",
"options": [
@@ -254,77 +387,215 @@
"label": "Enable Activity based Timeout",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2022-04-13",
"powershellEquivalent": "Portal or Graph API",
"recommendedBy": ["CIS"]
},
+ {
+ "name": "standards.AuthMethodsSettings",
+ "cat": "Entra (AAD) Standards",
+ "tag": ["EIDSCA.AG01", "EIDSCA.AG02", "EIDSCA.AG03"],
+ "helpText": "Configures the report suspicious activity settings and system credential preferences in the authentication methods policy.",
+ "docsDescription": "Controls the authentication methods policy settings for reporting suspicious activity and system credential preferences. These settings help enhance the security of authentication in your organization.",
+ "executiveText": "Configures security settings that allow users to report suspicious login attempts and manages how the system handles authentication credentials. This enhances overall security by enabling early detection of potential security threats and optimizing authentication processes.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "required": false,
+ "name": "standards.AuthMethodsSettings.ReportSuspiciousActivity",
+ "label": "Report Suspicious Activity Settings",
+ "options": [
+ {
+ "label": "Microsoft managed",
+ "value": "default"
+ },
+ {
+ "label": "Enabled",
+ "value": "enabled"
+ },
+ {
+ "label": "Disabled",
+ "value": "disabled"
+ }
+ ]
+ },
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "required": false,
+ "name": "standards.AuthMethodsSettings.SystemCredential",
+ "label": "System Credential Preferences",
+ "options": [
+ {
+ "label": "Microsoft managed",
+ "value": "default"
+ },
+ {
+ "label": "Enabled",
+ "value": "enabled"
+ },
+ {
+ "label": "Disabled",
+ "value": "disabled"
+ }
+ ]
+ }
+ ],
+ "label": "Configure Authentication Methods Policy Settings",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-02-10",
+ "powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicy",
+ "recommendedBy": []
+ },
+ {
+ "name": "standards.AuthMethodsPolicyMigration",
+ "cat": "Entra (AAD) Standards",
+ "tag": [],
+ "helpText": "Completes the migration of authentication methods policy to the new format",
+ "docsDescription": "Sets the authentication methods policy migration state to complete. This is required when migrating from legacy authentication policies to the new unified authentication methods policy.",
+ "executiveText": "Completes the transition from legacy authentication policies to Microsoft's modern unified authentication methods policy, ensuring the organization benefits from the latest security features and management capabilities. This migration enables enhanced security controls and simplified policy management.",
+ "addedComponent": [],
+ "label": "Complete Authentication Methods Policy Migration",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-07-07",
+ "powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicy",
+ "recommendedBy": ["CIPP"]
+ },
{
"name": "standards.AppDeploy",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Deploys selected applications to the tenant. Use a comma separated list of application IDs to deploy multiple applications. Permissions will be copied from the source application.",
"docsDescription": "Uses the CIPP functionality that deploys applications across an entire tenant base as a standard.",
+ "executiveText": "Automatically deploys approved business applications across all company locations and users, ensuring consistent access to essential tools and maintaining standardized software configurations. This streamlines application management and reduces IT deployment overhead.",
"addedComponent": [
+ {
+ "type": "select",
+ "multiple": false,
+ "creatable": false,
+ "label": "App Approval Mode",
+ "name": "standards.AppDeploy.mode",
+ "options": [
+ {
+ "label": "Template",
+ "value": "template"
+ },
+ {
+ "label": "Copy Permissions",
+ "value": "copy"
+ }
+ ]
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": false,
+ "label": "Select Applications",
+ "name": "standards.AppDeploy.templateIds",
+ "api": {
+ "url": "/api/ListAppApprovalTemplates",
+ "labelField": "TemplateName",
+ "valueField": "TemplateId",
+ "queryKey": "StdAppApprovalTemplateList",
+ "addedField": {
+ "AppId": "AppId"
+ }
+ },
+ "condition": {
+ "field": "standards.AppDeploy.mode",
+ "compareType": "is",
+ "compareValue": "template"
+ }
+ },
{
"type": "textField",
"name": "standards.AppDeploy.appids",
- "label": "Application IDs, comma separated"
+ "label": "Application IDs, comma separated",
+ "condition": {
+ "field": "standards.AppDeploy.mode",
+ "compareType": "isNot",
+ "compareValue": "template"
+ }
}
],
"label": "Deploy Application",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-07",
"powershellEquivalent": "Portal or Graph API",
"recommendedBy": []
},
{
"name": "standards.laps",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Enables the tenant to use LAPS. You must still create a policy for LAPS to be active on all devices. Use the template standards to deploy this by default.",
"docsDescription": "Enables the LAPS functionality on the tenant. Prerequisite for using Windows LAPS via Azure AD.",
+ "executiveText": "Enables Local Administrator Password Solution (LAPS) capability, which automatically manages and rotates local administrator passwords on company computers. This significantly improves security by preventing the use of shared or static administrator passwords that could be exploited by attackers.",
"addedComponent": [],
"label": "Enable LAPS on the tenant",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-04-25",
"powershellEquivalent": "Portal or Graph API",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.PWdisplayAppInformationRequiredState",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": [
+ "CIS M365 5.0 (2.3.1)",
+ "EIDSCA.AM03",
+ "EIDSCA.AM04",
+ "EIDSCA.AM06",
+ "EIDSCA.AM07",
+ "EIDSCA.AM09",
+ "EIDSCA.AM10",
+ "NIST CSF 2.0 (PR.AA-03)"
+ ],
"helpText": "Enables the MS authenticator app to display information about the app that is requesting authentication. This displays the application name.",
"docsDescription": "Allows users to use Passwordless with Number Matching and adds location information from the last request",
+ "executiveText": "Enhances authentication security by requiring users to match numbers and showing detailed information about login requests, including application names and location data. This helps employees verify legitimate login attempts and prevents unauthorized access through more secure authentication methods.",
"addedComponent": [],
"label": "Enable Passwordless with Location information and Number Matching",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": ["CIS"]
},
{
"name": "standards.allowOTPTokens",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": ["EIDSCA.AM02"],
"helpText": "Allows you to use MS authenticator OTP token generator",
"docsDescription": "Allows you to use Microsoft Authenticator OTP token generator. Useful for using the NPS extension as MFA on VPN clients.",
+ "executiveText": "Enables one-time password generation through Microsoft Authenticator app, providing an additional secure authentication method for employees. This is particularly useful for secure VPN access and other systems requiring multi-factor authentication.",
"addedComponent": [],
"label": "Enable OTP via Authenticator",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-12-06",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": []
},
{
"name": "standards.PWcompanionAppAllowedState",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": ["EIDSCA.AM01"],
"helpText": "Sets the state of Authenticator Lite, Authenticator lite is a companion app for passwordless authentication.",
"docsDescription": "Sets the Authenticator Lite state to enabled. This allows users to use the Authenticator Lite built into the Outlook app instead of the full Authenticator app.",
+ "executiveText": "Enables a simplified authentication experience by allowing users to authenticate directly through Outlook without requiring a separate authenticator app. This improves user convenience while maintaining security standards for passwordless authentication.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select value",
"name": "standards.PWcompanionAppAllowedState.state",
"options": [
@@ -335,6 +606,10 @@
{
"label": "Disabled",
"value": "disabled"
+ },
+ {
+ "label": "Microsoft managed",
+ "value": "default"
}
]
}
@@ -342,58 +617,90 @@
"label": "Set Authenticator Lite state",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-05-18",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": []
},
{
"name": "standards.EnableFIDO2",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [
+ "EIDSCA.AF01",
+ "EIDSCA.AF02",
+ "EIDSCA.AF03",
+ "EIDSCA.AF04",
+ "EIDSCA.AF05",
+ "EIDSCA.AF06",
+ "NIST CSF 2.0 (PR.AA-03)"
+ ],
"helpText": "Enables the FIDO2 authenticationMethod for the tenant",
"docsDescription": "Enables FIDO2 capabilities for the tenant. This allows users to use FIDO2 keys like a Yubikey for authentication.",
+ "executiveText": "Enables support for hardware security keys (like YubiKey) that provide the highest level of authentication security. These physical devices prevent phishing attacks and credential theft, offering superior protection for high-value accounts and sensitive business operations.",
"addedComponent": [],
"label": "Enable FIDO2 capabilities",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-12-08",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.EnableHardwareOAuth",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Enables the HardwareOath authenticationMethod for the tenant. This allows you to use hardware tokens for generating 6 digit MFA codes.",
"docsDescription": "Enables Hardware OAuth tokens for the tenant. This allows users to use hardware tokens like a Yubikey for authentication.",
+ "executiveText": "Enables physical hardware tokens that generate secure authentication codes, providing an alternative to smartphone-based authentication. This is particularly valuable for employees who cannot use mobile devices or require the highest security standards for accessing sensitive systems.",
"addedComponent": [],
"label": "Enable Hardware OAuth tokens",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-12-18",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": []
},
{
"name": "standards.allowOAuthTokens",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": ["EIDSCA.AT01", "EIDSCA.AT02"],
"helpText": "Allows you to use any software OAuth token generator",
"docsDescription": "Enables OTP Software OAuth tokens for the tenant. This allows users to use OTP codes generated via software, like a password manager to be used as an authentication method.",
+ "executiveText": "Allows employees to use third-party authentication apps and password managers to generate secure login codes, providing flexibility in authentication methods while maintaining security standards. This accommodates diverse user preferences and existing security tools.",
"addedComponent": [],
"label": "Enable OTP Software OAuth tokens",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-12-18",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": []
},
+ {
+ "name": "standards.FormsPhishingProtection",
+ "cat": "Global Standards",
+ "tag": ["CIS M365 5.0 (1.3.5)", "Security", "PhishingProtection"],
+ "helpText": "Enables internal phishing protection for Microsoft Forms to help prevent malicious forms from being created and shared within the organization. This feature scans forms created by internal users for potential phishing content and suspicious patterns.",
+ "docsDescription": "Enables internal phishing protection for Microsoft Forms by setting the isInOrgFormsPhishingScanEnabled property to true. This security feature helps protect organizations from internal phishing attacks through Microsoft Forms by automatically scanning forms created by internal users for potential malicious content, suspicious links, and phishing patterns. When enabled, Forms will analyze form content and block or flag potentially dangerous forms before they can be shared within the organization.",
+ "executiveText": "Automatically scans Microsoft Forms created by employees for malicious content and phishing attempts, preventing the creation and distribution of harmful forms within the organization. This protects against both internal threats and compromised accounts that might be used to distribute malicious content.",
+ "addedComponent": [],
+ "label": "Enable internal phishing protection for Forms",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-06",
+ "powershellEquivalent": "Graph API",
+ "recommendedBy": ["CIS", "CIPP"]
+ },
{
"name": "standards.TAP",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Enables TAP and sets the default TAP lifetime to 1 hour. This configuration also allows you to select if a TAP is single use or multi-logon.",
"docsDescription": "Enables Temporary Password generation for the tenant.",
+ "executiveText": "Enables temporary access passwords that IT administrators can generate for employees who are locked out or need emergency access to systems. These time-limited passwords provide a secure way to restore access without compromising long-term security policies.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select TAP Lifetime",
"name": "standards.TAP.config",
"options": [
@@ -411,31 +718,58 @@
"label": "Enable Temporary Access Passwords",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-03-15",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.PasswordExpireDisabled",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact", "CIS", "PWAgePolicyNew"],
+ "tag": ["CIS M365 5.0 (1.3.1)", "PWAgePolicyNew"],
"helpText": "Disables the expiration of passwords for the tenant by setting the password expiration policy to never expire for any user.",
"docsDescription": "Sets passwords to never expire for tenant, recommended to use in conjunction with secure password requirements.",
+ "executiveText": "Eliminates mandatory password expiration requirements, allowing employees to keep strong passwords indefinitely rather than forcing frequent changes that often lead to weaker passwords. This modern security approach reduces help desk calls and improves overall password security when combined with multi-factor authentication.",
"addedComponent": [],
"label": "Do not expire passwords",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Update-MgDomain",
+ "recommendedBy": ["CIS", "CIPP"]
+ },
+ {
+ "name": "standards.CustomBannedPasswordList",
+ "cat": "Entra (AAD) Standards",
+ "tag": ["CIS M365 5.0 (5.2.3.2)"],
+ "helpText": "**Requires Entra ID P1.** Updates and enables the Entra ID custom banned password list with the supplied words. Enter words separated by commas or semicolons. Each word must be 4-16 characters long. Maximum 1,000 words allowed.",
+ "docsDescription": "Updates and enables the Entra ID custom banned password list with the supplied words. This supplements the global banned password list maintained by Microsoft. The custom list is limited to 1,000 key base terms of 4-16 characters each. Entra ID will [block variations and common substitutions](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-configure-custom-password-protection#configure-custom-banned-passwords) of these words in user passwords. [How are passwords evaluated?](https://learn.microsoft.com/en-us/entra/identity/authentication/concept-password-ban-bad#score-calculation)",
+ "addedComponent": [
+ {
+ "type": "textField",
+ "name": "standards.CustomBannedPasswordList.BannedWords",
+ "label": "Banned Words",
+ "placeholder": "Banned words separated by commas or semicolons",
+ "required": true
+ }
+ ],
+ "label": "Set Entra ID Custom Banned Password List",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-06-28",
+ "powershellEquivalent": "Get-MgBetaDirectorySetting, New-MgBetaDirectorySetting, Update-MgBetaDirectorySetting",
"recommendedBy": ["CIS"]
},
{
"name": "standards.ExternalMFATrusted",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the state of the Cross-tenant access setting to trust external MFA. This allows guest users to use their home tenant MFA to access your tenant.",
+ "executiveText": "Allows external partners and vendors to use their own organization's multi-factor authentication when accessing company resources, streamlining collaboration while maintaining security standards. This reduces friction for external users while ensuring they still meet authentication requirements.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select value",
"name": "standards.ExternalMFATrusted.state",
"options": [
@@ -453,28 +787,42 @@
"label": "Sets the Cross-tenant access setting to trust external MFA",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-03-26",
"powershellEquivalent": "Update-MgBetaPolicyCrossTenantAccessPolicyDefault",
"recommendedBy": []
},
{
"name": "standards.DisableTenantCreation",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact", "CIS"],
- "helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles. ",
+ "tag": ["CIS M365 5.0 (1.2.3)", "CISA (MS.AAD.6.1v1)"],
+ "helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles.",
"docsDescription": "Users by default are allowed to create M365 tenants. This disables that so only admins can create new M365 tenants.",
+ "executiveText": "Prevents regular employees from creating new Microsoft 365 organizations, ensuring all new tenants are properly managed and controlled by IT administrators. This prevents unauthorized shadow IT environments and maintains centralized governance over Microsoft 365 resources.",
"addedComponent": [],
"label": "Disable M365 Tenant creation by users",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-11-29",
"powershellEquivalent": "Update-MgPolicyAuthorizationPolicy",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.EnableAppConsentRequests",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": [
+ "CIS M365 5.0 (1.5.2)",
+ "CISA (MS.AAD.9.1v1)",
+ "EIDSCA.CP04",
+ "EIDSCA.CR01",
+ "EIDSCA.CR02",
+ "EIDSCA.CR03",
+ "EIDSCA.CR04",
+ "Essential 8 (1507)",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
"helpText": "Enables App consent admin requests for the tenant via the GA role. Does not overwrite existing reviewer settings",
"docsDescription": "Enables the ability for users to request admin consent for applications. Should be used in conjunction with the \"Require admin consent for applications\" standards",
+ "executiveText": "Establishes a formal approval process where employees can request access to business applications that require administrative review. This balances security with productivity by allowing controlled access to necessary tools while preventing unauthorized application installations.",
"addedComponent": [
{
"type": "AdminRolesMultiSelect",
@@ -485,19 +833,22 @@
"label": "Enable App consent admin requests",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-11-27",
"powershellEquivalent": "Update-MgPolicyAdminConsentRequestPolicy",
"recommendedBy": ["CIS"]
},
{
"name": "standards.NudgeMFA",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the state of the registration campaign for the tenant",
"docsDescription": "Sets the state of the registration campaign for the tenant. If enabled nudges users to set up the Microsoft Authenticator during sign-in.",
+ "executiveText": "Prompts employees to set up multi-factor authentication during login, gradually improving the organization's security posture by encouraging adoption of stronger authentication methods. This helps achieve better security compliance without forcing immediate mandatory changes.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select value",
"name": "standards.NudgeMFA.state",
"options": [
@@ -515,70 +866,86 @@
"type": "number",
"name": "standards.NudgeMFA.snoozeDurationInDays",
"label": "Number of days to allow users to skip registering Authenticator (0-14, default is 1)",
- "default": 1
+ "defaultValue": 1
}
],
"label": "Sets the state for the request to setup Authenticator",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-12-08",
"powershellEquivalent": "Update-MgPolicyAuthenticationMethodPolicy",
"recommendedBy": []
},
{
"name": "standards.DisableM365GroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact"],
+ "tag": ["CISA (MS.AAD.21.1v1)"],
"helpText": "Restricts M365 group creation to certain admin roles. This disables the ability to create Teams, SharePoint sites, Planner, etc",
"docsDescription": "Users by default are allowed to create M365 groups. This restricts M365 group creation to certain admin roles. This disables the ability to create Teams, SharePoint sites, Planner, etc",
+ "executiveText": "Restricts the creation of Microsoft 365 groups, Teams, and SharePoint sites to authorized administrators, preventing uncontrolled proliferation of collaboration spaces. This ensures proper governance, naming conventions, and resource management while maintaining oversight of all collaborative environments.",
"addedComponent": [],
"label": "Disable M365 Group creation by users",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-07-17",
"powershellEquivalent": "Update-MgBetaDirectorySetting",
"recommendedBy": []
},
{
"name": "standards.DisableAppCreation",
"cat": "Entra (AAD) Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": [
+ "CIS M365 5.0 (1.2.2)",
+ "CISA (MS.AAD.4.1v1)",
+ "EIDSCA.AP10",
+ "Essential 8 (1175)",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
"helpText": "Disables the ability for users to create App registrations in the tenant.",
"docsDescription": "Disables the ability for users to create applications in Entra. Done to prevent breached accounts from creating an app to maintain access to the tenant, even after the breached account has been secured.",
+ "executiveText": "Prevents regular employees from creating application registrations that could be used to maintain unauthorized access to company systems. This security measure ensures that only authorized IT personnel can create applications, reducing the risk of persistent security breaches through malicious applications.",
"addedComponent": [],
"label": "Disable App creation by users",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-03-20",
"powershellEquivalent": "Update-MgPolicyAuthorizationPolicy",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.DisableSecurityGroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact"],
+ "tag": ["CISA (MS.AAD.20.1v1)", "NIST CSF 2.0 (PR.AA-05)"],
"helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams",
+ "executiveText": "Restricts the creation of security groups to IT administrators only, preventing employees from creating unauthorized access groups that could bypass security controls. This ensures proper governance of access permissions and maintains centralized control over who can access what resources.",
"addedComponent": [],
"label": "Disable Security Group creation by users",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2022-07-17",
"powershellEquivalent": "Update-MgBetaPolicyAuthorizationPolicy",
"recommendedBy": []
},
{
"name": "standards.LegacyMFACleanup",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "This standard currently does not function and can be safely disabled",
+ "executiveText": "This standard is currently non-functional and should be disabled. It was previously designed to remove outdated multi-factor authentication configurations in favor of modern security policies.",
"addedComponent": [],
"label": "Remove Legacy MFA if SD or CA is active",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Set-MsolUser -StrongAuthenticationRequirements $null",
"recommendedBy": []
},
{
"name": "standards.DisableSelfServiceLicenses",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact"],
- "helpText": "This standard disables all self service licenses and enables all exclusions",
+ "tag": [],
+ "helpText": "Note: requires 'Billing Administrator' GDAP role. This standard disables all self service licenses and enables all exclusions",
+ "executiveText": "Prevents employees from purchasing Microsoft 365 licenses independently, ensuring all software acquisitions go through proper procurement channels. This maintains budget control, prevents unauthorized spending, and ensures compliance with corporate licensing agreements.",
"addedComponent": [
{
"type": "textField",
@@ -590,27 +957,38 @@
"label": "Disable Self Service Licensing",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Set-MsolCompanySettings -AllowAdHocSubscriptions $false",
"recommendedBy": []
},
{
"name": "standards.DisableGuests",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Blocks login for guest users that have not logged in for 90 days",
+ "executiveText": "Automatically disables external guest accounts that haven't been used for 90 days, reducing security risks from dormant accounts while maintaining access for active external collaborators. This helps maintain a clean user directory and reduces potential attack vectors.",
"addedComponent": [],
"label": "Disable Guest accounts that have not logged on for 90 days",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2022-10-20",
"powershellEquivalent": "Graph API",
- "recommendedBy": []
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.OauthConsent",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact", "CIS"],
+ "tag": [
+ "CIS M365 5.0 (1.5.1)",
+ "CISA (MS.AAD.4.2v1)",
+ "EIDSCA.AP08",
+ "EIDSCA.AP09",
+ "Essential 8 (1175)",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
"helpText": "Disables users from being able to consent to applications, except for those specified in the field below",
"docsDescription": "Requires users to get administrator consent before sharing data with applications. You can preapprove specific applications.",
+ "executiveText": "Requires administrative approval before employees can grant applications access to company data, preventing unauthorized data sharing and potential security breaches. This protects against malicious applications while allowing approved business tools to function normally.",
"addedComponent": [
{
"type": "textField",
@@ -622,30 +1000,36 @@
"label": "Require admin consent for applications (Prevent OAuth phishing)",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Update-MgPolicyAuthorizationPolicy",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.OauthConsentLowSec",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact", "IntegratedApps"],
+ "tag": ["IntegratedApps"],
"helpText": "Sets the default oauth consent level so users can consent to applications that have low risks.",
"docsDescription": "Allows users to consent to applications with low assigned risk.",
+ "executiveText": "Allows employees to approve low-risk applications without administrative intervention, balancing security with productivity. This provides a middle ground between complete restriction and open access, enabling business agility while maintaining protection against high-risk applications.",
"label": "Allow users to consent to applications with low security risk (Prevent OAuth phishing. Lower impact, less secure)",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2022-08-16",
"powershellEquivalent": "Update-MgPolicyAuthorizationPolicy",
"recommendedBy": []
},
{
"name": "standards.GuestInvite",
"cat": "Entra (AAD) Standards",
- "tag": ["mediumimpact"],
+ "tag": ["CISA (MS.AAD.18.1v1)", "EIDSCA.AP04", "EIDSCA.AP07"],
"helpText": "This setting controls who can invite guests to your directory to collaborate on resources secured by your company, such as SharePoint sites or Azure resources.",
+ "executiveText": "Controls who within the organization can invite external partners and vendors to access company resources, ensuring proper oversight of external access while enabling necessary business collaboration. This helps maintain security while supporting partnership and vendor relationships.",
"addedComponent": [
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"label": "Who can send invites?",
"name": "standards.GuestInvite.allowInvitesFrom",
"options": [
@@ -671,125 +1055,194 @@
"label": "Guest Invite setting",
"impact": "Medium Impact",
"impactColour": "warning",
- "powershellEquivalent": "",
+ "addedDate": "2024-11-12",
+ "powershellEquivalent": "Graph API",
"recommendedBy": []
},
{
"name": "standards.StaleEntraDevices",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact", "CIS"],
- "helpText": "Cleans up Entra devices that have not connected/signed in for the specified number of days.",
- "docsDescription": "Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)",
+ "tag": ["Essential 8 (1501)", "NIST CSF 2.0 (ID.AM-08)", "NIST CSF 2.0 (PR.PS-03)"],
+ "helpText": "Remediate is currently not available. Cleans up Entra devices that have not connected/signed in for the specified number of days.",
+ "docsDescription": "Remediate is currently not available. Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)",
+ "executiveText": "Automatically identifies and removes inactive devices that haven't connected to company systems for a specified period, reducing security risks from abandoned or lost devices. This maintains a clean device inventory and prevents potential unauthorized access through dormant device registrations.",
"addedComponent": [
{
"type": "number",
"name": "standards.StaleEntraDevices.deviceAgeThreshold",
- "label": "Days before stale(Dont set below 30)"
+ "label": "Days before stale(Do not set below 30)"
}
],
"disabledFeatures": {
"report": false,
"warn": false,
- "remediate": true
+ "remediate": false
},
"label": "Cleanup stale Entra devices",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2025-01-19",
"powershellEquivalent": "Remove-MgDevice, Update-MgDevice or Graph API",
"recommendedBy": []
},
{
"name": "standards.UndoOauth",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": [],
"helpText": "Disables App consent and set to Allow user consent for apps",
+ "executiveText": "Reverses application consent restrictions, allowing employees to approve applications independently without administrative oversight. This increases productivity and user autonomy but reduces security controls over data access permissions.",
"addedComponent": [],
"label": "Undo App Consent Standard",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2022-01-07",
"powershellEquivalent": "Update-MgPolicyAuthorizationPolicy",
"recommendedBy": []
},
{
"name": "standards.SecurityDefaults",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": ["CISA (MS.AAD.11.1v1)"],
"helpText": "Enables security defaults for the tenant, for newer tenants this is enabled by default. Do not enable this feature if you use Conditional Access.",
"docsDescription": "Enables SD for the tenant, which disables all forms of basic authentication and enforces users to configure MFA. Users are only prompted for MFA when a logon is considered 'suspect' by Microsoft.",
+ "executiveText": "Activates Microsoft's baseline security configuration that requires multi-factor authentication and blocks legacy authentication methods. This provides essential security protection for organizations without complex conditional access policies, significantly improving security posture with minimal configuration.",
"addedComponent": [],
"label": "Enable Security Defaults",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2021-11-19",
"powershellEquivalent": "[Read more here](https://www.cyberdrain.com/automating-with-powershell-enabling-secure-defaults-and-sd-explained/)",
"recommendedBy": []
},
{
"name": "standards.DisableSMS",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": ["CIS M365 5.0 (2.3.5)", "EIDSCA.AS04", "NIST CSF 2.0 (PR.AA-03)"],
"helpText": "This blocks users from using SMS as an MFA method. If a user only has SMS as a MFA method, they will be unable to log in.",
"docsDescription": "Disables SMS as an MFA method for the tenant. If a user only has SMS as a MFA method, they will be unable to sign in.",
+ "executiveText": "Disables SMS text messages as a multi-factor authentication method due to security vulnerabilities like SIM swapping attacks. This forces users to adopt more secure authentication methods like authenticator apps or hardware tokens, significantly improving account security.",
"addedComponent": [],
"label": "Disables SMS as an MFA method",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2023-12-18",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.DisableVoice",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": ["CIS M365 5.0 (2.3.5)", "EIDSCA.AV01", "NIST CSF 2.0 (PR.AA-03)"],
"helpText": "This blocks users from using Voice call as an MFA method. If a user only has Voice as a MFA method, they will be unable to log in.",
"docsDescription": "Disables Voice call as an MFA method for the tenant. If a user only has Voice call as a MFA method, they will be unable to sign in.",
+ "executiveText": "Disables voice call authentication due to security vulnerabilities and social engineering risks. This forces users to adopt more secure authentication methods like authenticator apps, improving overall account security by eliminating phone-based attack vectors.",
"addedComponent": [],
"label": "Disables Voice call as an MFA method",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2023-12-18",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.DisableEmail",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": ["CIS M365 5.0 (2.3.5)", "NIST CSF 2.0 (PR.AA-03)"],
"helpText": "This blocks users from using email as an MFA method. This disables the email OTP option for guest users, and instead prompts them to create a Microsoft account.",
+ "executiveText": "Disables email-based authentication codes due to security concerns with email interception and account compromise. This forces users to adopt more secure authentication methods, particularly affecting guest users who must use stronger verification methods.",
"addedComponent": [],
"label": "Disables Email as an MFA method",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2023-12-18",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": []
},
{
"name": "standards.Disablex509Certificate",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": [],
"helpText": "This blocks users from using Certificates as an MFA method.",
"docsDescription": "",
+ "executiveText": "Disables certificate-based authentication as a multi-factor authentication method, typically used when organizations want to standardize on other authentication methods or when certificate management becomes too complex for the security benefit provided.",
"addedComponent": [],
"label": "Disables Certificates as an MFA method",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2023-12-18",
+ "powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
+ "recommendedBy": []
+ },
+ {
+ "name": "standards.DisableQRCodePin",
+ "cat": "Entra (AAD) Standards",
+ "tag": [],
+ "helpText": "This blocks users from using QR Code Pin as an MFA method. If a user only has QR Code Pin as a MFA method, they will be unable to log in.",
+ "docsDescription": "Disables QR Code Pin as an MFA method for the tenant. If a user only has QR Code Pin as a MFA method, they will be unable to sign in.",
+ "executiveText": "Disables QR Code Pin authentication method due to security concerns, forcing users to adopt more secure authentication alternatives. This helps standardize authentication methods and reduces potential security vulnerabilities while ensuring employees use more robust multi-factor authentication options.",
+ "addedComponent": [],
+ "label": "Disables QR Code Pin as an MFA method",
+ "impact": "High Impact",
+ "impactColour": "danger",
+ "addedDate": "2024-02-10",
"powershellEquivalent": "Update-MgBetaPolicyAuthenticationMethodPolicyAuthenticationMethodConfiguration",
"recommendedBy": []
},
{
"name": "standards.PerUserMFA",
"cat": "Entra (AAD) Standards",
- "tag": ["highimpact"],
+ "tag": [
+ "CIS M365 5.0 (1.2.1)",
+ "CIS M365 5.0 (1.1.1)",
+ "CIS M365 5.0 (1.1.2)",
+ "CISA (MS.AAD.1.1v1)",
+ "CISA (MS.AAD.1.2v1)",
+ "Essential 8 (1504)",
+ "Essential 8 (1173)",
+ "Essential 8 (1401)",
+ "NIST CSF 2.0 (PR.AA-03)"
+ ],
"helpText": "Enables per user MFA for all users.",
+ "executiveText": "Requires all employees to use multi-factor authentication for enhanced account security, significantly reducing the risk of unauthorized access from compromised passwords. This fundamental security measure protects against the majority of account-based attacks and is essential for maintaining strong cybersecurity posture.",
"addedComponent": [],
"label": "Enables per user MFA for all users.",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2024-06-14",
"powershellEquivalent": "Graph API",
"recommendedBy": []
},
+ {
+ "name": "standards.UserPreferredLanguage",
+ "cat": "Entra (AAD) Standards",
+ "tag": [],
+ "helpText": "Sets the preferred language property for all users in the tenant. This will override the user's language settings.",
+ "docsDescription": "Sets the preferred language property for all users in the tenant. This will override the user's language settings.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "name": "standards.UserPreferredLanguage.preferredLanguage",
+ "label": "Preferred Language",
+ "api": {
+ "url": "/languageList.json",
+ "labelField": "tag",
+ "valueField": "tag"
+ }
+ }
+ ],
+ "label": "Preferred language for all users",
+ "impact": "High Impact",
+ "impactColour": "info",
+ "addedDate": "2025-02-26",
+ "powershellEquivalent": "Update-MgUser -UserId user@domain.com -BodyParameter @{preferredLanguage='en-US'}",
+ "recommendedBy": []
+ },
{
"name": "standards.OutBoundSpamAlert",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (2.1.6)"],
"helpText": "Set the Outbound Spam Alert e-mail address",
"docsDescription": "Sets the e-mail address to which outbound spam alerts are sent.",
"addedComponent": [
@@ -802,31 +1255,33 @@
"label": "Set Outbound Spam Alert e-mail",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-05-03",
"powershellEquivalent": "Set-HostedOutboundSpamFilterPolicy",
"recommendedBy": ["CIS"]
},
{
"name": "standards.MessageExpiration",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the transport message configuration to timeout a message at 12 hours.",
"docsDescription": "Expires messages in the transport queue after 12 hours. Makes the NDR for failed messages show up faster for users. Default is 24 hours.",
"addedComponent": [],
"label": "Lower Transport Message Expiration to 12 hours",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-02-23",
"powershellEquivalent": "Set-TransportConfig -MessageExpirationTimeout 12.00:00:00",
"recommendedBy": []
},
{
"name": "standards.GlobalQuarantineNotifications",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the Global Quarantine Notification Interval to the selected value. Determines how often the quarantine notification is sent to users.",
"docsDescription": "Sets the global quarantine notification interval for the tenant. This is the time between the quarantine notification emails are sent out to users. Default is 24 hours.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.GlobalQuarantineNotifications.NotificationInterval",
@@ -849,31 +1304,35 @@
"label": "Set Global Quarantine Notification Interval",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-05-03",
"powershellEquivalent": "Set-QuarantinePolicy -EndUserSpamNotificationFrequency",
"recommendedBy": []
},
{
"name": "standards.DisableTNEF",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Disables Transport Neutral Encapsulation Format (TNEF)/winmail.dat for the tenant. TNEF can cause issues if the recipient is not using a client supporting TNEF.",
"docsDescription": "Disables Transport Neutral Encapsulation Format (TNEF)/winmail.dat for the tenant. TNEF can cause issues if the recipient is not using a client supporting TNEF. Cannot be overridden by the user. For more information, see [Microsoft's documentation.](https://learn.microsoft.com/en-us/exchange/mail-flow/content-conversion/tnef-conversion?view=exchserver-2019)",
+ "executiveText": "Prevents the creation of winmail.dat attachments that can cause compatibility issues when sending emails to external recipients using non-Outlook email clients. This improves email compatibility and reduces support issues with external partners and customers.",
"addedComponent": [],
"label": "Disable TNEF/winmail.dat",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-04-26",
"powershellEquivalent": "Set-RemoteDomain -Identity 'Default' -TNEFEnabled $false",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.FocusedInbox",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the default Focused Inbox state for the tenant. This can be overridden by the user.",
"docsDescription": "Sets the default Focused Inbox state for the tenant. This can be overridden by the user in their Outlook settings. For more information, see [Microsoft's documentation.](https://support.microsoft.com/en-us/office/focused-inbox-for-outlook-f445ad7f-02f4-4294-a82e-71d8964e3978)",
+ "executiveText": "Configures the default setting for Outlook's Focused Inbox feature, which automatically sorts important emails into a focused view while placing less important emails in a separate section. This can improve employee productivity by reducing email clutter, though users can adjust this setting individually.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.FocusedInbox.state",
@@ -892,18 +1351,20 @@
"label": "Set Focused Inbox state",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-04-26",
"powershellEquivalent": "Set-OrganizationConfig -FocusedInboxOn $true or $false",
"recommendedBy": []
},
{
"name": "standards.CloudMessageRecall",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the Cloud Message Recall state for the tenant. This allows users to recall messages from the cloud.",
"docsDescription": "Sets the default state for Cloud Message Recall for the tenant. By default this is enabled. You can read more about the feature [here.](https://techcommunity.microsoft.com/t5/exchange-team-blog/cloud-based-message-recall-in-exchange-online/ba-p/3744714)",
+ "executiveText": "Enables employees to recall or retract emails they've sent, helping prevent embarrassing mistakes or accidental data sharing. This feature can reduce the impact of human errors in email communication and provides a safety net for sensitive information accidentally sent to wrong recipients.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.CloudMessageRecall.state",
@@ -922,55 +1383,103 @@
"label": "Set Cloud Message Recall state",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-05-31",
"powershellEquivalent": "Set-OrganizationConfig -MessageRecallEnabled",
"recommendedBy": []
},
{
"name": "standards.AutoExpandArchive",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Enables auto-expanding archives for the tenant",
"docsDescription": "Enables auto-expanding archives for the tenant. Does not enable archives for users.",
+ "executiveText": "Enables automatic expansion of email archive storage when users approach their archive limits, ensuring continuous email retention without manual intervention. This prevents email storage issues and maintains compliance with data retention policies without requiring ongoing administrative management.",
"addedComponent": [],
"label": "Enable Auto-expanding archives",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Set-OrganizationConfig -AutoExpandingArchive",
"recommendedBy": []
},
+ {
+ "name": "standards.TwoClickEmailProtection",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Configures the two-click confirmation requirement for viewing encrypted/protected emails in OWA and new Outlook. When enabled, users must click \"View message\" before accessing protected content, providing an additional layer of privacy protection.",
+ "docsDescription": "Configures the TwoClickMailPreviewEnabled setting in Exchange Online organization configuration. This security feature requires users to click \"View message\" before accessing encrypted or protected emails in Outlook on the web (OWA) and new Outlook for Windows. This provides additional privacy protection by preventing protected content from automatically displaying, giving users time to ensure their screen is not visible to others before viewing sensitive content. The feature helps protect against shoulder surfing and accidental disclosure of confidential information.",
+ "executiveText": "Requires employees to click twice before viewing encrypted or sensitive emails, preventing accidental exposure of confidential information when screens might be visible to others. This privacy protection helps prevent shoulder surfing and ensures employees are intentional about viewing sensitive content.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "label": "Select value",
+ "name": "standards.TwoClickEmailProtection.state",
+ "options": [
+ {
+ "label": "Enabled",
+ "value": "enabled"
+ },
+ {
+ "label": "Disabled",
+ "value": "disabled"
+ }
+ ]
+ }
+ ],
+ "label": "Set two-click confirmation for encrypted emails in New Outlook",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-13",
+ "powershellEquivalent": "Set-OrganizationConfig -TwoClickMailPreviewEnabled $true | $false",
+ "recommendedBy": []
+ },
{
"name": "standards.EnableOnlineArchiving",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": ["Essential 8 (1511)", "NIST CSF 2.0 (PR.DS-11)"],
"helpText": "Enables the In-Place Online Archive for all UserMailboxes with a valid license.",
+ "executiveText": "Automatically enables online email archiving for all licensed employees, providing additional storage for older emails while maintaining easy access. This helps manage mailbox sizes, improves email performance, and supports compliance with data retention requirements.",
"addedComponent": [],
"label": "Enable Online Archive for all users",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-20",
"powershellEquivalent": "Enable-Mailbox -Archive $true",
"recommendedBy": []
},
{
"name": "standards.EnableLitigationHold",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Enables litigation hold for all UserMailboxes with a valid license.",
- "addedComponent": [],
+ "executiveText": "Preserves all email content for legal and compliance purposes by preventing permanent deletion of emails, even when users attempt to delete them. This is essential for organizations subject to legal discovery requirements or regulatory compliance mandates.",
+ "addedComponent": [
+ {
+ "type": "textField",
+ "name": "standards.EnableLitigationHold.days",
+ "required": false,
+ "label": "Days to apply for litigation hold"
+ }
+ ],
"label": "Enable Litigation Hold for all users",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-06-25",
"powershellEquivalent": "Set-Mailbox -LitigationHoldEnabled $true",
"recommendedBy": []
},
{
"name": "standards.SpoofWarn",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (6.2.3)"],
"helpText": "Adds or removes indicators to e-mail messages received from external senders in Outlook. Works on all Outlook clients/OWA",
"docsDescription": "Adds or removes indicators to e-mail messages received from external senders in Outlook. You can read more about this feature on [Microsoft's Exchange Team Blog.](https://techcommunity.microsoft.com/t5/exchange-team-blog/native-external-sender-callouts-on-email-in-outlook/ba-p/2250098)",
+ "executiveText": "Displays visual warnings in Outlook when emails come from external senders, helping employees identify potentially suspicious messages and reducing the risk of phishing attacks. This security feature makes it easier for staff to distinguish between internal and external communications.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.SpoofWarn.state",
@@ -984,43 +1493,56 @@
"value": "disabled"
}
]
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "label": "Enter allowed senders(domain.com, *.domain.com or test@domain.com)",
+ "name": "standards.SpoofWarn.AllowListAdd"
}
],
"label": "Enable or disable 'external' warning in Outlook",
"impact": "Low Impact",
"impactColour": "info",
- "powershellEquivalent": "et-ExternalInOutlook \u2013Enabled $true or $false",
- "recommendedBy": ["CIS"]
+ "addedDate": "2021-11-16",
+ "powershellEquivalent": "Set-ExternalInOutlook \u2013Enabled $true or $false",
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.EnableMailTips",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS", "exo_mailtipsenabled"],
+ "tag": ["CIS M365 5.0 (6.5.2)", "exo_mailtipsenabled"],
"helpText": "Enables all MailTips in Outlook. MailTips are the notifications Outlook and Outlook on the web shows when an email you create, meets some requirements",
+ "executiveText": "Enables helpful notifications in Outlook that warn users about potential email issues, such as sending to large groups, external recipients, or invalid addresses. This reduces email mistakes and improves communication efficiency by providing real-time guidance to employees.",
"addedComponent": [
{
"type": "number",
"name": "standards.EnableMailTips.MailTipsLargeAudienceThreshold",
"label": "Number of recipients to trigger the large audience MailTip (Default is 25)",
"placeholder": "Enter a profile name",
- "default": 25
+ "defaultValue": 25
}
],
"label": "Enable all MailTips",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-14",
"powershellEquivalent": "Set-OrganizationConfig",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.TeamsMeetingsByDefault",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the default state for automatically turning meetings into Teams meetings for the tenant. This can be overridden by the user in Outlook.",
+ "executiveText": "Automatically adds Microsoft Teams meeting links to calendar invitations by default, streamlining the process of creating virtual meetings. This improves collaboration efficiency and ensures consistent meeting experiences across the organization, though users can override this setting when needed.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Select value",
"name": "standards.TeamsMeetingsByDefault.state",
"options": [
@@ -1038,90 +1560,141 @@
"label": "Set Teams Meetings by default state",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-05-31",
"powershellEquivalent": "Set-OrganizationConfig -OnlineMeetingsByDefaultEnabled",
"recommendedBy": []
},
{
"name": "standards.DisableViva",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
- "helpText": "Disables the daily viva reports for all users.",
+ "tag": [],
+ "helpText": "Disables the daily viva reports for all users. This standard requires the CIPP-SAM application to have the Company Administrator (Global Admin) role in the tenant. Enable this using CIPP > Advanced > Super Admin > SAM App Roles. Activate the roles with a CPV refresh.",
"docsDescription": "",
+ "executiveText": "Disables daily Microsoft Viva Insights reports that are automatically sent to employees, reducing email volume and allowing organizations to control when and how productivity insights are shared. This can help prevent information overload while maintaining the ability to access insights when needed.",
"addedComponent": [],
"label": "Disable daily Insight/Viva reports",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2022-05-25",
"powershellEquivalent": "Set-UserBriefingConfig",
"recommendedBy": []
},
{
"name": "standards.RotateDKIM",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (2.1.9)"],
"helpText": "Rotate DKIM keys that are 1024 bit to 2048 bit",
+ "executiveText": "Upgrades email security by replacing older 1024-bit encryption keys with stronger 2048-bit keys for email authentication. This improves the organization's email security posture and helps prevent email spoofing and tampering, maintaining trust with email recipients.",
"addedComponent": [],
"label": "Rotate DKIM keys that are 1024 bit to 2048 bit",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-03-14",
"powershellEquivalent": "Rotate-DkimSigningConfig",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.AddDKIM",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (2.1.9)"],
"helpText": "Enables DKIM for all domains that currently support it",
+ "executiveText": "Enables email authentication technology that digitally signs outgoing emails to verify they actually came from your organization. This prevents email spoofing, improves email deliverability, and protects the company's reputation by ensuring recipients can trust emails from your domains.",
"addedComponent": [],
"label": "Enables DKIM for all domains that currently support it",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-03-14",
"powershellEquivalent": "New-DkimSigningConfig and Set-DkimSigningConfig",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
+ },
+ {
+ "name": "standards.AddDMARCToMOERA",
+ "cat": "Global Standards",
+ "tag": ["CIS M365 5.0 (2.1.10)", "Security", "PhishingProtection"],
+ "helpText": "Note: requires 'Domain Name Administrator' GDAP role. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default value is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
+ "docsDescription": "Note: requires 'Domain Name Administrator' GDAP role. Adds a DMARC record to MOERA (onmicrosoft.com) domains. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default record is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
+ "executiveText": "Implements advanced email security for Microsoft's default domain names (onmicrosoft.com) to prevent criminals from impersonating your organization. This blocks fraudulent emails that could damage your company's reputation and protects partners and customers from phishing attacks using your domain names.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": true,
+ "required": false,
+ "placeholder": "v=DMARC1; p=reject; (recommended)",
+ "label": "Value",
+ "name": "standards.AddDMARCToMOERA.RecordValue",
+ "options": [
+ {
+ "label": "v=DMARC1; p=reject; (recommended)",
+ "value": "v=DMARC1; p=reject;"
+ }
+ ]
+ }
+ ],
+ "label": "Enables DMARC on MOERA (onmicrosoft.com) domains",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-16",
+ "powershellEquivalent": "Portal only",
+ "recommendedBy": ["CIS", "Microsoft"]
},
{
"name": "standards.EnableMailboxAuditing",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS", "exo_mailboxaudit"],
+ "tag": [
+ "CIS M365 5.0 (6.1.1)",
+ "CIS M365 5.0 (6.1.2)",
+ "CIS M365 5.0 (6.1.3)",
+ "exo_mailboxaudit",
+ "Essential 8 (1509)",
+ "Essential 8 (1683)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
"helpText": "Enables Mailbox auditing for all mailboxes and on tenant level. Disables audit bypass on all mailboxes. Unified Audit Log needs to be enabled for this standard to function.",
"docsDescription": "Enables mailbox auditing on tenant level and for all mailboxes. Disables audit bypass on all mailboxes. By default Microsoft does not enable mailbox auditing for Resource Mailboxes, Public Folder Mailboxes and DiscoverySearch Mailboxes. Unified Audit Log needs to be enabled for this standard to function.",
+ "executiveText": "Enables comprehensive logging of all email access and modifications across all employee mailboxes, providing detailed audit trails for security investigations and compliance requirements. This helps detect unauthorized access, data breaches, and supports regulatory compliance efforts.",
"addedComponent": [],
"label": "Enable Mailbox auditing",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-08",
"powershellEquivalent": "Set-OrganizationConfig -AuditDisabled $false",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.SendReceiveLimitTenant",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the Send and Receive limits for new users. Valid values are 1MB to 150MB",
+ "executiveText": "Establishes standard email attachment size limits for all new employees, balancing functionality with system performance and security. This prevents email system overload from large attachments while ensuring employees can share necessary files through appropriate channels.",
"addedComponent": [
{
"type": "number",
"name": "standards.SendReceiveLimitTenant.SendLimit",
"label": "Send limit in MB (Default is 35)",
- "default": 35
+ "defaultValue": 35
},
{
"type": "number",
"name": "standards.SendReceiveLimitTenant.ReceiveLimit",
"label": "Receive Limit in MB (Default is 36)",
- "default": 36
+ "defaultValue": 36
}
],
"label": "Set send/receive size limits",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-11-16",
"powershellEquivalent": "Set-MailboxPlan",
"recommendedBy": []
},
{
"name": "standards.calDefault",
"cat": "Exchange Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the default sharing level for the default calendar, for all users",
"docsDescription": "Sets the default sharing level for the default calendar for all users in the tenant. You can read about the different sharing levels [here.](https://learn.microsoft.com/en-us/powershell/module/exchange/set-mailboxfolderpermission?view=exchange-ps#-accessrights)",
+ "executiveText": "Configures how much calendar information employees share by default with colleagues, balancing collaboration needs with privacy. This setting determines whether others can see meeting details, free/busy times, or just availability, helping optimize scheduling while protecting sensitive meeting information.",
"disabledFeatures": {
"report": true,
"warn": true,
@@ -1129,10 +1702,10 @@
},
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select Sharing Level",
- "name": "standards.calDefault.permissionlevel",
+ "name": "standards.calDefault.permissionLevel",
"options": [
{
"label": "Owner - The user can create, read, edit, and delete all items in the folder, and create subfolders. The user is both folder owner and folder contact.",
@@ -1184,43 +1757,145 @@
"label": "Set Sharing Level for Default calendar",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-04-27",
"powershellEquivalent": "Set-MailboxFolderPermission",
"recommendedBy": []
},
+ {
+ "name": "standards.EXOOutboundSpamLimits",
+ "cat": "Exchange Standards",
+ "tag": ["CIS M365 5.0 (2.1.6)"],
+ "helpText": "Configures the outbound spam recipient limits (external per hour, internal per hour, per day) and the action to take when a limit is reached. The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one. ",
+ "docsDescription": "Configures the Exchange Online outbound spam recipient limits for external per hour, internal per hour, and per day, along with the action to take (e.g., BlockUser, Alert) when these limits are exceeded. This helps prevent abuse and manage email flow. Microsoft's recommendations can be found [here.](https://learn.microsoft.com/en-us/defender-office-365/recommended-settings-for-eop-and-office365#eop-outbound-spam-policy-settings) The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one.",
+ "executiveText": "Sets limits on how many emails employees can send per hour and per day to prevent spam and protect the organization's email reputation. When limits are exceeded, the system can alert administrators or temporarily block the user, helping detect compromised accounts or prevent abuse.",
+ "addedComponent": [
+ {
+ "type": "number",
+ "name": "standards.EXOOutboundSpamLimits.RecipientLimitExternalPerHour",
+ "label": "External Recipient Limit Per Hour",
+ "defaultValue": 400
+ },
+ {
+ "type": "number",
+ "name": "standards.EXOOutboundSpamLimits.RecipientLimitInternalPerHour",
+ "label": "Internal Recipient Limit Per Hour",
+ "defaultValue": 800
+ },
+ {
+ "type": "number",
+ "name": "standards.EXOOutboundSpamLimits.RecipientLimitPerDay",
+ "label": "Daily Recipient Limit",
+ "defaultValue": 800
+ },
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "name": "standards.EXOOutboundSpamLimits.ActionWhenThresholdReached",
+ "label": "Action When Threshold Reached",
+ "options": [
+ {
+ "label": "Alert",
+ "value": "Alert"
+ },
+ {
+ "label": "Block User",
+ "value": "BlockUser"
+ },
+ {
+ "label": "Block user from sending mail for the rest of the day",
+ "value": "BlockUserForToday"
+ }
+ ]
+ }
+ ],
+ "label": "Set Exchange Outbound Spam Limits",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-05-13",
+ "powershellEquivalent": "Set-HostedOutboundSpamFilterPolicy",
+ "recommendedBy": ["CIPP", "CIS"]
+ },
{
"name": "standards.DisableExternalCalendarSharing",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS", "exo_individualsharing"],
+ "tag": ["CIS M365 5.0 (1.3.3)", "exo_individualsharing"],
"helpText": "Disables the ability for users to share their calendar with external users. Only for the default policy, so exclusions can be made if needed.",
"docsDescription": "Disables external calendar sharing for the entire tenant. This is not a widely used feature, and it's therefore unlikely that this will impact users. Only for the default policy, so exclusions can be made if needed by making a new policy and assigning it to users.",
+ "executiveText": "Prevents employees from sharing their calendars with external parties, protecting sensitive meeting information and internal schedules from unauthorized access. This security measure helps maintain confidentiality of business activities while still allowing internal collaboration.",
"addedComponent": [],
"label": "Disable external calendar sharing",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-08",
"powershellEquivalent": "Get-SharingPolicy | Set-SharingPolicy -Enabled $False",
"recommendedBy": ["CIS"]
},
+ {
+ "name": "standards.AutoAddProxy",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Automatically adds all available domains as a proxy address.",
+ "docsDescription": "Automatically finds all available domain names in the tenant, and tries to add proxy addresses based on the user's UPN to each of these.",
+ "executiveText": "Automatically creates email addresses for employees across all company domains, ensuring they can receive emails sent to any of the organization's domain names. This improves email delivery reliability and maintains consistent communication channels across different business units or brands.",
+ "addedComponent": [],
+ "label": "Automatically deploy proxy addresses",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-02-07",
+ "powershellEquivalent": "Set-Mailbox -EmailAddresses @{add=$EmailAddress}",
+ "recommendedBy": [],
+ "disabledFeatures": {
+ "report": true,
+ "warn": true,
+ "remediate": false
+ }
+ },
{
"name": "standards.DisableAdditionalStorageProviders",
"cat": "Exchange Standards",
- "tag": ["lowimpact", "CIS", "exo_storageproviderrestricted"],
+ "tag": ["CIS M365 5.0 (6.5.3)", "exo_storageproviderrestricted"],
"helpText": "Disables the ability for users to open files in Outlook on the Web, from other providers such as Box, Dropbox, Facebook, Google Drive, OneDrive Personal, etc.",
"docsDescription": "Disables additional storage providers in OWA. This is to prevent users from using personal storage providers like Dropbox, Google Drive, etc. Usually this has little user impact.",
+ "executiveText": "Prevents employees from accessing personal cloud storage services like Dropbox or Google Drive through Outlook on the web, reducing data security risks and ensuring company information stays within approved corporate systems. This helps maintain data governance and prevents accidental data leaks.",
"addedComponent": [],
"label": "Disable additional storage providers in OWA",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-01-17",
"powershellEquivalent": "Get-OwaMailboxPolicy | Set-OwaMailboxPolicy -AdditionalStorageProvidersEnabled $False",
"recommendedBy": ["CIS"]
},
+ {
+ "name": "standards.AntiSpamSafeList",
+ "cat": "Defender Standards",
+ "tag": ["CIS M365 5.0 (2.1.13)"],
+ "helpText": "Sets the anti-spam connection filter policy option 'safe list' in Defender.",
+ "docsDescription": "Sets [Microsoft's built-in 'safe list'](https://learn.microsoft.com/en-us/powershell/module/exchange/set-hostedconnectionfilterpolicy?view=exchange-ps#-enablesafelist) in the anti-spam connection filter policy, rather than setting a custom safe/block list of IPs.",
+ "executiveText": "Enables Microsoft's pre-approved list of trusted email servers to improve email delivery from legitimate sources while maintaining spam protection. This reduces false positives where legitimate emails might be blocked while still protecting against spam and malicious emails.",
+ "addedComponent": [
+ {
+ "type": "switch",
+ "name": "standards.AntiSpamSafeList.EnableSafeList",
+ "label": "Enable Safe List"
+ }
+ ],
+ "label": "Set Anti-Spam Connection Filter Safe List",
+ "impact": "Medium Impact",
+ "impactColour": "info",
+ "addedDate": "2025-02-15",
+ "powershellEquivalent": "Set-HostedConnectionFilterPolicy \"Default\" -EnableSafeList $true",
+ "recommendedBy": []
+ },
{
"name": "standards.ShortenMeetings",
"cat": "Exchange Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Sets the shorten meetings settings on a tenant level. This will shorten meetings by the selected amount of minutes. Valid values are 0 to 29. Short meetings are under 60 minutes, long meetings are over 60 minutes.",
+ "executiveText": "Automatically shortens calendar meetings by a specified number of minutes to provide buffer time between meetings, reducing back-to-back scheduling stress and allowing employees time to transition between meetings. This improves work-life balance and meeting effectiveness.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.ShortenMeetings.ShortenEventScopeDefault",
@@ -1243,30 +1918,32 @@
"type": "number",
"name": "standards.ShortenMeetings.DefaultMinutesToReduceShortEventsBy",
"label": "Minutes to reduce short calendar events by (Default is 5)",
- "default": 5
+ "defaultValue": 5
},
{
"type": "number",
"name": "standards.ShortenMeetings.DefaultMinutesToReduceLongEventsBy",
"label": "Minutes to reduce long calendar events by (Default is 10)",
- "default": 10
+ "defaultValue": 10
}
],
"label": "Set shorten meetings state",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-05-27",
"powershellEquivalent": "Set-OrganizationConfig -ShortenEventScopeDefault -DefaultMinutesToReduceShortEventsBy -DefaultMinutesToReduceLongEventsBy",
"recommendedBy": []
},
{
"name": "standards.Bookings",
"cat": "Exchange Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Sets the state of Bookings on the tenant. Bookings is a scheduling tool that allows users to book appointments with others both internal and external.",
"docsDescription": "",
+ "executiveText": "Controls whether employees can use Microsoft Bookings to create online appointment scheduling pages for internal and external clients. This feature can improve customer service and streamline appointment management, but may need to be controlled for security or business process reasons.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.Bookings.state",
@@ -1285,27 +1962,69 @@
"label": "Set Bookings state",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-05-31",
"powershellEquivalent": "Set-OrganizationConfig -BookingsEnabled",
"recommendedBy": []
},
+ {
+ "name": "standards.EXODirectSend",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Sets the state of Direct Send in Exchange Online. Direct Send allows applications to send emails directly to Exchange Online mailboxes as the tenants domains, without requiring authentication.",
+ "docsDescription": "Controls whether applications can use Direct Send to send emails directly to Exchange Online mailboxes as the tenants domains, without requiring authentication. A detailed explanation from Microsoft can be found [here.](https://learn.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365)",
+ "executiveText": "Controls whether business applications and devices (like printers or scanners) can send emails through the company's email system without authentication. While this enables convenient features like scan-to-email, it may pose security risks and should be carefully managed.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "label": "Select value",
+ "name": "standards.EXODirectSend.state",
+ "options": [
+ {
+ "label": "Enabled",
+ "value": "enabled"
+ },
+ {
+ "label": "Disabled",
+ "value": "disabled"
+ }
+ ]
+ }
+ ],
+ "label": "Set Direct Send state",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-05-28",
+ "powershellEquivalent": "Set-OrganizationConfig -RejectDirectSend $true/$false",
+ "recommendedBy": []
+ },
{
"name": "standards.DisableOutlookAddins",
"cat": "Exchange Standards",
- "tag": ["mediumimpact", "CIS", "exo_outlookaddins"],
+ "tag": [
+ "CIS M365 5.0 (6.3.1)",
+ "exo_outlookaddins",
+ "NIST CSF 2.0 (PR.AA-05)",
+ "NIST CSF 2.0 (PR.PS-05)"
+ ],
"helpText": "Disables the ability for users to install add-ins in Outlook. This is to prevent users from installing malicious add-ins.",
"docsDescription": "Disables users from being able to install add-ins in Outlook. Only admins are able to approve add-ins for the users. This is done to reduce the threat surface for data exfiltration.",
+ "executiveText": "Prevents employees from installing third-party add-ins in Outlook without administrative approval, reducing security risks from potentially malicious extensions. This ensures only vetted and approved tools can access company email data while maintaining centralized control over email functionality.",
"addedComponent": [],
"label": "Disable users from installing add-ins in Outlook",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-02-05",
"powershellEquivalent": "Get-ManagementRoleAssignment | Remove-ManagementRoleAssignment",
"recommendedBy": ["CIS"]
},
{
"name": "standards.SafeSendersDisable",
"cat": "Exchange Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Loops through all users and removes the Safe Senders list. This is to prevent SPF bypass attacks, as the Safe Senders list is not checked by SPF.",
+ "executiveText": "Removes user-defined safe sender lists to prevent security bypasses where malicious emails could avoid spam filtering. This ensures all emails go through proper security screening, even if users have previously marked senders as 'safe', improving overall email security.",
"addedComponent": [],
"disabledFeatures": {
"report": true,
@@ -1315,15 +2034,17 @@
"label": "Remove Safe Senders to prevent SPF bypass",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2023-10-26",
"powershellEquivalent": "Set-MailboxJunkEmailConfiguration",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.DelegateSentItems",
"cat": "Exchange Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Sets emails sent as and on behalf of shared mailboxes to also be stored in the shared mailbox sent items folder",
"docsDescription": "This makes sure that e-mails sent from shared mailboxes or delegate mailboxes, end up in the mailbox of the shared/delegate mailbox instead of the sender, allowing you to keep replies in the same mailbox as the original e-mail.",
+ "executiveText": "Ensures emails sent from shared mailboxes (like info@company.com) are stored in the shared mailbox rather than the individual sender's mailbox. This maintains complete email threads in one location, improving collaboration and ensuring all team members can see the full conversation history.",
"addedComponent": [
{
"type": "switch",
@@ -1334,31 +2055,35 @@
"label": "Set mailbox Sent Items delegation (Sent items for shared mailboxes)",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Set-Mailbox",
"recommendedBy": []
},
{
"name": "standards.SendFromAlias",
"cat": "Exchange Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Enables the ability for users to send from their alias addresses.",
"docsDescription": "Allows users to change the 'from' address to any set in their Azure AD Profile.",
+ "executiveText": "Allows employees to send emails from their alternative email addresses (aliases) rather than just their primary address. This is useful for employees who manage multiple roles or departments, enabling them to send emails from the most appropriate address for the context.",
"addedComponent": [],
"label": "Allow users to send from their alias addresses",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2022-05-25",
"powershellEquivalent": "Set-Mailbox",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.UserSubmissions",
"cat": "Exchange Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Set the state of the spam submission button in Outlook",
"docsDescription": "Set the state of the built-in Report button in Outlook. This gives the users the ability to report emails as spam or phish.",
+ "executiveText": "Enables employees to easily report suspicious emails directly from Outlook, helping improve the organization's spam and phishing detection systems. This crowdsourced approach to security allows users to contribute to threat detection while providing valuable feedback to enhance email security filters.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select value",
"name": "standards.UserSubmissions.state",
@@ -1383,41 +2108,90 @@
"label": "Set the state of the built-in Report button in Outlook",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-06-28",
"powershellEquivalent": "New-ReportSubmissionPolicy or Set-ReportSubmissionPolicy and New-ReportSubmissionRule or Set-ReportSubmissionRule",
"recommendedBy": []
},
{
"name": "standards.DisableSharedMailbox",
"cat": "Exchange Standards",
- "tag": ["mediumimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (1.2.2)", "CISA (MS.AAD.10.1v1)", "NIST CSF 2.0 (PR.AA-01)"],
"helpText": "Blocks login for all accounts that are marked as a shared mailbox. This is Microsoft best practice to prevent direct logons to shared mailboxes.",
"docsDescription": "Shared mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for shared mailboxes. It would be a good idea to review the sign-in reports to establish potential impact.",
+ "executiveText": "Prevents direct login to shared mailbox accounts (like info@company.com), ensuring they can only be accessed through authorized users' accounts. This security measure eliminates the risk of shared passwords and unauthorized access while maintaining proper access control and audit trails.",
"addedComponent": [],
- "label": "Disable Shared Mailbox AAD accounts",
+ "label": "Disable Shared Mailbox Entra accounts",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2021-11-16",
"powershellEquivalent": "Get-Mailbox & Update-MgUser",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
+ },
+ {
+ "name": "standards.DisableResourceMailbox",
+ "cat": "Exchange Standards",
+ "tag": ["NIST CSF 2.0 (PR.AA-01)"],
+ "helpText": "Blocks login for all accounts that are marked as a resource mailbox and does not have a license assigned. Accounts that are synced from on-premises AD are excluded, as account state is managed in the on-premises AD.",
+ "docsDescription": "Resource mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for resource mailboxes. Accounts that are synced from on-premises AD are excluded, as account state is managed in the on-premises AD.",
+ "executiveText": "Prevents direct login to resource mailbox accounts (like conference rooms or equipment), ensuring they can only be managed through proper administrative channels. This security measure eliminates potential unauthorized access to resource scheduling systems while maintaining proper booking functionality.",
+ "addedComponent": [],
+ "label": "Disable Unlicensed Resource Mailbox Entra accounts",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-06-01",
+ "powershellEquivalent": "Get-Mailbox & Update-MgUser",
+ "recommendedBy": ["Microsoft", "CIPP"]
},
{
"name": "standards.EXODisableAutoForwarding",
"cat": "Exchange Standards",
- "tag": ["highimpact", "CIS", "mdo_autoforwardingmode", "mdo_blockmailforward"],
+ "tag": [
+ "CIS M365 5.0 (6.2.1)",
+ "mdo_autoforwardingmode",
+ "mdo_blockmailforward",
+ "CISA (MS.EXO.4.1v1)",
+ "NIST CSF 2.0 (PR.DS-02)"
+ ],
"helpText": "Disables the ability for users to automatically forward e-mails to external recipients.",
"docsDescription": "Disables the ability for users to automatically forward e-mails to external recipients. This is to prevent data exfiltration. Please check if there are any legitimate use cases for this feature before implementing, like forwarding invoices and such.",
+ "executiveText": "Prevents employees from automatically forwarding company emails to external addresses, protecting against data leaks and unauthorized information sharing. This security measure helps maintain control over sensitive business communications while preventing both accidental and intentional data exfiltration.",
"addedComponent": [],
"label": "Disable automatic forwarding to external recipients",
"impact": "High Impact",
"impactColour": "danger",
+ "addedDate": "2024-07-26",
"powershellEquivalent": "Set-HostedOutboundSpamFilterPolicy -AutoForwardingMode 'Off'",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
+ },
+ {
+ "name": "standards.RetentionPolicyTag",
+ "cat": "Exchange Standards",
+ "tag": ["CIS M365 5.0 (6.4.1)"],
+ "helpText": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
+ "docsDescription": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
+ "executiveText": "Automatically and permanently removes deleted emails after a specified number of days, helping manage storage costs and ensuring compliance with data retention policies. This prevents accumulation of unnecessary deleted items while maintaining a reasonable recovery window for accidentally deleted emails.",
+ "addedComponent": [
+ {
+ "type": "number",
+ "name": "standards.RetentionPolicyTag.AgeLimitForRetention",
+ "label": "Retention Days",
+ "required": true
+ }
+ ],
+ "label": "Retention Policy, permanently delete items in Deleted Items after X days",
+ "impact": "High Impact",
+ "impactColour": "danger",
+ "addedDate": "2025-02-02",
+ "powershellEquivalent": "Set-RetentionPolicyTag",
+ "recommendedBy": []
},
{
"name": "standards.QuarantineRequestAlert",
"cat": "Defender Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets a e-mail address to alert when a User requests to release a quarantined message.",
"docsDescription": "Sets a e-mail address to alert when a User requests to release a quarantined message. This is useful for monitoring and ensuring that the correct messages are released.",
+ "executiveText": "Notifies IT administrators when employees request to release emails that were quarantined for security reasons, enabling oversight of potentially dangerous messages. This helps ensure that legitimate emails are released while maintaining security controls over suspicious content.",
"addedComponent": [
{
"type": "textField",
@@ -1428,14 +2202,86 @@
"label": "Quarantine Release Request Alert",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-15",
+ "powershellEquivalent": "New-ProtectionAlert and Set-ProtectionAlert",
+ "recommendedBy": []
+ },
+ {
+ "name": "standards.SharePointMassDeletionAlert",
+ "cat": "Defender Standards",
+ "tag": [],
+ "helpText": "Sets a e-mail address to alert when a User deletes more than 20 SharePoint files within 60 minutes. NB: Requires a Office 365 E5 subscription, Office 365 E3 with Threat Intelligence or Office 365 EquivioAnalytics add-on.",
+ "docsDescription": "Sets a e-mail address to alert when a User deletes more than 20 SharePoint files within 60 minutes. This is useful for monitoring and ensuring that the correct SharePoint files are deleted. NB: Requires a Office 365 E5 subscription, Office 365 E3 with Threat Intelligence or Office 365 EquivioAnalytics add-on.",
+ "executiveText": "Alerts administrators when employees delete large numbers of SharePoint files in a short time period, helping detect potential data destruction attacks, ransomware, or accidental mass deletions. This early warning system enables rapid response to protect critical business documents and data.",
+ "addedComponent": [
+ {
+ "type": "number",
+ "name": "standards.SharePointMassDeletionAlert.Threshold",
+ "label": "Max files to delete within the time frame",
+ "defaultValue": 20
+ },
+ {
+ "type": "number",
+ "name": "standards.SharePointMassDeletionAlert.TimeWindow",
+ "label": "Time frame in minutes",
+ "defaultValue": 60
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": true,
+ "name": "standards.SharePointMassDeletionAlert.NotifyUser",
+ "label": "E-mail to receive the alert"
+ }
+ ],
+ "label": "SharePoint Mass Deletion Alert",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-04-07",
"powershellEquivalent": "New-ProtectionAlert and Set-ProtectionAlert",
"recommendedBy": []
},
+ {
+ "name": "standards.SafeLinksTemplatePolicy",
+ "label": "SafeLinks Policy Template",
+ "cat": "Templates",
+ "multiple": false,
+ "disabledFeatures": {
+ "report": false,
+ "warn": false,
+ "remediate": false
+ },
+ "impact": "Medium Impact",
+ "addedDate": "2025-04-29",
+ "helpText": "Deploy and manage SafeLinks policy templates to protect against malicious URLs in emails and Office documents.",
+ "executiveText": "Deploys standardized URL protection policies that automatically scan and verify links in emails and documents before users click them. This template-based approach ensures consistent protection against malicious websites and phishing attacks across the organization.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": false,
+ "name": "standards.SafeLinksTemplatePolicy.TemplateIds",
+ "label": "Select SafeLinks Policy Templates",
+ "api": {
+ "url": "/api/ListSafeLinksPolicyTemplates",
+ "labelField": "TemplateName",
+ "valueField": "GUID",
+ "queryKey": "ListSafeLinksPolicyTemplates"
+ }
+ }
+ ]
+ },
{
"name": "standards.SafeLinksPolicy",
"cat": "Defender Standards",
- "tag": ["lowimpact", "CIS", "mdo_safelinksforemail", "mdo_safelinksforOfficeApps"],
- "helpText": "This creates a safelink policy that automatically scans, tracks, and and enables safe links for Email, Office, and Teams for both external and internal senders",
+ "tag": [
+ "CIS M365 5.0 (2.1.1)",
+ "mdo_safelinksforemail",
+ "mdo_safelinksforOfficeApps",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "helpText": "This creates a Safe Links policy that automatically scans, tracks, and and enables safe links for Email, Office, and Teams for both external and internal senders",
"addedComponent": [
{
"type": "switch",
@@ -1451,11 +2297,20 @@
"type": "switch",
"label": "EnableOrganizationBranding",
"name": "standards.SafeLinksPolicy.EnableOrganizationBranding"
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "name": "standards.SafeLinksPolicy.DoNotRewriteUrls",
+ "label": "Do not rewrite the following URLs in email"
}
],
- "label": "Default SafeLinks Policy",
+ "label": "Default Safe Links Policy",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-03-25",
"powershellEquivalent": "Set-SafeLinksPolicy or New-SafeLinksPolicy",
"recommendedBy": ["CIS"]
},
@@ -1463,47 +2318,47 @@
"name": "standards.AntiPhishPolicy",
"cat": "Defender Standards",
"tag": [
- "lowimpact",
- "CIS",
"mdo_safeattachments",
"mdo_highconfidencespamaction",
"mdo_highconfidencephishaction",
"mdo_phisspamacation",
"mdo_spam_notifications_only_for_admins",
"mdo_antiphishingpolicies",
- "mdo_phishthresholdlevel"
+ "mdo_phishthresholdlevel",
+ "CIS M365 5.0 (2.1.7)",
+ "NIST CSF 2.0 (DE.CM-09)"
],
- "helpText": "This creates a Anti-Phishing policy that automatically enables Mailbox Intelligence and spoofing, optional switches for Mailtips.",
+ "helpText": "This creates a Anti-Phishing policy that automatically enables Mailbox Intelligence and spoofing, optional switches for Mail tips.",
"addedComponent": [
{
"type": "number",
"label": "Phishing email threshold. (Default 1)",
"name": "standards.AntiPhishPolicy.PhishThresholdLevel",
- "default": 1
+ "defaultValue": 1
},
{
"type": "switch",
"label": "Show first contact safety tip",
"name": "standards.AntiPhishPolicy.EnableFirstContactSafetyTips",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"label": "Show user impersonation safety tip",
"name": "standards.AntiPhishPolicy.EnableSimilarUsersSafetyTips",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"label": "Show domain impersonation safety tip",
"name": "standards.AntiPhishPolicy.EnableSimilarDomainsSafetyTips",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"label": "Show user impersonation unusual characters safety tip",
"name": "standards.AntiPhishPolicy.EnableUnusualCharactersSafetyTips",
- "default": true
+ "defaultValue": true
},
{
"type": "select",
@@ -1524,6 +2379,7 @@
{
"type": "select",
"multiple": false,
+ "creatable": true,
"label": "Quarantine policy for Spoof",
"name": "standards.AntiPhishPolicy.SpoofQuarantineTag",
"options": [
@@ -1564,6 +2420,7 @@
{
"type": "select",
"multiple": false,
+ "creatable": true,
"label": "Quarantine policy for user impersonation",
"name": "standards.AntiPhishPolicy.TargetedUserQuarantineTag",
"options": [
@@ -1604,6 +2461,7 @@
{
"type": "select",
"multiple": false,
+ "creatable": true,
"label": "Quarantine policy for domain impersonation",
"name": "standards.AntiPhishPolicy.TargetedDomainQuarantineTag",
"options": [
@@ -1644,6 +2502,7 @@
{
"type": "select",
"multiple": false,
+ "creatable": true,
"label": "Apply quarantine policy",
"name": "standards.AntiPhishPolicy.MailboxIntelligenceQuarantineTag",
"options": [
@@ -1665,26 +2524,27 @@
"label": "Default Anti-Phishing Policy",
"impact": "Low Impact",
"impactColour": "info",
- "powershellEquivalent": "Set-AntiphishPolicy or New-AntiphishPolicy",
+ "addedDate": "2024-03-25",
+ "powershellEquivalent": "Set-AntiPhishPolicy or New-AntiPhishPolicy",
"recommendedBy": ["CIS"]
},
{
"name": "standards.SafeAttachmentPolicy",
"cat": "Defender Standards",
"tag": [
- "lowimpact",
- "CIS",
+ "CIS M365 5.0 (2.1.4)",
"mdo_safedocuments",
"mdo_commonattachmentsfilter",
- "mdo_safeattachmentpolicy"
+ "mdo_safeattachmentpolicy",
+ "NIST CSF 2.0 (DE.CM-09)"
],
"helpText": "This creates a Safe Attachment policy",
"addedComponent": [
{
"type": "select",
"multiple": false,
- "label": "Action",
- "name": "standards.SafeAttachmentPolicy.Action",
+ "label": "Safe Attachment Action",
+ "name": "standards.SafeAttachmentPolicy.SafeAttachmentAction",
"options": [
{
"label": "Allow",
@@ -1703,6 +2563,7 @@
{
"type": "select",
"multiple": false,
+ "creatable": true,
"label": "QuarantineTag",
"name": "standards.SafeAttachmentPolicy.QuarantineTag",
"options": [
@@ -1729,39 +2590,98 @@
"type": "textField",
"name": "standards.SafeAttachmentPolicy.RedirectAddress",
"label": "Redirect Address",
- "required": false
+ "required": false,
+ "condition": {
+ "field": "standards.SafeAttachmentPolicy.Redirect",
+ "compareType": "is",
+ "compareValue": true
+ }
}
],
"label": "Default Safe Attachment Policy",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-03-25",
"powershellEquivalent": "Set-SafeAttachmentPolicy or New-SafeAttachmentPolicy",
"recommendedBy": ["CIS"]
},
{
"name": "standards.AtpPolicyForO365",
"cat": "Defender Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (2.1.5)", "NIST CSF 2.0 (DE.CM-09)"],
"helpText": "This creates a Atp policy that enables Defender for Office 365 for SharePoint, OneDrive and Microsoft Teams.",
"addedComponent": [
{
"type": "switch",
"label": "Allow people to click through Protected View even if Safe Documents identified the file as malicious",
"name": "standards.AtpPolicyForO365.AllowSafeDocsOpen",
- "default": false,
+ "defaultValue": false,
"required": false
}
],
"label": "Default Atp Policy For O365",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-03-25",
"powershellEquivalent": "Set-AtpPolicyForO365",
"recommendedBy": ["CIS"]
},
+ {
+ "name": "standards.PhishingSimulations",
+ "cat": "Defender Standards",
+ "tag": [],
+ "helpText": "This creates a phishing simulation policy that enables phishing simulations for the entire tenant.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": true,
+ "label": "Phishing Simulation Domains",
+ "name": "standards.PhishingSimulations.Domains"
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": true,
+ "label": "Phishing Simulation Sender IP Ranges",
+ "name": "standards.PhishingSimulations.SenderIpRanges"
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "label": "Phishing Simulation Urls",
+ "name": "standards.PhishingSimulations.PhishingSimUrls"
+ },
+ {
+ "type": "switch",
+ "label": "Remove extra urls",
+ "name": "standards.PhishingSimulations.RemoveExtraUrls",
+ "defaultValue": false,
+ "required": false
+ }
+ ],
+ "label": "Phishing Simulation Configuration",
+ "impact": "Medium Impact",
+ "impactColour": "info",
+ "addedDate": "2025-03-27",
+ "powershellEquivalent": "New-TenantAllowBlockListItems, New-PhishSimOverridePolicy and New-ExoPhishSimOverrideRule",
+ "recommendedBy": []
+ },
{
"name": "standards.MalwareFilterPolicy",
"cat": "Defender Standards",
- "tag": ["lowimpact", "CIS", "mdo_zapspam", "mdo_zapphish", "mdo_zapmalware"],
+ "tag": [
+ "CIS M365 5.0 (2.1.2)",
+ "CIS M365 5.0 (2.1.3)",
+ "mdo_zapspam",
+ "mdo_zapphish",
+ "mdo_zapmalware",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
"helpText": "This creates a Malware filter policy that enables the default File filter and Zero-hour auto purge for malware.",
"addedComponent": [
{
@@ -1789,6 +2709,7 @@
{
"type": "select",
"multiple": false,
+ "creatable": true,
"label": "QuarantineTag",
"name": "standards.MalwareFilterPolicy.QuarantineTag",
"options": [
@@ -1816,7 +2737,12 @@
"type": "textField",
"name": "standards.MalwareFilterPolicy.InternalSenderAdminAddress",
"required": false,
- "label": "Internal Sender Admin Address"
+ "label": "Internal Sender Admin Address",
+ "condition": {
+ "field": "standards.MalwareFilterPolicy.EnableInternalSenderAdminNotifications",
+ "compareType": "is",
+ "compareValue": true
+ }
},
{
"type": "switch",
@@ -1828,30 +2754,68 @@
"type": "textField",
"name": "standards.MalwareFilterPolicy.ExternalSenderAdminAddress",
"required": false,
- "label": "External Sender Admin Address"
+ "label": "External Sender Admin Address",
+ "condition": {
+ "field": "standards.MalwareFilterPolicy.EnableExternalSenderAdminNotifications",
+ "compareType": "is",
+ "compareValue": true
+ }
}
],
"label": "Default Malware Filter Policy",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-03-25",
"powershellEquivalent": "Set-MalwareFilterPolicy or New-MalwareFilterPolicy",
"recommendedBy": ["CIS"]
},
+ {
+ "name": "standards.PhishSimSpoofIntelligence",
+ "cat": "Defender Standards",
+ "tag": [],
+ "helpText": "This adds allowed domains to the Spoof Intelligence Allow/Block List.",
+ "addedComponent": [
+ {
+ "type": "switch",
+ "label": "Remove extra domains from the allow list",
+ "name": "standards.PhishSimSpoofIntelligence.RemoveExtraDomains",
+ "defaultValue": false,
+ "required": false
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "label": "Allowed Domains",
+ "name": "standards.PhishSimSpoofIntelligence.AllowedDomains"
+ }
+ ],
+ "label": "Add allowed domains to Spoof Intelligence",
+ "impact": "Medium Impact",
+ "impactColour": "info",
+ "addedDate": "2025-03-28",
+ "powershellEquivalent": "New-TenantAllowBlockListSpoofItems",
+ "recommendedBy": []
+ },
{
"name": "standards.SpamFilterPolicy",
"cat": "Defender Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "This standard creates a Spam filter policy similar to the default strict policy.",
+ "docsDescription": "This standard creates a Spam filter policy similar to the default strict policy, the following settings are configured to on by default: IncreaseScoreWithNumericIps, IncreaseScoreWithRedirectToOtherPort, MarkAsSpamEmptyMessages, MarkAsSpamJavaScriptInHtml, MarkAsSpamSpfRecordHardFail, MarkAsSpamFromAddressAuthFail, MarkAsSpamNdrBackscatter, MarkAsSpamBulkMail, InlineSafetyTipsEnabled, PhishZapEnabled, SpamZapEnabled",
"addedComponent": [
{
"type": "number",
"label": "Bulk email threshold (Default 7)",
"name": "standards.SpamFilterPolicy.BulkThreshold",
- "default": 7
+ "defaultValue": 7
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"label": "Spam Action",
"name": "standards.SpamFilterPolicy.SpamAction",
"options": [
@@ -1867,7 +2831,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": true,
"label": "Spam Quarantine Tag",
"name": "standards.SpamFilterPolicy.SpamQuarantineTag",
"options": [
@@ -1887,7 +2853,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"label": "High Confidence Spam Action",
"name": "standards.SpamFilterPolicy.HighConfidenceSpamAction",
"options": [
@@ -1903,7 +2871,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": true,
"label": "High Confidence Spam Quarantine Tag",
"name": "standards.SpamFilterPolicy.HighConfidenceSpamQuarantineTag",
"options": [
@@ -1923,7 +2893,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"label": "Bulk Spam Action",
"name": "standards.SpamFilterPolicy.BulkSpamAction",
"options": [
@@ -1939,7 +2911,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": true,
"label": "Bulk Quarantine Tag",
"name": "standards.SpamFilterPolicy.BulkQuarantineTag",
"options": [
@@ -1959,7 +2933,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"label": "Phish Spam Action",
"name": "standards.SpamFilterPolicy.PhishSpamAction",
"options": [
@@ -1975,7 +2951,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": true,
"label": "Phish Quarantine Tag",
"name": "standards.SpamFilterPolicy.PhishQuarantineTag",
"options": [
@@ -1995,7 +2973,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": true,
"label": "High Confidence Phish Quarantine Tag",
"name": "standards.SpamFilterPolicy.HighConfidencePhishQuarantineTag",
"options": [
@@ -2012,37 +2992,222 @@
"value": "DefaultFullAccessWithNotificationPolicy"
}
]
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.IncreaseScoreWithImageLinks",
+ "label": "Increase score if message contains image links to remote websites",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.IncreaseScoreWithBizOrInfoUrls",
+ "label": "Increase score if message contains links to .biz or .info domains",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.MarkAsSpamFramesInHtml",
+ "label": "Mark as spam if message contains HTML or iframe tags",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.MarkAsSpamObjectTagsInHtml",
+ "label": "Mark as spam if message contains HTML object tags",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.MarkAsSpamEmbedTagsInHtml",
+ "label": "Mark as spam if message contains HTML embed tags",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.MarkAsSpamFormTagsInHtml",
+ "label": "Mark as spam if message contains HTML form tags",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.MarkAsSpamWebBugsInHtml",
+ "label": "Mark as spam if message contains web bugs (also known as web beacons)",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.MarkAsSpamSensitiveWordList",
+ "label": "Mark as spam if message contains words from the sensitive words list",
+ "defaultValue": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.EnableLanguageBlockList",
+ "label": "Enable language block list",
+ "defaultValue": false
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "name": "standards.SpamFilterPolicy.LanguageBlockList",
+ "label": "Languages to block (uppercase ISO 639-1 two-letter)",
+ "condition": {
+ "field": "standards.SpamFilterPolicy.EnableLanguageBlockList",
+ "compareType": "is",
+ "compareValue": true
+ }
+ },
+ {
+ "type": "switch",
+ "name": "standards.SpamFilterPolicy.EnableRegionBlockList",
+ "label": "Enable region block list",
+ "defaultValue": false
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "name": "standards.SpamFilterPolicy.RegionBlockList",
+ "label": "Regions to block (uppercase ISO 3166-1 two-letter)",
+ "condition": {
+ "field": "standards.SpamFilterPolicy.EnableRegionBlockList",
+ "compareType": "is",
+ "compareValue": true
+ }
+ },
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "name": "standards.SpamFilterPolicy.AllowedSenderDomains",
+ "label": "Allowed sender domains"
}
],
"label": "Default Spam Filter Policy",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-15",
"powershellEquivalent": "New-HostedContentFilterPolicy or Set-HostedContentFilterPolicy",
"recommendedBy": []
},
+ {
+ "name": "standards.QuarantineTemplate",
+ "cat": "Defender Standards",
+ "disabledFeatures": {
+ "report": false,
+ "warn": false,
+ "remediate": false
+ },
+ "tag": [],
+ "helpText": "This standard creates a Custom Quarantine Policies that can be used in Anti-Spam and all MDO365 policies. Quarantine Policies can be used to specify recipients permissions, enable end-user spam notifications, and specify the release action preference",
+ "executiveText": "Creates standardized quarantine policies that define how employees can interact with quarantined emails, including permissions to release, delete, or preview suspicious messages. This ensures consistent security handling across the organization while providing appropriate user access to manage quarantined content.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": true,
+ "name": "displayName",
+ "label": "Quarantine Display Name",
+ "required": true
+ },
+ {
+ "type": "switch",
+ "label": "Enable end-user spam notifications",
+ "name": "ESNEnabled",
+ "defaultValue": true,
+ "required": false
+ },
+ {
+ "type": "select",
+ "multiple": false,
+ "label": "Select release action preference",
+ "name": "ReleaseAction",
+ "options": [
+ {
+ "label": "Allow recipients to request a message to be released from quarantine",
+ "value": "PermissionToRequestRelease"
+ },
+ {
+ "label": "Allow recipients to release a message from quarantine",
+ "value": "PermissionToRelease"
+ }
+ ]
+ },
+ {
+ "type": "switch",
+ "label": "Include Messages From Blocked Sender Address",
+ "name": "IncludeMessagesFromBlockedSenderAddress",
+ "defaultValue": false,
+ "required": false
+ },
+ {
+ "type": "switch",
+ "label": "Allow recipients to delete message",
+ "name": "PermissionToDelete",
+ "defaultValue": false,
+ "required": false
+ },
+ {
+ "type": "switch",
+ "label": "Allow recipients to preview message",
+ "name": "PermissionToPreview",
+ "defaultValue": false,
+ "required": false
+ },
+ {
+ "type": "switch",
+ "label": "Allow recipients to block Sender Address",
+ "name": "PermissionToBlockSender",
+ "defaultValue": false,
+ "required": false
+ },
+ {
+ "type": "switch",
+ "label": "Allow recipients to whitelist Sender Address",
+ "name": "PermissionToAllowSender",
+ "defaultValue": false,
+ "required": false
+ }
+ ],
+ "label": "Custom Quarantine Policy",
+ "multiple": true,
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-05-16",
+ "powershellEquivalent": "Set-QuarantinePolicy or New-QuarantinePolicy",
+ "recommendedBy": []
+ },
{
"name": "standards.intuneDeviceRetirementDays",
"cat": "Intune Standards",
- "tag": ["lowimpact"],
- "helpText": "A value between 0 and 270 is supported. A value of 0 disables retirement, retired devices are removed from Intune after the specified number of days.",
+ "tag": [],
+ "helpText": "A value between 31 and 365 is supported. retired devices are removed from Intune after the specified number of days.",
+ "executiveText": "Automatically removes inactive devices from management after a specified period, helping maintain a clean device inventory and reducing security risks from abandoned or lost devices. This policy ensures that only actively used corporate devices remain in the management system.",
"addedComponent": [
{
"type": "number",
"name": "standards.intuneDeviceRetirementDays.days",
- "label": "Maximum days (0 equals disabled)"
+ "label": "Maximum days"
}
],
"label": "Set inactive device retirement days",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-05-19",
"powershellEquivalent": "Graph API",
- "recommendedBy": []
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.intuneBrandingProfile",
"cat": "Intune Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the branding profile for the Intune Company Portal app. This is a tenant wide setting and overrules any settings set on the app level.",
+ "executiveText": "Customizes the Intune Company Portal app with company branding, contact information, and support details, providing employees with a consistent corporate experience when managing their devices. This improves user experience and ensures employees know how to get IT support when needed.",
"addedComponent": [
{
"type": "textField",
@@ -2107,18 +3272,22 @@
"label": "Set Intune Company Portal branding profile",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-06-20",
"powershellEquivalent": "Graph API",
"recommendedBy": []
},
{
"name": "standards.IntuneComplianceSettings",
"cat": "Intune Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the mark devices with no compliance policy assigned as compliance/non compliant and Compliance status validity period.",
+ "executiveText": "Configures how the system treats devices that don't have specific compliance policies and sets how often devices must check in to maintain their compliance status. This ensures proper security oversight of all corporate devices and maintains current compliance information.",
"addedComponent": [
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"name": "standards.IntuneComplianceSettings.secureByDefault",
"label": "Mark devices with no compliance policy as",
"options": [
@@ -2141,47 +3310,170 @@
"label": "Set Intune Compliance Settings",
"impact": "Low Impact",
"impactColour": "info",
- "powershellEquivalent": "",
+ "addedDate": "2024-11-12",
+ "powershellEquivalent": "Graph API",
+ "recommendedBy": []
+ },
+ {
+ "name": "standards.MDMScope",
+ "cat": "Intune Standards",
+ "tag": [],
+ "helpText": "Configures the MDM user scope. This also sets the terms of use, discovery and compliance URL to default URLs.",
+ "docsDescription": "Configures the MDM user scope. This also sets the terms of use URL, discovery URL and compliance URL to default values.",
+ "executiveText": "Defines which users can enroll their devices in mobile device management, controlling access to corporate resources and applications. This setting determines the scope of device management coverage and ensures appropriate users have access to necessary business tools.",
+ "addedComponent": [
+ {
+ "name": "appliesTo",
+ "label": "MDM User Scope?",
+ "type": "radio",
+ "options": [
+ {
+ "label": "All",
+ "value": "all"
+ },
+ {
+ "label": "None",
+ "value": "none"
+ },
+ {
+ "label": "Custom Group",
+ "value": "selected"
+ }
+ ]
+ },
+ {
+ "type": "textField",
+ "name": "standards.MDMScope.customGroup",
+ "label": "Custom Group Name",
+ "required": false
+ }
+ ],
+ "label": "Configure MDM user scope",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-02-18",
+ "powershellEquivalent": "Graph API",
+ "recommendedBy": []
+ },
+ {
+ "name": "standards.DefaultPlatformRestrictions",
+ "cat": "Intune Standards",
+ "tag": ["CISA (MS.AAD.19.1v1)"],
+ "helpText": "Sets the default platform restrictions for enrolling devices into Intune. Note: Do not block personally owned if platform is blocked.",
+ "executiveText": "Controls which types of devices (iOS, Android, Windows, macOS) and ownership models (corporate vs. personal) can be enrolled in the company's device management system. This helps maintain security standards while supporting necessary business device types and usage scenarios.",
+ "addedComponent": [
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.platformAndroidForWorkBlocked",
+ "label": "Block platform Android Enterprise (work profile)",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.personalAndroidForWorkBlocked",
+ "label": "Block personally owned Android Enterprise (work profile)",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.platformAndroidBlocked",
+ "label": "Block platform Android",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.personalAndroidBlocked",
+ "label": "Block personally owned Android",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.platformiOSBlocked",
+ "label": "Block platform iOS",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.personaliOSBlocked",
+ "label": "Block personally owned iOS",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.platformMacOSBlocked",
+ "label": "Block platform macOS",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.personalMacOSBlocked",
+ "label": "Block personally owned macOS",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.platformWindowsBlocked",
+ "label": "Block platform Windows",
+ "default": false
+ },
+ {
+ "type": "switch",
+ "name": "standards.DefaultPlatformRestrictions.personalWindowsBlocked",
+ "label": "Block personally owned Windows",
+ "default": false
+ }
+ ],
+ "label": "Device enrollment restrictions",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-04-01",
+ "powershellEquivalent": "Graph API",
"recommendedBy": []
},
{
"name": "standards.intuneDeviceReg",
"cat": "Intune Standards",
- "tag": ["mediumimpact"],
- "helpText": "sets the maximum number of devices that can be registered by a user. A value of 0 disables device registration by users",
+ "tag": ["CISA (MS.AAD.17.1v1)"],
+ "helpText": "Sets the maximum number of devices that can be registered by a user. A value of 0 disables device registration by users",
+ "executiveText": "Limits how many devices each employee can register for corporate access, preventing excessive device proliferation while accommodating legitimate business needs. This helps maintain security oversight and prevents potential abuse of device registration privileges.",
"addedComponent": [
{
"type": "number",
"name": "standards.intuneDeviceReg.max",
- "label": "Maximum devices (Enter 2147483647 for unlimited.)"
+ "label": "Maximum devices (Enter 2147483647 for unlimited.)",
+ "required": true
}
],
"label": "Set Maximum Number of Devices per user",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2023-03-27",
"powershellEquivalent": "Update-MgBetaPolicyDeviceRegistrationPolicy",
"recommendedBy": []
},
{
"name": "standards.intuneRequireMFA",
"cat": "Intune Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Requires MFA for all users to register devices with Intune. This is useful when not using Conditional Access.",
- "label": "Require Multifactor Authentication to register or join devices with Microsoft Entra",
+ "executiveText": "Requires employees to use multi-factor authentication when registering devices for corporate access, adding an extra security layer to prevent unauthorized device enrollment. This helps ensure only legitimate users can connect their devices to company systems.",
+ "label": "Require Multi-factor Authentication to register or join devices with Microsoft Entra",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2023-10-23",
"powershellEquivalent": "Update-MgBetaPolicyDeviceRegistrationPolicy",
"recommendedBy": []
},
{
"name": "standards.DeletedUserRentention",
"cat": "SharePoint Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the retention period for deleted users OneDrive to the specified period of time. The default is 30 days.",
"docsDescription": "When a OneDrive user gets deleted, the personal SharePoint site is saved for selected amount of time that data can be retrieved from it.",
+ "executiveText": "Preserves departed employees' OneDrive files for a specified period, allowing time to recover important business documents before permanent deletion. This helps prevent data loss while managing storage costs and maintaining compliance with data retention policies.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"name": "standards.DeletedUserRentention.Days",
"label": "Retention time (Default 30 days)",
@@ -2240,14 +3532,43 @@
"label": "Set deleted user retention time in OneDrive",
"impact": "Low Impact",
"impactColour": "info",
- "powershellEquivalent": "Update-MgBetaAdminSharepointSetting",
+ "addedDate": "2022-06-15",
+ "powershellEquivalent": "Update-MgBetaAdminSharePointSetting",
"recommendedBy": []
},
+ {
+ "name": "standards.SPFileRequests",
+ "cat": "SharePoint Standards",
+ "tag": [],
+ "helpText": "Enables or disables File Requests for SharePoint and OneDrive, allowing users to create secure upload-only links. Optionally sets the maximum number of days for the link to remain active before expiring.",
+ "docsDescription": "File Requests allow users to create secure upload-only share links where uploads are hidden from other people using the link. This creates a secure and private way for people to upload files to a folder. This feature is not enabled by default on new tenants and requires PowerShell configuration. This standard enables or disables this feature and optionally configures link expiration settings for both SharePoint and OneDrive.",
+ "executiveText": "Enables secure file upload functionality that allows external users to submit files directly to company folders without seeing other submissions or folder contents. This provides a professional and secure way to collect documents from clients, vendors, and partners while maintaining data privacy and security.",
+ "addedComponent": [
+ {
+ "type": "switch",
+ "name": "standards.SPFileRequests.state",
+ "label": "Enable File Requests"
+ },
+ {
+ "type": "number",
+ "name": "standards.SPFileRequests.expirationDays",
+ "label": "Link Expiration 1-730 Days (Optional)",
+ "required": false
+ }
+ ],
+ "label": "Set SharePoint and OneDrive File Requests",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-07-30",
+ "powershellEquivalent": "Set-SPOTenant -CoreRequestFilesLinkEnabled $true -OneDriveRequestFilesLinkEnabled $true -CoreRequestFilesLinkExpirationInDays 30 -OneDriveRequestFilesLinkExpirationInDays 30",
+ "recommendedBy": ["CIPP"]
+ },
{
"name": "standards.TenantDefaultTimezone",
"cat": "SharePoint Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Sets the default timezone for the tenant. This will be used for all new users and sites.",
+ "executiveText": "Standardizes the timezone setting across all SharePoint sites and new user accounts, ensuring consistent scheduling and time-based operations throughout the organization. This improves collaboration efficiency and reduces confusion in global or multi-timezone organizations.",
"addedComponent": [
{
"type": "TimezoneSelect",
@@ -2258,62 +3579,72 @@
"label": "Set Default Timezone for Tenant",
"impact": "Low Impact",
"impactColour": "info",
- "powershellEquivalent": "Update-MgBetaAdminSharepointSetting",
+ "addedDate": "2024-04-20",
+ "powershellEquivalent": "Update-MgBetaAdminSharePointSetting",
"recommendedBy": []
},
{
"name": "standards.SPAzureB2B",
"cat": "SharePoint Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (7.2.2)"],
"helpText": "Ensure SharePoint and OneDrive integration with Azure AD B2B is enabled",
+ "executiveText": "Enables secure collaboration with external partners through SharePoint and OneDrive by integrating with Azure B2B guest access. This allows controlled sharing with external organizations while maintaining security oversight and proper access management.",
"addedComponent": [],
"label": "Enable SharePoint and OneDrive integration with Azure AD B2B",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-09",
"powershellEquivalent": "Set-SPOTenant -EnableAzureADB2BIntegration $true",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS"]
},
{
"name": "standards.SPDisallowInfectedFiles",
"cat": "SharePoint Standards",
- "tag": ["lowimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (7.3.1)", "CISA (MS.SPO.3.1v1)", "NIST CSF 2.0 (DE.CM-09)"],
"helpText": "Ensure Office 365 SharePoint infected files are disallowed for download",
+ "executiveText": "Prevents employees from downloading files that have been identified as containing malware or viruses from SharePoint and OneDrive. This security measure protects against malware distribution through file sharing while maintaining access to clean, safe documents.",
"addedComponent": [],
"label": "Disallow downloading infected files from SharePoint",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-09",
"powershellEquivalent": "Set-SPOTenant -DisallowInfectedFileDownload $true",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.SPDisableLegacyWorkflows",
"cat": "SharePoint Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Disables the creation of new SharePoint 2010 and 2013 classic workflows and removes the 'Return to classic SharePoint' link on modern SharePoint list and library pages.",
+ "executiveText": "Disables outdated SharePoint workflow features and classic interface options, encouraging use of modern, more secure and efficient collaboration tools. This helps maintain security standards while guiding users toward current, supported functionality.",
"addedComponent": [],
"label": "Disable Legacy Workflows",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-15",
"powershellEquivalent": "Set-SPOTenant -DisableWorkflow2010 $true -DisableWorkflow2013 $true -DisableBackToClassic $true",
"recommendedBy": []
},
{
"name": "standards.SPDirectSharing",
"cat": "SharePoint Standards",
- "tag": ["mediumimpact", "CIS"],
- "helpText": "Ensure default link sharing is set to Direct in SharePoint and OneDrive",
+ "tag": [],
+ "helpText": "This standard has been deprecated in favor of the Default Sharing Link standard. ",
+ "executiveText": "Configures SharePoint and OneDrive to share files directly with specific people rather than creating anonymous links, improving security by ensuring only intended recipients can access shared documents. This reduces the risk of accidental data exposure through link sharing.",
"addedComponent": [],
"label": "Default sharing to Direct users",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-09",
"powershellEquivalent": "Set-SPOTenant -DefaultSharingLinkType Direct",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.SPExternalUserExpiration",
"cat": "SharePoint Standards",
- "tag": ["mediumimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (7.2.9)", "CISA (MS.SPO.1.5v1)"],
"helpText": "Ensure guest access to a site or OneDrive will expire automatically",
+ "executiveText": "Automatically expires external user access to SharePoint sites and OneDrive after a specified period, reducing security risks from forgotten or unnecessary guest accounts. This ensures external access is regularly reviewed and maintained only when actively needed.",
"addedComponent": [
{
"type": "number",
@@ -2324,36 +3655,75 @@
"label": "Set guest access to expire automatically",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-09",
"powershellEquivalent": "Set-SPOTenant -ExternalUserExpireInDays 30 -ExternalUserExpirationRequired $True",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS"]
},
{
"name": "standards.SPEmailAttestation",
"cat": "SharePoint Standards",
- "tag": ["mediumimpact", "CIS"],
- "helpText": "Ensure reauthentication with verification code is restricted",
+ "tag": ["CIS M365 5.0 (7.2.10)", "CISA (MS.SPO.1.6v1)"],
+ "helpText": "Ensure re-authentication with verification code is restricted",
+ "executiveText": "Requires external users to periodically re-verify their identity through email verification codes when accessing SharePoint resources, adding an extra security layer for external collaboration. This helps ensure continued legitimacy of external access over time.",
"addedComponent": [
{
"type": "number",
"name": "standards.SPEmailAttestation.Days",
- "label": "Require reauth every X Days (Default 15)"
+ "label": "Require re-authentication every X Days (Default 15)"
}
],
- "label": "Require reauthentication with verification code",
+ "label": "Require re-authentication with verification code",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-09",
"powershellEquivalent": "Set-SPOTenant -EmailAttestationRequired $true -EmailAttestationReAuthDays 15",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS", "CIPP"]
+ },
+ {
+ "name": "standards.DefaultSharingLink",
+ "cat": "SharePoint Standards",
+ "tag": ["CIS M365 5.0 (7.2.7)", "CIS M365 5.0 (7.2.11)", "CISA (MS.SPO.1.4v1)"],
+ "helpText": "Configure the SharePoint default sharing link type and permission. This setting controls both the type of sharing link created by default and the permission level assigned to those links.",
+ "docsDescription": "Sets the default sharing link type (Direct or Internal) and permission (View) in SharePoint and OneDrive. Direct sharing means links only work for specific people, while Internal sharing means links work for anyone in the organization. Setting the view permission as the default ensures that users must deliberately select the edit permission when sharing a link, reducing the risk of unintentionally granting edit privileges.",
+ "executiveText": "Configures SharePoint default sharing links to implement the principle of least privilege for document sharing. This security measure reduces the risk of accidental data modification while maintaining collaboration functionality, requiring users to explicitly select Edit permissions when necessary. The sharing type setting controls whether links are restricted to specific recipients or available to the entire organization. This reduces the risk of accidental data exposure through link sharing.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "required": true,
+ "label": "Default Sharing Link Type",
+ "name": "standards.DefaultSharingLink.SharingLinkType",
+ "options": [
+ {
+ "label": "Direct - Only the people the user specifies",
+ "value": "Direct"
+ },
+ {
+ "label": "Internal - Only people in your organization",
+ "value": "Internal"
+ }
+ ]
+ }
+ ],
+ "label": "Set Default Sharing Link Settings",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-13",
+ "powershellEquivalent": "Set-SPOTenant -DefaultSharingLinkType [Direct|Internal] -DefaultLinkPermission View",
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.DisableAddShortcutsToOneDrive",
"cat": "SharePoint Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "If disabled, the button Add shortcut to OneDrive will be removed and users in the tenant will no longer be able to add new shortcuts to their OneDrive. Existing shortcuts will remain functional",
+ "executiveText": "Controls whether employees can create shortcuts to SharePoint libraries in their OneDrive, managing how users organize and access shared content. This setting helps maintain organized file structures and can prevent confusion from excessive shortcuts while preserving existing workflows.",
"addedComponent": [
{
"type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "Add Shortcuts To OneDrive button state",
"name": "standards.DisableAddShortcutsToOneDrive.state",
"options": [
@@ -2371,18 +3741,21 @@
"label": "Set Add Shortcuts To OneDrive button state",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2023-07-25",
"powershellEquivalent": "Set-SPOTenant -DisableAddShortcutsToOneDrive $true or $false",
"recommendedBy": []
},
{
"name": "standards.SPSyncButtonState",
"cat": "SharePoint Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "If disabled, users in the tenant will no longer be able to use the Sync button to sync SharePoint content on all sites. However, existing synced content will remain functional on the user's computer.",
+ "executiveText": "Controls whether employees can synchronize SharePoint files to their local devices, balancing productivity benefits with data security concerns. This setting helps manage data distribution while maintaining access to cloud-based collaboration when sync is disabled.",
"addedComponent": [
{
"type": "autoComplete",
"multiple": false,
+ "creatable": false,
"label": "SharePoint Sync Button state",
"name": "standards.SPSyncButtonState.state",
"options": [
@@ -2400,30 +3773,40 @@
"label": "Set SharePoint sync button state",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-26",
"powershellEquivalent": "Set-SPOTenant -HideSyncButtonOnTeamSite $true or $false",
"recommendedBy": []
},
{
"name": "standards.DisableSharePointLegacyAuth",
"cat": "SharePoint Standards",
- "tag": ["mediumimpact", "CIS", "spo_legacy_auth"],
+ "tag": [
+ "CIS M365 5.0 (6.5.1)",
+ "CIS M365 5.0 (7.2.1)",
+ "spo_legacy_auth",
+ "CISA (MS.AAD.3.1v1)",
+ "NIST CSF 2.0 (PR.IR-01)"
+ ],
"helpText": "Disables the ability to authenticate with SharePoint using legacy authentication methods. Any applications that use legacy authentication will need to be updated to use modern authentication.",
"docsDescription": "Disables the ability for users and applications to access SharePoint via legacy basic authentication. This will likely not have any user impact, but will block systems/applications depending on basic auth or the SharePointOnlineCredentials class.",
+ "executiveText": "Disables outdated authentication methods for SharePoint access, forcing applications and users to use modern, more secure authentication protocols. This significantly improves security by eliminating vulnerable authentication pathways while requiring updates to older applications.",
"addedComponent": [],
"label": "Disable legacy basic authentication for SharePoint",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-02-05",
"powershellEquivalent": "Set-SPOTenant -LegacyAuthProtocolsEnabled $false",
- "recommendedBy": ["CIS"]
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.sharingCapability",
"cat": "SharePoint Standards",
- "tag": ["highimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (7.2.3)", "CISA (MS.AAD.14.1v1)", "CISA (MS.SPO.1.1v1)"],
"helpText": "Sets the default sharing level for OneDrive and SharePoint. This is a tenant wide setting and overrules any settings set on the site level",
+ "executiveText": "Defines the organization's default policy for sharing files and folders in SharePoint and OneDrive, balancing collaboration needs with security requirements. This fundamental setting determines whether employees can share with external users, anonymous links, or only internal colleagues.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"label": "Select Sharing Level",
"name": "standards.sharingCapability.Level",
@@ -2450,40 +3833,46 @@
"label": "Set Sharing Level for OneDrive and SharePoint",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgBetaAdminSharepointSetting",
- "recommendedBy": ["CIS"]
+ "addedDate": "2022-06-15",
+ "powershellEquivalent": "Update-MgBetaAdminSharePointSetting",
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.DisableReshare",
"cat": "SharePoint Standards",
- "tag": ["highimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (7.2.5)", "CISA (MS.AAD.14.2v1)", "CISA (MS.SPO.1.2v1)"],
"helpText": "Disables the ability for external users to share files they don't own. Sharing links can only be made for People with existing access",
"docsDescription": "Disables the ability for external users to share files they don't own. Sharing links can only be made for People with existing access. This is a tenant wide setting and overrules any settings set on the site level",
+ "executiveText": "Prevents external users from sharing company documents with additional people, maintaining control over document distribution and preventing unauthorized access expansion. This security measure ensures that external sharing remains within intended boundaries set by internal employees.",
"addedComponent": [],
- "label": "Disable Resharing by External Users",
+ "label": "Disable Re-sharing by External Users",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgBetaAdminSharepointSetting",
- "recommendedBy": ["CIS"]
+ "addedDate": "2022-06-15",
+ "powershellEquivalent": "Update-MgBetaAdminSharePointSetting",
+ "recommendedBy": ["CIS", "CIPP"]
},
{
"name": "standards.DisableUserSiteCreate",
"cat": "SharePoint Standards",
- "tag": ["highimpact"],
+ "tag": [],
"helpText": "Disables users from creating new SharePoint sites",
"docsDescription": "Disables standard users from creating SharePoint sites, also disables the ability to fully create teams",
+ "executiveText": "Restricts the creation of new SharePoint sites to authorized administrators, preventing uncontrolled proliferation of collaboration spaces and ensuring proper governance. This maintains organized information architecture while requiring approval for new collaborative environments.",
"addedComponent": [],
"label": "Disable site creation by standard users",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgAdminSharepointSetting",
+ "addedDate": "2022-06-15",
+ "powershellEquivalent": "Update-MgAdminSharePointSetting",
"recommendedBy": []
},
{
"name": "standards.ExcludedfileExt",
"cat": "SharePoint Standards",
- "tag": ["highimpact"],
+ "tag": [],
"helpText": "Sets the file extensions that are excluded from syncing with OneDrive. These files will be blocked from upload. '*.' is automatically added to the extension and can be omitted.",
+ "executiveText": "Blocks specific file types from being uploaded or synchronized to OneDrive, helping prevent security risks from potentially dangerous file formats. This security measure protects against malware distribution while allowing legitimate business file types to be shared safely.",
"addedComponent": [
{
"type": "textField",
@@ -2494,41 +3883,67 @@
"label": "Exclude File Extensions from Syncing",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgAdminSharepointSetting",
+ "addedDate": "2022-06-15",
+ "powershellEquivalent": "Update-MgAdminSharePointSetting",
"recommendedBy": []
},
{
"name": "standards.disableMacSync",
"cat": "SharePoint Standards",
- "tag": ["highimpact"],
+ "tag": [],
"helpText": "Disables the ability for Mac devices to sync with OneDrive.",
+ "executiveText": "Prevents Mac computers from synchronizing files with OneDrive, typically implemented for security or compliance reasons in Windows-centric environments. This restriction helps maintain standardized device management while potentially limiting collaboration for Mac users.",
"addedComponent": [],
"label": "Do not allow Mac devices to sync using OneDrive",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgAdminSharepointSetting",
+ "addedDate": "2022-06-15",
+ "powershellEquivalent": "Update-MgAdminSharePointSetting",
"recommendedBy": []
},
{
"name": "standards.unmanagedSync",
"cat": "SharePoint Standards",
- "tag": ["highimpact"],
- "helpText": "The unmanaged Sync standard has been temporarily disabled and does nothing.",
- "addedComponent": [],
- "label": "Only allow users to sync OneDrive from AAD joined devices",
+ "tag": ["CIS M365 5.0 (7.2.3)", "CISA (MS.SPO.2.1v1)", "NIST CSF 2.0 (PR.AA-05)"],
+ "helpText": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect.",
+ "docsDescription": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect. 0 = Allow Access, 1 = Allow limited, web-only access, 2 = Block access. All information about this can be found in Microsofts documentation [here.](https://learn.microsoft.com/en-us/sharepoint/control-access-from-unmanaged-devices)",
+ "executiveText": "Restricts access to company files from personal or unmanaged devices, ensuring corporate data can only be accessed from properly secured and monitored devices. This critical security control prevents data leaks while allowing controlled access through web browsers when necessary.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "name": "standards.unmanagedSync.state",
+ "label": "State",
+ "options": [
+ {
+ "label": "Allow limited, web-only access",
+ "value": "1"
+ },
+ {
+ "label": "Block access",
+ "value": "2"
+ }
+ ],
+ "required": false
+ }
+ ],
+ "label": "Restrict access to SharePoint and OneDrive from unmanaged devices",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgAdminSharepointSetting",
- "recommendedBy": []
+ "addedDate": "2025-06-13",
+ "powershellEquivalent": "Set-SPOTenant -ConditionalAccessPolicy AllowFullAccess | AllowLimitedAccess | BlockAccess",
+ "recommendedBy": ["CIS"]
},
{
"name": "standards.sharingDomainRestriction",
"cat": "SharePoint Standards",
- "tag": ["highimpact", "CIS"],
+ "tag": ["CIS M365 5.0 (7.2.6)", "CISA (MS.AAD.14.3v1)", "CISA (MS.SPO.1.3v1)"],
"helpText": "Restricts sharing to only users with the specified domain. This is useful for organizations that only want to share with their own domain.",
+ "executiveText": "Controls which external domains employees can share files with, enabling secure collaboration with trusted partners while blocking sharing with unauthorized organizations. This targeted approach maintains necessary business relationships while preventing data exposure to unknown entities.",
"addedComponent": [
{
- "type": "select",
+ "type": "autoComplete",
"multiple": false,
"name": "standards.sharingDomainRestriction.Mode",
"label": "Limit external sharing by domains",
@@ -2557,18 +3972,29 @@
"label": "Restrict sharing to a specific domain",
"impact": "High Impact",
"impactColour": "danger",
- "powershellEquivalent": "Update-MgAdminSharepointSetting",
+ "addedDate": "2024-06-20",
+ "powershellEquivalent": "Update-MgAdminSharePointSetting",
"recommendedBy": []
},
{
"name": "standards.TeamsGlobalMeetingPolicy",
"cat": "Teams Standards",
- "tag": ["lowimpact"],
+ "tag": [
+ "CIS M365 5.0 (8.5.1)",
+ "CIS M365 5.0 (8.5.2)",
+ "CIS M365 5.0 (8.5.3)",
+ "CIS M365 5.0 (8.5.4)",
+ "CIS M365 5.0 (8.5.5)",
+ "CIS M365 5.0 (8.5.6)"
+ ],
"helpText": "Defines the CIS recommended global meeting policy for Teams. This includes AllowAnonymousUsersToJoinMeeting, AllowAnonymousUsersToStartMeeting, AutoAdmittedUsers, AllowPSTNUsersToBypassLobby, MeetingChatEnabledType, DesignatedPresenterRoleMode, AllowExternalParticipantGiveRequestControl",
+ "executiveText": "Establishes security-focused default settings for Teams meetings, controlling who can join meetings, present content, and participate in chats. These policies balance collaboration needs with security requirements, ensuring meetings remain productive while protecting against unauthorized access and disruption.",
"addedComponent": [
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"name": "standards.TeamsGlobalMeetingPolicy.DesignatedPresenterRoleMode",
"label": "Default value of the `Who can present?`",
"options": [
@@ -2597,7 +4023,9 @@
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"name": "standards.TeamsGlobalMeetingPolicy.MeetingChatEnabledType",
"label": "Meeting chat policy",
"options": [
@@ -2614,20 +4042,26 @@
"value": "Disabled"
}
]
+ },
+ {
+ "type": "switch",
+ "name": "standards.TeamsGlobalMeetingPolicy.AllowExternalParticipantGiveRequestControl",
+ "label": "External participants can give or request control"
}
],
"label": "Define Global Meeting Policy for Teams",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-11-12",
"powershellEquivalent": "Set-CsTeamsMeetingPolicy -AllowAnonymousUsersToJoinMeeting $false -AllowAnonymousUsersToStartMeeting $false -AutoAdmittedUsers EveryoneInCompanyExcludingGuests -AllowPSTNUsersToBypassLobby $false -MeetingChatEnabledType EnabledExceptAnonymous -DesignatedPresenterRoleMode $DesignatedPresenterRoleMode -AllowExternalParticipantGiveRequestControl $false",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS"]
},
{
"name": "standards.TeamsEmailIntegration",
"cat": "Teams Standards",
- "tag": ["lowimpact"],
"helpText": "Should users be allowed to send emails directly to a channel email addresses?",
"docsDescription": "Teams channel email addresses are an optional feature that allows users to email the Teams channel directly.",
+ "executiveText": "Controls whether Teams channels can receive emails directly, enabling integration between email and team collaboration. This feature can improve workflow efficiency by allowing external communications to flow into team discussions, though it may need management for security or organizational reasons.",
"addedComponent": [
{
"type": "switch",
@@ -2638,14 +4072,71 @@
"label": "Disallow emails to be sent to channel email addresses",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-30",
"powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowEmailIntoChannel $false",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS"],
+ "tag": ["CIS M365 5.0 (8.1.2)"]
+ },
+ {
+ "name": "standards.TeamsGuestAccess",
+ "cat": "Teams Standards",
+ "tag": [],
+ "helpText": "Allow guest users access to teams.",
+ "docsDescription": "Allow guest users access to teams. Guest users are users who are not part of your organization but have been invited to collaborate with your organization in Teams. This setting allows you to control whether guest users can access Teams.",
+ "executiveText": "Determines whether external partners, vendors, and collaborators can be invited to participate in Teams conversations and meetings. This fundamental setting enables external collaboration while requiring careful management to balance openness with security and information protection.",
+ "addedComponent": [
+ {
+ "type": "switch",
+ "name": "standards.TeamsGuestAccess.AllowGuestUser",
+ "label": "Allow guest users"
+ }
+ ],
+ "label": "Allow guest users in Teams",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-03",
+ "powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowGuestUser $true",
+ "recommendedBy": []
+ },
+ {
+ "name": "standards.TeamsMeetingVerification",
+ "cat": "Teams Standards",
+ "tag": [],
+ "helpText": "Configures CAPTCHA verification for external users joining Teams meetings. This helps prevent unauthorized AI notetakers and bots from joining meetings.",
+ "docsDescription": "Configures CAPTCHA verification for external users joining Teams meetings. This security feature requires external participants to complete a CAPTCHA challenge before joining, which helps prevent unauthorized AI notetakers, bots, and other automated systems from accessing meetings.",
+ "executiveText": "Requires external meeting participants to complete verification challenges before joining Teams meetings, preventing automated bots and unauthorized AI systems from accessing confidential discussions. This security measure protects against meeting infiltration while maintaining legitimate external collaboration.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "label": "CAPTCHA Verification Setting",
+ "name": "standards.TeamsMeetingVerification.CaptchaVerificationForMeetingJoin",
+ "options": [
+ {
+ "label": "Not Required",
+ "value": "NotRequired"
+ },
+ {
+ "label": "Anonymous Users and Untrusted Organizations",
+ "value": "AnonymousUsersAndUntrustedOrganizations"
+ }
+ ]
+ }
+ ],
+ "label": "Teams Meeting Verification (CAPTCHA)",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-06-14",
+ "powershellEquivalent": "Set-CsTeamsMeetingPolicy -CaptchaVerificationForMeetingJoin",
+ "recommendedBy": ["CIPP"]
},
{
"name": "standards.TeamsExternalFileSharing",
"cat": "Teams Standards",
- "tag": ["lowimpact"],
+ "tag": ["CIS M365 5.0 (8.4.1)"],
"helpText": "Ensure external file sharing in Teams is enabled for only approved cloud storage services.",
+ "executiveText": "Controls which external cloud storage services (like Google Drive, Dropbox, Box) employees can access through Teams, ensuring file sharing occurs only through approved and secure platforms. This helps maintain data governance while supporting necessary business integrations.",
"addedComponent": [
{
"type": "switch",
@@ -2676,18 +4167,23 @@
"label": "Define approved cloud storage services for external file sharing in Teams",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-07-28",
"powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowGoogleDrive $false -AllowShareFile $false -AllowBox $false -AllowDropBox $false -AllowEgnyte $false",
- "recommendedBy": ["CIS 3.0"]
+ "recommendedBy": ["CIS"]
},
{
"name": "standards.TeamsEnrollUser",
"cat": "Teams Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"helpText": "Controls whether users with this policy can set the voice profile capture and enrollment through the Recognition tab in their Teams client settings.",
"docsDescription": "Controls whether users with this policy can set the voice profile capture and enrollment through the Recognition tab in their Teams client settings.",
+ "executiveText": "Determines whether employees can enroll their voice and face profiles for recognition features in Teams, enabling personalized experiences like voice identification. This setting balances convenience features with privacy considerations and organizational policies regarding biometric data collection.",
"addedComponent": [
{
"type": "autoComplete",
+ "required": true,
+ "multiple": false,
+ "creatable": false,
"name": "standards.TeamsEnrollUser.EnrollUserOverride",
"label": "Voice and Face Enrollment",
"options": [
@@ -2705,26 +4201,23 @@
"label": "Default voice and face enrollment",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2024-11-12",
"powershellEquivalent": "Set-CsTeamsMeetingPolicy -Identity Global -EnrollUserOverride $false",
"recommendedBy": []
},
{
"name": "standards.TeamsExternalAccessPolicy",
"cat": "Teams Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Sets the properties of the Global external access policy.",
"docsDescription": "Sets the properties of the Global external access policy. External access policies determine whether or not your users can: 1) communicate with users who have Session Initiation Protocol (SIP) accounts with a federated organization; 2) communicate with users who are using custom applications built with Azure Communication Services; 3) access Skype for Business Server over the Internet, without having to log on to your internal network; 4) communicate with users who have SIP accounts with a public instant messaging (IM) provider such as Skype; and, 5) communicate with people who are using Teams with an account that's not managed by an organization.",
+ "executiveText": "Defines the organization's policy for communicating with external users through Teams, including other organizations, Skype users, and unmanaged accounts. This fundamental setting determines the scope of external collaboration while maintaining security boundaries for business communications.",
"addedComponent": [
{
"type": "switch",
"name": "standards.TeamsExternalAccessPolicy.EnableFederationAccess",
"label": "Allow communication from trusted organizations"
},
- {
- "type": "switch",
- "name": "standards.TeamsExternalAccessPolicy.EnablePublicCloudAccess",
- "label": "Allow user to communicate with Skype users"
- },
{
"type": "switch",
"name": "standards.TeamsExternalAccessPolicy.EnableTeamsConsumerAccess",
@@ -2734,29 +4227,28 @@
"label": "External Access Settings for Microsoft Teams",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-30",
"powershellEquivalent": "Set-CsExternalAccessPolicy",
"recommendedBy": []
},
{
"name": "standards.TeamsFederationConfiguration",
"cat": "Teams Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Sets the properties of the Global federation configuration.",
"docsDescription": "Sets the properties of the Global federation configuration. Federation configuration settings determine whether or not your users can communicate with users who have SIP accounts with a federated organization.",
+ "executiveText": "Configures how the organization federates with external organizations for Teams communication, controlling whether employees can communicate with specific external domains or all external organizations. This setting enables secure inter-organizational collaboration while maintaining control over external communications.",
"addedComponent": [
{
"type": "switch",
"name": "standards.TeamsFederationConfiguration.AllowTeamsConsumer",
"label": "Allow users to communicate with other organizations"
},
- {
- "type": "switch",
- "name": "standards.TeamsFederationConfiguration.AllowPublicUsers",
- "label": "Allow users to communicate with Skype Users"
- },
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"name": "standards.TeamsFederationConfiguration.DomainControl",
"label": "Communication Mode",
"options": [
@@ -2788,43 +4280,69 @@
"label": "Federation Configuration for Microsoft Teams",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2024-07-31",
"powershellEquivalent": "Set-CsTenantFederationConfiguration",
"recommendedBy": []
},
+ {
+ "name": "standards.TeamsMeetingRecordingExpiration",
+ "cat": "Teams Standards",
+ "tag": [],
+ "helpText": "Sets the default number of days after which Teams meeting recordings automatically expire. Valid values are -1 (Never Expire) or between 1 and 99999. The default value is 120 days.",
+ "docsDescription": "Allows administrators to configure a default expiration period (in days) for Teams meeting recordings. Recordings older than this period will be automatically moved to the recycle bin. This setting helps manage storage consumption and enforce data retention policies.",
+ "executiveText": "Automatically removes old Teams meeting recordings after a specified period to manage storage costs and comply with data retention policies. This helps organizations balance the need to preserve important meeting content with storage efficiency and regulatory compliance requirements.",
+ "addedComponent": [
+ {
+ "type": "number",
+ "name": "standards.TeamsMeetingRecordingExpiration.ExpirationDays",
+ "label": "Recording Expiration Days (e.g., 365)",
+ "required": true
+ }
+ ],
+ "label": "Set Teams Meeting Recording Expiration",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-04-17",
+ "powershellEquivalent": "Set-CsTeamsMeetingPolicy -Identity Global -MeetingRecordingExpirationDays ",
+ "recommendedBy": []
+ },
{
"name": "standards.TeamsMessagingPolicy",
"cat": "Teams Standards",
- "tag": ["mediumimpact"],
+ "tag": [],
"helpText": "Sets the properties of the Global messaging policy.",
"docsDescription": "Sets the properties of the Global messaging policy. Messaging policies control which chat and channel messaging features are available to users in Teams.",
+ "executiveText": "Defines what messaging capabilities employees have in Teams, including the ability to edit or delete messages, create custom emojis, and report inappropriate content. These policies help maintain professional communication standards while enabling necessary collaboration features.",
"addedComponent": [
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.AllowOwnerDeleteMessage",
"label": "Allow Owner to Delete Messages",
- "default": false
+ "defaultValue": false
},
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.AllowUserDeleteMessage",
"label": "Allow User to Delete Messages",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.AllowUserEditMessage",
"label": "Allow User to Edit Messages",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.AllowUserDeleteChat",
"label": "Allow User to Delete Chats",
- "default": true
+ "defaultValue": true
},
{
"type": "autoComplete",
+ "required": true,
"multiple": false,
+ "creatable": false,
"name": "standards.TeamsMessagingPolicy.ReadReceiptsEnabledType",
"label": "Read Receipts Enabled Type",
"options": [
@@ -2846,111 +4364,115 @@
"type": "switch",
"name": "standards.TeamsMessagingPolicy.CreateCustomEmojis",
"label": "Allow Creating Custom Emojis",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.DeleteCustomEmojis",
"label": "Allow Deleting Custom Emojis",
- "default": false
+ "defaultValue": false
},
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.AllowSecurityEndUserReporting",
"label": "Allow reporting message as security concern",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.TeamsMessagingPolicy.AllowCommunicationComplianceEndUserReporting",
"label": "Allow reporting message as inappropriate content",
- "default": true
+ "defaultValue": true
}
],
"label": "Global Messaging Policy for Microsoft Teams",
"impact": "Medium Impact",
"impactColour": "warning",
+ "addedDate": "2025-01-10",
"powershellEquivalent": "Set-CsTeamsMessagingPolicy",
"recommendedBy": []
},
{
"name": "standards.AutopilotStatusPage",
"cat": "Device Management Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"disabledFeatures": {
- "report": true,
- "warn": true,
+ "report": false,
+ "warn": false,
"remediate": false
},
"helpText": "Deploy the Autopilot Status Page, which shows progress during device setup through Autopilot.",
"docsDescription": "This standard allows configuration of the Autopilot Status Page, providing users with a visual representation of the progress during device setup. It includes options like timeout, logging, and retry settings.",
+ "executiveText": "Provides employees with a visual progress indicator during automated device setup, improving the user experience when receiving new computers. This reduces IT support calls and helps ensure successful device deployment by guiding users through the setup process.",
"addedComponent": [
{
"type": "number",
"name": "standards.AutopilotStatusPage.TimeOutInMinutes",
"label": "Timeout in minutes",
- "default": 60
+ "defaultValue": 60
},
{
"type": "textField",
"name": "standards.AutopilotStatusPage.ErrorMessage",
- "label": "Custom Error Message"
+ "label": "Custom Error Message",
+ "required": false
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.ShowProgress",
"label": "Show progress to users",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.EnableLog",
"label": "Turn on log collection",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.OBEEOnly",
"label": "Show status page only with OOBE setup",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.BlockDevice",
"label": "Block device usage during setup",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.AllowRetry",
"label": "Allow retry",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.AllowReset",
"label": "Allow reset",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotStatusPage.AllowFail",
"label": "Allow users to use device if setup fails",
- "default": true
+ "defaultValue": true
}
],
"label": "Enable Autopilot Status Page",
"impact": "Low Impact",
+ "addedDate": "2023-12-30",
"impactColour": "info",
"recommendedBy": []
},
{
"name": "standards.AutopilotProfile",
"cat": "Device Management Standards",
- "tag": ["lowimpact"],
+ "tag": [],
"disabledFeatures": {
- "report": true,
- "warn": true,
+ "report": false,
+ "warn": false,
"remediate": false
},
"helpText": "Assign the appropriate Autopilot profile to streamline device deployment.",
@@ -2969,16 +4491,19 @@
{
"type": "textField",
"name": "standards.AutopilotProfile.DeviceNameTemplate",
- "label": "Unique Device Name Template"
+ "label": "Unique Device Name Template",
+ "required": false
},
{
"type": "autoComplete",
"multiple": false,
+ "creatable": false,
+ "required": false,
"name": "standards.AutopilotProfile.Languages",
"label": "Languages",
"api": {
"url": "/languageList.json",
- "labelField": "language",
+ "labelField": "languageTag",
"valueField": "tag"
}
},
@@ -2986,60 +4511,61 @@
"type": "switch",
"name": "standards.AutopilotProfile.CollectHash",
"label": "Convert all targeted devices to Autopilot",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.AssignToAllDevices",
"label": "Assign to all devices",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.SelfDeployingMode",
"label": "Enable Self-deploying Mode",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.HideTerms",
"label": "Hide Terms and Conditions",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.HidePrivacy",
"label": "Hide Privacy Settings",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.HideChangeAccount",
"label": "Hide Change Account Options",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.NotLocalAdmin",
"label": "Setup user as a standard user (not local admin)",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.AllowWhiteGlove",
"label": "Allow White Glove OOBE",
- "default": true
+ "defaultValue": true
},
{
"type": "switch",
"name": "standards.AutopilotProfile.AutoKeyboard",
"label": "Automatically configure keyboard",
- "default": true
+ "defaultValue": true
}
],
"label": "Enable Autopilot Profile",
"impact": "Low Impact",
"impactColour": "info",
+ "addedDate": "2023-12-30",
"recommendedBy": []
},
{
@@ -3048,16 +4574,19 @@
"label": "Intune Template",
"multiple": true,
"disabledFeatures": {
- "report": true,
- "warn": true,
+ "report": false,
+ "warn": false,
"remediate": false
},
- "impact": "High",
+ "impact": "High Impact",
+ "addedDate": "2023-12-30",
"helpText": "Deploy and manage Intune templates across devices.",
+ "executiveText": "Deploys standardized device management configurations across all corporate devices, ensuring consistent security policies, application settings, and compliance requirements. This template-based approach streamlines device management while maintaining uniform security standards across the organization.",
"addedComponent": [
{
"type": "autoComplete",
"multiple": false,
+ "creatable": false,
"name": "TemplateList",
"label": "Select Intune Template",
"api": {
@@ -3072,11 +4601,26 @@
"label": "Who should this template be assigned to?",
"type": "radio",
"options": [
- { "label": "Do not assign", "value": "On" },
- { "label": "Assign to all users", "value": "allLicensedUsers" },
- { "label": "Assign to all devices", "value": "AllDevices" },
- { "label": "Assign to all users and devices", "value": "AllDevicesAndUsers" },
- { "label": "Assign to Custom Group", "value": "customGroup" }
+ {
+ "label": "Do not assign",
+ "value": "On"
+ },
+ {
+ "label": "Assign to all users",
+ "value": "allLicensedUsers"
+ },
+ {
+ "label": "Assign to all devices",
+ "value": "AllDevices"
+ },
+ {
+ "label": "Assign to all users and devices",
+ "value": "AllDevicesAndUsers"
+ },
+ {
+ "label": "Assign to Custom Group",
+ "value": "customGroup"
+ }
]
},
{
@@ -3084,6 +4628,13 @@
"required": false,
"name": "customGroup",
"label": "Enter the custom group name if you selected 'Assign to Custom Group'. Wildcards are allowed."
+ },
+ {
+ "name": "excludeGroup",
+ "label": "Exclude Groups",
+ "type": "textField",
+ "required": false,
+ "helpText": "Enter the group name to exclude from the assignment. Wildcards are allowed."
}
]
},
@@ -3096,8 +4647,10 @@
"warn": true,
"remediate": false
},
- "impact": "Medium",
+ "impact": "Medium Impact",
+ "addedDate": "2023-12-30",
"helpText": "Deploy transport rules to manage email flow.",
+ "executiveText": "Deploys standardized email flow rules that automatically manage how emails are processed, filtered, and routed within the organization. These templates ensure consistent email security policies, compliance requirements, and business rules are applied across all email communications.",
"addedComponent": [
{
"type": "autoComplete",
@@ -3122,8 +4675,10 @@
"warn": true,
"remediate": false
},
- "impact": "High",
+ "impact": "High Impact",
+ "addedDate": "2023-12-30",
"helpText": "Manage conditional access policies for better security.",
+ "executiveText": "Deploys standardized conditional access policies that automatically enforce security requirements based on user location, device compliance, and risk factors. These templates ensure consistent security controls across the organization while enabling secure access to business resources.",
"addedComponent": [
{
"type": "autoComplete",
@@ -3142,24 +4697,44 @@
"label": "What state should we deploy this template in?",
"type": "radio",
"options": [
- { "value": "donotchange", "label": "Do not change state" },
- { "value": "Enabled", "label": "Set to enabled" },
- { "value": "Disabled", "label": "Set to disabled" },
- { "value": "enabledForReportingButNotEnforced", "label": "Set to report only" }
+ {
+ "value": "donotchange",
+ "label": "Do not change state"
+ },
+ {
+ "value": "Enabled",
+ "label": "Set to enabled"
+ },
+ {
+ "value": "Disabled",
+ "label": "Set to disabled"
+ },
+ {
+ "value": "enabledForReportingButNotEnforced",
+ "label": "Set to report only"
+ }
]
+ },
+ {
+ "type": "switch",
+ "name": "DisableSD",
+ "label": "Disable Security Defaults when deploying policy"
}
]
},
{
"name": "standards.ExchangeConnectorTemplate",
"label": "Exchange Connector Template",
+ "cat": "Templates",
"disabledFeatures": {
"report": true,
"warn": true,
"remediate": false
},
- "impact": "Medium",
+ "impact": "Medium Impact",
+ "addedDate": "2023-12-30",
"helpText": "Deploy and manage Exchange connectors.",
+ "executiveText": "Configures standardized Exchange connectors that control how email flows between your organization and external systems. These templates ensure secure and reliable email delivery while maintaining proper routing and security policies for business communications.",
"addedComponent": [
{
"type": "autoComplete",
@@ -3184,8 +4759,10 @@
"warn": true,
"remediate": false
},
- "impact": "Medium",
+ "impact": "Medium Impact",
+ "addedDate": "2023-12-30",
"helpText": "Deploy and manage group templates.",
+ "executiveText": "Creates standardized groups with predefined settings, permissions, and membership rules. These templates ensure consistent group configurations across the organization, streamlining collaboration and access management while maintaining security standards.",
"addedComponent": [
{
"type": "autoComplete",
@@ -3194,10 +4771,47 @@
"api": {
"url": "/api/ListGroupTemplates",
"labelField": "Displayname",
+ "altLabelField": "displayName",
"valueField": "GUID",
"queryKey": "ListGroupTemplates"
}
}
]
+ },
+ {
+ "name": "standards.MailboxRecipientLimits",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Sets the maximum number of recipients that can be specified in the To, Cc, and Bcc fields of a message for all mailboxes in the tenant.",
+ "docsDescription": "This standard configures the recipient limits for all mailboxes in the tenant. The recipient limit determines the maximum number of recipients that can be specified in the To, Cc, and Bcc fields of a message. This helps prevent spam and manage email flow.",
+ "executiveText": "Controls how many recipients employees can include in a single email, helping prevent spam distribution and managing email server load. This security measure protects against both accidental mass mailings and potential abuse while ensuring legitimate business communications can still reach necessary recipients.",
+ "addedComponent": [
+ {
+ "type": "number",
+ "name": "standards.MailboxRecipientLimits.RecipientLimit",
+ "label": "Recipient Limit",
+ "defaultValue": 500
+ }
+ ],
+ "label": "Set Mailbox Recipient Limits",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2025-05-28",
+ "powershellEquivalent": "Set-Mailbox -RecipientLimits",
+ "recommendedBy": ["CIPP"]
+ },
+ {
+ "name": "standards.DisableExchangeOnlinePowerShell",
+ "cat": "Exchange Standards",
+ "tag": ["CIS M365 5.0 (6.1.1)", "Security", "NIST CSF 2.0 (PR.AA-05)"],
+ "helpText": "Disables Exchange Online PowerShell access for non-admin users by setting the RemotePowerShellEnabled property to false for each user. This helps prevent attackers from using PowerShell to run malicious commands, access file systems, registry, and distribute ransomware throughout networks. Users with admin roles are automatically excluded.",
+ "docsDescription": "Disables Exchange Online PowerShell access for non-admin users by setting the RemotePowerShellEnabled property to false for each user. This security measure follows a least privileged access approach, preventing potential attackers from using PowerShell to execute malicious commands, access sensitive systems, or distribute malware. Users with management roles containing 'Admin' are automatically excluded to ensure administrators retain PowerShell access to perform necessary management tasks.",
+ "executiveText": "Restricts PowerShell access to Exchange Online for regular employees while maintaining access for administrators, significantly reducing security risks from compromised accounts. This prevents attackers from using PowerShell to execute malicious commands or distribute ransomware while preserving necessary administrative capabilities.",
+ "label": "Disable Exchange Online PowerShell for non-admin users",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2025-06-19",
+ "powershellEquivalent": "Set-User -Identity $user -RemotePowerShellEnabled $false",
+ "recommendedBy": ["CIS", "CIPP"]
}
]
diff --git a/src/data/timezoneList.json b/src/data/timezoneList.json
index d259bc80e65d..d2501fca5bca 100644
--- a/src/data/timezoneList.json
+++ b/src/data/timezoneList.json
@@ -1,335 +1,446 @@
[
{
- "timezone": "(UTC-12:00) International Date Line West"
+ "timezone": "(UTC-12:00) International Date Line West",
+ "standardTime": "Dateline Standard Time"
},
{
- "timezone": "(UTC-11:00) Coordinated Universal Time-11"
+ "timezone": "(UTC-11:00) Coordinated Universal Time-11",
+ "standardTime": "UTC-11"
},
{
- "timezone": "(UTC-10:00) Hawaii"
+ "timezone": "(UTC-10:00) Hawaii",
+ "standardTime": "Hawaiian Standard Time"
},
{
- "timezone": "(UTC-09:00) Alaska"
+ "timezone": "(UTC-09:00) Alaska",
+ "standardTime": "Alaskan Standard Time"
},
{
- "timezone": "(UTC-08:00) Baja California"
+ "timezone": "(UTC-08:00) Baja California",
+ "standardTime": "Pacific Standard Time (Mexico)"
},
{
- "timezone": "(UTC-08:00) Pacific Time (US and Canada)"
+ "timezone": "(UTC-08:00) Pacific Time (US and Canada)",
+ "standardTime": "Pacific Standard Time"
},
{
- "timezone": "(UTC-07:00) Arizona"
+ "timezone": "(UTC-07:00) Arizona",
+ "standardTime": "US Mountain Standard Time"
},
{
- "timezone": "(UTC-07:00) Chihuahua, La Paz, Mazatlan"
+ "timezone": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
+ "standardTime": "Mountain Standard Time (Mexico)"
},
{
- "timezone": "(UTC-07:00) Mountain Time (US and Canada)"
+ "timezone": "(UTC-07:00) Mountain Time (US and Canada)",
+ "standardTime": "Mountain Standard Time"
},
{
- "timezone": "(UTC-06:00) Central America"
+ "timezone": "(UTC-06:00) Central America",
+ "standardTime": "Central America Standard Time"
},
{
- "timezone": "(UTC-06:00) Central Time (US and Canada)"
+ "timezone": "(UTC-06:00) Central Time (US and Canada)",
+ "standardTime": "Central Standard Time"
},
{
- "timezone": "(UTC-06:00) Guadalajara, Mexico City, Monterrey"
+ "timezone": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
+ "standardTime": "Central Standard Time (Mexico)"
},
{
- "timezone": "(UTC-06:00) Saskatchewan"
+ "timezone": "(UTC-06:00) Saskatchewan",
+ "standardTime": "Canada Central Standard Time"
},
{
- "timezone": "(UTC-05:00) Bogota, Lima, Quito"
+ "timezone": "(UTC-05:00) Bogota, Lima, Quito",
+ "standardTime": "SA Pacific Standard Time"
},
{
- "timezone": "(UTC-05:00) Eastern Time (US and Canada)"
+ "timezone": "(UTC-05:00) Eastern Time (US and Canada)",
+ "standardTime": "Eastern Standard Time"
},
{
- "timezone": "(UTC-05:00) Indiana (East)"
+ "timezone": "(UTC-05:00) Indiana (East)",
+ "standardTime": "US Eastern Standard Time"
},
{
- "timezone": "(UTC-04:30) Caracas"
+ "timezone": "(UTC-04:30) Caracas",
+ "standardTime": "Venezuela Standard Time"
},
{
- "timezone": "(UTC-04:00) Asuncion"
+ "timezone": "(UTC-04:00) Asuncion",
+ "standardTime": "Paraguay Standard Time"
},
{
- "timezone": "(UTC-04:00) Atlantic Time (Canada)"
+ "timezone": "(UTC-04:00) Atlantic Time (Canada)",
+ "standardTime": "Atlantic Standard Time"
},
{
- "timezone": "(UTC-04:00) Cuiaba"
+ "timezone": "(UTC-04:00) Cuiaba",
+ "standardTime": "Central Brazilian Standard Time"
},
{
- "timezone": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan"
+ "timezone": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
+ "standardTime": "SA Western Standard Time"
},
{
- "timezone": "(UTC-04:00) Santiago"
+ "timezone": "(UTC-04:00) Santiago",
+ "standardTime": "Pacific SA Standard Time"
},
{
- "timezone": "(UTC-03:30) Newfoundland"
+ "timezone": "(UTC-03:30) Newfoundland",
+ "standardTime": "Newfoundland Standard Time"
},
{
- "timezone": "(UTC-03:00) Brasilia"
+ "timezone": "(UTC-03:00) Brasilia",
+ "standardTime": "E. South America Standard Time"
},
{
- "timezone": "(UTC-03:00) Buenos Aires"
+ "timezone": "(UTC-03:00) Buenos Aires",
+ "standardTime": "Argentina Standard Time"
},
{
- "timezone": "(UTC-03:00) Cayenne, Fortaleza"
+ "timezone": "(UTC-03:00) Cayenne, Fortaleza",
+ "standardTime": "SA Eastern Standard Time"
},
{
- "timezone": "(UTC-03:00) Greenland"
+ "timezone": "(UTC-03:00) Greenland",
+ "standardTime": "Greenland Standard Time"
},
{
- "timezone": "(UTC-03:00) Montevideo"
+ "timezone": "(UTC-03:00) Montevideo",
+ "standardTime": "Montevideo Standard Time"
},
{
- "timezone": "(UTC-03:00) Salvador"
+ "timezone": "(UTC-03:00) Salvador",
+ "standardTime": "Bahia Standard Time"
},
{
- "timezone": "(UTC-02:00) Coordinated Universal Time-02"
+ "timezone": "(UTC-02:00) Coordinated Universal Time-02",
+ "standardTime": "UTC-02"
},
{
- "timezone": "(UTC-02:00) Mid-Atlantic"
+ "timezone": "(UTC-02:00) Mid-Atlantic",
+ "standardTime": "Mid-Atlantic Standard Time"
},
{
- "timezone": "(UTC-01:00) Azores"
+ "timezone": "(UTC-01:00) Azores",
+ "standardTime": "Azores Standard Time"
},
{
- "timezone": "(UTC-01:00) Cabo Verde"
+ "timezone": "(UTC-01:00) Cabo Verde",
+ "standardTime": "Cape Verde Standard Time"
},
{
- "timezone": "(UTC) Casablanca"
+ "timezone": "(UTC) Casablanca",
+ "standardTime": "Morocco Standard Time"
},
{
- "timezone": "(UTC) Coordinated Universal Time"
+ "timezone": "(UTC) Coordinated Universal Time",
+ "standardTime": "UTC"
},
{
- "timezone": "(UTC) Dublin, Edinburgh, Lisbon, London"
+ "timezone": "(UTC) Dublin, Edinburgh, Lisbon, London",
+ "standardTime": "GMT Standard Time"
},
{
- "timezone": "(UTC) Monrovia, Reykjavik"
+ "timezone": "(UTC) Monrovia, Reykjavik",
+ "standardTime": "Greenwich Standard Time"
},
{
- "timezone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
+ "timezone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
+ "standardTime": "W. Europe Standard Time"
},
{
- "timezone": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague"
+ "timezone": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
+ "standardTime": "Central Europe Standard Time"
},
{
- "timezone": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris"
+ "timezone": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
+ "standardTime": "Romance Standard Time"
},
{
- "timezone": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb"
+ "timezone": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
+ "standardTime": "Central European Standard Time"
},
{
- "timezone": "(UTC+01:00) West Central Africa"
+ "timezone": "(UTC+01:00) West Central Africa",
+ "standardTime": "W. Central Africa Standard Time"
},
{
- "timezone": "(UTC+01:00) Windhoek"
+ "timezone": "(UTC+01:00) Windhoek",
+ "standardTime": "Namibia Standard Time"
},
{
- "timezone": "(UTC+02:00) Amman"
+ "timezone": "(UTC+02:00) Amman",
+ "standardTime": "Jordan Standard Time"
},
{
- "timezone": "(UTC+02:00) Athens, Bucharest"
+ "timezone": "(UTC+02:00) Athens, Bucharest",
+ "standardTime": "GTB Standard Time"
},
{
- "timezone": "(UTC+02:00) Beirut"
+ "timezone": "(UTC+02:00) Beirut",
+ "standardTime": "Middle East Standard Time"
},
{
- "timezone": "(UTC+02:00) Cairo"
+ "timezone": "(UTC+02:00) Cairo",
+ "standardTime": "Egypt Standard Time"
},
{
- "timezone": "(UTC+02:00) Damascus"
+ "timezone": "(UTC+02:00) Damascus",
+ "standardTime": "Syria Standard Time"
},
{
- "timezone": "(UTC+02:00) Harare, Pretoria"
+ "timezone": "(UTC+02:00) Harare, Pretoria",
+ "standardTime": "South Africa Standard Time"
},
{
- "timezone": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius"
+ "timezone": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
+ "standardTime": "FLE Standard Time"
},
{
- "timezone": "(UTC+02:00) Jerusalem"
+ "timezone": "(UTC+02:00) Jerusalem",
+ "standardTime": "Israel Standard Time"
},
{
- "timezone": "(UTC+02:00) Minsk (old)"
+ "timezone": "(UTC+02:00) Minsk (old)",
+ "standardTime": "Belarus Standard Time"
},
{
- "timezone": "(UTC+02:00) E. Europe"
+ "timezone": "(UTC+02:00) E. Europe",
+ "standardTime": "E. Europe Standard Time"
},
{
- "timezone": "(UTC+02:00) Kaliningrad"
+ "timezone": "(UTC+02:00) Kaliningrad",
+ "standardTime": "Kaliningrad Standard Time"
},
{
- "timezone": "(UTC+03:00) Baghdad"
+ "timezone": "(UTC+03:00) Baghdad",
+ "standardTime": "Arabic Standard Time"
},
{
- "timezone": "(UTC+03:00) Istanbul"
+ "timezone": "(UTC+03:00) Istanbul",
+ "standardTime": "Turkey Standard Time"
},
{
- "timezone": "(UTC+03:00) Kuwait, Riyadh"
+ "timezone": "(UTC+03:00) Kuwait, Riyadh",
+ "standardTime": "Arab Standard Time"
},
{
- "timezone": "(UTC+03:00) Minsk"
+ "timezone": "(UTC+03:00) Minsk",
+ "standardTime": "Belarus Standard Time"
},
{
- "timezone": "(UTC+03:00) Moscow, St. Petersburg, Volgograd"
+ "timezone": "(UTC+03:00) Moscow, St. Petersburg, Volgograd",
+ "standardTime": "Russian Standard Time"
},
{
- "timezone": "(UTC+03:00) Nairobi"
+ "timezone": "(UTC+03:00) Nairobi",
+ "standardTime": "E. Africa Standard Time"
},
{
- "timezone": "(UTC+03:30) Tehran"
+ "timezone": "(UTC+03:30) Tehran",
+ "standardTime": "Iran Standard Time"
},
{
- "timezone": "(UTC+04:00) Abu Dhabi, Muscat"
+ "timezone": "(UTC+04:00) Abu Dhabi, Muscat",
+ "standardTime": "Arabian Standard Time"
},
{
- "timezone": "(UTC+04:00) Astrakhan, Ulyanovsk"
+ "timezone": "(UTC+04:00) Astrakhan, Ulyanovsk",
+ "standardTime": "Astrakhan Standard Time"
},
{
- "timezone": "(UTC+04:00) Baku"
+ "timezone": "(UTC+04:00) Baku",
+ "standardTime": "Azerbaijan Standard Time"
},
{
- "timezone": "(UTC+04:00) Izhevsk, Samara"
+ "timezone": "(UTC+04:00) Izhevsk, Samara",
+ "standardTime": "Russia Time Zone 3"
},
{
- "timezone": "(UTC+04:00) Port Louis"
+ "timezone": "(UTC+04:00) Port Louis",
+ "standardTime": "Mauritius Standard Time"
},
{
- "timezone": "(UTC+04:00) Tbilisi"
+ "timezone": "(UTC+04:00) Tbilisi",
+ "standardTime": "Georgian Standard Time"
},
{
- "timezone": "(UTC+04:00) Yerevan"
+ "timezone": "(UTC+04:00) Yerevan",
+ "standardTime": "Caucasus Standard Time"
},
{
- "timezone": "(UTC+04:30) Kabul"
+ "timezone": "(UTC+04:30) Kabul",
+ "standardTime": "Afghanistan Standard Time"
},
{
- "timezone": "(UTC+05:00) Ekaterinburg"
+ "timezone": "(UTC+05:00) Ekaterinburg",
+ "standardTime": "Ekaterinburg Standard Time"
},
{
- "timezone": "(UTC+05:00) Islamabad, Karachi"
+ "timezone": "(UTC+05:00) Islamabad, Karachi",
+ "standardTime": "Pakistan Standard Time"
},
{
- "timezone": "(UTC+05:00) Tashkent"
+ "timezone": "(UTC+05:00) Tashkent",
+ "standardTime": "West Asia Standard Time"
},
{
- "timezone": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi"
+ "timezone": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
+ "standardTime": "India Standard Time"
},
{
- "timezone": "(UTC+05:30) Sri Jayawardenepura"
+ "timezone": "(UTC+05:30) Sri Jayawardenepura",
+ "standardTime": "Sri Lanka Standard Time"
},
{
- "timezone": "(UTC+05:45) Kathmandu"
+ "timezone": "(UTC+05:45) Kathmandu",
+ "standardTime": "Nepal Standard Time"
},
{
- "timezone": "(UTC+06:00) Astana"
+ "timezone": "(UTC+06:00) Astana",
+ "standardTime": "Qyzylorda Standard Time"
},
{
- "timezone": "(UTC+06:00) Dhaka"
+ "timezone": "(UTC+06:00) Dhaka",
+ "standardTime": "Bangladesh Standard Time"
},
{
- "timezone": "(UTC+06:00) Omsk"
+ "timezone": "(UTC+06:00) Omsk",
+ "standardTime": "Omsk Standard Time"
},
{
- "timezone": "(UTC+06:30) Yangon (Rangoon)"
+ "timezone": "(UTC+06:30) Yangon (Rangoon)",
+ "standardTime": "Myanmar Standard Time"
},
{
- "timezone": "(UTC+07:00) Bangkok, Hanoi, Jakarta"
+ "timezone": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
+ "standardTime": "SE Asia Standard Time"
},
{
- "timezone": "(UTC+07:00) Barnaul, Gorno-Altaysk"
+ "timezone": "(UTC+07:00) Barnaul, Gorno-Altaysk",
+ "standardTime": "Altai Standard Time"
},
{
- "timezone": "(UTC+07:00) Krasnoyarsk"
+ "timezone": "(UTC+07:00) Krasnoyarsk",
+ "standardTime": "North Asia Standard Time"
},
{
- "timezone": "(UTC+07:00) Novosibirsk"
+ "timezone": "(UTC+07:00) Novosibirsk",
+ "standardTime": "N. Central Asia Standard Time"
},
{
- "timezone": "(UTC+07:00) Tomsk"
+ "timezone": "(UTC+07:00) Tomsk",
+ "standardTime": "Tomsk Standard Time"
},
{
- "timezone": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi"
+ "timezone": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
+ "standardTime": "China Standard Time"
},
{
- "timezone": "(UTC+08:00) Irkutsk"
+ "timezone": "(UTC+08:00) Irkutsk",
+ "standardTime": "North Asia East Standard Time"
},
{
- "timezone": "(UTC+08:00) Kuala Lumpur, Singapore"
+ "timezone": "(UTC+08:00) Kuala Lumpur, Singapore",
+ "standardTime": "Singapore Standard Time"
},
{
- "timezone": "(UTC+08:00) Perth"
+ "timezone": "(UTC+08:00) Perth",
+ "standardTime": "W. Australia Standard Time"
},
{
- "timezone": "(UTC+08:00) Taipei"
+ "timezone": "(UTC+08:00) Taipei",
+ "standardTime": "Taipei Standard Time"
},
{
- "timezone": "(UTC+08:00) Ulaanbaatar"
+ "timezone": "(UTC+08:00) Ulaanbaatar",
+ "standardTime": "Ulaanbaatar Standard Time"
},
{
- "timezone": "(UTC+09:00) Osaka, Sapporo, Tokyo"
+ "timezone": "(UTC+09:00) Osaka, Sapporo, Tokyo",
+ "standardTime": "Tokyo Standard Time"
},
{
- "timezone": "(UTC+09:00) Seoul"
+ "timezone": "(UTC+09:00) Seoul",
+ "standardTime": "Korea Standard Time"
},
{
- "timezone": "(UTC+09:00) Yakutsk"
+ "timezone": "(UTC+09:00) Yakutsk",
+ "standardTime": "Yakutsk Standard Time"
},
{
- "timezone": "(UTC+09:30) Adelaide"
+ "timezone": "(UTC+09:30) Adelaide",
+ "standardTime": "Cen. Australia Standard Time"
},
{
- "timezone": "(UTC+09:30) Darwin"
+ "timezone": "(UTC+09:30) Darwin",
+ "standardTime": "AUS Central Standard Time"
},
{
- "timezone": "(UTC+10:00) Brisbane"
+ "timezone": "(UTC+10:00) Brisbane",
+ "standardTime": "E. Australia Standard Time"
},
{
- "timezone": "(UTC+10:00) Canberra, Melbourne, Sydney"
+ "timezone": "(UTC+10:00) Canberra, Melbourne, Sydney",
+ "standardTime": "AUS Eastern Standard Time"
},
{
- "timezone": "(UTC+10:00) Guam, Port Moresby"
+ "timezone": "(UTC+10:00) Guam, Port Moresby",
+ "standardTime": "West Pacific Standard Time"
},
{
- "timezone": "(UTC+10:00) Hobart"
+ "timezone": "(UTC+10:00) Hobart",
+ "standardTime": "Tasmania Standard Time"
},
{
- "timezone": "(UTC+10:00) Magadan"
+ "timezone": "(UTC+10:00) Magadan",
+ "standardTime": "Magadan Standard Time"
},
{
- "timezone": "(UTC+10:00) Vladivostok"
+ "timezone": "(UTC+10:00) Vladivostok",
+ "standardTime": "Vladivostok Standard Time"
},
{
- "timezone": "(UTC+11:00) Chokurdakh"
+ "timezone": "(UTC+11:00) Chokurdakh",
+ "standardTime": "Russia Time Zone 10"
},
{
- "timezone": "(UTC+11:00) Sakhalin"
+ "timezone": "(UTC+11:00) Sakhalin",
+ "standardTime": "Sakhalin Standard Time"
},
{
- "timezone": "(UTC+11:00) Solomon Is., New Caledonia"
+ "timezone": "(UTC+11:00) Solomon Is., New Caledonia",
+ "standardTime": "Central Pacific Standard Time"
},
{
- "timezone": "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky"
+ "timezone": "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky",
+ "standardTime": "Russia Time Zone 11"
},
{
- "timezone": "(UTC+12:00) Auckland, Wellington"
+ "timezone": "(UTC+12:00) Auckland, Wellington",
+ "standardTime": "New Zealand Standard Time"
},
{
- "timezone": "(UTC+12:00) Coordinated Universal Time+12"
+ "timezone": "(UTC+12:00) Coordinated Universal Time+12",
+ "standardTime": "UTC+12"
},
{
- "timezone": "(UTC+12:00) Fiji"
+ "timezone": "(UTC+12:00) Fiji",
+ "standardTime": "Fiji Standard Time"
},
{
- "timezone": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
+ "timezone": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old",
+ "standardTime": "Kamchatka Standard Time"
},
{
- "timezone": "(UTC+13:00) Nuku'alofa"
+ "timezone": "(UTC+13:00) Nuku'alofa",
+ "standardTime": "Tonga Standard Time"
},
{
- "timezone": "(UTC+13:00) Samoa"
+ "timezone": "(UTC+13:00) Samoa",
+ "standardTime": "Samoa Standard Time"
}
]
diff --git a/src/hooks/use-guid-resolver.js b/src/hooks/use-guid-resolver.js
new file mode 100644
index 000000000000..1325722fc872
--- /dev/null
+++ b/src/hooks/use-guid-resolver.js
@@ -0,0 +1,523 @@
+import { useState, useCallback, useRef, useEffect } from "react";
+import { ApiPostCall } from "/src/api/ApiCall";
+import { useSettings } from "/src/hooks/use-settings";
+
+// Function to check if a string is a GUID
+const isGuid = (str) => {
+ if (typeof str !== "string") return false;
+ const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
+ return guidRegex.test(str);
+};
+
+// Function to extract GUIDs from strings (including embedded GUIDs)
+const extractGuidsFromString = (str) => {
+ if (typeof str !== "string") return [];
+ const guidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/gi;
+ return str.match(guidRegex) || [];
+};
+
+// Function to extract object IDs from partner tenant UPNs (user_@.onmicrosoft.com)
+// Also handles format: TenantName.onmicrosoft.com\tenant: , object:
+const extractObjectIdFromPartnerUPN = (str) => {
+ if (typeof str !== "string") return [];
+ const matches = [];
+
+ // Format 1: user_@.onmicrosoft.com
+ const partnerUpnRegex = /user_([0-9a-f]{32})@([^@]+\.onmicrosoft\.com)/gi;
+ let match;
+
+ while ((match = partnerUpnRegex.exec(str)) !== null) {
+ // Convert the 32-character hex string to GUID format
+ const hexId = match[1];
+ const tenantDomain = match[2];
+ if (hexId.length === 32) {
+ const guid = [
+ hexId.slice(0, 8),
+ hexId.slice(8, 12),
+ hexId.slice(12, 16),
+ hexId.slice(16, 20),
+ hexId.slice(20, 32),
+ ].join("-");
+ matches.push({ guid, tenantDomain });
+ }
+ }
+
+ // Format 2: TenantName.onmicrosoft.com\tenant: , object:
+ // For exchange format, use the partner tenant guid for resolution
+ const partnerTenantObjectRegex =
+ /([^\\]+\.onmicrosoft\.com)\\tenant:\s*([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}),\s*object:\s*([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi;
+
+ while ((match = partnerTenantObjectRegex.exec(str)) !== null) {
+ const customerTenantDomain = match[1]; // This is the customer tenant domain
+ const partnerTenantGuid = match[2]; // This is the partner tenant guid - use this for resolution
+ const objectGuid = match[3]; // This is the object to resolve
+
+ // Use the partner tenant GUID for resolution
+ matches.push({ guid: objectGuid, tenantDomain: partnerTenantGuid });
+ }
+
+ return matches;
+};
+
+// Function to recursively scan an object for GUIDs
+const findGuids = (obj, guidsSet = new Set(), partnerGuidsMap = new Map()) => {
+ if (!obj) return { guidsSet, partnerGuidsMap };
+
+ if (typeof obj === "string") {
+ // First, extract object IDs from partner tenant UPNs to track which GUIDs belong to partners
+ const partnerObjectIds = extractObjectIdFromPartnerUPN(obj);
+ const partnerGuids = new Set();
+
+ partnerObjectIds.forEach(({ guid, tenantDomain }) => {
+ if (!partnerGuidsMap.has(tenantDomain)) {
+ partnerGuidsMap.set(tenantDomain, new Set());
+ }
+ partnerGuidsMap.get(tenantDomain).add(guid);
+ partnerGuids.add(guid); // Track this GUID as belonging to a partner
+ });
+
+ // Check if the entire string is a GUID
+ if (isGuid(obj)) {
+ // Only add to main guidsSet if it's not a partner GUID
+ if (!partnerGuids.has(obj)) {
+ guidsSet.add(obj);
+ }
+ } else {
+ // Extract GUIDs embedded within longer strings
+ const embeddedGuids = extractGuidsFromString(obj);
+ embeddedGuids.forEach((guid) => {
+ // Only add to main guidsSet if it's not a partner GUID
+ if (!partnerGuids.has(guid)) {
+ guidsSet.add(guid);
+ }
+ });
+ }
+ } else if (Array.isArray(obj)) {
+ obj.forEach((item) => {
+ const result = findGuids(item, guidsSet, partnerGuidsMap);
+ guidsSet = result.guidsSet;
+ partnerGuidsMap = result.partnerGuidsMap;
+ });
+ } else if (typeof obj === "object") {
+ Object.values(obj).forEach((value) => {
+ const result = findGuids(value, guidsSet, partnerGuidsMap);
+ guidsSet = result.guidsSet;
+ partnerGuidsMap = result.partnerGuidsMap;
+ });
+ }
+
+ return { guidsSet, partnerGuidsMap };
+};
+
+// Helper function to replace GUIDs and special UPNs in a string with resolved names
+const replaceGuidsAndUpnsInString = (str, guidMapping, upnMapping, isLoadingGuids) => {
+ if (typeof str !== "string") return { result: str, hasResolvedNames: false };
+
+ let result = str;
+ let hasResolvedNames = false;
+
+ // Replace standard GUIDs
+ const guidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/gi;
+ const guidsInString = str.match(guidRegex) || [];
+
+ guidsInString.forEach((guid) => {
+ if (guidMapping[guid]) {
+ result = result.replace(new RegExp(guid, "gi"), guidMapping[guid]);
+ hasResolvedNames = true;
+ }
+ });
+
+ // Replace partner UPNs (user_@partnertenant.onmicrosoft.com)
+ const partnerUpnRegex = /user_([0-9a-f]{32})@([^@]+\.onmicrosoft\.com)/gi;
+ let match;
+
+ // We need to clone the string to reset the regex lastIndex
+ const strForMatching = String(str);
+
+ while ((match = partnerUpnRegex.exec(strForMatching)) !== null) {
+ const fullMatch = match[0]; // The complete UPN
+ const hexId = match[1];
+
+ if (hexId.length === 32) {
+ const guid = [
+ hexId.slice(0, 8),
+ hexId.slice(8, 12),
+ hexId.slice(12, 16),
+ hexId.slice(16, 20),
+ hexId.slice(20, 32),
+ ].join("-");
+
+ // For partner UPN format, use the actual UPN if available, otherwise fall back to display name
+ if (upnMapping[guid]) {
+ result = result.replace(
+ new RegExp(fullMatch.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"),
+ upnMapping[guid]
+ );
+ hasResolvedNames = true;
+ } else if (guidMapping[guid]) {
+ result = result.replace(
+ new RegExp(fullMatch.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"),
+ guidMapping[guid]
+ );
+ hasResolvedNames = true;
+ }
+ }
+ }
+
+ return { result, hasResolvedNames };
+};
+
+export const useGuidResolver = (manualTenant = null) => {
+ const tenantFilter = useSettings().currentTenant;
+ const activeTenant = manualTenant || tenantFilter;
+
+ // GUID resolution state
+ const [guidMapping, setGuidMapping] = useState({});
+ const [upnMapping, setUpnMapping] = useState({}); // New mapping specifically for UPNs
+ const [isLoadingGuids, setIsLoadingGuids] = useState(false);
+
+ // Use refs for values that shouldn't trigger re-renders but need to persist
+ const notFoundGuidsRef = useRef(new Set());
+ const pendingGuidsRef = useRef([]);
+ const pendingPartnerGuidsRef = useRef(new Map()); // Map of tenantDomain -> Set of GUIDs
+ const lastRequestTimeRef = useRef(0);
+ const lastPartnerRequestTimeRef = useRef(0); // Separate timing for partner tenant calls
+ const rateLimitBackoffRef = useRef(2000); // Default backoff time in milliseconds
+ const rateLimitTimeoutRef = useRef(null); // For tracking retry timeouts
+
+ // Helper function to retry API call with the correct backoff
+ const retryApiCallWithBackoff = useCallback((apiCall, url, data, retryDelay = null) => {
+ // Clear any existing timeout
+ if (rateLimitTimeoutRef.current) {
+ clearTimeout(rateLimitTimeoutRef.current);
+ }
+
+ // Use specified delay or current backoff time
+ const delay = retryDelay || rateLimitBackoffRef.current;
+
+ // Set timeout to retry
+ rateLimitTimeoutRef.current = setTimeout(() => {
+ apiCall.mutate({ url, data });
+ rateLimitTimeoutRef.current = null;
+ }, delay);
+
+ // Increase backoff for future retries (up to a reasonable limit)
+ rateLimitBackoffRef.current = Math.min(rateLimitBackoffRef.current * 1.5, 10000);
+ }, []);
+
+ // Setup API call for directory objects resolution
+ const directoryObjectsMutation = ApiPostCall({
+ relatedQueryKeys: ["directoryObjects"],
+ onResult: (data) => {
+ // Handle rate limit error
+ if (data && data.statusCode === 429) {
+ console.log("Rate limit hit on directory objects lookup, retrying...");
+
+ // Extract retry time from message if available
+ let retryAfterSeconds = 2;
+ if (data.message && typeof data.message === "string") {
+ const match = data.message.match(/Try again in (\d+) seconds/i);
+ if (match && match[1]) {
+ retryAfterSeconds = parseInt(match[1], 10) || 2;
+ }
+ }
+
+ // Retry with the specified delay (convert to milliseconds)
+ retryApiCallWithBackoff(
+ directoryObjectsMutation,
+ "/api/ListDirectoryObjects",
+ {
+ tenantFilter: activeTenant,
+ ids: pendingGuidsRef.current,
+ $select: "id,displayName,userPrincipalName,mail",
+ },
+ retryAfterSeconds * 1000
+ );
+ return;
+ }
+
+ // Reset backoff time on successful request
+ rateLimitBackoffRef.current = 2000;
+
+ if (data && Array.isArray(data.value)) {
+ const newDisplayMapping = {};
+ const newUpnMapping = {};
+
+ // Process the returned results
+ data.value.forEach((item) => {
+ if (item.id) {
+ // For display purposes, prefer displayName > userPrincipalName > mail
+ if (item.displayName || item.userPrincipalName || item.mail) {
+ newDisplayMapping[item.id] = item.displayName || item.userPrincipalName || item.mail;
+ }
+
+ // For UPN replacement, specifically store the UPN when available
+ if (item.userPrincipalName) {
+ newUpnMapping[item.id] = item.userPrincipalName;
+ }
+ }
+ });
+
+ // Find GUIDs that were sent but not returned in the response
+ const processedGuids = new Set(pendingGuidsRef.current);
+ const returnedGuids = new Set(data.value.map((item) => item.id));
+ const notReturned = [...processedGuids].filter((guid) => !returnedGuids.has(guid));
+
+ // Add unresolved GUIDs to partner tenant fallback lookup
+ if (notReturned.length > 0) {
+ console.log(
+ `${notReturned.length} GUIDs not resolved by primary tenant, trying partner tenant lookup`
+ );
+
+ // Add to partner lookup with the current tenant as fallback
+ if (!pendingPartnerGuidsRef.current.has(activeTenant)) {
+ pendingPartnerGuidsRef.current.set(activeTenant, new Set());
+ }
+ notReturned.forEach((guid) => {
+ pendingPartnerGuidsRef.current.get(activeTenant).add(guid);
+ });
+
+ // Trigger partner lookup immediately for fallback
+ const now = Date.now();
+ if (!rateLimitTimeoutRef.current && now - lastPartnerRequestTimeRef.current >= 2000) {
+ lastPartnerRequestTimeRef.current = now;
+
+ // Use partner tenant API for unresolved GUIDs
+ console.log(
+ `Sending partner fallback request for ${notReturned.length} GUIDs in tenant ${activeTenant}`
+ );
+ partnerDirectoryObjectsMutation.mutate({
+ url: "/api/ListDirectoryObjects",
+ data: {
+ tenantFilter: activeTenant,
+ ids: notReturned,
+ $select: "id,displayName,userPrincipalName,mail",
+ partnerLookup: true, // Flag to indicate this is a partner lookup
+ },
+ });
+ }
+ }
+
+ setGuidMapping((prevMapping) => ({ ...prevMapping, ...newDisplayMapping }));
+ setUpnMapping((prevMapping) => ({ ...prevMapping, ...newUpnMapping }));
+ pendingGuidsRef.current = [];
+
+ // Only set loading to false if we don't have pending partner lookups
+ if (notReturned.length === 0) {
+ setIsLoadingGuids(false);
+ }
+ }
+ },
+ });
+
+ // Setup API call for partner tenant directory objects resolution
+ const partnerDirectoryObjectsMutation = ApiPostCall({
+ relatedQueryKeys: ["partnerDirectoryObjects"],
+ onResult: (data) => {
+ // Handle rate limit error
+ if (data && data.statusCode === 429) {
+ console.log("Rate limit hit on partner directory objects lookup, retrying...");
+
+ // Extract retry time from message if available
+ let retryAfterSeconds = 2;
+ if (data.message && typeof data.message === "string") {
+ const match = data.message.match(/Try again in (\d+) seconds/i);
+ if (match && match[1]) {
+ retryAfterSeconds = parseInt(match[1], 10) || 2;
+ }
+ }
+
+ // We need to preserve the current tenant domain for retry
+ const currentTenantEntries = [...pendingPartnerGuidsRef.current.entries()];
+
+ if (currentTenantEntries.length > 0) {
+ const [tenantDomain, guidsSet] = currentTenantEntries[0];
+ const guidsToRetry = Array.from(guidsSet);
+
+ // Retry with the specified delay (convert to milliseconds)
+ retryApiCallWithBackoff(
+ partnerDirectoryObjectsMutation,
+ "/api/ListDirectoryObjects",
+ {
+ tenantFilter: tenantDomain,
+ ids: guidsToRetry,
+ $select: "id,displayName,userPrincipalName,mail",
+ },
+ retryAfterSeconds * 1000
+ );
+ }
+ return;
+ }
+
+ // Reset backoff time on successful request
+ rateLimitBackoffRef.current = 2000;
+
+ if (data && Array.isArray(data.value)) {
+ const newDisplayMapping = {};
+ const newUpnMapping = {};
+
+ // Process the returned results
+ data.value.forEach((item) => {
+ if (item.id) {
+ // For display purposes, prefer userPrincipalName > mail > DisplayName
+ if (item.userPrincipalName || item.mail || item.displayName) {
+ newDisplayMapping[item.id] = item.userPrincipalName || item.mail || item.displayName;
+ }
+
+ // For UPN replacement, specifically store the UPN when available
+ if (item.userPrincipalName) {
+ newUpnMapping[item.id] = item.userPrincipalName;
+ }
+ }
+ });
+
+ // Find GUIDs that were sent but not returned in the partner lookup
+ const allPendingPartnerGuids = new Set();
+ pendingPartnerGuidsRef.current.forEach((guidsSet) => {
+ guidsSet.forEach((guid) => allPendingPartnerGuids.add(guid));
+ });
+
+ const returnedGuids = new Set(data.value.map((item) => item.id));
+ const stillNotFound = [...allPendingPartnerGuids].filter(
+ (guid) => !returnedGuids.has(guid)
+ );
+
+ // Add truly unresolved GUIDs to notFoundGuids
+ if (stillNotFound.length > 0) {
+ stillNotFound.forEach((guid) => notFoundGuidsRef.current.add(guid));
+ }
+
+ setGuidMapping((prevMapping) => ({ ...prevMapping, ...newDisplayMapping }));
+ setUpnMapping((prevMapping) => ({ ...prevMapping, ...newUpnMapping }));
+
+ // Clear processed partner GUIDs
+ pendingPartnerGuidsRef.current = new Map();
+ setIsLoadingGuids(false);
+ }
+ },
+ }); // Function to handle resolving GUIDs
+ const resolveGuids = useCallback(
+ (objectToScan) => {
+ const { guidsSet, partnerGuidsMap } = findGuids(objectToScan);
+
+ // Handle regular GUIDs (current tenant) - these should NOT include partner tenant GUIDs
+ if (guidsSet.size > 0) {
+ const guidsArray = Array.from(guidsSet);
+ const notResolvedGuids = guidsArray.filter(
+ (guid) => !guidMapping[guid] && !notFoundGuidsRef.current.has(guid)
+ );
+
+ if (notResolvedGuids.length > 0) {
+ // Merge new GUIDs with existing pending GUIDs without duplicates
+ const allPendingGuids = [...new Set([...pendingGuidsRef.current, ...notResolvedGuids])];
+ pendingGuidsRef.current = allPendingGuids;
+ setIsLoadingGuids(true);
+
+ // Make API call for primary tenant GUIDs
+ const now = Date.now();
+ if (!rateLimitTimeoutRef.current && now - lastRequestTimeRef.current >= 2000) {
+ lastRequestTimeRef.current = now;
+
+ // Only send a maximum of 1000 GUIDs per request
+ const batchSize = 1000;
+ const guidsToSend = allPendingGuids.slice(0, batchSize);
+
+ if (guidsToSend.length > 0) {
+ console.log(
+ `Sending primary tenant request for ${guidsToSend.length} GUIDs in tenant ${activeTenant}`
+ );
+ directoryObjectsMutation.mutate({
+ url: "/api/ListDirectoryObjects",
+ data: {
+ tenantFilter: activeTenant,
+ ids: guidsToSend,
+ $select: "id,displayName,userPrincipalName,mail",
+ },
+ });
+ } else {
+ setIsLoadingGuids(false);
+ }
+ }
+ }
+ }
+
+ // Handle partner tenant GUIDs separately
+ if (partnerGuidsMap.size > 0) {
+ partnerGuidsMap.forEach((guids, tenantDomain) => {
+ const guidsArray = Array.from(guids);
+ const notResolvedGuids = guidsArray.filter(
+ (guid) => !guidMapping[guid] && !notFoundGuidsRef.current.has(guid)
+ );
+
+ if (notResolvedGuids.length > 0) {
+ // Store pending partner GUIDs
+ if (!pendingPartnerGuidsRef.current.has(tenantDomain)) {
+ pendingPartnerGuidsRef.current.set(tenantDomain, new Set());
+ }
+ notResolvedGuids.forEach((guid) =>
+ pendingPartnerGuidsRef.current.get(tenantDomain).add(guid)
+ );
+
+ setIsLoadingGuids(true);
+
+ // Make API call for partner tenant - with separate timing from primary tenant
+ const now = Date.now();
+ if (!rateLimitTimeoutRef.current && now - lastPartnerRequestTimeRef.current >= 2000) {
+ lastPartnerRequestTimeRef.current = now;
+
+ // Only send a maximum of 1000 GUIDs per request
+ const batchSize = 1000;
+ const guidsToSend = notResolvedGuids.slice(0, batchSize);
+
+ if (guidsToSend.length > 0) {
+ console.log(
+ `Sending partner tenant request for ${guidsToSend.length} GUIDs in tenant ${tenantDomain}`
+ );
+ partnerDirectoryObjectsMutation.mutate({
+ url: "/api/ListDirectoryObjects",
+ data: {
+ tenantFilter: tenantDomain,
+ ids: guidsToSend,
+ $select: "id,displayName,userPrincipalName,mail",
+ },
+ });
+ }
+ }
+ }
+ });
+ }
+
+ // If no GUIDs to process, ensure loading state is false
+ if (guidsSet.size === 0 && partnerGuidsMap.size === 0) {
+ setIsLoadingGuids(false);
+ }
+ },
+ [guidMapping, activeTenant, directoryObjectsMutation, partnerDirectoryObjectsMutation]
+ );
+
+ // Create a memoized version of the string replacement function
+ const replaceGuidsAndUpnsInStringMemoized = useCallback(
+ (str) => replaceGuidsAndUpnsInString(str, guidMapping, upnMapping, isLoadingGuids),
+ [guidMapping, upnMapping, isLoadingGuids]
+ );
+
+ // Cleanup function to clear any pending timeouts when the component unmounts
+ useEffect(() => {
+ return () => {
+ if (rateLimitTimeoutRef.current) {
+ clearTimeout(rateLimitTimeoutRef.current);
+ rateLimitTimeoutRef.current = null;
+ }
+ };
+ }, []);
+
+ return {
+ guidMapping,
+ upnMapping,
+ isLoadingGuids,
+ resolveGuids,
+ isGuid,
+ extractObjectIdFromPartnerUPN,
+ replaceGuidsAndUpnsInString: replaceGuidsAndUpnsInStringMemoized,
+ };
+};
diff --git a/src/hooks/use-page-view.js b/src/hooks/use-page-view.js
index c4365337c92a..fe5923c47679 100644
--- a/src/hooks/use-page-view.js
+++ b/src/hooks/use-page-view.js
@@ -1,3 +1 @@
-import { useEffect } from "react";
-
export const usePageView = () => {};
diff --git a/src/hooks/use-permissions.js b/src/hooks/use-permissions.js
new file mode 100644
index 000000000000..6b7973c164f8
--- /dev/null
+++ b/src/hooks/use-permissions.js
@@ -0,0 +1,96 @@
+import { useCallback } from "react";
+import { ApiGetCall } from "/src/api/ApiCall";
+import { hasAccess, hasPermission, hasRole } from "/src/utils/permissions";
+
+/**
+ * Hook for checking user permissions and roles
+ * Integrates with the existing CIPP authentication system
+ */
+export const usePermissions = () => {
+ const currentRole = ApiGetCall({
+ url: "/api/me",
+ queryKey: "authmecipp",
+ });
+
+ const userRoles = currentRole.data?.clientPrincipal?.userRoles || [];
+ const userPermissions = currentRole.data?.permissions || [];
+ const isLoading = currentRole.isLoading;
+ const isAuthenticated = currentRole.isSuccess && userRoles.length > 0;
+
+ /**
+ * Check if user has specific permissions
+ * @param {string[]} requiredPermissions - Array of required permissions (supports wildcards)
+ * @returns {boolean} - True if user has at least one of the required permissions
+ */
+ const checkPermissions = useCallback(
+ (requiredPermissions) => {
+ if (!isAuthenticated) return false;
+ return hasPermission(userPermissions, requiredPermissions);
+ },
+ [userPermissions, isAuthenticated]
+ );
+
+ /**
+ * Check if user has specific roles
+ * @param {string[]} requiredRoles - Array of required roles
+ * @returns {boolean} - True if user has at least one of the required roles
+ */
+ const checkRoles = useCallback(
+ (requiredRoles) => {
+ if (!isAuthenticated) return false;
+ return hasRole(userRoles, requiredRoles);
+ },
+ [userRoles, isAuthenticated]
+ );
+
+ /**
+ * Check if user has access based on both permissions and roles
+ * @param {Object} config - Configuration object
+ * @param {string[]} config.requiredPermissions - Array of required permissions
+ * @param {string[]} config.requiredRoles - Array of required roles
+ * @returns {boolean} - True if user has access
+ */
+ const checkAccess = useCallback(
+ (config = {}) => {
+ if (!isAuthenticated) return false;
+
+ const { requiredPermissions = [], requiredRoles = [] } = config;
+
+ return hasAccess({
+ userPermissions,
+ userRoles,
+ requiredPermissions,
+ requiredRoles,
+ });
+ },
+ [userPermissions, userRoles, isAuthenticated]
+ );
+
+ return {
+ userPermissions,
+ userRoles,
+ isLoading,
+ isAuthenticated,
+ checkPermissions,
+ checkRoles,
+ checkAccess,
+ };
+};
+
+/**
+ * Hook specifically for checking permissions with a simpler API
+ * @param {string[]} requiredPermissions - Array of required permissions
+ * @param {string[]} requiredRoles - Array of required roles
+ * @returns {Object} - Object containing hasAccess boolean and loading state
+ */
+export const useHasPermission = (requiredPermissions = [], requiredRoles = []) => {
+ const { checkAccess, isLoading, isAuthenticated } = usePermissions();
+
+ const hasAccess = checkAccess({ requiredPermissions, requiredRoles });
+
+ return {
+ hasAccess,
+ isLoading,
+ isAuthenticated,
+ };
+};
diff --git a/src/hooks/use-securescore.js b/src/hooks/use-securescore.js
index 2394fa98ed0a..37fc9224aec3 100644
--- a/src/hooks/use-securescore.js
+++ b/src/hooks/use-securescore.js
@@ -66,7 +66,7 @@ export function useSecureScore() {
complianceInformation: translation?.complianceInformation,
actionUrl: remediation
? //this needs to be updated to be a direct url to apply this standard.
- "/tenant/standards/list-applied-standards"
+ "/tenant/standards/list-standards"
: translation?.actionUrl,
remediation: remediation
? `1. Enable the CIPP Standard: ${remediation.label}`
@@ -89,12 +89,10 @@ export function useSecureScore() {
(secureScoreData.currentScore / secureScoreData.maxScore) * 100
),
percentageVsAllTenants: Math.round(
- (secureScoreData.averageComparativeScores?.[0]?.averageScore / secureScoreData.maxScore) *
- 100
+ secureScoreData.averageComparativeScores?.[0]?.averageScore
),
percentageVsSimilar: Math.round(
- (secureScoreData.averageComparativeScores?.[1]?.averageScore / secureScoreData.maxScore) *
- 100
+ secureScoreData.averageComparativeScores?.[1]?.averageScore
),
controlScores: updatedControlScores,
});
diff --git a/src/layouts/HeaderedTabbedLayout.jsx b/src/layouts/HeaderedTabbedLayout.jsx
index 35213a677746..50b1b2e1e034 100644
--- a/src/layouts/HeaderedTabbedLayout.jsx
+++ b/src/layouts/HeaderedTabbedLayout.jsx
@@ -16,10 +16,21 @@ import {
Typography,
} from "@mui/material";
import { ActionsMenu } from "/src/components/actions-menu";
+import { useMediaQuery } from "@mui/material";
export const HeaderedTabbedLayout = (props) => {
- const { children, tabOptions, title, subtitle, actions, actionsData, isFetching = false } = props;
+ const {
+ children,
+ tabOptions,
+ title,
+ subtitle,
+ actions,
+ actionsData,
+ isFetching = false,
+ backUrl,
+ } = props;
+ const mdDown = useMediaQuery((theme) => theme.breakpoints.down("md"));
const router = useRouter();
const pathname = usePathname();
const queryParams = router.query;
@@ -53,7 +64,7 @@ export const HeaderedTabbedLayout = (props) => {
{/* Date Filter */}
-
+
+
+ Use the filters below to narrow down your logbook results. You can filter by
+ date range, username, and severity levels. By default, the logbook shows the
+ current day based on UTC time. Your local time is{" "}
+ {new Date().getTimezoneOffset() / -60} hours offset from UTC.
+
+
+
+
+
+
+
+
+ {
+ const startDate = formControl.getValues("startDate");
+ if (value && !startDate) {
+ return "Start date must be set when using an end date";
+ }
+ if (
+ startDate &&
+ value &&
+ new Date(value * 1000) < new Date(startDate * 1000)
+ ) {
+ return "End date must be after start date";
+ }
+ return true;
+ },
+ }}
+ />
+
+
+
+
+ {/* Date Range Warning Alert */}
+
+
+ {/* Username Filter */}
+
- {/* Toggle Switch */}
-
+ {/* Severity Filter */}
+
- {/* Submit Button */}
-
-
- Apply Filters
-
+ {/* Action Buttons */}
+
+
+
+
+
+ }
+ >
+ Apply Filters
+
+
+
+
+ }
+ onClick={clearFilters}
+ >
+ Clear Filters
+
+
@@ -94,22 +305,20 @@ const Page = () => {
title={pageTitle}
apiUrl={apiUrl}
simpleColumns={simpleColumns}
- queryKey={`Listlogs-${dateFilter}-${filterEnabled}`}
+ queryKey={`Listlogs-${startDate}-${endDate}-${username}-${severity}-${filterEnabled}`}
+ tenantInTitle={false}
apiData={{
- DateFilter: dateFilter, // Pass date filter from state
+ StartDate: startDate, // Pass start date filter from state
+ EndDate: endDate, // Pass end date filter from state
+ User: username, // Pass username filter from state
+ Severity: severity, // Pass severity filter from state
Filter: filterEnabled, // Pass filter toggle state
}}
+ actions={actions}
/>
);
};
-/* Comment to Developer:
- - The filter is inside an expandable Accordion. By default, the filter is collapsed.
- - The "Apply Filters" button sets the form data for date and filter toggle.
- - Form state is managed using react-hook-form, and the filter states are applied to the table.
- - The DateFilter is passed in 'YYYYMMDD' format, and Filter toggle is passed as a boolean.
-*/
-
Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/cipp/logs/logentry.js b/src/pages/cipp/logs/logentry.js
new file mode 100644
index 000000000000..3f9c1aef3ae0
--- /dev/null
+++ b/src/pages/cipp/logs/logentry.js
@@ -0,0 +1,137 @@
+import { useRouter } from "next/router";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { ApiGetCall } from "/src/api/ApiCall";
+import {
+ Button,
+ SvgIcon,
+ Box,
+ Container,
+ Chip,
+} from "@mui/material";
+import { Stack } from "@mui/system";
+import ArrowLeftIcon from "@mui/icons-material/ArrowLeft";
+import { CippPropertyListCard } from "/src/components/CippCards/CippPropertyListCard";
+import { CippInfoBar } from "/src/components/CippCards/CippInfoBar";
+import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton";
+
+const Page = () => {
+ const router = useRouter();
+ const { logentry } = router.query;
+
+ const logRequest = ApiGetCall({
+ url: `/api/Listlogs`,
+ data: {
+ logentryid: logentry,
+ },
+ queryKey: `GetLogEntry-${logentry}`,
+ waiting: !!logentry,
+ });
+
+ const handleBackClick = () => {
+ router.push("/cipp/logs");
+ };
+
+ // Get the log data from array
+ const logData = logRequest.data?.[0];
+
+ // Top info bar data like dashboard
+ const logInfo = logData ? [
+ { name: "Log ID", data: logData.RowKey },
+ { name: "Date & Time", data: new Date(logData.DateTime).toLocaleString() },
+ { name: "API", data: logData.API },
+ {
+ name: "Severity",
+ data: (
+
+ )
+ },
+ ] : [];
+
+ // Main log properties
+ const propertyItems = logData ? [
+ { label: "Tenant", value: logData.Tenant },
+ { label: "User", value: logData.User },
+ { label: "Message", value: logData.Message },
+ { label: "Tenant ID", value: logData.TenantID },
+ { label: "App ID", value: logData.AppId || "None" },
+ { label: "IP Address", value: logData.IP || "None" },
+ ] : [];
+
+ // LogData properties
+ const logDataItems = logData?.LogData && typeof logData.LogData === 'object'
+ ? Object.entries(logData.LogData).map(([key, value]) => ({
+ label: key,
+ value: typeof value === 'object' ? JSON.stringify(value, null, 2) : String(value),
+ }))
+ : [];
+
+ return (
+
+
+
+ {/* Back button */}
+
+
+
+ }
+ sx={{ alignSelf: "flex-start" }}
+ >
+ Back to Logs
+
+
+ {logRequest.isLoading && }
+
+ {logRequest.isError && (
+
+ )}
+
+ {logRequest.isSuccess && logData && (
+ <>
+ {/* Top info bar like dashboard */}
+
+
+ {/* Main log information */}
+
+
+ {/* LogData in separate card */}
+ {logDataItems.length > 0 && (
+
+ )}
+ >
+ )}
+
+
+
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/cipp/preferences.js b/src/pages/cipp/preferences.js
index 6cc782d44508..38f6fe99bd27 100644
--- a/src/pages/cipp/preferences.js
+++ b/src/pages/cipp/preferences.js
@@ -1,6 +1,6 @@
import Head from "next/head";
import { Box, Container, Stack } from "@mui/material";
-import Grid from "@mui/material/Grid2";
+import { Grid } from "@mui/system";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippPropertyListCard } from "../../components/CippCards/CippPropertyListCard";
import CippFormComponent from "../../components/CippComponents/CippFormComponent";
@@ -9,10 +9,24 @@ import { useSettings } from "../../hooks/use-settings";
import countryList from "../../data/countryList.json";
import { CippSettingsSideBar } from "../../components/CippComponents/CippSettingsSideBar";
import CippDevOptions from "/src/components/CippComponents/CippDevOptions";
+import { ApiGetCall } from "../../api/ApiCall";
+import { getCippFormatting } from "../../utils/get-cipp-formatting";
const Page = () => {
const settings = useSettings();
- const formcontrol = useForm({ mode: "onChange", defaultValues: settings });
+ const cleanedSettings = { ...settings };
+
+ if (cleanedSettings.offboardingDefaults?.keepCopy) {
+ delete cleanedSettings.offboardingDefaults.keepCopy;
+ settings.handleUpdate(cleanedSettings);
+ }
+
+ const formcontrol = useForm({ mode: "onChange", defaultValues: cleanedSettings });
+
+ const auth = ApiGetCall({
+ url: "/api/me",
+ queryKey: "authmecipp",
+ });
const addedAttributes = [
{ value: "consentProvidedForMinor", label: "consentProvidedForMinor" },
@@ -25,7 +39,7 @@ const Page = () => {
{ value: "officeLocation", label: "officeLocation" },
{ value: "otherMails", label: "otherMails" },
{ value: "showInAddressList", label: "showInAddressList" },
- { value: "state", label: "state" },
+ { value: "sponsor", label: "sponsor" },
];
const pageSizes = [
@@ -56,30 +70,15 @@ const Page = () => {
- ),
- },
{
label: "Default new user usage location",
value: (
{
value: (
{
),
},
{
- label: "Menu Favourites",
+ label: "Added Attributes when creating a new user",
value: (
),
},
@@ -230,7 +221,7 @@ const Page = () => {
value: (
),
@@ -255,12 +246,53 @@ const Page = () => {
/>
),
},
+ {
+ label: "Disable Sign in",
+ value: (
+
+ ),
+ },
+ {
+ label: "Remove all MFA Devices",
+ value: (
+
+ ),
+ },
+ {
+ label: "Clear Immutable ID",
+ value: (
+
+ ),
+ },
]}
/>
+ !["anonymous", "authenticated"].includes(role))
+ .map((role) => ({
+ label: "",
+ value: getCippFormatting(role, "role"),
+ }))}
+ showDivider={false}
+ />
+
diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js
index 18b0d01a89b5..b7071474cad1 100644
--- a/src/pages/cipp/scheduler/index.js
+++ b/src/pages/cipp/scheduler/index.js
@@ -1,46 +1,41 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import CippTablePage from "/src/components/CippComponents/CippTablePage";
-import { Button, Typography } from "@mui/material";
+import { Button } from "@mui/material";
import Link from "next/link";
-import { CalendarDaysIcon, EyeIcon, TrashIcon } from "@heroicons/react/24/outline";
+import { CalendarDaysIcon } from "@heroicons/react/24/outline";
import { useState } from "react";
-import { CopyAll, Edit } from "@mui/icons-material";
-import { CippCodeBlock } from "../../../components/CippComponents/CippCodeBlock";
+import ScheduledTaskDetails from "../../../components/CippComponents/ScheduledTaskDetails";
+import { CippScheduledTaskActions } from "../../../components/CippComponents/CippScheduledTaskActions";
const Page = () => {
- const actions = [
+ const actions = CippScheduledTaskActions();
+
+ const filterList = [
+ {
+ filterName: "Running",
+ value: [{ id: "TaskState", value: "Running" }],
+ type: "column",
+ },
{
- label: "Edit Job",
- link: "/cipp/scheduler/job?id=[RowKey]",
- multiPost: false,
- icon: ,
- color: "success",
+ filterName: "Planned",
+ value: [{ id: "TaskState", value: "Planned" }],
+ type: "column",
},
{
- label: "Clone and Edit Job",
- link: "/cipp/scheduler/job?id=[RowKey]&Clone=True",
- multiPost: false,
- icon: ,
- color: "success",
+ filterName: "Failed",
+ value: [{ id: "TaskState", value: "Failed" }],
+ type: "column",
},
{
- label: "Delete Job",
- icon: ,
- type: "POST",
- url: "/api/RemoveScheduledItem",
- data: { id: "RowKey" },
- confirmText: "Are you sure you want to delete this job?",
- multiPost: false,
+ filterName: "Completed",
+ value: [{ id: "TaskState", value: "Completed" }],
+ type: "column",
},
];
const offCanvas = {
- children: (extendedData) => (
- <>
- Job Results
-
- >
- ),
+ children: (extendedData) => ,
+ size: "xl",
actions: actions,
};
const [showHiddenJobs, setShowHiddenJobs] = useState(false);
@@ -59,22 +54,24 @@ const Page = () => {
tenantInTitle={false}
title="Scheduled Tasks"
apiUrl={
- showHiddenJobs ? "/api/ListScheduledItems?ListHidden=True" : "/api/ListScheduledItems"
+ showHiddenJobs ? "/api/ListScheduledItems?ShowHidden=true" : "/api/ListScheduledItems"
}
queryKey={showHiddenJobs ? `ListScheduledItems-hidden` : `ListScheduledItems`}
simpleColumns={[
- "Name",
- "Tenant",
+ "ExecutedTime",
"TaskState",
+ "Tenant",
+ "Name",
+ "ScheduledTime",
"Command",
"Parameters",
"PostExecution",
"Recurrence",
- "ExecutedTime",
- "ScheduledTime",
+ "Results",
]}
actions={actions}
offCanvas={offCanvas}
+ filters={filterList}
/>
);
};
diff --git a/src/pages/cipp/scheduler/task.js b/src/pages/cipp/scheduler/task.js
new file mode 100644
index 000000000000..8f52ae443ece
--- /dev/null
+++ b/src/pages/cipp/scheduler/task.js
@@ -0,0 +1,22 @@
+import { useRouter } from "next/router";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import ScheduledTaskDetails from "../../../components/CippComponents/ScheduledTaskDetails";
+import CippPageCard from "../../../components/CippCards/CippPageCard";
+import { CardContent } from "@mui/material";
+
+const Page = () => {
+ const router = useRouter();
+ const { id } = router.query;
+
+ return (
+
+
+
+
+
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/cipp/settings/backend.js b/src/pages/cipp/settings/backend.js
index 76d45cb98bd0..283c2dccc55e 100644
--- a/src/pages/cipp/settings/backend.js
+++ b/src/pages/cipp/settings/backend.js
@@ -1,4 +1,5 @@
-import { Container, Grid } from "@mui/material";
+import { Container } from "@mui/material";
+import { Grid } from "@mui/system";
import { TabbedLayout } from "/src/layouts/TabbedLayout";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import tabOptions from "./tabOptions";
@@ -104,7 +105,7 @@ const Page = () => {
{backendInfo.map((item) => (
-
+
))}
diff --git a/src/pages/cipp/settings/backup.js b/src/pages/cipp/settings/backup.js
index 6935872881c2..1931dca8f87a 100644
--- a/src/pages/cipp/settings/backup.js
+++ b/src/pages/cipp/settings/backup.js
@@ -1,6 +1,5 @@
-import { Box, Button, CardContent, Grid, Stack, Typography, Skeleton } from "@mui/material";
+import { Box, Button, CardContent, Stack, Typography, Skeleton } from "@mui/material";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
-
import CippPageCard from "../../../components/CippCards/CippPageCard";
import { ApiGetCall, ApiPostCall } from "../../../api/ApiCall";
import { CippInfoBar } from "../../../components/CippCards/CippInfoBar";
@@ -55,7 +54,7 @@ const Page = () => {
});
const NextBackupRun = (props) => {
- const date = new Date(props.date * 1000);
+ const date = new Date(props.date);
if (isNaN(date)) {
return "Not Scheduled";
} else {
@@ -135,6 +134,7 @@ const Page = () => {
confirmText: "Are you sure you want to restore this backup?",
relatedQueryKeys: ["BackupList"],
multiPost: false,
+ hideBulk: true,
},
{
label: "Download Backup",
diff --git a/src/pages/cipp/settings/global-variables.js b/src/pages/cipp/settings/global-variables.js
new file mode 100644
index 000000000000..96ffe712d0b3
--- /dev/null
+++ b/src/pages/cipp/settings/global-variables.js
@@ -0,0 +1,16 @@
+import tabOptions from "./tabOptions";
+import { TabbedLayout } from "/src/layouts/TabbedLayout";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import CippCustomVariables from "/src/components/CippComponents/CippCustomVariables.jsx";
+
+const Page = () => {
+ return ;
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
diff --git a/src/pages/cipp/settings/index.js b/src/pages/cipp/settings/index.js
index 430a436fd51e..11b432e7988d 100644
--- a/src/pages/cipp/settings/index.js
+++ b/src/pages/cipp/settings/index.js
@@ -1,4 +1,5 @@
-import { Container, Grid } from "@mui/material";
+import { Container } from "@mui/material";
+import { Grid } from "@mui/system";
import { TabbedLayout } from "/src/layouts/TabbedLayout";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import tabOptions from "./tabOptions";
@@ -8,25 +9,29 @@ import CippPasswordSettings from "/src/components/CippSettings/CippPasswordSetti
import CippDnsSettings from "/src/components/CippSettings/CippDnsSettings";
import CippCacheSettings from "/src/components/CippSettings/CippCacheSettings";
import CippBackupSettings from "/src/components/CippSettings/CippBackupSettings";
+import CippBrandingSettings from "/src/components/CippSettings/CippBrandingSettings";
const Page = () => {
return (
-
+
-
+
-
+
-
+
-
+
+
+
+
);
diff --git a/src/pages/cipp/settings/licenses.js b/src/pages/cipp/settings/licenses.js
index 7db7f6e0e70e..a33e9f1f612a 100644
--- a/src/pages/cipp/settings/licenses.js
+++ b/src/pages/cipp/settings/licenses.js
@@ -4,7 +4,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
import { Button, SvgIcon } from "@mui/material";
import { TrashIcon } from "@heroicons/react/24/outline";
-import { Add, Remove } from "@mui/icons-material";
+import { Add } from "@mui/icons-material";
import { CippApiDialog } from "../../../components/CippComponents/CippApiDialog";
import { useDialog } from "../../../hooks/use-dialog";
diff --git a/src/pages/cipp/settings/notifications.js b/src/pages/cipp/settings/notifications.js
index 2dd5a990d5e0..dbb0727e0be4 100644
--- a/src/pages/cipp/settings/notifications.js
+++ b/src/pages/cipp/settings/notifications.js
@@ -3,75 +3,17 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js";
import tabOptions from "./tabOptions";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
import { useForm } from "react-hook-form";
-import CippFormComponent from "../../../components/CippComponents/CippFormComponent";
-import { Box, Button, Grid } from "@mui/material";
-import { ApiGetCall } from "../../../api/ApiCall";
-import { useEffect } from "react";
import { useDialog } from "../../../hooks/use-dialog";
-import { CippApiDialog } from "../../../components/CippComponents/CippApiDialog";
+import { CippNotificationForm } from "../../../components/CippComponents/CippNotificationForm";
const Page = () => {
const pageTitle = "Notification Settings";
const notificationDialog = useDialog();
- const listNotificationConfig = ApiGetCall({
- url: "/api/ListNotificationConfig",
- queryKey: "ListNotificationConfig",
- });
-
- const logTypes = [
- { label: "Updates Status", value: "Updates" },
- { label: "All Standards", value: "Standards" },
- { label: "Token Events", value: "TokensUpdater" },
- { label: "Changing DNS Settings", value: "ExecDnsConfig" },
- { label: "Adding excluded licenses", value: "ExecExcludeLicenses" },
- { label: "Adding excluded tenants", value: "ExecExcludeTenant" },
- { label: "Editing a user", value: "EditUser" },
- { label: "Adding or deploying applications", value: "ChocoApp" },
- { label: "Adding autopilot devices", value: "AddAPDevice" },
- { label: "Editing a tenant", value: "EditTenant" },
- { label: "Adding an MSP app", value: "AddMSPApp" },
- { label: "Adding a user", value: "AddUser" },
- { label: "Adding a group", value: "AddGroup" },
- { label: "Adding a tenant", value: "NewTenant" },
- { label: "Executing the offboard wizard", value: "ExecOffboardUser" },
- ];
- const severityTypes = [
- { label: "Alert", value: "Alert" },
- { label: "Error", value: "Error" },
- { label: "Info", value: "Info" },
- { label: "Warning", value: "Warning" },
- { label: "Critical", value: "Critical" },
- ];
-
const formControl = useForm({
mode: "onChange",
});
- useEffect(() => {
- if (listNotificationConfig.isSuccess) {
- var logsToInclude = [];
- listNotificationConfig.data?.logsToInclude.map((log) => {
- var logType = logTypes.find((logType) => logType.value === log);
- if (logType) {
- logsToInclude.push(logType);
- }
- });
-
- formControl.reset({
- email: listNotificationConfig.data?.email,
- webhook: listNotificationConfig.data?.webhook,
- logsToInclude: logsToInclude,
- Severity: listNotificationConfig.data?.Severity.map((severity) => {
- return severityTypes.find((severityType) => severityType.value === severity);
- }),
- onePerTenant: listNotificationConfig.data?.onePerTenant,
- sendtoIntegration: listNotificationConfig.data?.sendtoIntegration,
- includeTenantId: listNotificationConfig.data?.includeTenantId,
- });
- }
- }, [listNotificationConfig.isSuccess]);
-
return (
{
resetForm={false}
postUrl="/api/ExecNotificationConfig"
relatedQueryKeys={["ListNotificationConfig"]}
- addedButtons={
-
- Send Test Alert
-
- }
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
);
diff --git a/src/pages/cipp/settings/partner-webhooks.js b/src/pages/cipp/settings/partner-webhooks.js
index d44f24c690a8..67d218fb22c6 100644
--- a/src/pages/cipp/settings/partner-webhooks.js
+++ b/src/pages/cipp/settings/partner-webhooks.js
@@ -8,7 +8,6 @@ import {
Button,
Card,
Chip,
- Grid,
Stack,
Typography,
Link,
@@ -17,6 +16,7 @@ import {
IconButton,
SvgIcon,
} from "@mui/material";
+import { Grid } from "@mui/system";
import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
import { ApiGetCall, ApiPostCall } from "../../../api/ApiCall";
import { useEffect } from "react";
@@ -120,6 +120,7 @@ const Page = () => {
title={pageTitle}
hideBackButton={true}
hidePageType={true}
+ allowResubmit={true}
formControl={formControl}
resetForm={false}
postUrl="/api/ExecPartnerWebhook?Action=CreateSubscription"
@@ -131,7 +132,7 @@ const Page = () => {
}
>
-
+
Subscribe to Microsoft Partner center webhooks to enable automatic tenant onboarding and
alerting. Updating the settings will replace any existing webhook subscription with one
@@ -146,7 +147,7 @@ const Page = () => {
for more information on the webhook types.
-
+ {
showDivider={false}
/>
-
+ {
formControl={formControl}
/>
-
+ {
/>
{testRunning && (
-
+ {
return (
-
+
-
+
-
+
-
+
diff --git a/src/pages/cipp/settings/tabOptions.json b/src/pages/cipp/settings/tabOptions.json
index 6231cad32485..b68bec5eb43e 100644
--- a/src/pages/cipp/settings/tabOptions.json
+++ b/src/pages/cipp/settings/tabOptions.json
@@ -26,5 +26,9 @@
{
"label": "Licenses",
"path": "/cipp/settings/licenses"
+ },
+ {
+ "label": "Global Variables",
+ "path": "/cipp/settings/global-variables"
}
]
diff --git a/src/pages/cipp/settings/tenants.js b/src/pages/cipp/settings/tenants.js
index 3a09b8ff8aa4..a5495b4b77e8 100644
--- a/src/pages/cipp/settings/tenants.js
+++ b/src/pages/cipp/settings/tenants.js
@@ -1,139 +1,12 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { TabbedLayout } from "/src/layouts/TabbedLayout";
-import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
import tabOptions from "./tabOptions";
-import { Button, SvgIcon } from "@mui/material";
-import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog";
-import { useDialog } from "/src/hooks/use-dialog";
-import { Sync } from "@mui/icons-material";
+import { CippTenantTable } from "../../../components/CippWizard/CippTenantTable";
const Page = () => {
const pageTitle = "Tenants - Backend";
- const createDialog = useDialog();
- // Actions formatted as per your guidelines
- const actions = [
- {
- label: "Exclude Tenants",
- type: "POST",
- url: `/api/ExecExcludeTenant?AddExclusion=true`,
- data: { value: "customerId" },
- confirmText: "Are you sure you want to exclude these tenants?",
- multiPost: false,
- },
- {
- label: "Include Tenants",
- type: "POST",
- url: `/api/ExecExcludeTenant?RemoveExclusion=true`,
- data: { value: "customerId" },
- confirmText: "Are you sure you want to include these tenants?",
- multiPost: false,
- },
- {
- label: "Refresh CPV Permissions",
- type: "POST",
- url: `/api/ExecCPVPermissions`,
- data: { TenantFilter: "customerId" },
- confirmText: "Are you sure you want to refresh the CPV permissions for these tenants?",
- multiPost: false,
- },
- {
- label: "Reset CPV Permissions",
- type: "POST",
- url: `/api/ExecCPVPermissions?&ResetSP=true`,
- data: { TenantFilter: "customerId" },
- confirmText:
- "Are you sure you want to reset the CPV permissions for these tenants? (This will delete the Service Principal and re-add it.)",
- multiPost: false,
- },
- {
- label: "Remove Tenant",
- type: "POST",
- url: `/api/ExecRemoveTenant`,
- data: { TenantID: "customerId" },
- confirmText: "Are you sure you want to remove this tenant?",
- multiPost: false,
- },
- ];
-
- // Offcanvas details
- const offCanvas = {
- extendedInfoFields: [
- "displayName",
- "defaultDomainName",
- "Excluded",
- "ExcludeDate",
- "ExcludeUser",
- ],
- actions: actions,
- };
-
- // Columns for the table
- const columns = [
- "displayName", // Tenant Name
- "defaultDomainName", // Default Domain
- "Excluded", // Excluded Status
- "ExcludeDate", // Exclude Date
- "ExcludeUser", // Exclude User
- ];
-
- return (
- <>
-
-
-
-
- Force Refresh
-
- }
- tenantInTitle={false}
- apiUrl="/api/ExecExcludeTenant?ListAll=True"
- actions={actions}
- offCanvas={offCanvas}
- simpleColumns={columns}
- filters={[
- {
- filterName: "Included tenants",
- //true or false filters by yes/no
- value: [{ id: "Excluded", value: "No" }],
- type: "column",
- },
- {
- filterName: "Excluded tenants",
- value: [{ id: "Excluded", value: "Yes" }],
- type: "column",
- },
- ]}
- />
-
- >
- );
+ return ;
};
Page.getLayout = (page) => (
diff --git a/src/pages/cipp/super-admin/cipp-roles/add.js b/src/pages/cipp/super-admin/cipp-roles/add.js
new file mode 100644
index 000000000000..1734bd047245
--- /dev/null
+++ b/src/pages/cipp/super-admin/cipp-roles/add.js
@@ -0,0 +1,23 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import CippPageCard from "/src/components/CippCards/CippPageCard";
+import { CippRoleAddEdit } from "/src/components/CippSettings/CippRoleAddEdit";
+import { CardContent, Stack, Alert } from "@mui/material";
+
+const AddRolePage = () => {
+ return (
+
+
+
+
+ Create a new custom role with specific permissions and settings.
+
+
+
+
+
+ );
+};
+
+AddRolePage.getLayout = (page) => {page};
+
+export default AddRolePage;
diff --git a/src/pages/cipp/super-admin/cipp-roles/edit.js b/src/pages/cipp/super-admin/cipp-roles/edit.js
new file mode 100644
index 000000000000..85a4b2e0c431
--- /dev/null
+++ b/src/pages/cipp/super-admin/cipp-roles/edit.js
@@ -0,0 +1,28 @@
+import { useRouter } from "next/router";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import CippPageCard from "/src/components/CippCards/CippPageCard";
+import { CippRoleAddEdit } from "/src/components/CippSettings/CippRoleAddEdit";
+import { CardContent, Stack, Alert } from "@mui/material";
+
+const EditRolePage = () => {
+ const router = useRouter();
+ const { role } = router.query;
+
+ return (
+
+
+
+
+ Editing an existing role will update the permissions for all users assigned to this
+ role.
+
+
+
+
+
+ );
+};
+
+EditRolePage.getLayout = (page) => {page};
+
+export default EditRolePage;
diff --git a/src/pages/cipp/super-admin/cipp-roles/index.js b/src/pages/cipp/super-admin/cipp-roles/index.js
new file mode 100644
index 000000000000..91a7da35ad7c
--- /dev/null
+++ b/src/pages/cipp/super-admin/cipp-roles/index.js
@@ -0,0 +1,31 @@
+import { TabbedLayout } from "/src/layouts/TabbedLayout";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import tabOptions from "../tabOptions";
+import CippPageCard from "/src/components/CippCards/CippPageCard";
+import CippRoles from "/src/components/CippSettings/CippRoles";
+import { CardContent, Stack, Typography } from "@mui/material";
+
+const Page = () => {
+ return (
+
+
+
+
+ CIPP roles can be used to restrict permissions for users with the 'editor' or 'readonly'
+ roles in CIPP. They can be limited to a subset of tenants and API permissions. To
+ restrict direct API access, create a role with the name 'CIPP-API'.
+
+
+
+
+
+ );
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
diff --git a/src/pages/cipp/super-admin/custom-roles.js b/src/pages/cipp/super-admin/custom-roles.js
deleted file mode 100644
index 76e95c16241b..000000000000
--- a/src/pages/cipp/super-admin/custom-roles.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { TabbedLayout } from "/src/layouts/TabbedLayout";
-import { Layout as DashboardLayout } from "/src/layouts/index.js";
-import tabOptions from "./tabOptions";
-import CippPageCard from "/src/components/CippCards/CippPageCard";
-import { CippCustomRoles } from "/src/components/CippSettings/CippCustomRoles";
-import { Alert, CardContent, Stack, Typography } from "@mui/material";
-import { WarningAmberOutlined } from "@mui/icons-material";
-
-const Page = () => {
- return (
-
-
-
-
- Custom roles can be used to restrict permissions for users with the 'editor' or
- 'readonly' roles in CIPP. They can be limited to a subset of tenants and API
- permissions. To restrict direct API access, create a role with the name 'CIPP-API'.
-
- }>
- This functionality is in beta and should be treated as such. The custom role must be
- added to the user in SWA in conjunction with the base role. (e.g. editor,mycustomrole)
-
-
-
-
-
- );
-};
-
-Page.getLayout = (page) => (
-
- {page}
-
-);
-
-export default Page;
diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js
index 489785fa9274..8ac30a79831e 100644
--- a/src/pages/cipp/super-admin/function-offloading.js
+++ b/src/pages/cipp/super-admin/function-offloading.js
@@ -3,12 +3,14 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js";
import tabOptions from "./tabOptions";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
import { useForm } from "react-hook-form";
-import { Typography } from "@mui/material";
-import Grid from "@mui/material/Grid2";
+import { Alert, Link } from "@mui/material";
+import { Grid } from "@mui/system";
import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
-import { ApiGetCall } from "../../../api/ApiCall";
+import { ApiGetCall, ApiPostCall } from "../../../api/ApiCall";
import { useEffect } from "react";
-import Link from "next/link";
+import NextLink from "next/link";
+import { CippDataTable } from "/src/components/CippTable/CippDataTable";
+import { TrashIcon } from "@heroicons/react/24/outline";
const Page = () => {
const pageTitle = "Function Offloading";
@@ -25,13 +27,37 @@ const Page = () => {
queryKey: "execOffloadFunctions",
});
+ const deleteOffloadEntry = ApiPostCall({
+ urlFromData: true,
+ relatedQueryKeys: ["execOffloadFunctions"],
+ });
+
+ const handleDeleteOffloadEntry = (row) => {
+ const entity = {
+ RowKey: row.Name,
+ PartitionKey: "Version",
+ };
+
+ deleteOffloadEntry.mutate({
+ url: "/api/ExecAzBobbyTables",
+ data: {
+ FunctionName: "Remove-AzDataTableEntity",
+ TableName: "Version",
+ Parameters: {
+ Entity: entity,
+ Force: true,
+ },
+ },
+ });
+ };
+
useEffect(() => {
if (execOffloadFunctions.isSuccess) {
formControl.reset({
OffloadFunctions: execOffloadFunctions.data?.OffloadFunctions,
});
}
- }, [execOffloadFunctions.isSuccess]);
+ }, [execOffloadFunctions.isSuccess, execOffloadFunctions.data]);
return (
{
queryKey={"execOffloadFunctions"}
>
-
-
- This mode enables offloading some of the more processor intensive functions to a
- separate function app. This can be useful in environments where the CIPP server is under
- heavy load. Please review{" "}
-
- our documentation
- {" "}
- for more information on how to configure this for your environment.
-
+
+ This mode enables offloading some of the more processor intensive functions to a separate
+ function app. This can be useful in environments where the CIPP server is under heavy
+ load. Please review{" "}
+
+ our documentation
+ {" "}
+ for more information on how to configure this for your environment.
+
+ If you are self-hosted, you must deploy the additional function app(s) to your CIPP
+ resource group and enable CI/CD or all background tasks will fail.
+
+
+
+ ,
+ url: "/api/ExecAzBobbyTables",
+ type: "POST",
+ customFunction: handleDeleteOffloadEntry,
+ confirmText:
+ "Are you sure you want to delete the offloaded function entry for [Name]? This does not delete the function app from Azure, this must be done first or it will register again.",
+ condition: (row) => row.Default !== true,
+ },
+ ]}
+ />
-
+ {execOffloadFunctions.data?.Alerts?.length > 0 && (
+
+ {execOffloadFunctions.data?.Alerts.map((alert, index) => (
+
+ {alert}
+
+ ))}
+
+ )}
+
diff --git a/src/pages/cipp/super-admin/sam-app-permissions.js b/src/pages/cipp/super-admin/sam-app-permissions.js
index 6161405e391a..f52b0a0711d5 100644
--- a/src/pages/cipp/super-admin/sam-app-permissions.js
+++ b/src/pages/cipp/super-admin/sam-app-permissions.js
@@ -42,6 +42,7 @@ const Page = () => {
This functionality is in beta and should be treated as such. Removing permissions from
the CIPP-SAM app is not advised.
+ {execSamAppPermissions.isLoading && }
{execSamAppPermissions.isSuccess && (
{
TenantMode: execPartnerMode.data?.TenantMode,
});
}
- }, [execPartnerMode.isSuccess]);
+ }, [execPartnerMode.isSuccess, execPartnerMode.data]);
return (
{
queryKey={["execPartnerMode", "TenantSelector"]}
>
-
+
The configuration settings below should only be modified by a super admin. Super admins
can configure what tenant mode CIPP operates in. See{" "}
@@ -72,7 +73,7 @@ const Page = () => {
for more information on how to configure these modes and what they mean.
-
+ {
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: {
+ displayName: "",
+ firstName: "",
+ lastName: "",
+ email: "",
+ hidefromGAL: false,
+ streetAddress: "",
+ postalCode: "",
+ city: "",
+ state: "",
+ country: "",
+ companyName: "",
+ mobilePhone: "",
+ businessPhone: "",
+ jobTitle: "",
+ website: "",
+ mailTip: "",
+ },
+ });
+
+ return (
+ {
+ return {
+ DisplayName: values.displayName,
+ hidefromGAL: values.hidefromGAL,
+ email: values.email,
+ FirstName: values.firstName,
+ LastName: values.lastName,
+ Title: values.jobTitle,
+ StreetAddress: values.streetAddress,
+ PostalCode: values.postalCode,
+ City: values.city,
+ State: values.state,
+ CountryOrRegion: values.country?.value || values.country,
+ Company: values.companyName,
+ mobilePhone: values.mobilePhone,
+ phone: values.businessPhone,
+ website: values.website,
+ mailTip: values.mailTip,
+ };
+ }}
+ >
+
+
+ );
+};
+
+AddContactTemplates.getLayout = (page) => {page};
+
+export default AddContactTemplates;
diff --git a/src/pages/email/administration/contacts-template/deploy.jsx b/src/pages/email/administration/contacts-template/deploy.jsx
new file mode 100644
index 000000000000..6766b209d6ba
--- /dev/null
+++ b/src/pages/email/administration/contacts-template/deploy.jsx
@@ -0,0 +1,65 @@
+import { Divider } from "@mui/material";
+import { Grid } from "@mui/system";
+import { useForm } from "react-hook-form";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
+import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector";
+
+const Page = () => {
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: {
+ selectedTenants: [],
+ TemplateList: [],
+ },
+ });
+
+ return (
+
+
+
+
+
+
+
+
+ {/* TemplateList */}
+
+ option,
+ url: "/api/ListContactTemplates",
+ }}
+ placeholder="Select a template or enter PowerShell JSON manually"
+ />
+
+
+
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/email/administration/contacts-template/edit.jsx b/src/pages/email/administration/contacts-template/edit.jsx
new file mode 100644
index 000000000000..100eebe46731
--- /dev/null
+++ b/src/pages/email/administration/contacts-template/edit.jsx
@@ -0,0 +1,146 @@
+import { useEffect, useMemo, useCallback } from "react";
+import { useForm } from "react-hook-form";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton";
+import ContactFormLayout from "/src/components/CippFormPages/CippAddEditContact";
+import { ApiGetCall } from "../../../../api/ApiCall";
+import countryList from "/src/data/countryList.json";
+import { useRouter } from "next/router";
+
+const countryLookup = new Map(countryList.map((country) => [country.Name, country.Code]));
+
+const EditContactTemplate = () => {
+ const router = useRouter();
+ const { id } = router.query;
+
+ const contactTemplateInfo = ApiGetCall({
+ url: `/api/ListContactTemplates?id=${id}`,
+ queryKey: `ListContactTemplates-${id}`,
+ waiting: !!id,
+ });
+
+ const defaultFormValues = useMemo(
+ () => ({
+ displayName: "",
+ firstName: "",
+ lastName: "",
+ email: "",
+ hidefromGAL: false,
+ streetAddress: "",
+ postalCode: "",
+ city: "",
+ state: "",
+ country: "",
+ companyName: "",
+ mobilePhone: "",
+ businessPhone: "",
+ jobTitle: "",
+ website: "",
+ mailTip: "",
+ }),
+ []
+ );
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: defaultFormValues,
+ });
+
+ // Memoize processed contact data
+ const processedContactData = useMemo(() => {
+ if (!contactTemplateInfo.isSuccess || !contactTemplateInfo.data) {
+ return null;
+ }
+
+ // Handle both single object (when fetching by ID) and array responses
+ const contact = Array.isArray(contactTemplateInfo.data)
+ ? contactTemplateInfo.data[0]
+ : contactTemplateInfo.data;
+ const address = contact.addresses?.[0] || {};
+ const phones = contact.phones || [];
+
+ // Use Map for O(1) phone lookup
+ const phoneMap = new Map(phones.map((p) => [p.type, p.number]));
+
+ return {
+ ContactTemplateID: id || "",
+ displayName: contact.displayName || "",
+ firstName: contact.givenName || "",
+ lastName: contact.surname || "",
+ email: contact.email || "",
+ hidefromGAL: contact.hidefromGAL || false,
+ streetAddress: address.street || "",
+ postalCode: address.postalCode || "",
+ city: address.city || "",
+ state: address.state || "",
+ country: address.countryOrRegion ? countryLookup.get(address.countryOrRegion) || "" : "",
+ companyName: contact.companyName || "",
+ mobilePhone: phoneMap.get("mobile") || "",
+ businessPhone: phoneMap.get("business") || "",
+ jobTitle: contact.jobTitle || "",
+ website: contact.website || "",
+ mailTip: contact.mailTip || "",
+ };
+ }, [contactTemplateInfo.isSuccess, contactTemplateInfo.data]);
+
+ // Use callback to prevent unnecessary re-renders
+ const resetForm = useCallback(() => {
+ if (processedContactData) {
+ formControl.reset(processedContactData);
+ }
+ }, [processedContactData, formControl]);
+
+ useEffect(() => {
+ resetForm();
+ }, [resetForm]);
+
+ // Memoize custom data formatter
+ const customDataFormatter = useCallback((values) => {
+ return {
+ ContactTemplateID: id,
+ DisplayName: values.displayName,
+ hidefromGAL: values.hidefromGAL,
+ email: values.email,
+ FirstName: values.firstName,
+ LastName: values.lastName,
+ Title: values.jobTitle,
+ StreetAddress: values.streetAddress,
+ PostalCode: values.postalCode,
+ City: values.city,
+ State: values.state,
+ CountryOrRegion: values.country?.value || values.country,
+ Company: values.companyName,
+ mobilePhone: values.mobilePhone,
+ phone: values.businessPhone,
+ website: values.website,
+ mailTip: values.mailTip,
+ };
+ });
+
+ const contactTemplate = Array.isArray(contactTemplateInfo.data)
+ ? contactTemplateInfo.data[0]
+ : contactTemplateInfo.data;
+
+ return (
+
+ {contactTemplateInfo.isLoading && }
+ {!contactTemplateInfo.isLoading && (
+
+ )}
+
+ );
+};
+
+EditContactTemplate.getLayout = (page) => {page};
+
+export default EditContactTemplate;
diff --git a/src/pages/email/administration/contacts-template/index.jsx b/src/pages/email/administration/contacts-template/index.jsx
new file mode 100644
index 000000000000..6257f6aa9a5c
--- /dev/null
+++ b/src/pages/email/administration/contacts-template/index.jsx
@@ -0,0 +1,114 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { Button } from "@mui/material";
+import Link from "next/link";
+import { RocketLaunch } from "@mui/icons-material";
+import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { GitHub, Edit } from "@mui/icons-material";
+import { ApiGetCall } from "/src/api/ApiCall";
+
+const Page = () => {
+ const pageTitle = "Contact Templates";
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+ const actions = [
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: {
+ WriteAccess: true,
+ },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: {
+ required: { value: true, message: "This field is required" },
+ },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveContactTemplates",
+ data: {
+ ID: "GUID",
+ },
+ confirmText: "Do you want to delete the template?",
+ icon: ,
+ color: "danger",
+ },
+ {
+ label: "Edit Contact Template",
+ link: "/email/administration/contacts-template/edit?id=[GUID]",
+ icon: ,
+ color: "success",
+ target: "_self",
+ },
+ ];
+ const simpleColumns = ["name", "contactTemplateName", "GUID"];
+
+ return (
+
+ }
+ >
+ Deploy Contact Template
+
+ }
+ >
+ New Contact Template
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/email/administration/contacts/add.jsx b/src/pages/email/administration/contacts/add.jsx
index 00c8becbe01a..c8591f61acca 100644
--- a/src/pages/email/administration/contacts/add.jsx
+++ b/src/pages/email/administration/contacts/add.jsx
@@ -1,11 +1,10 @@
-import React from "react";
-import { Grid, Divider } from "@mui/material";
import { useForm } from "react-hook-form";
-import { useSelector } from "react-redux";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
-import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
import { useSettings } from "../../../../hooks/use-settings";
+import { Divider } from "@mui/material";
+import { Grid } from "@mui/system";
+import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
const AddContact = () => {
const tenantDomain = useSettings().currentTenant;
@@ -18,6 +17,17 @@ const AddContact = () => {
lastName: "",
email: "",
hidefromGAL: false,
+ streetAddress: "",
+ postalCode: "",
+ city: "",
+ state: "",
+ country: "",
+ companyName: "",
+ mobilePhone: "",
+ businessPhone: "",
+ jobTitle: "",
+ website: "",
+ mailTip: "",
},
});
@@ -28,21 +38,32 @@ const AddContact = () => {
title="Add Contact"
backButtonTitle="Contacts Overview"
postUrl="/api/AddContact"
+ resetForm={true}
customDataformatter={(values) => {
- // Add tenantDomain to the payload
return {
tenantID: tenantDomain,
- firstName: values.firstName,
- lastName: values.lastName,
- displayName: values.displayName,
- email: values.email,
+ DisplayName: values.displayName,
hidefromGAL: values.hidefromGAL,
+ email: values.email,
+ FirstName: values.firstName,
+ LastName: values.lastName,
+ Title: values.jobTitle,
+ StreetAddress: values.streetAddress,
+ PostalCode: values.postalCode,
+ City: values.city,
+ State: values.state,
+ CountryOrRegion: values.country?.value || values.country,
+ Company: values.companyName,
+ mobilePhone: values.mobilePhone,
+ phone: values.businessPhone,
+ website: values.website,
+ mailTip: values.mailTip,
};
}}
>
{/* Display Name */}
-
+ {
{/* First Name and Last Name */}
-
+ {
formControl={formControl}
/>
-
+ {
{/* Email */}
-
+ {
{/* Hide from GAL */}
-
+ [country.Name, country.Code]));
+
+const EditContact = () => {
+ const tenantDomain = useSettings().currentTenant;
+ const router = useRouter();
+ const { id } = router.query;
+
+ const contactInfo = ApiGetCall({
+ url: `/api/ListContacts?tenantFilter=${tenantDomain}&id=${id}`,
+ queryKey: `ListContacts-${id}`,
+ waiting: !!id,
+ });
+
+ const defaultFormValues = useMemo(
+ () => ({
+ displayName: "",
+ firstName: "",
+ lastName: "",
+ email: "",
+ hidefromGAL: false,
+ streetAddress: "",
+ postalCode: "",
+ city: "",
+ state: "",
+ country: "",
+ companyName: "",
+ mobilePhone: "",
+ businessPhone: "",
+ jobTitle: "",
+ website: "",
+ mailTip: "",
+ }),
+ []
+ );
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: defaultFormValues,
+ });
+
+ // Memoize processed contact data
+ const processedContactData = useMemo(() => {
+ if (!contactInfo.isSuccess || !contactInfo.data) {
+ return null;
+ }
+
+ const contact = contactInfo.data;
+ const address = contact.addresses?.[0] || {};
+ const phones = contact.phones || [];
+
+ // Use Map for O(1) phone lookup
+ const phoneMap = new Map(phones.map((p) => [p.type, p.number]));
+
+ return {
+ displayName: contact.displayName || "",
+ firstName: contact.givenName || "",
+ lastName: contact.surname || "",
+ email: contact.mail || "",
+ hidefromGAL: contact.hidefromGAL || false,
+ streetAddress: address.street || "",
+ postalCode: address.postalCode || "",
+ city: address.city || "",
+ state: address.state || "",
+ country: address.countryOrRegion ? countryLookup.get(address.countryOrRegion) || "" : "",
+ companyName: contact.companyName || "",
+ mobilePhone: phoneMap.get("mobile") || "",
+ businessPhone: phoneMap.get("business") || "",
+ jobTitle: contact.jobTitle || "",
+ website: contact.website || "",
+ mailTip: contact.mailTip || "",
+ };
+ }, [contactInfo.isSuccess, contactInfo.data]);
+
+ // Use callback to prevent unnecessary re-renders
+ const resetForm = useCallback(() => {
+ if (processedContactData) {
+ formControl.reset(processedContactData);
+ }
+ }, [processedContactData, formControl]);
+
+ useEffect(() => {
+ resetForm();
+ }, [resetForm]);
+
+ // Memoize custom data formatter
+ const customDataFormatter = useCallback(
+ (values) => {
+ const contact = Array.isArray(contactInfo.data) ? contactInfo.data[0] : contactInfo.data;
+ return {
+ tenantID: tenantDomain,
+ ContactID: contact?.id,
+ DisplayName: values.displayName,
+ hidefromGAL: values.hidefromGAL,
+ email: values.email,
+ FirstName: values.firstName,
+ LastName: values.lastName,
+ Title: values.jobTitle,
+ StreetAddress: values.streetAddress,
+ PostalCode: values.postalCode,
+ City: values.city,
+ State: values.state,
+ CountryOrRegion: values.country?.value || values.country,
+ Company: values.companyName,
+ mobilePhone: values.mobilePhone,
+ phone: values.businessPhone,
+ website: values.website,
+ mailTip: values.mailTip,
+ };
+ },
+ [tenantDomain, contactInfo.data]
+ );
+
+ const contact = Array.isArray(contactInfo.data) ? contactInfo.data[0] : contactInfo.data;
+
+ return (
+
+ {contactInfo.isLoading && }
+ {!contactInfo.isLoading && (
+
+ {/* Display Name */}
+
+
+
+
+ {/* First Name and Last Name */}
+
+
+
+
+
+
+
+
+
+ {/* Email */}
+
+
+
+
+ {/* Hide from GAL */}
+
+
+
+
+
+
+ {/* Company Information */}
+
+
+
+
+
+
+
+
+
+ {/* Address Information */}
+
+
+
+
+
+
+
+
+
+
+ ({
+ label: Name,
+ value: Code,
+ }))}
+ formControl={formControl}
+ />
+
+
+
+
+ {/* Phone Numbers */}
+
+
+
+
+
+
+
+ )}
+
+ );
+};
+
+EditContact.getLayout = (page) => {page};
+
+export default EditContact;
diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js
index d32c9f8a2a6b..48e5f2a65453 100644
--- a/src/pages/email/administration/contacts/index.js
+++ b/src/pages/email/administration/contacts/index.js
@@ -1,34 +1,55 @@
+import { useMemo } from "react";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
-import { Edit } from "@mui/icons-material";
+import { Edit, PersonAdd } from "@mui/icons-material";
import { Button } from "@mui/material";
import Link from "next/link";
+import TrashIcon from "@heroicons/react/24/outline/TrashIcon";
const Page = () => {
const pageTitle = "Contacts";
-
- const actions = [
+ const actions = useMemo(() => [
+ {
+ label: "Edit Contact",
+ link: "/email/administration/contacts/edit?id=[Guid]",
+ multiPost: false,
+ postEntireRow: true,
+ icon: ,
+ color: "warning",
+ condition: (row) => !row.IsDirSynced,
+ },
{
label: "Remove Contact",
type: "POST",
url: "/api/RemoveContact",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
+ GUID: "Guid",
+ mail: "WindowsEmailAddress",
},
- confirmText: "Are you sure you want to delete this contact?",
+ confirmText:
+ "Are you sure you want to delete this contact? Remember this will not work if the contact is AD Synced.",
color: "danger",
+ icon: ,
+ condition: (row) => !row.IsDirSynced,
},
- {
- label: "Edit Contact",
- link: "/email/administration/edit-contact/[id]",
- multiPost: false,
- icon: ,
- color: "warning",
- },
- ];
+ ], []);
+
+ const simpleColumns = useMemo(() => [
+ "DisplayName",
+ "WindowsEmailAddress",
+ "Company",
+ "IsDirSynced"
+ ], []);
- const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"];
+ const cardButton = useMemo(() => (
+ }
+ >
+ Add contact
+
+ ), []);
return (
{
apiUrl="/api/ListContacts"
actions={actions}
simpleColumns={simpleColumns}
- cardButton={
- <>
-
- Add contact
-
- >
- }
+ cardButton={cardButton}
/>
);
};
diff --git a/src/pages/email/administration/mailbox-rules/index.js b/src/pages/email/administration/mailbox-rules/index.js
index c80b749aad07..956d9df8aa38 100644
--- a/src/pages/email/administration/mailbox-rules/index.js
+++ b/src/pages/email/administration/mailbox-rules/index.js
@@ -1,17 +1,47 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
-import { TrashIcon } from "@heroicons/react/24/outline";
import { getCippTranslation } from "../../../../utils/get-cipp-translation";
import { getCippFormatting } from "../../../../utils/get-cipp-formatting";
import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard";
+import { Block, PlayArrow, DeleteForever } from "@mui/icons-material";
const Page = () => {
const pageTitle = "Mailbox Rules";
const actions = [
+ {
+ label: "Enable Mailbox Rule",
+ type: "POST",
+ icon: ,
+ url: "/api/ExecSetMailboxRule",
+ data: {
+ ruleId: "Identity",
+ userPrincipalName: "UserPrincipalName",
+ ruleName: "Name",
+ Enable: true,
+ },
+ condition: (row) => !row.Enabled,
+ confirmText: "Are you sure you want to enable this mailbox rule?",
+ multiPost: false,
+ },
+ {
+ label: "Disable Mailbox Rule",
+ type: "POST",
+ icon: ,
+ url: "/api/ExecSetMailboxRule",
+ data: {
+ ruleId: "Identity",
+ userPrincipalName: "UserPrincipalName",
+ ruleName: "Name",
+ Disable: true,
+ },
+ condition: (row) => row.Enabled,
+ confirmText: "Are you sure you want to disable this mailbox rule?",
+ multiPost: false,
+ },
{
label: "Remove Mailbox Rule",
- type: "GET",
- icon: ,
+ type: "POST",
+ icon: ,
url: "/api/ExecRemoveMailboxRule",
data: { ruleId: "Identity", userPrincipalName: "UserPrincipalName", ruleName: "Name" },
confirmText: "Are you sure you want to remove this mailbox rule?",
@@ -39,6 +69,7 @@ const Page = () => {
title="Rule Details"
propertyItems={properties}
actionItems={actions}
+ data={data}
/>
);
},
diff --git a/src/pages/email/administration/mailboxes/addshared.jsx b/src/pages/email/administration/mailboxes/addshared.jsx
index eab577bed6cf..7c1e00885b84 100644
--- a/src/pages/email/administration/mailboxes/addshared.jsx
+++ b/src/pages/email/administration/mailboxes/addshared.jsx
@@ -1,7 +1,6 @@
-import React from "react";
-import { Grid, Divider } from "@mui/material";
+import { Divider } from "@mui/material";
+import { Grid } from "@mui/system";
import { useForm } from "react-hook-form";
-import { useSelector } from "react-redux";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
@@ -29,6 +28,7 @@ const AddContact = () => {
title="Shared Mailbox"
backButtonTitle="Mailbox Overview"
postUrl="/api/AddSharedMailbox"
+ resetForm={true}
customDataformatter={(values) => {
return {
tenantID: tenantDomain,
@@ -39,7 +39,7 @@ const AddContact = () => {
}}
>
-
+ {
{/* Email */}
-
+ {
formControl={formControl}
/>
-
+
diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js
index 81726a1abd14..da5479b87fb4 100644
--- a/src/pages/email/administration/mailboxes/index.js
+++ b/src/pages/email/administration/mailboxes/index.js
@@ -2,141 +2,16 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
import Link from "next/link";
import { Button } from "@mui/material";
-
-import {
- Archive,
- MailOutline,
- Person,
- Room,
- Visibility,
- VisibilityOff,
- PhonelinkLock,
- Key,
-} from "@mui/icons-material";
-import { TrashIcon, MagnifyingGlassIcon, PlayCircleIcon } from "@heroicons/react/24/outline";
+import { Add } from "@mui/icons-material";
+import CippExchangeActions from "../../../../components/CippComponents/CippExchangeActions";
const Page = () => {
const pageTitle = "Mailboxes";
- // Define actions for mailboxes
- const actions = [
- {
- label: "Edit permissions",
- link: "/identity/administration/users/user/exchange?userId=[ExternalDirectoryObjectId]",
- color: "info",
- icon: ,
- },
- {
- label: "Research Compromised Account",
- link: "/identity/administration/users/user/bec?userId=[ExternalDirectoryObjectId]",
- color: "info",
- icon: ,
- },
- {
- label: "Send MFA Push",
- type: "GET",
- url: "/api/ExecSendPush",
- data: {
- UserEmail: "UPN",
- },
- confirmText: "Are you sure you want to send an MFA request?",
- icon: ,
- },
- {
- label: "Convert to Shared Mailbox",
- type: "GET",
- icon: ,
- url: "/api/ExecConvertToSharedMailbox",
- data: {
- ID: "UPN",
- },
- confirmText: "Are you sure you want to convert this mailbox to a shared mailbox?",
- condition: (row) => row.recipientTypeDetails !== "SharedMailbox",
- },
- {
- label: "Convert to User Mailbox",
- type: "GET",
- url: "/api/ExecConvertToSharedMailbox",
- icon: ,
- data: {
- ID: "UPN",
- ConvertToUser: true,
- },
- confirmText: "Are you sure you want to convert this mailbox to a user mailbox?",
- condition: (row) => row.recipientTypeDetails !== "UserMailbox",
- },
- {
- label: "Convert to Room Mailbox",
- type: "GET",
- url: "/api/ExecConvertToRoomMailbox",
- icon: ,
- data: {
- ID: "UPN",
- },
- confirmText: "Are you sure you want to convert this mailbox to a room mailbox?",
- condition: (row) => row.recipientTypeDetails !== "RoomMailbox",
- },
- {
- //tested
- label: "Enable Online Archive",
- type: "GET",
- icon: ,
- url: "/api/ExecEnableArchive",
- data: { ID: "UPN" },
- confirmText: "Are you sure you want to enable the online archive for this user?",
- multiPost: false,
- condition: (row) => row.ArchiveGuid === "00000000-0000-0000-0000-000000000000",
- },
- {
- label: "Hide from Global Address List",
- type: "POST",
- url: "/api/ExecHideFromGAL",
- icon: ,
- data: {
- ID: "UPN",
- HidefromGAL: true,
- },
- confirmText:
- "Are you sure you want to hide this mailbox from the global address list? This will not work if the user is AD Synced.",
- condition: (row) => row.HiddenFromAddressListsEnabled === false,
- },
- {
- label: "Unhide from Global Address List",
- type: "POST",
- url: "/api/ExecHideFromGAL",
- icon: ,
- data: {
- ID: "UPN",
- },
- confirmText:
- "Are you sure you want to unhide this mailbox from the global address list? This will not work if the user is AD Synced.",
- condition: (row) => row.HiddenFromAddressListsEnabled === true,
- },
- {
- label: "Start Managed Folder Assistant",
- type: "GET",
- url: "/api/ExecStartManagedFolderAssistant",
- icon: ,
- data: {
- ID: "UPN",
- },
- confirmText: "Are you sure you want to start the managed folder assistant for this user?",
- },
- {
- label: "Delete Mailbox",
- type: "GET",
- icon: , // Added
- url: "/api/RemoveMailbox",
- data: { ID: "UPN" },
- confirmText: "Are you sure you want to delete this mailbox?",
- multiPost: false,
- },
- ];
-
// Define off-canvas details
const offCanvas = {
extendedInfoFields: ["displayName", "UPN", "AdditionalEmailAddresses", "recipientTypeDetails"],
- actions: actions,
+ actions: CippExchangeActions(),
};
const filterList = [
@@ -176,13 +51,17 @@ const Page = () => {
-
+ }
+ href="/email/administration/mailboxes/addshared"
+ >
Add Shared Mailbox
>
diff --git a/src/pages/email/administration/quarantine/index.js b/src/pages/email/administration/quarantine/index.js
index e784d8888a0e..3009973001a0 100644
--- a/src/pages/email/administration/quarantine/index.js
+++ b/src/pages/email/administration/quarantine/index.js
@@ -1,8 +1,16 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
import { useEffect, useState } from "react";
-import { Dialog, DialogTitle, DialogContent, IconButton, Skeleton, Typography, CircularProgress } from "@mui/material";
-import { Block, Close, Done, DoneAll, Subject } from "@mui/icons-material";
+import {
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ IconButton,
+ Skeleton,
+ Typography,
+ CircularProgress,
+} from "@mui/material";
+import { Block, Close, Done, DoneAll } from "@mui/icons-material";
import { CippMessageViewer } from "/src/components/CippComponents/CippMessageViewer.jsx";
import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall";
import { useSettings } from "/src/hooks/use-settings";
@@ -10,13 +18,14 @@ import { EyeIcon, DocumentTextIcon } from "@heroicons/react/24/outline";
import { CippDataTable } from "/src/components/CippTable/CippDataTable";
const simpleColumns = [
+ "ReceivedTime",
+ "ReleaseStatus",
+ "Subject",
"SenderAddress",
"RecipientAddress",
- "Subject",
"Type",
- "ReceivedTime",
- "ReleaseStatus",
"PolicyName",
+ "Tenant",
];
const detailColumns = ["Received", "Status", "SenderAddress", "RecipientAddress"];
const pageTitle = "Quarantine Management";
@@ -30,6 +39,7 @@ const Page = () => {
const [traceDetails, setTraceDetails] = useState([]);
const [traceMessageId, setTraceMessageId] = useState(null);
const [messageSubject, setMessageSubject] = useState(null);
+ const [messageContentsWaiting, setMessageContentsWaiting] = useState(false);
const getMessageContents = ApiGetCall({
url: "/api/ListMailQuarantineMessage",
@@ -37,7 +47,7 @@ const Page = () => {
tenantFilter: tenantFilter,
Identity: messageId,
},
- waiting: false,
+ waiting: messageContentsWaiting,
queryKey: `ListMailQuarantineMessage-${messageId}`,
});
@@ -52,7 +62,9 @@ const Page = () => {
const viewMessage = (row) => {
const id = row.Identity;
setMessageId(id);
- getMessageContents.waiting = true;
+ if (!messageContentsWaiting) {
+ setMessageContentsWaiting(true);
+ }
getMessageContents.refetch();
setDialogOpen(true);
};
@@ -76,7 +88,7 @@ const Page = () => {
} else {
setDialogContent();
}
- }, [getMessageContents.isSuccess]);
+ }, [getMessageContents.isSuccess, getMessageContents.data]);
const actions = [
{
@@ -95,12 +107,14 @@ const Page = () => {
label: "Release",
type: "POST",
url: "/api/ExecQuarantineManagement",
+ multiPost: true,
data: {
Identity: "Identity",
- Type: "Release",
+ Type: "!Release",
},
confirmText: "Are you sure you want to release this message?",
icon: ,
+ condition: (row) => row.ReleaseStatus !== "RELEASED",
},
{
label: "Deny",
@@ -108,10 +122,11 @@ const Page = () => {
url: "/api/ExecQuarantineManagement",
data: {
Identity: "Identity",
- Type: "Deny",
+ Type: "!Deny",
},
confirmText: "Are you sure you want to deny this message?",
icon: ,
+ condition: (row) => row.ReleaseStatus !== "DENIED",
},
{
label: "Release & Allow Sender",
@@ -119,12 +134,13 @@ const Page = () => {
url: "/api/ExecQuarantineManagement",
data: {
Identity: "Identity",
- Type: "Release",
+ Type: "!Release",
AllowSender: true,
},
confirmText:
"Are you sure you want to release this email and add the sender to the whitelist?",
icon: ,
+ condition: (row) => row.ReleaseStatus !== "RELEASED",
},
];
@@ -144,6 +160,11 @@ const Page = () => {
value: [{ id: "ReleaseStatus", value: "RELEASED" }],
type: "column",
},
+ {
+ filterName: "Requested",
+ value: [{ id: "ReleaseStatus", value: "REQUESTED" }],
+ type: "column",
+ },
];
return (
@@ -151,6 +172,7 @@ const Page = () => {
{
const tenantDomain = useSettings().currentTenant;
@@ -17,9 +19,146 @@ const AddTenantAllowBlockList = () => {
listType: null,
listMethod: null,
NoExpiration: false,
+ RemoveAfter: false,
},
});
+ const noExpiration = useWatch({ control: formControl.control, name: "NoExpiration" });
+ const removeAfter = useWatch({ control: formControl.control, name: "RemoveAfter" });
+ const listMethod = useWatch({ control: formControl.control, name: "listMethod" });
+ const listType = useWatch({ control: formControl.control, name: "listType" });
+
+ const isListMethodBlock = listMethod?.value === "Block";
+ const isListTypeFileHash = listType?.value === "FileHash";
+ const isListTypeSenderUrlOrFileHash = ["Sender", "Url", "FileHash"].includes(listType?.value);
+ const isNoExpirationCompatible = isListMethodBlock ||
+ (listMethod?.value === "Allow" && (listType?.value === "Url" || listType?.value === "IP"));
+
+ useEffect(() => {
+ if (noExpiration) {
+ formControl.setValue("RemoveAfter", false);
+ }
+
+ if (removeAfter) {
+ formControl.setValue("NoExpiration", false);
+ }
+
+ if (isListMethodBlock) {
+ formControl.setValue("RemoveAfter", false);
+ }
+
+ if (listType && !isListTypeSenderUrlOrFileHash) {
+ formControl.setValue("RemoveAfter", false);
+ }
+
+ if (isListTypeFileHash) {
+ formControl.setValue("listMethod", { label: "Block", value: "Block" });
+ }
+
+ if (listMethod || listType) {
+ if (!isNoExpirationCompatible && noExpiration) {
+ formControl.setValue("NoExpiration", false);
+ }
+ }
+ }, [
+ noExpiration,
+ removeAfter,
+ isListMethodBlock,
+ listType,
+ isListTypeSenderUrlOrFileHash,
+ isListTypeFileHash,
+ isNoExpirationCompatible,
+ formControl
+ ]);
+
+ const validateEntries = (value) => {
+ if (!value) return true;
+
+ const entries = value.split(/[,;]/).map(e => e.trim());
+ const currentListType = listType?.value;
+
+ if (currentListType === "FileHash") {
+ for (const entry of entries) {
+ if (entry.length !== 64)
+ return "File hash entries must be exactly 64 characters";
+
+ const hashResult = getCippValidator(entry, "sha256");
+ if (hashResult !== true)
+ return hashResult;
+ }
+ } else if (currentListType === "IP") {
+ for (const entry of entries) {
+ const ipv6Result = getCippValidator(entry, "ipv6");
+ const ipv6CidrResult = getCippValidator(entry, "ipv6cidr");
+
+ if (ipv6Result !== true && ipv6CidrResult !== true)
+ return "Invalid IPv6 address format. Use colon-hexadecimal or CIDR notation";
+ }
+ } else if (currentListType === "Url") {
+ for (const entry of entries) {
+ if (entry.length > 250)
+ return "URL entries must be 250 characters or less";
+
+ // For entries with wildcards, use the improved wildcard validators
+ if (entry.includes('*') || entry.includes('~')) {
+ // Try both wildcard validators
+ const wildcardUrlResult = getCippValidator(entry, "wildcardUrl");
+ const wildcardDomainResult = getCippValidator(entry, "wildcardDomain");
+
+ if (wildcardUrlResult !== true && wildcardDomainResult !== true) {
+ // If basic pattern check fails too, give a more specific message
+ if (!/^[a-zA-Z0-9\.\-\*\~\/]+$/.test(entry)) {
+ return "Invalid wildcard pattern. Use only letters, numbers, dots, hyphens, slashes, and wildcards (* or ~)";
+ }
+
+ // If it has basic valid characters but doesn't match our patterns
+ return "Invalid wildcard format. Common formats are *.domain.com or domain.*";
+ }
+ continue;
+ }
+
+ // For non-wildcard entries, use standard validators
+ const ipv4Result = getCippValidator(entry, "ip");
+ const ipv4CidrResult = getCippValidator(entry, "ipv4cidr");
+ const ipv6Result = getCippValidator(entry, "ipv6");
+ const ipv6CidrResult = getCippValidator(entry, "ipv6cidr");
+ const hostnameResult = getCippValidator(entry, "hostname");
+ const urlResult = getCippValidator(entry, "url");
+
+ // If none of the validators pass
+ if (ipv4Result !== true &&
+ ipv4CidrResult !== true &&
+ ipv6Result !== true &&
+ ipv6CidrResult !== true &&
+ hostnameResult !== true &&
+ urlResult !== true) {
+ return "Invalid URL format. Enter hostnames, IPv4, or IPv6 addresses";
+ }
+ }
+ } else if (currentListType === "Sender") {
+ for (const entry of entries) {
+ // Check for wildcards first
+ if (entry.includes('*') || entry.includes('~')) {
+ const wildcardDomainResult = getCippValidator(entry, "wildcardDomain");
+
+ if (wildcardDomainResult !== true) {
+ return "Invalid sender wildcard pattern. Common format is *.domain.com";
+ }
+ continue;
+ }
+
+ // For non-wildcard entries, use senderEntry validator
+ const senderResult = getCippValidator(entry, "senderEntry");
+
+ if (senderResult !== true) {
+ return senderResult;
+ }
+ }
+ }
+
+ return true;
+ };
+
return (
{
notes: values.notes,
listMethod: values.listMethod?.value,
NoExpiration: values.NoExpiration,
+ RemoveAfter: values.RemoveAfter
};
}}
>
{/* Entries */}
-
+
{/* Notes & List Type */}
-
+ {
formControl={formControl}
/>
-
+
{/* List Method */}
-
+
{/* No Expiration */}
-
+
+
+
+ {/* Remove After */}
+
+
diff --git a/src/pages/email/administration/tenant-allow-block-lists/index.js b/src/pages/email/administration/tenant-allow-block-lists/index.js
index 97925a29f708..4770163895fa 100644
--- a/src/pages/email/administration/tenant-allow-block-lists/index.js
+++ b/src/pages/email/administration/tenant-allow-block-lists/index.js
@@ -2,6 +2,8 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
import { Button } from "@mui/material";
import Link from "next/link";
+import TrashIcon from "@heroicons/react/24/outline/TrashIcon";
+import { PlaylistAdd } from "@mui/icons-material";
const Page = () => {
const pageTitle = "Tenant Allow/Block Lists";
@@ -12,25 +14,21 @@ const Page = () => {
type: "POST",
url: "/api/RemoveTenantAllowBlockList",
data: {
- TenantFilter: "Tenant",
Entries: "Value",
ListType: "ListType",
},
- confirmText: "Are you sure you want to delete?",
+ confirmText: "Are you sure you want to delete this entry?",
color: "danger",
+ icon: ,
},
];
- const offCanvas = {
- extendedInfoFields: ["Value", "Notes", "ExpirationDate"],
- actions: actions,
- };
-
const simpleColumns = [
"Value",
"ListType",
"Action",
"Notes",
+ "LastUsedDate",
"LastModifiedDateTime",
"ExpirationDate",
];
@@ -40,7 +38,6 @@ const Page = () => {
title={pageTitle}
apiUrl="/api/ListTenantAllowBlockList"
actions={actions}
- offCanvas={offCanvas}
simpleColumns={simpleColumns}
titleButton={{
label: "Add",
@@ -48,7 +45,11 @@ const Page = () => {
}}
cardButton={
<>
-
+ }
+ >
Add Entry
>
diff --git a/src/pages/email/connectionfilter/deploy/index.js b/src/pages/email/connectionfilter/deploy/index.js
deleted file mode 100644
index 92cbabc77ae2..000000000000
--- a/src/pages/email/connectionfilter/deploy/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-
-import { Layout as DashboardLayout } from "/src/layouts/index.js";
-
-const Page = () => {
- const pageTitle = "Apply Spamfilter Template";
-
- return (
-
-
{pageTitle}
-
This is a placeholder page for the apply spamfilter template section.
+ The GNU Affero General Public License is a free, copyleft license for software and other
+ kinds of works, specifically designed to ensure cooperation with the community in the case
+ of network server software.
+
+
+
+ The licenses for most software and other practical works are designed to take away your
+ freedom to share and change the works. By contrast, our General Public Licenses are intended
+ to guarantee your freedom to share and change all versions of a program--to make sure it
+ remains free software for all its users.
+
+
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public
+ Licenses are designed to make sure that you have the freedom to distribute copies of free
+ software (and charge for them if you wish), that you receive source code or can get it if
+ you want it, that you can change the software or use pieces of it in new free programs, and
+ that you know you can do these things.
+
+
+
+ Developers that use our General Public Licenses protect your rights with two steps: (1)
+ assert copyright on the software, and (2) offer you this License which gives you legal
+ permission to copy, distribute and/or modify the software.
+
+
+
+ A secondary benefit of defending all users' freedom is that improvements made in
+ alternate versions of the program, if they receive widespread use, become available for
+ other developers to incorporate. Many developers of free software are heartened and
+ encouraged by the resulting cooperation. However, in the case of software used on network
+ servers, this result may fail to come about. The GNU General Public License permits making a
+ modified version and letting the public access it on a server without ever releasing its
+ source code to the public.
+
+
+
+ The GNU Affero General Public License is designed specifically to ensure that, in such
+ cases, the modified source code becomes available to the community. It requires the operator
+ of a network server to provide the source code of the modified version running there to the
+ users of that server. Therefore, public use of a modified version, on a publicly accessible
+ server, gives the public access to the source code of the modified version.
+
+
+
+ An older license, called the Affero General Public License and published by Affero, was
+ designed to accomplish similar goals. This is a different license, not a version of the
+ Affero GPL, but Affero has released a new version of the Affero GPL which permits
+ relicensing under this license.
+
+
+
The precise terms and conditions for copying, distribution and modification follow.
+
+
TERMS AND CONDITIONS
+
+
0. Definitions.
+
+
"This License" refers to version 3 of the GNU Affero General Public License.
+
+
+ "Copyright" also means copyright-like laws that apply to other kinds of works,
+ such as semiconductor masks.
+
+
+
+ "The Program" refers to any copyrightable work licensed under this License. Each
+ licensee is addressed as "you". "Licensees" and "recipients"
+ may be individuals or organizations.
+
+
+
+ To "modify" a work means to copy from or adapt all or part of the work in a
+ fashion requiring copyright permission, other than the making of an exact copy. The
+ resulting work is called a "modified version" of the earlier work or a work
+ "based on" the earlier work.
+
+
+
+ A "covered work" means either the unmodified Program or a work based on the
+ Program.
+
+
+
+ To "propagate" a work means to do anything with it that, without permission, would
+ make you directly or secondarily liable for infringement under applicable copyright law,
+ except executing it on a computer or modifying a private copy. Propagation includes copying,
+ distribution (with or without modification), making available to the public, and in some
+ countries other activities as well.
+
+
+
+ To "convey" a work means any kind of propagation that enables other parties to
+ make or receive copies. Mere interaction with a user through a computer network, with no
+ transfer of a copy, is not conveying.
+
+
+
+ An interactive user interface displays "Appropriate Legal Notices" to the extent
+ that it includes a convenient and prominently visible feature that (1) displays an
+ appropriate copyright notice, and (2) tells the user that there is no warranty for the work
+ (except to the extent that warranties are provided), that licensees may convey the work
+ under this License, and how to view a copy of this License. If the interface presents a list
+ of user commands or options, such as a menu, a prominent item in the list meets this
+ criterion.
+
+
+
1. Source Code.
+
+
+ The "source code" for a work means the preferred form of the work for making
+ modifications to it. "Object code" means any non-source form of a work.
+
+
+
+ A "Standard Interface" means an interface that either is an official standard
+ defined by a recognized standards body, or, in the case of interfaces specified for a
+ particular programming language, one that is widely used among developers working in that
+ language.
+
+
+
+ The "System Libraries" of an executable work include anything, other than the work
+ as a whole, that (a) is included in the normal form of packaging a Major Component, but
+ which is not part of that Major Component, and (b) serves only to enable use of the work
+ with that Major Component, or to implement a Standard Interface for which an implementation
+ is available to the public in source code form. A "Major Component", in this
+ context, means a major essential component (kernel, window system, and so on) of the
+ specific operating system (if any) on which the executable work runs, or a compiler used to
+ produce the work, or an object code interpreter used to run it.
+
+
+
+ The "Corresponding Source" for a work in object code form means all the source
+ code needed to generate, install, and (for an executable work) run the object code and to
+ modify the work, including scripts to control those activities. However, it does not include
+ the work's System Libraries, or general-purpose tools or generally available free
+ programs which are used unmodified in performing those activities but which are not part of
+ the work. For example, Corresponding Source includes interface definition files associated
+ with source files for the work, and the source code for shared libraries and dynamically
+ linked subprograms that the work is specifically designed to require, such as by intimate
+ data communication or control flow between those subprograms and other parts of the work.
+
+
+
+ The Corresponding Source need not include anything that users can regenerate automatically
+ from other parts of the Corresponding Source.
+
+
+
The Corresponding Source for a work in source code form is that same work.
+
+
2. Basic Permissions.
+
+
+ All rights granted under this License are granted for the term of copyright on the Program,
+ and are irrevocable provided the stated conditions are met. This License explicitly affirms
+ your unlimited permission to run the unmodified Program. The output from running a covered
+ work is covered by this License only if the output, given its content, constitutes a covered
+ work. This License acknowledges your rights of fair use or other equivalent, as provided by
+ copyright law.
+
+
+
+ You may make, run and propagate covered works that you do not convey, without conditions so
+ long as your license otherwise remains in force. You may convey covered works to others for
+ the sole purpose of having them make modifications exclusively for you, or provide you with
+ facilities for running those works, provided that you comply with the terms of this License
+ in conveying all material for which you do not control copyright. Those thus making or
+ running the covered works for you must do so exclusively on your behalf, under your
+ direction and control, on terms that prohibit them from making any copies of your
+ copyrighted material outside their relationship with you.
+
+
+
+ Conveying under any other circumstances is permitted solely under the conditions stated
+ below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+
+ No covered work shall be deemed part of an effective technological measure under any
+ applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted
+ on 20 December 1996, or similar laws prohibiting or restricting circumvention of such
+ measures.
+
+
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of
+ technological measures to the extent such circumvention is effected by exercising rights
+ under this License with respect to the covered work, and you disclaim any intention to limit
+ operation or modification of the work as a means of enforcing, against the work's
+ users, your or third parties' legal rights to forbid circumvention of technological
+ measures.
+
+
+
4. Conveying Verbatim Copies.
+
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any
+ medium, provided that you conspicuously and appropriately publish on each copy an
+ appropriate copyright notice; keep intact all notices stating that this License and any
+ non-permissive terms added in accord with section 7 apply to the code; keep intact all
+ notices of the absence of any warranty; and give all recipients a copy of this License along
+ with the Program.
+
+
+
+ You may charge any price or no price for each copy that you convey, and you may offer
+ support or warranty protection for a fee.
+
+
+
5. Conveying Modified Source Versions.
+
+
+ You may convey a work based on the Program, or the modifications to produce it from the
+ Program, in the form of source code under the terms of section 4, provided that you also
+ meet all of these conditions:
+
+
+
+
+ a) The work must carry prominent notices stating that you modified it, and giving a
+ relevant date.
+
+
+
+ b) The work must carry prominent notices stating that it is released under this License
+ and any conditions added under section 7. This requirement modifies the requirement in
+ section 4 to "keep intact all notices".
+
+
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes
+ into possession of a copy. This License will therefore apply, along with any applicable
+ section 7 additional terms, to the whole of the work, and all its parts, regardless of how
+ they are packaged. This License gives no permission to license the work in any other way,
+ but it does not invalidate such permission if you have separately received it.
+
+
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal
+ Notices; however, if the Program has interactive interfaces that do not display
+ Appropriate Legal Notices, your work need not make them do so.
+
+
+
+
+ A compilation of a covered work with other separate and independent works, which are not by
+ their nature extensions of the covered work, and which are not combined with it such as to
+ form a larger program, in or on a volume of a storage or distribution medium, is called an
+ "aggregate" if the compilation and its resulting copyright are not used to limit
+ the access or legal rights of the compilation's users beyond what the individual works
+ permit. Inclusion of a covered work in an aggregate does not cause this License to apply to
+ the other parts of the aggregate.
+
+
+
6. Conveying Non-Source Forms.
+
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5,
+ provided that you also convey the machine-readable Corresponding Source under the terms of
+ this License, in one of these ways:
+
+
+
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical
+ distribution medium), accompanied by the Corresponding Source fixed on a durable physical
+ medium customarily used for software interchange.
+
+
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical
+ distribution medium), accompanied by a written offer, valid for at least three years and
+ valid for as long as you offer spare parts or customer support for that product model, to
+ give anyone who possesses the object code either (1) a copy of the Corresponding Source
+ for all the software in the product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no more than your reasonable
+ cost of physically performing this conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide
+ the Corresponding Source. This alternative is allowed only occasionally and
+ noncommercially, and only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+
+
+ d) Convey the object code by offering access from a designated place (gratis or for a
+ charge), and offer equivalent access to the Corresponding Source in the same way through
+ the same place at no further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to copy the object code is a
+ network server, the Corresponding Source may be on a different server (operated by you or
+ a third party) that supports equivalent copying facilities, provided you maintain clear
+ directions next to the object code saying where to find the Corresponding Source.
+ Regardless of what server hosts the Corresponding Source, you remain obligated to ensure
+ that it is available for as long as needed to satisfy these requirements.
+
+
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers
+ where the object code and Corresponding Source of the work are being offered to the
+ general public at no charge under subsection 6d.
+
+
+
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding
+ Source as a System Library, need not be included in conveying the object code work.
+
+
+
+ A "User Product" is either (1) a "consumer product", which means any
+ tangible personal property which is normally used for personal, family, or household
+ purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining
+ whether a product is a consumer product, doubtful cases shall be resolved in favor of
+ coverage. For a particular product received by a particular user, "normally used"
+ refers to a typical or common use of that class of product, regardless of the status of the
+ particular user or of the way in which the particular user actually uses, or expects or is
+ expected to use, the product. A product is a consumer product regardless of whether the
+ product has substantial commercial, industrial or non-consumer uses, unless such uses
+ represent the only significant mode of use of the product.
+
+
+
+ "Installation Information" for a User Product means any methods, procedures,
+ authorization keys, or other information required to install and execute modified versions
+ of a covered work in that User Product from a modified version of its Corresponding Source.
+ The information must suffice to ensure that the continued functioning of the modified object
+ code is in no case prevented or interfered with solely because modification has been made.
+
+
+
+ If you convey an object code work under this section in, or with, or specifically for use
+ in, a User Product, and the conveying occurs as part of a transaction in which the right of
+ possession and use of the User Product is transferred to the recipient in perpetuity or for
+ a fixed term (regardless of how the transaction is characterized), the Corresponding Source
+ conveyed under this section must be accompanied by the Installation Information. But this
+ requirement does not apply if neither you nor any third party retains the ability to install
+ modified object code on the User Product (for example, the work has been installed in ROM).
+
+
+
+ The requirement to provide Installation Information does not include a requirement to
+ continue to provide support service, warranty, or updates for a work that has been modified
+ or installed by the recipient, or for the User Product in which it has been modified or
+ installed. Access to a network may be denied when the modification itself materially and
+ adversely affects the operation of the network or violates the rules and protocols for
+ communication across the network.
+
+
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this
+ section must be in a format that is publicly documented (and with an implementation
+ available to the public in source code form), and must require no special password or key
+ for unpacking, reading or copying.
+
+
+
7. Additional Terms.
+
+
+ "Additional permissions" are terms that supplement the terms of this License by
+ making exceptions from one or more of its conditions. Additional permissions that are
+ applicable to the entire Program shall be treated as though they were included in this
+ License, to the extent that they are valid under applicable law. If additional permissions
+ apply only to part of the Program, that part may be used separately under those permissions,
+ but the entire Program remains governed by this License without regard to the additional
+ permissions.
+
+
+
+ When you convey a copy of a covered work, you may at your option remove any additional
+ permissions from that copy, or from any part of it. (Additional permissions may be written
+ to require their own removal in certain cases when you modify the work.) You may place
+ additional permissions on material, added by you to a covered work, for which you have or
+ can give appropriate copyright permission.
+
+
+
+ Notwithstanding any other provision of this License, for material you add to a covered work,
+ you may (if authorized by the copyright holders of that material) supplement the terms of
+ this License with terms:
+
+
+
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15
+ and 16 of this License; or
+
+
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in
+ that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that
+ modified versions of such material be marked in reasonable ways as different from the
+ original version; or
+
+
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the
+ material; or
+
+
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks,
+ or service marks; or
+
+
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who
+ conveys the material (or modified versions of it) with contractual assumptions of
+ liability to the recipient, for any liability that these contractual assumptions directly
+ impose on those licensors and authors.
+
+
+
+
+ All other non-permissive additional terms are considered "further restrictions"
+ within the meaning of section 10. If the Program as you received it, or any part of it,
+ contains a notice stating that it is governed by this License along with a term that is a
+ further restriction, you may remove that term. If a license document contains a further
+ restriction but permits relicensing or conveying under this License, you may add to a
+ covered work material governed by the terms of that license document, provided that the
+ further restriction does not survive such relicensing or conveying.
+
+
+
+ If you add terms to a covered work in accord with this section, you must place, in the
+ relevant source files, a statement of the additional terms that apply to those files, or a
+ notice indicating where to find the applicable terms.
+
+
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately
+ written license, or stated as exceptions; the above requirements apply either way.
+
+
+
8. Termination.
+
+
+ You may not propagate or modify a covered work except as expressly provided under this
+ License. Any attempt otherwise to propagate or modify it is void, and will automatically
+ terminate your rights under this License (including any patent licenses granted under the
+ third paragraph of section 11).
+
+
+
+ However, if you cease all violation of this License, then your license from a particular
+ copyright holder is reinstated (a) provisionally, unless and until the copyright holder
+ explicitly and finally terminates your license, and (b) permanently, if the copyright holder
+ fails to notify you of the violation by some reasonable means prior to 60 days after the
+ cessation.
+
+
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the
+ copyright holder notifies you of the violation by some reasonable means, this is the first
+ time you have received notice of violation of this License (for any work) from that
+ copyright holder, and you cure the violation prior to 30 days after your receipt of the
+ notice.
+
+
+
+ Termination of your rights under this section does not terminate the licenses of parties who
+ have received copies or rights from you under this License. If your rights have been
+ terminated and not permanently reinstated, you do not qualify to receive new licenses for
+ the same material under section 10.
+
+
+
9. Acceptance Not Required for Having Copies.
+
+
+ You are not required to accept this License in order to receive or run a copy of the
+ Program. Ancillary propagation of a covered work occurring solely as a consequence of using
+ peer-to-peer transmission to receive a copy likewise does not require acceptance. However,
+ nothing other than this License grants you permission to propagate or modify any covered
+ work. These actions infringe copyright if you do not accept this License. Therefore, by
+ modifying or propagating a covered work, you indicate your acceptance of this License to do
+ so.
+
+
+
10. Automatic Licensing of Downstream Recipients.
+
+
+ Each time you convey a covered work, the recipient automatically receives a license from the
+ original licensors, to run, modify and propagate that work, subject to this License. You are
+ not responsible for enforcing compliance by third parties with this License.
+
+
+
+ An "entity transaction" is a transaction transferring control of an organization,
+ or substantially all assets of one, or subdividing an organization, or merging
+ organizations. If propagation of a covered work results from an entity transaction, each
+ party to that transaction who receives a copy of the work also receives whatever licenses to
+ the work the party's predecessor in interest had or could give under the previous
+ paragraph, plus a right to possession of the Corresponding Source of the work from the
+ predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+
+
+ You may not impose any further restrictions on the exercise of the rights granted or
+ affirmed under this License. For example, you may not impose a license fee, royalty, or
+ other charge for exercise of rights granted under this License, and you may not initiate
+ litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent
+ claim is infringed by making, using, selling, offering for sale, or importing the Program or
+ any portion of it.
+
+
+
11. Patents.
+
+
+ A "contributor" is a copyright holder who authorizes use under this License of the
+ Program or a work on which the Program is based. The work thus licensed is called the
+ contributor's "contributor version".
+
+
+
+ A contributor's "essential patent claims" are all patent claims owned or
+ controlled by the contributor, whether already acquired or hereafter acquired, that would be
+ infringed by some manner, permitted by this License, of making, using, or selling its
+ contributor version, but do not include claims that would be infringed only as a consequence
+ of further modification of the contributor version. For purposes of this definition,
+ "control" includes the right to grant patent sublicenses in a manner consistent
+ with the requirements of this License.
+
+
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under
+ the contributor's essential patent claims, to make, use, sell, offer for sale, import
+ and otherwise run, modify and propagate the contents of its contributor version.
+
+
+
+ In the following three paragraphs, a "patent license" is any express agreement or
+ commitment, however denominated, not to enforce a patent (such as an express permission to
+ practice a patent or covenant not to sue for patent infringement). To "grant" such
+ a patent license to a party means to make such an agreement or commitment not to enforce a
+ patent against the party.
+
+
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding
+ Source of the work is not available for anyone to copy, free of charge and under the terms
+ of this License, through a publicly available network server or other readily accessible
+ means, then you must either (1) cause the Corresponding Source to be so available, or (2)
+ arrange to deprive yourself of the benefit of the patent license for this particular work,
+ or (3) arrange, in a manner consistent with the requirements of this License, to extend the
+ patent license to downstream recipients. "Knowingly relying" means you have actual
+ knowledge that, but for the patent license, your conveying the covered work in a country, or
+ your recipient's use of the covered work in a country, would infringe one or more
+ identifiable patents in that country that you have reason to believe are valid.
+
+
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or
+ propagate by procuring conveyance of, a covered work, and grant a patent license to some of
+ the parties receiving the covered work authorizing them to use, propagate, modify or convey
+ a specific copy of the covered work, then the patent license you grant is automatically
+ extended to all recipients of the covered work and works based on it.
+
+
+
+ A patent license is "discriminatory" if it does not include within the scope of
+ its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or
+ more of the rights that are specifically granted under this License. You may not convey a
+ covered work if you are a party to an arrangement with a third party that is in the business
+ of distributing software, under which you make payment to the third party based on the
+ extent of your activity of conveying the work, and under which the third party grants, to
+ any of the parties who would receive the covered work from you, a discriminatory patent
+ license (a) in connection with copies of the covered work conveyed by you (or copies made
+ from those copies), or (b) primarily for and in connection with specific products or
+ compilations that contain the covered work, unless you entered into that arrangement, or
+ that patent license was granted, prior to 28 March 2007.
+
+
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or
+ other defenses to infringement that may otherwise be available to you under applicable
+ patent law.
+
+
+
12. No Surrender of Others' Freedom.
+
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that
+ contradict the conditions of this License, they do not excuse you from the conditions of
+ this License. If you cannot convey a covered work so as to satisfy simultaneously your
+ obligations under this License and any other pertinent obligations, then as a consequence
+ you may not convey it at all. For example, if you agree to terms that obligate you to
+ collect a royalty for further conveying from those to whom you convey the Program, the only
+ way you could satisfy both those terms and this License would be to refrain entirely from
+ conveying the Program.
+
+
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+
+
+ Notwithstanding any other provision of this License, if you modify the Program, your
+ modified version must prominently offer all users interacting with it remotely through a
+ computer network (if your version supports such interaction) an opportunity to receive the
+ Corresponding Source of your version by providing access to the Corresponding Source from a
+ network server at no charge, through some standard or customary means of facilitating
+ copying of software. This Corresponding Source shall include the Corresponding Source for
+ any work covered by version 3 of the GNU General Public License that is incorporated
+ pursuant to the following paragraph.
+
+
+
+ Notwithstanding any other provision of this License, you have permission to link or combine
+ any covered work with a work licensed under version 3 of the GNU General Public License into
+ a single combined work, and to convey the resulting work. The terms of this License will
+ continue to apply to the part which is the covered work, but the work with which it is
+ combined will remain governed by version 3 of the GNU General Public License.
+
+
+
14. Revised Versions of this License.
+
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU Affero
+ General Public License from time to time. Such new versions will be similar in spirit to the
+ present version, but may differ in detail to address new problems or concerns.
+
+
+
+ Each version is given a distinguishing version number. If the Program specifies that a
+ certain numbered version of the GNU Affero General Public License "or any later
+ version" applies to it, you have the option of following the terms and conditions
+ either of that numbered version or of any later version published by the Free Software
+ Foundation. If the Program does not specify a version number of the GNU Affero General
+ Public License, you may choose any version ever published by the Free Software Foundation.
+
+
+
+ If the Program specifies that a proxy can decide which future versions of the GNU Affero
+ General Public License can be used, that proxy's public statement of acceptance of a
+ version permanently authorizes you to choose that version for the Program.
+
+
+
+ Later license versions may give you additional or different permissions. However, no
+ additional obligations are imposed on any author or copyright holder as a result of your
+ choosing to follow a later version.
+
+
+
15. Disclaimer of Warranty.
+
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
+ "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+
+
16. Limitation of Liability.
+
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT
+ HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
+ LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+ OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+
17. Interpretation of Sections 15 and 16.
+
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given
+ local legal effect according to their terms, reviewing courts shall apply local law that
+ most closely approximates an absolute waiver of all civil liability in connection with the
+ Program, unless a warranty or assumption of liability accompanies a copy of the Program in
+ return for a fee.
+
+
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/loading.js b/src/pages/loading.js
new file mode 100644
index 000000000000..63e65e3c81eb
--- /dev/null
+++ b/src/pages/loading.js
@@ -0,0 +1,70 @@
+import { Box, Container, Stack } from "@mui/material";
+import { Grid } from "@mui/system";
+import Head from "next/head";
+import { CippImageCard } from "../components/CippCards/CippImageCard";
+
+import { ApiGetCall } from "../api/ApiCall";
+import { useState, useEffect } from "react";
+
+const Page = () => {
+ const [loadingText, setLoadingText] = useState("Please wait while we log you in...");
+ const orgData = ApiGetCall({
+ url: "/api/me",
+ queryKey: "authmecipp",
+ });
+
+ const [loadingImage, setLoadingImage] = useState(
+ "/assets/illustrations/undraw_analysis_dq08.svg"
+ );
+
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ if (!orgData.isSuccess) {
+ setLoadingText(
+ "The function app may be experiencing a cold start currently, this can take a little longer than usual..."
+ );
+ setLoadingImage("/assets/illustrations/undraw-into-the-night-nd84.svg");
+ }
+ }, 20000); // 20 seconds
+
+ return () => clearTimeout(timer);
+ }, [orgData.isSuccess]);
+
+ return (
+ <>
+
+ Loading
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default Page;
diff --git a/src/pages/onboarding.js b/src/pages/onboarding.js
index ffe3018ddd58..ee61bbe28261 100644
--- a/src/pages/onboarding.js
+++ b/src/pages/onboarding.js
@@ -24,8 +24,7 @@ const Page = () => {
value: "CreateApp",
},
{
- description:
- "I would like to refresh my token or replace the user I've used for my previous token.",
+ description: "I would like to refresh my token or replace the account I've used.",
icon: ,
label: "Refresh Tokens for existing application ",
value: "UpdateTokens",
diff --git a/src/pages/onboardingv2.js b/src/pages/onboardingv2.js
new file mode 100644
index 000000000000..ee7f73445035
--- /dev/null
+++ b/src/pages/onboardingv2.js
@@ -0,0 +1,120 @@
+import { Layout as DashboardLayout } from "../layouts/index.js";
+import { CippWizardConfirmation } from "../components/CippWizard/CippWizardConfirmation.jsx";
+import { CippDeploymentStep } from "../components/CippWizard/CIPPDeploymentStep.jsx";
+import CippWizardPage from "../components/CippWizard/CippWizardPage.jsx";
+import { CippWizardOptionsList } from "../components/CippWizard/CippWizardOptionsList.jsx";
+import { CippSAMDeploy } from "../components/CippWizard/CippSAMDeploy.jsx";
+import { CippTenantModeDeploy } from "../components/CippWizard/CippTenantModeDeploy.jsx";
+import { CippBaselinesStep } from "../components/CippWizard/CippBaselinesStep.jsx";
+import { CippNotificationsStep } from "../components/CippWizard/CippNotificationsStep.jsx";
+import { CippAlertsStep } from "../components/CippWizard/CippAlertsStep.jsx";
+import { BuildingOfficeIcon, CloudIcon, CpuChipIcon } from "@heroicons/react/24/outline";
+
+const Page = () => {
+ const steps = [
+ {
+ description: "Onboarding",
+ component: CippWizardOptionsList,
+ componentProps: {
+ title: "Select your setup method",
+ subtext: `This wizard will guide you through setting up CIPPs access to your client tenants. If this is your first time setting up CIPP you will want to choose the option "Create application for me and connect to my tenants",`,
+ valuesKey: "SyncTool",
+ options: [
+ {
+ description:
+ "Choose this option if this is your first setup, or if you'd like to redo the previous setup.",
+ icon: ,
+ label: "First Setup",
+ value: "FirstSetup",
+ },
+ {
+ description:
+ "Choose this option if you would like to add a tenant to your environment.",
+ icon: ,
+ label: "Add a tenant",
+ value: "AddTenant",
+ },
+ {
+ description:
+ "Choose this option if you want to setup which application registration is used to connect to your tenants.",
+ icon: ,
+ label: "Create a new application registration for me and connect to my tenants",
+ value: "CreateApp",
+ },
+ {
+ description: "I would like to refresh my token or replace the account I've used.",
+ icon: ,
+ label: "Refresh Tokens for existing application registration",
+ value: "UpdateTokens",
+ },
+ {
+ description:
+ "I have an existing application and would like to manually enter my token, or update them. This is only recommended for advanced users.",
+ icon: ,
+ label: "Manually enter credentials",
+ value: "Manual",
+ },
+ ],
+ },
+ },
+ {
+ description: "Application",
+ component: CippSAMDeploy,
+ showStepWhen: (values) =>
+ values?.selectedOption === "CreateApp" || values?.selectedOption === "FirstSetup",
+ },
+ {
+ description: "Tenants",
+ component: CippTenantModeDeploy,
+ showStepWhen: (values) =>
+ values?.selectedOption === "CreateApp" ||
+ values?.selectedOption === "FirstSetup" ||
+ values?.selectedOption === "AddTenant",
+ },
+ {
+ description: "Baselines",
+ component: CippBaselinesStep,
+ showStepWhen: (values) => values?.selectedOption === "FirstSetup",
+ },
+ {
+ description: "Notifications",
+ component: CippNotificationsStep,
+ showStepWhen: (values) => values?.selectedOption === "FirstSetup",
+ },
+ {
+ description: "Next Steps",
+ component: CippAlertsStep,
+ showStepWhen: (values) => values?.selectedOption === "FirstSetup",
+ },
+ {
+ description: "Refresh Tokens",
+ component: CippDeploymentStep,
+ showStepWhen: (values) => values?.selectedOption === "UpdateTokens",
+ },
+ {
+ description: "Manually enter credentials",
+ component: CippDeploymentStep,
+ showStepWhen: (values) => values?.selectedOption === "Manual",
+ },
+ {
+ description: "Confirmation",
+ component: CippWizardConfirmation,
+ //confirm and finish button, perform tasks, launch checks etc.
+ },
+ ];
+
+ return (
+ <>
+
+ >
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/security/defender/deployment/index.js b/src/pages/security/defender/deployment/index.js
index 8a3007ec7a99..c429c3107e45 100644
--- a/src/pages/security/defender/deployment/index.js
+++ b/src/pages/security/defender/deployment/index.js
@@ -1,11 +1,12 @@
-import React from "react";
-import { Grid, Typography, Divider } from "@mui/material";
-import { useForm, useWatch } from "react-hook-form";
+import { Typography, Divider } from "@mui/material";
+import { Grid } from "@mui/system";
+import { useForm } from "react-hook-form";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector";
import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition";
+import { CippFormInputArray } from "/src/components/CippComponents/CippFormInputArray";
const DeployDefenderForm = () => {
const formControl = useForm({
@@ -25,13 +26,14 @@ const DeployDefenderForm = () => {
-
+
@@ -39,7 +41,7 @@ const DeployDefenderForm = () => {
{/* Defender Setup Section */}
-
+ {
compareType="is"
compareValue={true}
>
-
+ Defender SetupDefender and MEM Reporting
-
+
-
+ {
formControl={formControl}
/>
-
+ {
{/* Defender Defaults Policy Section */}
-
+ {
compareType="is"
compareValue={true}
>
-
+ Defender Defaults PolicySelect Defender policies to deploy
-
+
-
+ {
formControl={formControl}
/>
-
+ {
{/* Assign to Group */}
-
+ Assign to Group {
{ label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
]}
formControl={formControl}
+ validators={{ required: "Assignment must be selected" }}
row
/>
@@ -296,8 +299,79 @@ const DeployDefenderForm = () => {
+ {/* Exclusion Policy Section */}
+
+
+
+
+
+
+ Exclusion Policy
+ Configure Defender Exclusions
+
+
+
+
+
+
+
+
+
+
+
+ Assign to Group
+
+
+
+
+
+
{/* ASR Section */}
-
+ {
compareType="is"
compareValue={true}
>
-
+ ASR RulesSet Attack Surface Reduction Rules
+
-
+
-
+
+ {
name="ASR.WMIPersistence"
formControl={formControl}
/>
+ {
name="ASR.BlockOfficeApps"
formControl={formControl}
/>
+
-
+ {
name="ASR.blockJSVB"
formControl={formControl}
/>
+ {
{/* Assign to Group */}
-
+ Assign to Group {
{ label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
]}
formControl={formControl}
+ validators={{ required: "Assignment must be selected" }}
row
/>
diff --git a/src/pages/security/incidents/list-alerts/index.js b/src/pages/security/incidents/list-alerts/index.js
index 09e1411d9d3b..9379da71347d 100644
--- a/src/pages/security/incidents/list-alerts/index.js
+++ b/src/pages/security/incidents/list-alerts/index.js
@@ -1,5 +1,6 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { Assignment, Done } from "@mui/icons-material";
const Page = () => {
const pageTitle = "Alerts List";
@@ -9,26 +10,26 @@ const Page = () => {
{
label: "Set status to in progress",
type: "POST",
+ icon: ,
url: "/api/ExecSetSecurityAlert",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
- Status: "inProgress",
- Vendor: "vendorInformation.vendor",
- Provider: "vendorInformation.provider",
+ GUID: "Id",
+ Status: "!inProgress",
+ Vendor: "RawResult.vendorInformation.vendor",
+ Provider: "RawResult.vendorInformation.provider",
},
confirmText: "Are you sure you want to set the status to in progress?",
},
{
label: "Set status to resolved",
type: "POST",
+ icon: ,
url: "/api/ExecSetSecurityAlert",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
- Status: "resolved",
- Vendor: "vendorInformation.vendor",
- Provider: "vendorInformation.provider",
+ GUID: "Id",
+ Status: "!resolved",
+ Vendor: "RawResult.vendorInformation.vendor",
+ Provider: "RawResult.vendorInformation.provider",
},
confirmText: "Are you sure you want to set the status to resolved?",
},
@@ -37,9 +38,9 @@ const Page = () => {
// Define off-canvas details
const offCanvas = {
extendedInfoFields: [
- "eventDateTime", // Created on
- "title", // Title
- "category", // Category
+ "EventDateTime", // Created on
+ "Title", // Title
+ "Category", // Category
"Status", // Status
"Severity", // Severity
"Tenant", // Tenant
@@ -50,17 +51,19 @@ const Page = () => {
// Simplified columns for the table
const simpleColumns = [
- "eventDateTime", // Created Date (Local)
- "Tenant", // Tenant
- "title", // Title
- "Severity", // Severity
+ "EventDateTime", // Created Date (Local)
"Status", // Status
+ "Title", // Title
+ "Severity", // Severity
+ "Category", // Category
+ "Tenant", // Tenant
];
return (
{
const pageTitle = "Incidents List";
@@ -9,47 +10,46 @@ const Page = () => {
{
label: "Assign to self",
type: "POST",
+ icon: ,
url: "/api/ExecSetSecurityIncident",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
- Assigned: "currentUserId",
+ GUID: "Id",
},
confirmText: "Are you sure you want to assign this incident to yourself?",
},
{
label: "Set status to active",
type: "POST",
+ icon: ,
url: "/api/ExecSetSecurityIncident",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
- Status: "active",
- Assigned: "currentAssignedUser",
+ GUID: "Id",
+ Status: "!active",
+ Assigned: "AssignedTo",
},
confirmText: "Are you sure you want to set the status to active?",
},
{
label: "Set status to in progress",
type: "POST",
+ icon: ,
url: "/api/ExecSetSecurityIncident",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
- Status: "inProgress",
- Assigned: "currentAssignedUser",
+ GUID: "Id",
+ Status: "!inProgress",
+ Assigned: "AssignedTo",
},
confirmText: "Are you sure you want to set the status to in progress?",
},
{
label: "Set status to resolved",
type: "POST",
+ icon: ,
url: "/api/ExecSetSecurityIncident",
data: {
- TenantFilter: "Tenant",
- GUID: "id",
- Status: "resolved",
- Assigned: "currentAssignedUser",
+ GUID: "Id",
+ Status: "!resolved",
+ Assigned: "AssignedTo",
},
confirmText: "Are you sure you want to set the status to resolved?",
},
@@ -76,13 +76,22 @@ const Page = () => {
};
// Simplified columns for the table
- const simpleColumns = ["Created", "Tenant", "Id", "DisplayName", "Status", "Severity", "Tags"];
+ const simpleColumns = [
+ "Created",
+ "Tenant",
+ "Id",
+ "DisplayName",
+ "Status",
+ "Severity",
+ "Tags",
+ "IncidentUrl",
+ ];
return (
{
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/security/safelinks/safelinks-template/add.jsx b/src/pages/security/safelinks/safelinks-template/add.jsx
new file mode 100644
index 000000000000..3e9998b0a63e
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks-template/add.jsx
@@ -0,0 +1,64 @@
+import { useEffect } from "react";
+import { Divider } from "@mui/material";
+import { Grid } from "@mui/system";
+import { useForm, useWatch } from "react-hook-form";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
+import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector";
+
+const DeploySafeLinksPolicyTemplate = () => {
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: {
+ selectedTenants: [],
+ TemplateList: [],
+ },
+ });
+
+ return (
+
+
+
+
+
+
+
+ option,
+ url: "/api/ListSafeLinksPolicyTemplates",
+ }}
+ placeholder="Select a template"
+ validators={{ required: "A template must be selected" }}
+ />
+
+
+
+ );
+};
+
+DeploySafeLinksPolicyTemplate.getLayout = (page) => {page};
+export default DeploySafeLinksPolicyTemplate;
diff --git a/src/pages/security/safelinks/safelinks-template/create.jsx b/src/pages/security/safelinks/safelinks-template/create.jsx
new file mode 100644
index 000000000000..e87962890042
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks-template/create.jsx
@@ -0,0 +1,52 @@
+import { Box } from "@mui/material";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useForm, useWatch } from "react-hook-form";
+import { useSettings } from "/src/hooks/use-settings";
+import { SafeLinksForm, safeLinksDataUtils } from "/src/components/CippFormPages/CippSafeLinksPolicyRuleForm";
+
+const Page = () => {
+ const userSettingsDefaults = useSettings();
+
+ // Main form for policy configuration
+ const formControl = useForm({
+ mode: "onBlur",
+ defaultValues: {
+ tenantFilter: userSettingsDefaults.currentTenant,
+ },
+ });
+
+ // Watch policy name to pass to rule form
+ const watchPolicyName = useWatch({ control: formControl.control, name: "PolicyName" });
+
+ // Use the utility to create the data formatter
+ const customDataFormatter = safeLinksDataUtils.createDataFormatter(formControl, 'createTemplate');
+
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
\ No newline at end of file
diff --git a/src/pages/security/safelinks/safelinks-template/edit.jsx b/src/pages/security/safelinks/safelinks-template/edit.jsx
new file mode 100644
index 000000000000..4945a158aa58
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks-template/edit.jsx
@@ -0,0 +1,76 @@
+import { Box } from "@mui/material";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useForm, useWatch } from "react-hook-form";
+import { useSettings } from "/src/hooks/use-settings";
+import { useEffect } from "react";
+import { SafeLinksForm, safeLinksDataUtils } from "/src/components/CippFormPages/CippSafeLinksPolicyRuleForm";
+import { useRouter } from "next/router";
+import { ApiGetCall } from "/src/api/ApiCall";
+
+const Page = () => {
+ const router = useRouter();
+ const { ID } = router.query;
+ const userSettingsDefaults = useSettings();
+
+ // Main form for policy configuration
+ const formControl = useForm({
+ mode: "onBlur",
+ defaultValues: {
+ tenantFilter: userSettingsDefaults.currentTenant,
+ },
+ });
+
+ // Watch policy name to pass to rule form
+ const watchPolicyName = useWatch({ control: formControl.control, name: "PolicyName" });
+
+ // Get existing template data
+ const templateData = ApiGetCall({
+ url: `/api/ListSafeLinksPolicyTemplateDetails?ID=${ID}`,
+ queryKey: `SafeLinksTemplate-${ID}`,
+ enabled: !!ID,
+ });
+
+ // Populate forms with existing data when available
+ useEffect(() => {
+ if (templateData.isSuccess && templateData.data?.Results) {
+ const template = templateData.data.Results;
+
+ // Use utility to populate form
+ safeLinksDataUtils.populateFormData(formControl, template, userSettingsDefaults, 'template');
+ }
+ }, [templateData.isSuccess, templateData.data, ID, formControl, userSettingsDefaults]);
+
+ // Use the utility to create the data formatter
+ const customDataFormatter = safeLinksDataUtils.createDataFormatter(formControl, 'template', { ID });
+
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
\ No newline at end of file
diff --git a/src/pages/security/safelinks/safelinks-template/index.jsx b/src/pages/security/safelinks/safelinks-template/index.jsx
new file mode 100644
index 000000000000..87388958ff66
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks-template/index.jsx
@@ -0,0 +1,121 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { Button } from "@mui/material";
+import { RocketLaunch, GitHub, Edit, Add } from "@mui/icons-material";
+import Link from "next/link";
+import { ApiGetCall } from "/src/api/ApiCall";
+
+const Page = () => {
+ const pageTitle = "Safe Links Policy Templates";
+
+ // Check if GitHub integration is enabled
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+
+ const actions = [
+ {
+ label: "Edit Template",
+ link: "/security/safelinks/safelinks-template/edit?ID=[GUID]",
+ icon: ,
+ color: "success",
+ target: "_self",
+ },
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: {
+ WriteAccess: true,
+ },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: {
+ required: { value: true, message: "This field is required" },
+ },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveSafeLinksPolicyTemplate",
+ data: { ID: "GUID" },
+ confirmText: "Do you want to delete the template?",
+ icon: ,
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: ["TemplateName", "TemplateDescription", "GUID"],
+ actions: actions,
+ };
+
+ const simpleColumns = ["TemplateName", "TemplateDescription", "GUID"];
+
+ return (
+
+ }
+ sx={{ mr: 1 }}
+ >
+ Create New Template
+
+ }
+ >
+ Deploy Template
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
\ No newline at end of file
diff --git a/src/pages/security/safelinks/safelinks/add.jsx b/src/pages/security/safelinks/safelinks/add.jsx
new file mode 100644
index 000000000000..0153bdb1dcac
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks/add.jsx
@@ -0,0 +1,52 @@
+import { Box } from "@mui/material";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useForm, useWatch } from "react-hook-form";
+import { useSettings } from "/src/hooks/use-settings";
+import { SafeLinksForm, safeLinksDataUtils } from "/src/components/CippFormPages/CippSafeLinksPolicyRuleForm";
+
+const Page = () => {
+ const userSettingsDefaults = useSettings();
+
+ // Main form for policy configuration
+ const formControl = useForm({
+ mode: "onBlur",
+ defaultValues: {
+ tenantFilter: userSettingsDefaults.currentTenant,
+ },
+ });
+
+ // Watch policy name to pass to rule form
+ const watchPolicyName = useWatch({ control: formControl.control, name: "PolicyName" });
+
+ // Use the utility to create the data formatter
+ const customDataFormatter = safeLinksDataUtils.createDataFormatter(formControl, 'add');
+
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
\ No newline at end of file
diff --git a/src/pages/security/safelinks/safelinks/edit.jsx b/src/pages/security/safelinks/safelinks/edit.jsx
new file mode 100644
index 000000000000..c0ed200b0b26
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks/edit.jsx
@@ -0,0 +1,88 @@
+import { Box } from "@mui/material";
+import CippFormPage from "/src/components/CippFormPages/CippFormPage";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useForm, useWatch } from "react-hook-form";
+import { useSettings } from "/src/hooks/use-settings";
+import { useEffect } from "react";
+import { SafeLinksForm, safeLinksDataUtils } from "/src/components/CippFormPages/CippSafeLinksPolicyRuleForm";
+import { useRouter } from "next/router";
+import { ApiGetCall } from "/src/api/ApiCall";
+
+const Page = () => {
+ const router = useRouter();
+ const { PolicyName, RuleName } = router.query;
+ const userSettingsDefaults = useSettings();
+
+ // Main form for policy configuration
+ const formControl = useForm({
+ mode: "onBlur",
+ defaultValues: {
+ tenantFilter: userSettingsDefaults.currentTenant,
+ PolicyName: PolicyName,
+ },
+ });
+
+ // Watch policy name for rule synchronization
+ const watchPolicyName = useWatch({ control: formControl.control, name: "PolicyName" });
+
+ // Get existing policy and rule data
+ const policyData = ApiGetCall({
+ url: `/api/ListSafeLinksPolicyDetails?PolicyName=${PolicyName}&RuleName=${RuleName}&tenantFilter=${userSettingsDefaults.currentTenant}`,
+ queryKey: `SafeLinksPolicy-${PolicyName}`,
+ enabled: !!PolicyName,
+ });
+
+ // Populate forms with existing data when available
+ useEffect(() => {
+ if (policyData.isSuccess && policyData.data?.Results) {
+ const results = policyData.data.Results;
+ const policy = results.Policy || {};
+ const rule = results.Rule || {};
+
+ // Combine policy and rule data
+ const combinedData = {
+ ...policy,
+ ...rule,
+ RuleName: rule.RuleName || RuleName,
+ SafeLinksPolicy: policy.PolicyName || PolicyName,
+ State: rule.State,
+ };
+
+ // Use utility to populate form
+ safeLinksDataUtils.populateFormData(formControl, combinedData, userSettingsDefaults, 'edit');
+ }
+ }, [policyData.isSuccess, policyData.data, PolicyName, RuleName, formControl, userSettingsDefaults]);
+
+ // Use the utility to create the data formatter
+ const customDataFormatter = safeLinksDataUtils.createDataFormatter(formControl, 'edit');
+
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
\ No newline at end of file
diff --git a/src/pages/security/safelinks/safelinks/index.jsx b/src/pages/security/safelinks/safelinks/index.jsx
new file mode 100644
index 000000000000..70ac3bcf51c0
--- /dev/null
+++ b/src/pages/security/safelinks/safelinks/index.jsx
@@ -0,0 +1,169 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { Block, Check, LowPriority, Edit, DeleteForever, Policy, Book } from "@mui/icons-material";
+import { Button } from "@mui/material";
+import Link from "next/link";
+
+const Page = () => {
+ const pageTitle = "Safe Links Policies";
+ const apiUrl = "/api/ListSafeLinksPolicy";
+
+ const filterList = [
+ {
+ filterName: "Enabled Rules",
+ value: [{ id: "State", value: "Enabled" }],
+ type: "column",
+ },
+ {
+ filterName: "Disabled Rules",
+ value: [{ id: "State", value: "Disabled" }],
+ type: "column",
+ }
+ ];
+
+ const actions = [
+ {
+ label: "Edit Safe Links Policy",
+ link: "/security/safelinks/safelinks/edit?PolicyName=[PolicyName]&RuleName=[RuleName]&tenantFilter=[tenantFilter]",
+ icon: ,
+ color: "success",
+ target: "_self",
+ condition: (row) => !row.IsBuiltInProtection && !row.PolicyName.startsWith("Standard Preset Security Policy") && !row.PolicyName.startsWith("Strict Preset Security Policy") && row.PolicyName !== "Built-In Protection Policy",
+ },
+ {
+ label: "Enable Rule",
+ type: "POST",
+ icon: ,
+ url: "/api/EditSafeLinksPolicy",
+ data: {
+ PolicyName: "PolicyName",
+ Name: "PolicyName",
+ Enabled: true
+ },
+ confirmText: "Are you sure you want to enable this rule?",
+ color: "info",
+ condition: (row) => row.State === "Disabled" && !row.IsBuiltInProtection && !row.PolicyName.startsWith("Standard Preset Security Policy") && !row.PolicyName.startsWith("Strict Preset Security Policy")&& row.PolicyName !== "Built-In Protection Policy",
+ },
+ {
+ label: "Disable Rule",
+ type: "POST",
+ icon: ,
+ url: "/api/EditSafeLinksPolicy",
+ data: {
+ PolicyName: "PolicyName",
+ Name: "PolicyName",
+ Enabled: false
+ },
+ confirmText: "Are you sure you want to disable this rule?",
+ color: "info",
+ condition: (row) => row.State === "Enabled" && !row.IsBuiltInProtection && !row.PolicyName.startsWith("Standard Preset Security Policy") && !row.PolicyName.startsWith("Strict Preset Security Policy")&& row.PolicyName !== "Built-In Protection Policy",
+ },
+ {
+ label: "Set Priority",
+ type: "POST",
+ icon: ,
+ url: "/api/EditSafeLinksPolicy",
+ condition: (row) => !row.IsBuiltInProtection && !row.PolicyName.startsWith("Standard Preset Security Policy") && !row.PolicyName.startsWith("Strict Preset Security Policy")&& row.PolicyName !== "Built-In Protection Policy",
+ data: {
+ PolicyName: "PolicyName",
+ Name: "PolicyName"
+ },
+ confirmText: "What would you like to set the priority to?",
+ color: "info",
+ hideBulk: true,
+ fields: [
+ {
+ type: "number",
+ name: "Priority",
+ label: "Priority",
+ placeholder: "Enter a number",
+ validators: {
+ required: "Priority is required",
+ min: {
+ value: 0,
+ message: "Priority must be at least 0 and no more than -1 of the lowest priority",
+ },
+ },
+ },
+ ],
+ },
+ {
+ label: "Create template based on policy",
+ type: "POST",
+ url: "/api/AddSafeLinksPolicyTemplate",
+ postEntireRow: true,
+ confirmText: "Are you sure you want to create a template based on this policy?",
+ icon: ,
+ hideBulk: true,
+ condition: (row) => !row.IsBuiltInProtection && !row.PolicyName.startsWith("Standard Preset Security Policy") && !row.PolicyName.startsWith("Strict Preset Security Policy")&& row.PolicyName !== "Built-In Protection Policy",
+ },
+ {
+ label: "Delete Rule",
+ type: "GET",
+ icon: ,
+ url: "/api/ExecDeleteSafeLinksPolicy",
+ data: {
+ RuleName: "RuleName",
+ PolicyName: "PolicyName",
+ },
+ confirmText: "Are you sure you want to delete this policy and rule?",
+ color: "danger",
+ condition: (row) => !row.IsBuiltInProtection && !row.PolicyName.startsWith("Standard Preset Security Policy") && !row.PolicyName.startsWith("Strict Preset Security Policy")&& row.PolicyName !== "Built-In Protection Policy",
+ }
+ ];
+
+ // Define columns for the table
+ const simpleColumns = [
+ "PolicyName",
+ "ConfigurationStatus",
+ "IsValid",
+ "State",
+ "Priority",
+ "Description",
+ "RecipientDomainIs",
+ "SentTo",
+ "SentToMemberOf",
+ "ExceptIfSentTo",
+ "ExceptIfSentToMemberOf",
+ "ExceptIfRecipientDomainIs",
+ "DoNotRewriteUrls",
+ "EnableSafeLinksForEmail",
+ "EnableSafeLinksForTeams",
+ "EnableSafeLinksForOffice",
+ "TrackClicks",
+ "ScanUrls",
+ "EnableForInternalSenders",
+ "DeliverMessageAfterScan",
+ "AllowClickThrough",
+ "DisableUrlRewrite",
+ "EnableOrganizationBranding",
+ "WhenCreated",
+ "WhenChanged",
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: ["RuleName", "ConfigurationStatus", "IsValid", "PolicyName", "State", "WhenCreated", "WhenChanged"],
+ actions: actions,
+ };
+
+ return (
+
+ }>
+ Add Safe Links Policy
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
\ No newline at end of file
diff --git a/src/pages/teams-share/onedrive/index.js b/src/pages/teams-share/onedrive/index.js
index c14fd268acb2..9ec970fbda1e 100644
--- a/src/pages/teams-share/onedrive/index.js
+++ b/src/pages/teams-share/onedrive/index.js
@@ -1,5 +1,6 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { PersonAdd, PersonRemove } from "@mui/icons-material";
const Page = () => {
const pageTitle = "OneDrive";
@@ -7,6 +8,7 @@ const Page = () => {
const actions = [
{
label: "Add permissions to OneDrive",
+ icon: ,
type: "POST",
url: "/api/ExecSharePointPerms",
data: {
@@ -23,19 +25,28 @@ const Page = () => {
multiple: false,
creatable: false,
api: {
- url: "/api/listUsers",
- labelField: (onedriveAccessUser) =>
- `${onedriveAccessUser.displayName} (${onedriveAccessUser.userPrincipalName})`,
+ url: "/api/ListGraphRequest",
+ data: {
+ Endpoint: "users",
+ $select: "id,displayName,userPrincipalName",
+ $top: 999,
+ $count: true,
+ },
+ queryKey: "ListUsersAutoComplete",
+ dataKey: "Results",
+ labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
valueField: "userPrincipalName",
addedField: {
- displayName: "displayName",
+ id: "id",
},
+ showRefresh: true,
},
},
],
},
{
label: "Remove permissions from OneDrive",
+ icon: ,
type: "POST",
url: "/api/ExecSharePointPerms",
data: {
@@ -65,17 +76,11 @@ const Page = () => {
},
];
- const offCanvas = {
- extendedInfoFields: ["UPN"],
- actions: actions,
- };
-
return (
{
backButtonTitle="Back to Sites"
>
-
+
-
+ {
required
/>
-
+ {
}}
/>
-
+ {
}}
/>
-
+ {
const tenantFilter = useSettings().currentTenant;
const fields = [
- "SiteName",
+ "siteName",
"siteDescription",
"siteOwner",
- "TemplateName",
+ "templateName",
"siteDesign",
"sensitivityLabel",
];
diff --git a/src/pages/teams-share/sharepoint/index.js b/src/pages/teams-share/sharepoint/index.js
index d88d75533e92..38baf8abb4c2 100644
--- a/src/pages/teams-share/sharepoint/index.js
+++ b/src/pages/teams-share/sharepoint/index.js
@@ -1,6 +1,14 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
import { Button } from "@mui/material";
+import {
+ Add,
+ AddToPhotos,
+ PersonAdd,
+ PersonRemove,
+ AdminPanelSettings,
+ NoAccounts,
+} from "@mui/icons-material";
import Link from "next/link";
const Page = () => {
@@ -10,6 +18,7 @@ const Page = () => {
{
label: "Add Member",
type: "POST",
+ icon: ,
url: "/api/ExecSetSharePointMember",
data: {
groupId: "ownerPrincipalName",
@@ -26,12 +35,21 @@ const Page = () => {
multiple: false,
creatable: false,
api: {
- url: "/api/listUsers",
+ url: "/api/ListGraphRequest",
+ data: {
+ Endpoint: "users",
+ $select: "id,displayName,userPrincipalName",
+ $top: 999,
+ $count: true,
+ },
+ queryKey: "ListUsersAutoComplete",
+ dataKey: "Results",
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
valueField: "userPrincipalName",
addedField: {
id: "id",
},
+ showRefresh: true,
},
},
],
@@ -40,6 +58,7 @@ const Page = () => {
{
label: "Remove Member",
type: "POST",
+ icon: ,
url: "/api/ExecSetSharePointMember",
data: {
groupId: "ownerPrincipalName",
@@ -56,12 +75,21 @@ const Page = () => {
multiple: false,
creatable: false,
api: {
- url: "/api/listUsers",
+ url: "/api/ListGraphRequest",
+ data: {
+ Endpoint: "users",
+ $select: "id,displayName,userPrincipalName",
+ $top: 999,
+ $count: true,
+ },
+ queryKey: "ListUsersAutoComplete",
+ dataKey: "Results",
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
valueField: "userPrincipalName",
addedField: {
id: "id",
},
+ showRefresh: true,
},
},
],
@@ -70,6 +98,7 @@ const Page = () => {
{
label: "Add Site Admin",
type: "POST",
+ icon: ,
url: "/api/ExecSharePointPerms",
data: {
UPN: "ownerPrincipalName",
@@ -85,12 +114,21 @@ const Page = () => {
multiple: false,
creatable: false,
api: {
- url: "/api/listUsers",
+ url: "/api/ListGraphRequest",
+ data: {
+ Endpoint: "users",
+ $select: "id,displayName,userPrincipalName",
+ $top: 999,
+ $count: true,
+ },
+ queryKey: "ListUsersAutoComplete",
+ dataKey: "Results",
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
valueField: "userPrincipalName",
addedField: {
id: "id",
},
+ showRefresh: true,
},
},
],
@@ -99,6 +137,7 @@ const Page = () => {
{
label: "Remove Site Admin",
type: "POST",
+ icon: ,
url: "/api/ExecSharePointPerms",
data: {
UPN: "ownerPrincipalName",
@@ -114,12 +153,21 @@ const Page = () => {
multiple: false,
creatable: false,
api: {
- url: "/api/listUsers",
+ url: "/api/ListGraphRequest",
+ data: {
+ Endpoint: "users",
+ $select: "id,displayName,userPrincipalName",
+ $top: 999,
+ $count: true,
+ },
+ queryKey: "ListUsersAutoComplete",
+ dataKey: "Results",
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
valueField: "userPrincipalName",
- addedFields: {
+ addedField: {
id: "id",
},
+ showRefresh: true,
},
},
],
@@ -151,10 +199,14 @@ const Page = () => {
]}
cardButton={
<>
-
+ }>
Add Site
-
+ }
+ >
Bulk Add Sites
>
diff --git a/src/pages/teams-share/teams/business-voice/index.js b/src/pages/teams-share/teams/business-voice/index.js
index 725a2a8a5331..6cef4fd00045 100644
--- a/src/pages/teams-share/teams/business-voice/index.js
+++ b/src/pages/teams-share/teams/business-voice/index.js
@@ -1,5 +1,6 @@
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { PersonAdd, PersonRemove, LocationOn } from "@mui/icons-material";
const Page = () => {
const pageTitle = "Teams Business Voice";
@@ -9,6 +10,7 @@ const Page = () => {
{
label: "Assign User",
type: "POST",
+ icon: ,
url: "/api/ExecTeamsVoicePhoneNumberAssignment",
data: {
PhoneNumber: "TelephoneNumber",
@@ -34,6 +36,7 @@ const Page = () => {
{
label: "Unassign User",
type: "POST",
+ icon: ,
url: "/api/ExecRemoveTeamsVoicePhoneNumberAssignment",
data: {
PhoneNumber: "TelephoneNumber",
@@ -45,6 +48,7 @@ const Page = () => {
{
label: "Set Emergency Location",
type: "POST",
+ icon: ,
url: "/api/ExecTeamsVoicePhoneNumberAssignment",
data: {
PhoneNumber: "TelephoneNumber",
diff --git a/src/pages/teams-share/teams/list-team/add.jsx b/src/pages/teams-share/teams/list-team/add.jsx
index 6fe593adc697..23cdb4df916e 100644
--- a/src/pages/teams-share/teams/list-team/add.jsx
+++ b/src/pages/teams-share/teams/list-team/add.jsx
@@ -1,5 +1,6 @@
import React from "react";
-import { Grid, Divider } from "@mui/material";
+import { Divider } from "@mui/material";
+import { Grid } from "@mui/system";
import { useForm } from "react-hook-form";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
@@ -27,6 +28,7 @@ const TeamsAddTeamForm = () => {
title="Add Team"
backButtonTitle="Teams Overview"
postUrl="/api/AddTeam"
+ resetForm={true}
customDataformatter={(values) => {
const shippedValues = {
tenantID: tenantDomain,
@@ -40,7 +42,7 @@ const TeamsAddTeamForm = () => {
>
{/* Display Name */}
-
+ {
{/* Description */}
-
+ {
-
+ {
{/* Visibility */}
-
+ {
const pageTitle = "Teams";
@@ -12,6 +14,20 @@ const Page = () => {
link: "/identity/administration/groups/edit?groupId=[id]",
multiPost: false,
color: "warning",
+ icon: ,
+ },
+ {
+ label: "Delete Team",
+ type: "POST",
+ url: "/api/ExecGroupsDelete",
+ icon: ,
+ data: {
+ ID: "id",
+ GroupType: "!Microsoft 365",
+ DisplayName: "displayName",
+ },
+ confirmText: "Are you sure you want to delete this team?",
+ multiPost: false,
},
];
@@ -23,7 +39,7 @@ const Page = () => {
simpleColumns={["displayName", "description", "visibility", "mailNickname", "id"]}
cardButton={
<>
-
+ }>
Add Team
>
diff --git a/src/pages/tenant/administration/add-subscription/index.jsx b/src/pages/tenant/administration/add-subscription/index.jsx
index 5d0d64a6dbbc..474313f5879b 100644
--- a/src/pages/tenant/administration/add-subscription/index.jsx
+++ b/src/pages/tenant/administration/add-subscription/index.jsx
@@ -1,11 +1,13 @@
-import React from "react";
-import { Box, Divider, Grid } from "@mui/material";
+import { Box } from "@mui/material";
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
-import { useForm } from "react-hook-form";
+import { useForm, useWatch } from "react-hook-form";
import CippFormComponent from "/src/components/CippComponents/CippFormComponent";
import { useSettings } from "/src/hooks/use-settings";
-import { darken, lighten, styled } from "@mui/system";
+import { Grid, darken, lighten, styled } from "@mui/system";
+import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard";
+import { getCippFormatting } from "../../../../utils/get-cipp-formatting";
+import { getCippTranslation } from "../../../../utils/get-cipp-translation";
const Page = () => {
const userSettingsDefaults = useSettings();
@@ -19,6 +21,12 @@ const Page = () => {
iagree: false,
},
});
+
+ const selectedSku = useWatch({
+ control: formControl.control,
+ name: "sku",
+ });
+
const GroupHeader = styled("div")(({ theme }) => ({
position: "sticky",
top: "-8px",
@@ -46,7 +54,7 @@ const Page = () => {
{/* Conditional Access Policy Selector */}
-
+ {
url: "/api/ListCSPsku",
labelField: (option) => `${option?.name[0]?.value} (${option?.sku})`,
valueField: "sku",
+
+ addedField: {
+ billingCycle: "billingCycle",
+ commitmentTerm: "commitmentTerm",
+ description: "description",
+ },
}}
multiple={false}
formControl={formControl}
+ required={true}
+ validators={{
+ validate: (option) => {
+ return option?.value ? true : "This field is required.";
+ },
+ }}
+ sortOptions={true}
/>
-
+
-
+ {selectedSku?.value && (
+
+
+
+ )}
+ {
const apiRequest = ApiPostCall({
- relatedQueryKeys: "ListAlertsQueue",
+ relatedQueryKeys: ["ListAlertsQueue", "ListCurrentAlerts"],
});
const router = useRouter();
const [editAlert, setAlertEdit] = useState(false);
@@ -44,6 +46,7 @@ const AlertWizard = () => {
const existingAlert = ApiGetCall({
url: "/api/ListAlertsQueue",
relatedQueryKeys: "ListAlertsQueue",
+ queryKey: "ListCurrentAlerts",
});
const [recurrenceOptions, setRecurrenceOptions] = useState([
{ value: "30m", label: "Every 30 minutes" },
@@ -60,7 +63,7 @@ const AlertWizard = () => {
{ label: "Email", value: "Email" },
{ label: "PSA", value: "PSA" },
];
- const actionstoTake = [
+ const actionsToTake = [
//{ value: 'cippcommand', label: 'Execute a CIPP Command' },
{ value: "becremediate", label: "Execute a BEC Remediate" },
{ value: "disableuser", label: "Disable the user in the log entry" },
@@ -80,22 +83,84 @@ const AlertWizard = () => {
const alert = existingAlert?.data?.find((alert) => alert.RowKey === router.query.id);
if (alert?.LogType === "Scripted") {
setAlertType("script");
- formControl.setValue("tenantFilter", {
- value: alert.RawAlert.Tenant,
- label: alert.RawAlert.Tenant,
- });
+
+ // Create formatted excluded tenants array if it exists
+ const excludedTenantsFormatted = Array.isArray(alert.excludedTenants)
+ ? alert.excludedTenants.map((tenant) => ({ value: tenant, label: tenant }))
+ : [];
+
+ // Format the command object
const usedCommand = alertList?.find(
(cmd) => cmd.name === alert.RawAlert.Command.replace("Get-CIPPAlert", "")
);
- formControl.setValue("command", { value: usedCommand, label: usedCommand.label });
- formControl.setValue(
- "recurrence",
- recurrenceOptions?.find((opt) => opt.value === alert.RawAlert.Recurrence)
+
+ // Format recurrence option
+ const recurrenceOption = recurrenceOptions?.find(
+ (opt) => opt.value === alert.RawAlert.Recurrence
);
+
+ // Format post execution values
const postExecutionValue = postExecutionOptions.filter((opt) =>
alert.RawAlert.PostExecution.split(",").includes(opt.value)
);
- formControl.setValue("postExecution", postExecutionValue);
+
+ // Create tenant filter object - handle both regular tenants and tenant groups
+ let tenantFilterForForm;
+ if (alert.RawAlert.TenantGroup) {
+ try {
+ const tenantGroupObject = JSON.parse(alert.RawAlert.TenantGroup);
+ tenantFilterForForm = {
+ value: tenantGroupObject.value,
+ label: tenantGroupObject.label,
+ type: "Group",
+ addedFields: tenantGroupObject,
+ };
+ } catch (error) {
+ console.error("Error parsing tenant group:", error);
+ // Fall back to regular tenant
+ tenantFilterForForm = {
+ value: alert.RawAlert.Tenant,
+ label: alert.RawAlert.Tenant,
+ type: "Tenant",
+ };
+ }
+ } else {
+ tenantFilterForForm = {
+ value: alert.RawAlert.Tenant,
+ label: alert.RawAlert.Tenant,
+ type: "Tenant",
+ };
+ }
+
+ // Create the reset object with all the form values
+ const resetObject = {
+ tenantFilter: tenantFilterForForm,
+ excludedTenants: excludedTenantsFormatted,
+ command: { value: usedCommand, label: usedCommand.label },
+ recurrence: recurrenceOption,
+ postExecution: postExecutionValue,
+ };
+
+ // Parse Parameters field if it exists and is a string
+ if (usedCommand?.requiresInput && alert.RawAlert.Parameters) {
+ try {
+ // Check if Parameters is a string that needs parsing
+ const params =
+ typeof alert.RawAlert.Parameters === "string"
+ ? JSON.parse(alert.RawAlert.Parameters)
+ : alert.RawAlert.Parameters;
+
+ // Set the input value if it exists
+ if (params.InputValue) {
+ resetObject[usedCommand.inputName] = params.InputValue;
+ }
+ } catch (error) {
+ console.error("Error parsing parameters:", error);
+ }
+ }
+
+ // Reset the form with all values at once
+ formControl.reset(resetObject, { keepDirty: false });
}
if (alert?.PartitionKey === "Webhookv2") {
setAlertType("audit");
@@ -109,13 +174,53 @@ const AlertWizard = () => {
}))
);
- formControl.reset({
+ // Format conditions properly for form
+ const formattedConditions = alert.RawAlert.Conditions.map((condition) => {
+ const formattedCondition = {
+ Property: condition.Property,
+ Operator: condition.Operator,
+ };
+
+ // Handle Input based on Property type
+ if (condition.Property.value === "String") {
+ // For String type, we need to set both the nested value and the direct value
+ formattedCondition.Input = {
+ value: condition.Input.value,
+ };
+ } else {
+ // For List type, use the full Input object
+ formattedCondition.Input = condition.Input;
+ }
+
+ return formattedCondition;
+ });
+
+ const resetData = {
RowKey: router.query.clone ? undefined : router.query.id ? router.query.id : undefined,
tenantFilter: alert.RawAlert.Tenants,
+ excludedTenants: alert.excludedTenants?.filter((tenant) => tenant !== null) || [],
Actions: alert.RawAlert.Actions,
- conditions: alert.RawAlert.Conditions,
+ conditions: formattedConditions,
logbook: foundLogbook,
- });
+ };
+
+ formControl.reset(resetData);
+
+ // After reset, manually set the Input values to ensure they're properly registered
+ setTimeout(() => {
+ formattedConditions.forEach((condition, index) => {
+ if (condition.Property.value === "String") {
+ // For String properties, set the nested value path
+ formControl.setValue(`conditions.${index}.Input.value`, condition.Input.value);
+ } else {
+ // For List properties, set the direct Input value
+ formControl.setValue(`conditions.${index}.Input`, condition.Input);
+ }
+ });
+
+ // Trigger validation to ensure all fields are properly registered
+ formControl.trigger();
+ }, 100);
}
}
}, [existingAlert.isSuccess, router, editAlert]);
@@ -148,9 +253,13 @@ const AlertWizard = () => {
recommendedOption.label += " (Recommended)";
}
setRecurrenceOptions(updatedRecurrenceOptions);
- formControl.setValue("recurrence", recommendedOption);
+
+ // Only set the recommended recurrence if we're NOT editing an existing alert
+ if (!editAlert) {
+ formControl.setValue("recurrence", recommendedOption);
+ }
}
- }, [commandValue]);
+ }, [commandValue, editAlert]);
useEffect(() => {
// Logic to handle template-based form updates when a preset is selected
@@ -201,7 +310,7 @@ const AlertWizard = () => {
};
const handleAuditSubmit = (values) => {
- values.conditions = values.conditions.filter((condition) => condition.Property);
+ values.conditions = values.conditions.filter((condition) => condition?.Property);
apiRequest.mutate({ url: "/api/AddAlert", data: values });
};
@@ -217,8 +326,9 @@ const AlertWizard = () => {
const postObject = {
RowKey: router.query.clone ? undefined : router.query.id ? router.query.id : undefined,
- tenantFilter: values.tenantFilter?.value,
- Name: `${values.tenantFilter.value}: ${values.command.label}`,
+ tenantFilter: values.tenantFilter,
+ excludedTenants: values.excludedTenants,
+ Name: `${values.tenantFilter?.label || values.tenantFilter?.value}: ${values.command.label}`,
Command: { value: `Get-CIPPAlert${values.command.value.name}` },
Parameters: getInputParams(),
ScheduledTime: Math.floor(new Date().getTime() / 1000) + 60,
@@ -264,7 +374,7 @@ const AlertWizard = () => {
-
+ setAlertType("audit")}>
@@ -276,7 +386,7 @@ const AlertWizard = () => {
-
+ setAlertType("script")}>
@@ -291,24 +401,48 @@ const AlertWizard = () => {
{/* Audit Log Form */}
{alertType === "audit" && (
-
-
+
+
This is a placeholder page for the edit standards section.
-
- );
-};
-
-Page.getLayout = (page) => {page};
-
-export default Page;
diff --git a/src/pages/tenant/standards/list-standards/classic-standards/index.js b/src/pages/tenant/standards/list-standards/classic-standards/index.js
new file mode 100644
index 000000000000..958502d70541
--- /dev/null
+++ b/src/pages/tenant/standards/list-standards/classic-standards/index.js
@@ -0,0 +1,198 @@
+import { Alert, Button } from "@mui/material";
+import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative.
+import { TabbedLayout } from "/src/layouts/TabbedLayout";
+import Link from "next/link";
+import { CopyAll, Delete, PlayArrow, AddBox, Edit, GitHub } from "@mui/icons-material";
+import { ApiGetCall, ApiPostCall } from "../../../../../api/ApiCall";
+import { Grid } from "@mui/system";
+import { CippApiResults } from "../../../../../components/CippComponents/CippApiResults";
+import { EyeIcon } from "@heroicons/react/24/outline";
+import tabOptions from "../tabOptions.json";
+
+const Page = () => {
+ const oldStandards = ApiGetCall({ url: "/api/ListStandards", queryKey: "ListStandards-legacy" });
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+ const pageTitle = "Templates";
+ const actions = [
+ {
+ label: "View Tenant Report",
+ link: "/tenant/standards/compare?templateId=[GUID]",
+ icon: ,
+ color: "info",
+ target: "_self",
+ },
+ {
+ label: "Edit Template",
+ //when using a link it must always be the full path /identity/administration/users/[id] for example.
+ link: "/tenant/standards/template?id=[GUID]&type=[type]",
+ icon: ,
+ color: "success",
+ target: "_self",
+ },
+ {
+ label: "Clone & Edit Template",
+ link: "/tenant/standards/template?id=[GUID]&clone=true",
+ icon: ,
+ color: "success",
+ target: "_self",
+ },
+ {
+ label: "Run Template Now (Currently Selected Tenant only)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: "GUID",
+ },
+ confirmText: "Are you sure you want to force a run of this template?",
+ multiPost: false,
+ },
+ {
+ label: "Run Template Now (All Tenants in Template)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: "GUID",
+ tenantFilter: "allTenants",
+ },
+ confirmText: "Are you sure you want to force a run of this template?",
+ multiPost: false,
+ },
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: {
+ WriteAccess: true,
+ },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: {
+ required: { value: true, message: "This field is required" },
+ },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveStandardTemplate",
+ icon: ,
+ data: {
+ ID: "GUID",
+ },
+ confirmText: "Are you sure you want to delete [templateName]?",
+ multiPost: false,
+ },
+ ];
+ const conversionApi = ApiPostCall({ relatedQueryKeys: "listStandardTemplates" });
+ const handleConversion = () => {
+ conversionApi.mutate({
+ url: "/api/execStandardConvert",
+ data: {},
+ });
+ };
+ const tableFilter = (
+
+ {oldStandards.isSuccess && oldStandards.data.length !== 0 && (
+
+
+
+
+ You have legacy standards available. Press the button to convert these standards to
+ the new format. This will create a new template for each standard you had, but will
+ disable the schedule. After conversion, please check the new templates to ensure
+ they are correct and re-enable the schedule.
+
+
+ handleConversion()} variant={"contained"}>
+ Convert Legacy Standards
+
+
+
+
+
+
+
+
+ )}
+
+ );
+ return (
+
+ } sx={{ mr: 1 }}>
+ Add Template
+
+ }>
+ Create Drift Template
+
+ >
+ }
+ actions={actions}
+ tableFilter={tableFilter}
+ simpleColumns={[
+ "templateName",
+ "type",
+ "tenantFilter",
+ "excludedTenants",
+ "updatedAt",
+ "updatedBy",
+ "runManually",
+ "standards",
+ ]}
+ queryKey="listStandardTemplates"
+ />
+ );
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
diff --git a/src/pages/tenant/standards/list-standards/drift-alignment/index.js b/src/pages/tenant/standards/list-standards/drift-alignment/index.js
new file mode 100644
index 000000000000..561a94daaeb6
--- /dev/null
+++ b/src/pages/tenant/standards/list-standards/drift-alignment/index.js
@@ -0,0 +1,44 @@
+import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { TabbedLayout } from "/src/layouts/TabbedLayout";
+import { EyeIcon } from "@heroicons/react/24/outline";
+import tabOptions from "../tabOptions.json";
+
+const Page = () => {
+ const pageTitle = "Drift Alignment";
+
+ const actions = [
+ {
+ label: "View Tenant Report",
+ link: "/tenant/standards/compare?tenantFilter=[tenantFilter]&templateId=[standardId]",
+ icon: ,
+ color: "info",
+ target: "_self",
+ },
+ ];
+
+ return (
+
+ );
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
\ No newline at end of file
diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js
index e041ea9cd23b..c4c95550bd02 100644
--- a/src/pages/tenant/standards/list-standards/index.js
+++ b/src/pages/tenant/standards/list-standards/index.js
@@ -1,130 +1,70 @@
-import { Alert, Button } from "@mui/material";
+import { Button } from "@mui/material";
import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx";
-import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative.
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { TabbedLayout } from "/src/layouts/TabbedLayout";
import Link from "next/link";
+import { Delete, Add } from "@mui/icons-material";
import { EyeIcon } from "@heroicons/react/24/outline";
-import { CopyAll, Delete, PlayArrow } from "@mui/icons-material";
-import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall";
-import { Grid } from "@mui/system";
-import { CippApiResults } from "../../../../components/CippComponents/CippApiResults";
+import tabOptions from "./tabOptions.json";
const Page = () => {
- const oldStandards = ApiGetCall({ url: "/api/ListStandards", queryKey: "ListStandards-legacy" });
+ const pageTitle = "Standard & Drift Alignment";
- const pageTitle = "Standard Templates";
const actions = [
{
- label: "Edit Template",
- //when using a link it must always be the full path /identity/administration/users/[id] for example.
- link: "/tenant/standards/template?id=[GUID]",
+ label: "View Tenant Report",
+ link: "/tenant/standards/manage-drift/compare?tenantFilter=[tenantFilter]&templateId=[standardId]",
icon: ,
- color: "success",
+ color: "info",
target: "_self",
},
{
- label: "Clone & Edit Template",
- link: "/tenant/standards/template?id=[GUID]&clone=true",
- icon: ,
- color: "success",
+ label: "Manage Drift",
+ link: "/tenant/standards/manage-drift?templateId=[standardId]&tenantFilter=[tenantFilter]",
+ icon: ,
+ color: "info",
target: "_self",
+ condition: (row) => row.standardType === "drift",
},
{
- label: "Run Template Now (Currently Selected Tenant only)",
- type: "GET",
- url: "/api/ExecStandardsRun",
- icon: ,
- data: {
- TemplateId: "GUID",
- },
- confirmText: "Are you sure you want to force a run of this template?",
- multiPost: false,
- },
- {
- label: "Run Template Now (All Tenants in Template)",
- type: "GET",
- url: "/api/ExecStandardsRun",
- icon: ,
- data: {
- TemplateId: "GUID",
- tenantFilter: "allTenants",
- },
- confirmText: "Are you sure you want to force a run of this template?",
- multiPost: false,
- },
- {
- label: "Delete Template",
+ label: "Remove Drift Customization",
type: "POST",
- url: "/api/RemoveStandardTemplate",
+ url: "/api/ExecUpdateDriftDeviation",
icon: ,
data: {
- ID: "GUID",
+ RemoveDriftCustomization: "true",
+ tenantFilter: "tenantFilter",
},
- confirmText: "Are you sure you want to delete this template?",
+ confirmText:
+ "Are you sure you want to remove all drift customizations? This resets the Drift Standard to the default template, and will generate alerts for the drifted items.",
multiPost: false,
+ condition: (row) => row.standardType === "drift",
},
];
- const conversionApi = ApiPostCall({ relatedQueryKeys: "listStandardTemplates" });
- const handleConversion = () => {
- conversionApi.mutate({
- url: "/api/execStandardConvert",
- data: {},
- });
- };
- const tableFilter = (
-
- {oldStandards.isSuccess && oldStandards.data.length !== 0 && (
-
-
-
-
- You have legacy standards available. Press the button to convert these standards to
- the new format. This will create a new template for each standard you had, but will
- disable the schedule. After conversion, please check the new templates to ensure
- they are correct and re-enable the schedule.
-
-
- handleConversion()} variant={"contained"}>
- Convert Legacy Standards
-
-
-
-
-
-
-
-
- )}
-
- );
+
return (
- Add Template
-
- }
actions={actions}
- tableFilter={tableFilter}
simpleColumns={[
- "templateName",
"tenantFilter",
- "excludedTenants",
- "updatedAt",
- "updatedBy",
- "runManually",
- "standards",
+ "standardName",
+ "standardType",
+ "alignmentScore",
+ "LicenseMissingPercentage",
+ "combinedAlignmentScore",
]}
- queryKey="listStandardTemplates"
+ queryKey="listTenantAlignment"
/>
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => (
+
+ {page}
+
+);
export default Page;
diff --git a/src/pages/tenant/standards/list-standards/tabOptions.json b/src/pages/tenant/standards/list-standards/tabOptions.json
new file mode 100644
index 000000000000..1c522e6ca8ca
--- /dev/null
+++ b/src/pages/tenant/standards/list-standards/tabOptions.json
@@ -0,0 +1,10 @@
+[
+ {
+ "label": "Standard & Drift Alignment",
+ "path": "/tenant/standards/list-standards"
+ },
+ {
+ "label": "Templates",
+ "path": "/tenant/standards/list-standards/classic-standards"
+ }
+]
diff --git a/src/pages/tenant/standards/manage-drift/compare.js b/src/pages/tenant/standards/manage-drift/compare.js
new file mode 100644
index 000000000000..8ddc70251193
--- /dev/null
+++ b/src/pages/tenant/standards/manage-drift/compare.js
@@ -0,0 +1,1284 @@
+import React, { useState, useEffect, useMemo } from "react";
+import {
+ Button,
+ Card,
+ Stack,
+ Typography,
+ Box,
+ Divider,
+ Chip,
+ Skeleton,
+ Alert,
+ IconButton,
+ Tooltip,
+ ButtonGroup,
+ TextField,
+ InputAdornment,
+} from "@mui/material";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { HeaderedTabbedLayout } from "/src/layouts/HeaderedTabbedLayout";
+import {
+ CheckCircle,
+ Cancel,
+ Info,
+ Microsoft,
+ Sync,
+ FilterAlt,
+ Close,
+ Search,
+ FactCheck,
+ PlayArrow,
+} from "@mui/icons-material";
+import { ArrowLeftIcon } from "@mui/x-date-pickers";
+import standards from "/src/data/standards.json";
+import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
+import { SvgIcon } from "@mui/material";
+import { useForm } from "react-hook-form";
+import { useSettings } from "../../../../hooks/use-settings";
+import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall";
+import { useRouter } from "next/router";
+import { useDialog } from "../../../../hooks/use-dialog";
+import { Grid } from "@mui/system";
+import DOMPurify from "dompurify";
+import { ClockIcon } from "@heroicons/react/24/outline";
+import ReactMarkdown from "react-markdown";
+import tabOptions from "./tabOptions.json";
+
+const Page = () => {
+ const router = useRouter();
+ const { templateId } = router.query;
+ const [comparisonData, setComparisonData] = useState(null);
+ const settings = useSettings();
+ const currentTenant = settings?.currentTenant;
+ const formControl = useForm({
+ mode: "onBlur",
+ defaultValues: {
+ comparisonMode: "standard",
+ },
+ });
+ const runReportDialog = useDialog();
+ const [filter, setFilter] = useState("all");
+ const [searchQuery, setSearchQuery] = useState("");
+
+ const templateDetails = ApiGetCall({
+ url: `/api/listStandardTemplates`,
+ queryKey: `listStandardTemplates-reports`,
+ });
+
+ // Run the report once
+ const runReport = ApiPostCall({ relatedQueryKeys: ["ListStandardsCompare"] });
+
+ // Dialog configuration for Run Report Once
+ const runReportApi = {
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ data: {
+ TemplateId: templateId,
+ },
+ confirmText: "Are you sure you want to run this standard report?",
+ };
+
+ // Get comparison data
+ const comparisonApi = ApiGetCall({
+ url: "/api/ListStandardsCompare",
+ data: {
+ TemplateId: templateId,
+ tenantFilter: currentTenant,
+ CompareToStandard: true, // Always compare to standard, even in tenant comparison mode
+ },
+ queryKey: `ListStandardsCompare-${templateId}-${
+ formControl.watch("compareTenantId") || "standard"
+ }-${currentTenant}`,
+ enabled: !!templateId, // Only run the query if templateId is available
+ });
+
+ useEffect(() => {
+ if (templateId && templateDetails.isSuccess && templateDetails.data) {
+ const selectedTemplate = templateDetails.data.find(
+ (template) => template.GUID === templateId
+ );
+
+ if (selectedTemplate && comparisonApi.isSuccess && comparisonApi.data) {
+ const tenantData = comparisonApi.data;
+
+ // Find the current tenant's data by matching tenantFilter with currentTenant
+ const currentTenantObj = tenantData.find((t) => t.tenantFilter === currentTenant);
+ const currentTenantData = currentTenantObj ? currentTenantObj.standardsResults || [] : [];
+
+ const allStandards = [];
+ if (selectedTemplate.standards) {
+ Object.entries(selectedTemplate.standards).forEach(([standardKey, standardConfig]) => {
+ // Special handling for IntuneTemplate which is an array of items
+ if (standardKey === "IntuneTemplate" && Array.isArray(standardConfig)) {
+ // Process each IntuneTemplate item separately
+ standardConfig.forEach((templateItem, index) => {
+ const templateId = templateItem.TemplateList?.value;
+ if (templateId) {
+ const standardId = `standards.IntuneTemplate.${templateId}`;
+ const standardInfo = standards.find((s) => s.name === `standards.IntuneTemplate`);
+
+ // Find the tenant's value for this specific template
+ const currentTenantStandard = currentTenantData.find(
+ (s) => s.standardId === standardId
+ );
+
+ // Get the standard object and its value from the tenant object
+ const standardObject = currentTenantObj?.[standardId];
+ const directStandardValue = standardObject?.Value;
+
+ // Determine compliance status
+ let isCompliant = false;
+
+ // For IntuneTemplate, the value is true if compliant, or an object with comparison data if not compliant
+ if (directStandardValue === true) {
+ isCompliant = true;
+ } else if (
+ directStandardValue !== undefined &&
+ typeof directStandardValue !== "object"
+ ) {
+ isCompliant = true;
+ } else if (currentTenantStandard) {
+ isCompliant = currentTenantStandard.value === true;
+ }
+
+ // Create a standardValue object that contains the template settings
+ const templateSettings = {
+ templateId,
+ Template: templateItem.TemplateList?.label || "Unknown Template",
+ "Assign to": templateItem.AssignTo || "On",
+ "Excluded Group": templateItem.excludeGroup || "",
+ "Included Group": templateItem.customGroup || "",
+ };
+
+ allStandards.push({
+ standardId,
+ standardName: `Intune Template: ${
+ templateItem.TemplateList?.label || templateId
+ }`,
+ currentTenantValue:
+ standardObject !== undefined
+ ? {
+ Value: directStandardValue,
+ LastRefresh: standardObject?.LastRefresh,
+ }
+ : currentTenantStandard?.value,
+ standardValue: templateSettings, // Use the template settings object instead of true
+ complianceStatus: isCompliant ? "Compliant" : "Non-Compliant",
+ complianceDetails:
+ standardInfo?.docsDescription || standardInfo?.helpText || "",
+ standardDescription: standardInfo?.helpText || "",
+ standardImpact: standardInfo?.impact || "Medium Impact",
+ standardImpactColour: standardInfo?.impactColour || "warning",
+ templateName: selectedTemplate?.templateName || "Standard Template",
+ templateActions: templateItem.action || [],
+ });
+ }
+ });
+ } else if (
+ standardKey === "ConditionalAccessTemplate" &&
+ Array.isArray(standardConfig)
+ ) {
+ // Process each ConditionalAccessTemplate item separately
+ standardConfig.forEach((templateItem, index) => {
+ const templateId = templateItem.TemplateList?.value;
+ if (templateId) {
+ const standardId = `standards.ConditionalAccessTemplate.${templateId}`;
+ const standardInfo = standards.find(
+ (s) => s.name === `standards.ConditionalAccessTemplate`
+ );
+
+ // Find the tenant's value for this specific template
+ const currentTenantStandard = currentTenantData.find(
+ (s) => s.standardId === standardId
+ );
+ const standardObject = currentTenantObj?.[standardId];
+ const directStandardValue = standardObject?.Value;
+ let isCompliant = false;
+
+ // For ConditionalAccessTemplate, the value is true if compliant, or an object with comparison data if not compliant
+ if (directStandardValue === true) {
+ isCompliant = true;
+ } else {
+ isCompliant = false;
+ }
+
+ // Create a standardValue object that contains the template settings
+ const templateSettings = {
+ templateId,
+ Template: templateItem.TemplateList?.label || "Unknown Template",
+ };
+
+ allStandards.push({
+ standardId,
+ standardName: `Conditional Access Template: ${
+ templateItem.TemplateList?.label || templateId
+ }`,
+ currentTenantValue:
+ standardObject !== undefined
+ ? {
+ Value: directStandardValue,
+ LastRefresh: standardObject?.LastRefresh,
+ }
+ : currentTenantStandard?.value,
+ standardValue: templateSettings, // Use the template settings object instead of true
+ complianceStatus: isCompliant ? "Compliant" : "Non-Compliant",
+ complianceDetails:
+ standardInfo?.docsDescription || standardInfo?.helpText || "",
+ standardDescription: standardInfo?.helpText || "",
+ standardImpact: standardInfo?.impact || "Medium Impact",
+ standardImpactColour: standardInfo?.impactColour || "warning",
+ templateName: selectedTemplate?.templateName || "Standard Template",
+ templateActions: templateItem.action || [],
+ });
+ }
+ });
+ } else {
+ // Regular handling for other standards
+ const standardId = `standards.${standardKey}`;
+ const standardInfo = standards.find((s) => s.name === standardId);
+ const standardSettings = standardConfig.standards?.[standardKey] || {};
+ //console.log(standardInfo);
+
+ // Check if reporting is enabled for this standard by checking the action property
+ // The standard should be reportable if there's an action with value === 'Report'
+ const actions = standardConfig?.action ?? [];
+ const reportingEnabled =
+ //if actions contains Report or Remediate, case insensitive, then we good.
+ actions.filter(
+ (action) =>
+ action?.value.toLowerCase() === "report" ||
+ action?.value.toLowerCase() === "remediate"
+ ).length > 0;
+
+ // Find the tenant's value for this standard
+ const currentTenantStandard = currentTenantData.find(
+ (s) => s.standardId === standardId
+ );
+
+ // Determine compliance status
+ let isCompliant = false;
+ let reportingDisabled = !reportingEnabled;
+
+ // Check if the standard is directly in the tenant object (like "standards.AuditLog": {...})
+ const standardIdWithoutPrefix = standardId.replace("standards.", "");
+ const standardObject = currentTenantObj?.[standardId];
+
+ // Extract the actual value from the standard object (new data structure includes .Value property)
+ const directStandardValue = standardObject?.Value;
+
+ // Special case for boolean standards that are true in the tenant
+ if (directStandardValue === true) {
+ // If the standard is directly in the tenant and is true, it's compliant
+ isCompliant = true;
+ } else if (directStandardValue !== undefined) {
+ // For non-boolean values, use strict equality
+ isCompliant =
+ JSON.stringify(directStandardValue) === JSON.stringify(standardSettings);
+ } else if (currentTenantStandard) {
+ // Fall back to the previous logic if the standard is not directly in the tenant object
+ if (typeof standardSettings === "boolean" && standardSettings === true) {
+ isCompliant = currentTenantStandard.value === true;
+ } else {
+ isCompliant =
+ JSON.stringify(currentTenantStandard.value) ===
+ JSON.stringify(standardSettings);
+ }
+ }
+
+ // Determine compliance status text based on reporting flag
+ const complianceStatus = reportingDisabled
+ ? "Reporting Disabled"
+ : isCompliant
+ ? "Compliant"
+ : "Non-Compliant";
+
+ // Use the direct standard value from the tenant object if it exists
+ allStandards.push({
+ standardId,
+ standardName: standardInfo?.label || standardKey,
+ currentTenantValue:
+ standardObject !== undefined
+ ? {
+ Value: directStandardValue,
+ LastRefresh: standardObject?.LastRefresh,
+ }
+ : currentTenantStandard?.value,
+ standardValue: standardSettings,
+ complianceStatus,
+ reportingDisabled,
+ complianceDetails: standardInfo?.docsDescription || standardInfo?.helpText || "",
+ standardDescription: standardInfo?.helpText || "",
+ standardImpact: standardInfo?.impact || "Medium Impact",
+ standardImpactColour: standardInfo?.impactColour || "warning",
+ templateName: selectedTemplate.templateName || "Standard Template",
+ templateActions: standardConfig.action || [],
+ });
+ }
+ });
+ }
+
+ setComparisonData(allStandards);
+ } else {
+ setComparisonData([]);
+ }
+ } else if (comparisonApi.isError) {
+ setComparisonData([]);
+ }
+ }, [
+ templateId,
+ templateDetails.isSuccess,
+ templateDetails.data,
+ comparisonApi.isSuccess,
+ comparisonApi.data,
+ comparisonApi.isError,
+ ]);
+ const comparisonModeOptions = [{ label: "Compare Tenant to Standard", value: "standard" }];
+
+ // Group standards by category
+ const groupedStandards = useMemo(() => {
+ if (!comparisonData) return {};
+
+ const result = {};
+
+ comparisonData.forEach((standard) => {
+ // Find the standard info in the standards.json data
+ const standardInfo = standards.find((s) => standard.standardId.includes(s.name));
+
+ // Use the category from standards.json, or default to "Other Standards"
+ const category = standardInfo?.cat || "Other Standards";
+
+ if (!result[category]) {
+ result[category] = [];
+ }
+
+ result[category].push(standard);
+ });
+
+ // Sort standards within each category
+ Object.keys(result).forEach((category) => {
+ result[category].sort((a, b) => a.standardName.localeCompare(b.standardName));
+ });
+
+ return result;
+ }, [comparisonData]);
+
+ const filteredGroupedStandards = useMemo(() => {
+ if (!groupedStandards) return {};
+
+ if (!searchQuery && filter === "all") {
+ return groupedStandards;
+ }
+
+ const result = {};
+ const searchLower = searchQuery.toLowerCase();
+
+ Object.keys(groupedStandards).forEach((category) => {
+ const categoryMatchesSearch = !searchQuery || category.toLowerCase().includes(searchLower);
+
+ const filteredStandards = groupedStandards[category].filter((standard) => {
+ const tenantValue = standard.currentTenantValue?.Value || standard.currentTenantValue;
+ const hasLicenseMissing =
+ typeof tenantValue === "string" && tenantValue.startsWith("License Missing:");
+
+ const matchesFilter =
+ filter === "all" ||
+ (filter === "compliant" && standard.complianceStatus === "Compliant") ||
+ (filter === "nonCompliant" && standard.complianceStatus === "Non-Compliant") ||
+ (filter === "nonCompliantWithLicense" &&
+ standard.complianceStatus === "Non-Compliant" &&
+ !hasLicenseMissing) ||
+ (filter === "nonCompliantWithoutLicense" &&
+ standard.complianceStatus === "Non-Compliant" &&
+ hasLicenseMissing);
+
+ const matchesSearch =
+ !searchQuery ||
+ categoryMatchesSearch ||
+ standard.standardName.toLowerCase().includes(searchLower) ||
+ standard.standardDescription.toLowerCase().includes(searchLower);
+
+ return matchesFilter && matchesSearch;
+ });
+
+ if (filteredStandards.length > 0) {
+ result[category] = filteredStandards;
+ }
+ });
+
+ return result;
+ }, [groupedStandards, searchQuery, filter]);
+
+ const allCount = comparisonData?.length || 0;
+ const compliantCount =
+ comparisonData?.filter((standard) => standard.complianceStatus === "Compliant").length || 0;
+ const nonCompliantCount =
+ comparisonData?.filter((standard) => standard.complianceStatus === "Non-Compliant").length || 0;
+ const reportingDisabledCount =
+ comparisonData?.filter((standard) => standard.complianceStatus === "Reporting Disabled")
+ .length || 0;
+
+ // Calculate license-related metrics
+ const missingLicenseCount =
+ comparisonData?.filter((standard) => {
+ const tenantValue = standard.currentTenantValue?.Value || standard.currentTenantValue;
+ return typeof tenantValue === "string" && tenantValue.startsWith("License Missing:");
+ }).length || 0;
+
+ const nonCompliantWithLicenseCount =
+ comparisonData?.filter((standard) => {
+ const tenantValue = standard.currentTenantValue?.Value || standard.currentTenantValue;
+ return (
+ standard.complianceStatus === "Non-Compliant" &&
+ !(typeof tenantValue === "string" && tenantValue.startsWith("License Missing:"))
+ );
+ }).length || 0;
+
+ const nonCompliantWithoutLicenseCount =
+ comparisonData?.filter((standard) => {
+ const tenantValue = standard.currentTenantValue?.Value || standard.currentTenantValue;
+ return (
+ standard.complianceStatus === "Non-Compliant" &&
+ typeof tenantValue === "string" &&
+ tenantValue.startsWith("License Missing:")
+ );
+ }).length || 0;
+
+ const compliancePercentage =
+ allCount > 0
+ ? Math.round((compliantCount / (allCount - reportingDisabledCount || 1)) * 100)
+ : 0;
+
+ const missingLicensePercentage =
+ allCount > 0
+ ? Math.round((missingLicenseCount / (allCount - reportingDisabledCount || 1)) * 100)
+ : 0;
+
+ // Combined score: compliance percentage + missing license percentage
+ // This represents the total "addressable" compliance (compliant + could be compliant if licensed)
+ const combinedScore = compliancePercentage + missingLicensePercentage;
+
+ // Prepare title and subtitle for HeaderedTabbedLayout
+ const title =
+ templateDetails?.data?.filter((template) => template.GUID === templateId)?.[0]?.templateName ||
+ "Tenant Report";
+
+ const subtitle = [
+ // Add compliance badges when template data is available (show even if no comparison data yet)
+ ...(templateDetails?.data?.filter((template) => template.GUID === templateId)?.[0]
+ ? [
+ {
+ component: (
+
+
+
+
+ }
+ label={`${compliancePercentage}% Compliant`}
+ variant="outlined"
+ size="small"
+ color={
+ compliancePercentage === 100
+ ? "success"
+ : compliancePercentage >= 50
+ ? "warning"
+ : "error"
+ }
+ />
+
+ = 80 ? "success" : combinedScore >= 60 ? "warning" : "error"
+ }
+ />
+
+ ),
+ },
+ ]
+ : []),
+ // Add description if available
+ ...(templateDetails?.data?.filter((template) => template.GUID === templateId)?.[0]?.description
+ ? [
+ {
+ component: (
+ theme.palette.primary.main,
+ textDecoration: "underline",
+ },
+ color: "text.secondary",
+ fontSize: "0.875rem",
+ "& p": {
+ my: 0,
+ },
+ mt: 1,
+ }}
+ dangerouslySetInnerHTML={{
+ __html: DOMPurify.sanitize(
+ templateDetails?.data?.filter((template) => template.GUID === templateId)[0]
+ .description
+ ),
+ }}
+ />
+ ),
+ },
+ ]
+ : []),
+ ];
+
+ // Actions for the header
+ const actions = [
+ {
+ label: "Refresh Data",
+ icon: ,
+ noConfirm: true,
+ customFunction: () => {
+ comparisonApi.refetch();
+ templateDetails.refetch();
+ },
+ },
+ ...(templateId
+ ? [
+ {
+ label: "Run Standard Now (Currently Selected Tenant only)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ {
+ label: "Run Standard Now (All Tenants in Template)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ tenantFilter: "allTenants",
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ ]
+ : []),
+ ];
+
+ return (
+
+
+ {comparisonApi.isFetching && (
+ <>
+ {[1, 2, 3].map((item) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+ >
+ )}
+ {!comparisonApi.isFetching && (
+ <>
+
+
+ setSearchQuery(e.target.value)}
+ slotProps={{
+ input: {
+ startAdornment: (
+
+
+
+ ),
+ endAdornment: searchQuery && (
+
+
+ setSearchQuery("")}
+ aria-label="Clear search"
+ >
+
+
+
+
+ ),
+ },
+ }}
+ />
+
+
+
+
+
+
+
+ setFilter("all")}
+ >
+ All ({allCount})
+
+ setFilter("compliant")}
+ >
+ Compliant ({compliantCount})
+
+ setFilter("nonCompliant")}
+ >
+ Non-Compliant ({nonCompliantCount})
+
+ setFilter("nonCompliantWithLicense")}
+ >
+ Non-Compliant (License available) ({nonCompliantWithLicenseCount})
+
+ setFilter("nonCompliantWithoutLicense")}
+ >
+ Non-Compliant (License not available) ({nonCompliantWithoutLicenseCount})
+
+
+
+ {comparisonApi.isError && (
+
+
+ Error fetching comparison data
+
+
+ There was an error retrieving the comparison data. Please try running the report
+ again by clicking the "Run Report Once" button above.
+
+ {comparisonApi.error && (
+
+
+ {comparisonApi.error.message || JSON.stringify(comparisonApi.error, null, 2)}
+
+
+ )}
+
+ )}
+
+ {comparisonApi.isSuccess &&
+ (!comparisonApi.data || comparisonApi.data.length === 0) && (
+
+
+ No comparison data is available. This might be because:
+
+
+
+ • The tenant has not been scanned yet
+
+
+ • The template has no standards configured
+
+
+ • There was an issue with the comparison
+
+
+
+ Try running the report by clicking the "Run Report Once" button above.
+
+
+ )}
+
+ {filteredGroupedStandards && Object.keys(filteredGroupedStandards).length === 0 && (
+
+
+ No standards match the selected filter criteria or search query.
+
+
+ Try selecting a different filter or modifying the search query.
+
+
+ )}
+
+ {Object.keys(filteredGroupedStandards).map((category) => (
+
+
+ {category}
+
+
+ {filteredGroupedStandards[category].map((standard, index) => (
+
+
+
+
+
+
+
+ {standard.complianceStatus === "Compliant" ? (
+
+ ) : standard.complianceStatus === "Reporting Disabled" ? (
+
+ ) : (
+
+ )}
+
+
+ {standard?.standardName}
+
+
+
+
+
+
+
+
+
+ {!standard.standardValue ? (
+
+ This data has not yet been collected. Collect the data by pressing the
+ report button on the top of the page.
+
+ ) : (
+
+
+
+ {standard.standardValue &&
+ typeof standard.standardValue === "object" &&
+ Object.keys(standard.standardValue).length > 0 ? (
+ Object.entries(standard.standardValue).map(([key, value]) => (
+
+
+ {key}:
+
+
+ {typeof value === "object" && value !== null
+ ? value?.label || JSON.stringify(value)
+ : value === true
+ ? "Enabled"
+ : value === false
+ ? "Disabled"
+ : String(value)}
+
+
+ ))
+ ) : (
+
+ {standard.standardValue === true ? (
+
+ This setting is configured correctly
+
+ ) : standard.standardValue === false ? (
+
+ This setting is not configured correctly
+
+ ) : standard.standardValue !== undefined ? (
+ typeof standard.standardValue === "object" ? (
+ "No settings configured"
+ ) : (
+ String(standard.standardValue)
+ )
+ ) : (
+
+ This setting is not configured, or data has not been
+ collected. If you are getting this after data collection,
+ the tenant might not be licensed for this feature
+
+ )}
+
+ )}
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {currentTenant}
+
+
+
+
+
+
+
+
+
+ {standard.complianceStatus}
+
+
+ {standard.currentTenantValue?.LastRefresh && (
+
+
+
+ }
+ size="small"
+ label={`${new Date(
+ standard.currentTenantValue.LastRefresh
+ ).toLocaleString()}`}
+ variant="outlined"
+ />
+ )}
+
+
+
+
+
+ {/* Existing tenant comparison content */}
+ {typeof standard.currentTenantValue?.Value === "object" &&
+ standard.currentTenantValue?.Value !== null ? (
+
+ {standard.complianceStatus === "Reporting Disabled" ? (
+
+ Reporting is disabled for this standard in the template
+ configuration.
+
+ ) : (
+ <>
+ {standard.complianceStatus === "Compliant" ? (
+
+ This setting is configured correctly
+
+ ) : standard.currentTenantValue?.Value === false ? (
+
+ This setting is not configured correctly
+
+ ) : null}
+
+ {/* Only show values if they're not simple true/false that's already covered by the alerts above */}
+ {!(
+ standard.complianceStatus === "Compliant" &&
+ (standard.currentTenantValue?.Value === true ||
+ standard.currentTenantValue?.Value === false)
+ ) &&
+ Object.entries(standard.currentTenantValue)
+ .filter(
+ ([key]) =>
+ key !== "LastRefresh" &&
+ // Skip showing the Value field separately if it's just true/false
+ !(
+ key === "Value" &&
+ (standard.currentTenantValue?.Value === true ||
+ standard.currentTenantValue?.Value === false)
+ )
+ )
+ .map(([key, value]) => {
+ const actualValue = key === "Value" ? value : value;
+
+ const standardValueForKey =
+ standard.standardValue &&
+ typeof standard.standardValue === "object"
+ ? standard.standardValue[key]
+ : undefined;
+
+ const isDifferent =
+ standardValueForKey !== undefined &&
+ JSON.stringify(actualValue) !==
+ JSON.stringify(standardValueForKey);
+
+ return (
+
+
+ {key}:
+ {" "}
+
+ {typeof value === "object" && value !== null
+ ? value?.label || JSON.stringify(value)
+ : value === true
+ ? "Enabled"
+ : value === false
+ ? "Disabled"
+ : String(value)}
+
+
+ );
+ })}
+ >
+ )}
+
+ ) : (
+
+ {standard.complianceStatus === "Reporting Disabled" ? (
+
+ Reporting is disabled for this standard in the template
+ configuration.
+
+ ) : standard.complianceStatus === "Compliant" ? (
+
+ This setting is configured correctly
+
+ ) : standard.currentTenantValue?.Value === false ||
+ standard.currentTenantValue === false ? (
+
+ This setting is not configured correctly
+
+ ) : standard.currentTenantValue !== undefined ? (
+ String(
+ standard.currentTenantValue?.Value !== undefined
+ ? standard.currentTenantValue?.Value
+ : standard.currentTenantValue
+ )
+ ) : (
+
+ This setting is not configured, or data has not been collected. If
+ you are getting this after data collection, the tenant might not
+ be licensed for this feature
+
+ )}
+
+ )}
+
+
+
+
+ {standard.complianceDetails && (
+
+
+
+
+
+
+ theme.palette.primary.main,
+ textDecoration: "underline",
+ "&:hover": {
+ textDecoration: "none",
+ },
+ },
+ fontSize: "0.875rem",
+ lineHeight: 1.43,
+ "& p": {
+ my: 0,
+ },
+ flex: 1,
+ }}
+ >
+ (
+
+ {children}
+
+ ),
+ // Convert paragraphs to spans to avoid unwanted spacing
+ p: ({ children }) => {children},
+ }}
+ >
+ {standard.complianceDetails}
+
+
+
+
+
+ )}
+
+ ))}
+
+ ))}
+ >
+ )}
+
+
+
+
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/tenant/standards/manage-drift/history.js b/src/pages/tenant/standards/manage-drift/history.js
new file mode 100644
index 000000000000..d7729022430b
--- /dev/null
+++ b/src/pages/tenant/standards/manage-drift/history.js
@@ -0,0 +1,348 @@
+import { useState, useEffect } from "react";
+import {
+ Box,
+ Stack,
+ Typography,
+ Button,
+ Chip,
+ Card,
+ CardContent,
+ CircularProgress,
+ Alert,
+ Link,
+} from "@mui/material";
+import {
+ Timeline,
+ TimelineItem,
+ TimelineSeparator,
+ TimelineConnector,
+ TimelineContent,
+ TimelineDot,
+ TimelineOppositeContent,
+} from "@mui/lab";
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { HeaderedTabbedLayout } from "/src/layouts/HeaderedTabbedLayout";
+import { ApiGetCall } from "/src/api/ApiCall";
+import { useRouter } from "next/router";
+import {
+ Policy,
+ Sync,
+ PlayArrow,
+ Error as ErrorIcon,
+ Warning as WarningIcon,
+ Info as InfoIcon,
+ CheckCircle as SuccessIcon,
+ ExpandMore,
+} from "@mui/icons-material";
+import tabOptions from "./tabOptions.json";
+import { useSettings } from "../../../../hooks/use-settings";
+
+const Page = () => {
+ const router = useRouter();
+ const { templateId } = router.query;
+ const [daysToLoad, setDaysToLoad] = useState(5);
+ const tenant = useSettings().currentTenant;
+ const [expandedMessages, setExpandedMessages] = useState(new Set());
+
+ // Toggle message expansion
+ const toggleMessageExpansion = (index) => {
+ const newExpanded = new Set(expandedMessages);
+ if (newExpanded.has(index)) {
+ newExpanded.delete(index);
+ } else {
+ newExpanded.add(index);
+ }
+ setExpandedMessages(newExpanded);
+ };
+
+ // Truncate message if too long
+ const truncateMessage = (message, maxLength = 256) => {
+ if (!message || message.length <= maxLength) {
+ return { text: message, isTruncated: false };
+ }
+ return {
+ text: message.substring(0, maxLength) + "...",
+ fullText: message,
+ isTruncated: true,
+ };
+ };
+
+ // Calculate date range for API call
+ const getDateRange = (days) => {
+ const endDate = new Date();
+ const startDate = new Date();
+ startDate.setDate(endDate.getDate() - days);
+
+ return {
+ startDate: startDate.toISOString().split("T")[0].replace(/-/g, ""),
+ endDate: endDate.toISOString().split("T")[0].replace(/-/g, ""),
+ };
+ };
+
+ const { startDate, endDate } = getDateRange(daysToLoad);
+
+ const logsData = ApiGetCall({
+ url: `/api/Listlogs?tenant=${tenant}&StartDate=${startDate}&EndDate=${endDate}&Filter=true`,
+ queryKey: `Listlogs-${tenant}-${startDate}-${endDate}`,
+ });
+
+ // Get severity icon and color
+ const getSeverityConfig = (severity) => {
+ const severityLower = severity?.toLowerCase();
+ switch (severityLower) {
+ case "error":
+ return { icon: , color: "error", chipColor: "error" };
+ case "warning":
+ return { icon: , color: "warning", chipColor: "warning" };
+ case "info":
+ return { icon: , color: "info", chipColor: "info" };
+ case "success":
+ return { icon: , color: "success", chipColor: "success" };
+ default:
+ return { icon: , color: "grey", chipColor: "default" };
+ }
+ };
+
+ // Format date for display
+ const formatDate = (dateString) => {
+ const date = new Date(dateString);
+ return {
+ time: date.toLocaleTimeString("en-US", {
+ hour: "2-digit",
+ minute: "2-digit",
+ hour12: false,
+ }),
+ date: date.toLocaleDateString("en-US", {
+ month: "short",
+ day: "numeric",
+ year: "numeric",
+ }),
+ };
+ };
+
+ // Load more days
+ const handleLoadMore = () => {
+ setDaysToLoad((prev) => prev + 7);
+ };
+
+ // Actions for the ActionsMenu
+ const actions = [
+ {
+ label: "Refresh Data",
+ icon: ,
+ noConfirm: true,
+ customFunction: () => {
+ logsData.refetch();
+ },
+ },
+ ...(templateId
+ ? [
+ {
+ label: "Run Standard Now (Currently Selected Tenant only)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ {
+ label: "Run Standard Now (All Tenants in Template)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ tenantFilter: "allTenants",
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ ]
+ : []),
+ ];
+
+ const title = "Manage Drift";
+ const subtitle = [
+ {
+ icon: ,
+ text: `Template ID: ${templateId || "Loading..."}`,
+ },
+ ];
+
+ // Sort logs by date (newest first)
+ const sortedLogs = logsData.data
+ ? [...logsData.data].sort((a, b) => new Date(b.DateTime) - new Date(a.DateTime))
+ : [];
+
+ return (
+
+
+
+ Activity Timeline
+
+ This timeline shows the history of actions taken on this tenant, by CIPP for the last{" "}
+ {daysToLoad} days.
+
+
+ {logsData.isLoading && (
+
+
+
+ )}
+
+ {logsData.isError && (
+ Failed to load activity logs. Please try again.
+ )}
+
+ {logsData.data && sortedLogs.length === 0 && (
+ No activity logs found for the selected time period.
+ )}
+
+ {logsData.data && sortedLogs.length > 0 && (
+
+
+
+ {sortedLogs.map((log, index) => {
+ const { icon, color, chipColor } = getSeverityConfig(log.Severity);
+ const { time, date } = formatDate(log.DateTime);
+ const { text, fullText, isTruncated } = truncateMessage(log.Message);
+ const isExpanded = expandedMessages.has(index);
+
+ return (
+
+
+
+ {date}
+
+
+ {time}
+
+
+
+
+
+ {icon}
+
+ {index < sortedLogs.length - 1 && }
+
+
+
+
+
+
+
+ {log.IP && (
+
+ )}
+
+
+
+
+ {isExpanded ? fullText : text}
+
+ {isTruncated && (
+ toggleMessageExpansion(index)}
+ sx={{
+ mt: 0.5,
+ display: "block",
+ textAlign: "left",
+ fontSize: "0.75rem",
+ }}
+ >
+ {isExpanded ? "Show less" : "Show more"}
+
+ )}
+
+
+ {log.User && (
+
+ User: {log.User}
+
+ )}
+
+
+
+ );
+ })}
+
+
+
+ }
+ onClick={handleLoadMore}
+ disabled={logsData.isLoading}
+ >
+ Load More (Show {daysToLoad + 7} days)
+
+
+
+
+ )}
+
+
+
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
diff --git a/src/pages/tenant/standards/manage-drift/index.js b/src/pages/tenant/standards/manage-drift/index.js
new file mode 100644
index 000000000000..39a4f03b312a
--- /dev/null
+++ b/src/pages/tenant/standards/manage-drift/index.js
@@ -0,0 +1,968 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useRouter } from "next/router";
+import {
+ Check,
+ Warning,
+ ExpandMore,
+ CheckCircle,
+ Sync,
+ Block,
+ Science,
+ CheckBox,
+ Cancel,
+ Policy,
+ Error,
+ Info,
+ FactCheck,
+ PlayArrow,
+} from "@mui/icons-material";
+import { Box, Stack, Typography, Button, Menu, MenuItem, Chip, SvgIcon } from "@mui/material";
+import { Grid } from "@mui/system";
+import { useState } from "react";
+import { CippChartCard } from "/src/components/CippCards/CippChartCard";
+import { CippBannerListCard } from "/src/components/CippCards/CippBannerListCard";
+import { CippHead } from "/src/components/CippComponents/CippHead";
+import { HeaderedTabbedLayout } from "/src/layouts/HeaderedTabbedLayout";
+import { ApiGetCall } from "/src/api/ApiCall";
+import { useSettings } from "/src/hooks/use-settings";
+import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog";
+import { useDialog } from "/src/hooks/use-dialog";
+import tabOptions from "./tabOptions.json";
+import standardsData from "/src/data/standards.json";
+
+const ManageDriftPage = () => {
+ const router = useRouter();
+ const { templateId } = router.query;
+ const userSettingsDefaults = useSettings();
+ const tenantFilter = userSettingsDefaults.currentTenant || "";
+ const [anchorEl, setAnchorEl] = useState({});
+ const [bulkActionsAnchorEl, setBulkActionsAnchorEl] = useState(null);
+ const createDialog = useDialog();
+ const [actionData, setActionData] = useState({ data: {}, ready: false });
+
+ // API calls for drift data
+ const driftApi = ApiGetCall({
+ url: "/api/listTenantDrift",
+ data: {
+ TenantFilter: tenantFilter,
+ },
+ queryKey: `TenantDrift-${tenantFilter}`,
+ });
+
+ // API call for available drift templates (for What If dropdown)
+ const standardsApi = ApiGetCall({
+ url: "/api/listStandardTemplates",
+ data: {
+ type: "drift",
+ },
+ queryKey: "ListDriftTemplates",
+ });
+
+ // API call for standards comparison (when templateId is available)
+ const comparisonApi = ApiGetCall({
+ url: "/api/ListStandardsCompare",
+ data: {
+ TemplateId: templateId,
+ TenantFilter: tenantFilter,
+ CompareToStandard: true,
+ },
+ queryKey: `StandardsCompare-${templateId}-${tenantFilter}`,
+ enabled: !!templateId && !!tenantFilter,
+ });
+
+ // Process drift data for chart - filter by current tenant and aggregate
+ const rawDriftData = driftApi.data || [];
+ const tenantDriftData = Array.isArray(rawDriftData)
+ ? rawDriftData.filter((item) => item.tenantFilter === tenantFilter)
+ : [];
+
+ // Aggregate data across all standards for this tenant
+ const processedDriftData = tenantDriftData.reduce(
+ (acc, item) => {
+ acc.acceptedDeviationsCount += item.acceptedDeviationsCount || 0;
+ acc.currentDeviationsCount += item.currentDeviationsCount || 0;
+ acc.alignedCount += item.alignedCount || 0;
+ acc.customerSpecificDeviations += item.customerSpecificDeviationsCount || 0;
+ acc.deniedDeviationsCount += item.deniedDeviationsCount || 0;
+
+ // Use the API's direct arrays instead of filtering allDeviations
+ if (item.currentDeviations && Array.isArray(item.currentDeviations)) {
+ acc.currentDeviations.push(...item.currentDeviations.filter((dev) => dev !== null));
+ }
+ if (item.acceptedDeviations && Array.isArray(item.acceptedDeviations)) {
+ acc.acceptedDeviations.push(...item.acceptedDeviations.filter((dev) => dev !== null));
+ }
+ if (item.customerSpecificDeviations && Array.isArray(item.customerSpecificDeviations)) {
+ acc.customerSpecificDeviationsList.push(
+ ...item.customerSpecificDeviations.filter((dev) => dev !== null)
+ );
+ }
+ if (item.deniedDeviations && Array.isArray(item.deniedDeviations)) {
+ acc.deniedDeviationsList.push(...item.deniedDeviations.filter((dev) => dev !== null));
+ }
+
+ // Use the latest data collection timestamp
+ if (
+ item.latestDataCollection &&
+ (!acc.latestDataCollection ||
+ new Date(item.latestDataCollection) > new Date(acc.latestDataCollection))
+ ) {
+ acc.latestDataCollection = item.latestDataCollection;
+ }
+
+ return acc;
+ },
+ {
+ acceptedDeviationsCount: 0,
+ currentDeviationsCount: 0,
+ alignedCount: 0,
+ customerSpecificDeviations: 0,
+ deniedDeviationsCount: 0,
+ currentDeviations: [],
+ acceptedDeviations: [],
+ customerSpecificDeviationsList: [],
+ deniedDeviationsList: [],
+ latestDataCollection: null,
+ }
+ );
+
+ const chartLabels = [
+ "Aligned Policies",
+ "Accepted Deviations",
+ "Current Deviations",
+ "Customer Specific Deviations",
+ ];
+ const chartSeries = [
+ processedDriftData.alignedCount || 0,
+ processedDriftData.acceptedDeviationsCount || 0,
+ processedDriftData.currentDeviationsCount || 0,
+ processedDriftData.customerSpecificDeviations || 0,
+ ];
+
+ // Transform currentDeviations into deviation items for display
+ const getDeviationIcon = (state) => {
+ switch (state?.toLowerCase()) {
+ case "current":
+ return ;
+ case "denied":
+ return ;
+ case "denieddelete":
+ case "denied - delete":
+ return ;
+ case "deniedremediate":
+ case "denied - remediate":
+ return ;
+ case "accepted":
+ return ;
+ case "customerspecific":
+ return ;
+ default:
+ return ;
+ }
+ };
+
+ const getDeviationColor = (state) => {
+ switch (state?.toLowerCase()) {
+ case "current":
+ return "warning.main";
+ case "denied":
+ return "error.main";
+ case "denieddelete":
+ case "denied - delete":
+ return "error.main";
+ case "deniedremediate":
+ case "denied - remediate":
+ return "error.main";
+ case "accepted":
+ return "success.main";
+ case "customerspecific":
+ return "info.main";
+ default:
+ return "warning.main";
+ }
+ };
+
+ const getDeviationStatusText = (state) => {
+ switch (state?.toLowerCase()) {
+ case "current":
+ return "Current Deviation";
+ case "denied":
+ return "Denied Deviation";
+ case "denieddelete":
+ case "denied - delete":
+ return "Denied - Delete";
+ case "deniedremediate":
+ case "denied - remediate":
+ return "Denied - Remediate";
+ case "accepted":
+ return "Accepted Deviation";
+ case "customerspecific":
+ return "Customer Specific";
+ default:
+ return "Deviation";
+ }
+ };
+
+ // Helper function to get pretty name from standards.json
+ const getStandardPrettyName = (standardName) => {
+ if (!standardName) return "Unknown Standard";
+
+ // Find the standard in standards.json by name
+ const standard = standardsData.find((s) => s.name === standardName);
+ if (standard && standard.label) {
+ return standard.label;
+ }
+
+ // If not found in standards.json, try using standardDisplayName from the deviation object
+ // This will be handled in the createDeviationItems function
+ return null;
+ };
+
+ // Helper function to get description from standards.json
+ const getStandardDescription = (standardName) => {
+ if (!standardName) return null;
+
+ // Find the standard in standards.json by name
+ const standard = standardsData.find((s) => s.name === standardName);
+ if (standard) {
+ return standard.helpText || standard.docsDescription || standard.executiveText || null;
+ }
+
+ return null;
+ };
+
+ // Helper function to create deviation items
+ const createDeviationItems = (deviations, statusOverride = null) => {
+ return (deviations || []).map((deviation, index) => {
+ // Prioritize standardDisplayName from drift data (which has user-friendly names for templates)
+ // then fallback to standards.json lookup, then raw name
+ const prettyName =
+ deviation.standardDisplayName ||
+ getStandardPrettyName(deviation.standardName) ||
+ deviation.standardName ||
+ "Unknown Standard";
+
+ // Get description from standards.json first, then fallback to standardDescription from deviation
+ const description =
+ getStandardDescription(deviation.standardName) ||
+ deviation.standardDescription ||
+ "No description available";
+
+ return {
+ id: index + 1,
+ cardLabelBox: {
+ cardLabelBoxHeader: getDeviationIcon(
+ statusOverride || deviation.Status || deviation.state
+ ),
+ },
+ text: prettyName,
+ subtext: description,
+ statusColor: getDeviationColor(statusOverride || deviation.Status || deviation.state),
+ statusText: getDeviationStatusText(statusOverride || deviation.Status || deviation.state),
+ standardName: deviation.standardName, // Store the original standardName for action handlers
+ receivedValue: deviation.receivedValue, // Store the original receivedValue for action handlers
+ expectedValue: deviation.expectedValue, // Store the original expectedValue for action handlers
+ originalDeviation: deviation, // Store the complete original deviation object for reference
+ propertyItems: [
+ { label: "Standard Name", value: prettyName },
+ { label: "Description", value: description },
+ { label: "Expected Value", value: deviation.expectedValue || "N/A" },
+ { label: "Current Value", value: deviation.receivedValue || "N/A" },
+ {
+ label: "Status",
+ value: getDeviationStatusText(statusOverride || deviation.Status || deviation.state),
+ },
+ {
+ label: "Reason",
+ value: deviation.Reason || "N/A",
+ },
+ {
+ label: "User",
+ value: deviation.lastChangedByUser || "N/A",
+ },
+ {
+ label: "Last Updated",
+ value: processedDriftData.latestDataCollection
+ ? new Date(processedDriftData.latestDataCollection).toLocaleString()
+ : "N/A",
+ },
+ ].filter((item) => item.value !== "N/A" && item.value !== "No description available"), // Filter out N/A values and empty descriptions
+ };
+ });
+ };
+
+ const deviationItems = createDeviationItems(processedDriftData.currentDeviations);
+ const acceptedDeviationItems = createDeviationItems(
+ processedDriftData.acceptedDeviations,
+ "accepted"
+ );
+ const customerSpecificDeviationItems = createDeviationItems(
+ processedDriftData.customerSpecificDeviationsList,
+ "customerspecific"
+ );
+ const deniedDeviationItems = createDeviationItems(
+ processedDriftData.deniedDeviationsList,
+ "denied"
+ );
+
+ const handleMenuClick = (event, itemId) => {
+ setAnchorEl((prev) => ({ ...prev, [itemId]: event.currentTarget }));
+ };
+
+ const handleMenuClose = (itemId) => {
+ setAnchorEl((prev) => ({ ...prev, [itemId]: null }));
+ };
+
+ const handleAction = (action, itemId) => {
+ const deviation = processedDriftData.currentDeviations[itemId - 1];
+ if (!deviation) return;
+
+ let status;
+ let actionText;
+ switch (action) {
+ case "accept-customer-specific":
+ status = "CustomerSpecific";
+ actionText = "accept as customer specific";
+ break;
+ case "accept":
+ status = "Accepted";
+ actionText = "accept";
+ break;
+ case "deny-delete":
+ status = "DeniedDelete";
+ actionText = "deny and delete";
+ break;
+ case "deny-remediate":
+ status = "DeniedRemediate";
+ actionText = "deny and remediate to align with template";
+ break;
+ default:
+ return;
+ }
+
+ // Set action data for CippApiDialog
+ setActionData({
+ data: {
+ deviations: [
+ {
+ standardName: deviation.standardName,
+ status: status,
+ receivedValue: deviation.receivedValue,
+ },
+ ],
+ TenantFilter: tenantFilter,
+ },
+ action: {
+ text: actionText,
+ type: "single",
+ },
+ ready: true,
+ });
+
+ createDialog.handleOpen();
+ handleMenuClose(itemId);
+ };
+
+ const handleDeviationAction = (action, deviation) => {
+ if (!deviation) return;
+
+ let status;
+ let actionText;
+ switch (action) {
+ case "accept-customer-specific":
+ status = "CustomerSpecific";
+ actionText = "accept as customer specific";
+ break;
+ case "accept":
+ status = "Accepted";
+ actionText = "accept";
+ break;
+ case "deny":
+ status = "Denied";
+ actionText = "deny";
+ break;
+ case "deny-delete":
+ status = "DeniedDelete";
+ actionText = "deny and delete";
+ break;
+ case "deny-remediate":
+ status = "DeniedRemediate";
+ actionText = "deny and remediate to align with template";
+ break;
+ default:
+ return;
+ }
+
+ // Set action data for CippApiDialog
+ setActionData({
+ data: {
+ deviations: [
+ {
+ standardName: deviation.standardName, // Use the standardName from the original deviation data
+ status: status,
+ receivedValue: deviation.receivedValue,
+ },
+ ],
+ TenantFilter: tenantFilter,
+ },
+ action: {
+ text: actionText,
+ type: "single",
+ },
+ ready: true,
+ });
+
+ createDialog.handleOpen();
+ };
+
+ const handleBulkAction = (action) => {
+ if (
+ !processedDriftData.currentDeviations ||
+ processedDriftData.currentDeviations.length === 0
+ ) {
+ setBulkActionsAnchorEl(null);
+ return;
+ }
+
+ let status;
+ let actionText;
+ switch (action) {
+ case "accept-all-customer-specific":
+ status = "CustomerSpecific";
+ actionText = "accept all deviations as customer specific";
+ break;
+ case "accept-all":
+ status = "Accepted";
+ actionText = "accept all deviations";
+ break;
+ case "deny-all":
+ status = "Denied";
+ actionText = "deny all deviations";
+ break;
+ case "deny-all-delete":
+ status = "DeniedDelete";
+ actionText = "deny all deviations and delete";
+ break;
+ case "deny-all-remediate":
+ status = "DeniedRemediate";
+ actionText = "deny all deviations and remediate to align with template";
+ break;
+ default:
+ setBulkActionsAnchorEl(null);
+ return;
+ }
+
+ const deviations = processedDriftData.currentDeviations.map((deviation) => ({
+ standardName: deviation.standardName,
+ status: status,
+ receivedValue: deviation.receivedValue,
+ }));
+
+ // Set action data for CippApiDialog
+ setActionData({
+ data: {
+ deviations: deviations,
+ TenantFilter: tenantFilter,
+ receivedValues: deviations.map((d) => d.receivedValue),
+ },
+ action: {
+ text: actionText,
+ type: "bulk",
+ count: deviations.length,
+ },
+ ready: true,
+ });
+
+ createDialog.handleOpen();
+ setBulkActionsAnchorEl(null);
+ };
+
+ const handleRemoveDriftCustomization = () => {
+ // Set action data for CippApiDialog
+ setActionData({
+ data: {
+ RemoveDriftCustomization: true,
+ TenantFilter: tenantFilter,
+ },
+ action: {
+ text: "remove all drift customizations",
+ type: "reset",
+ },
+ ready: true,
+ });
+
+ createDialog.handleOpen();
+ setBulkActionsAnchorEl(null);
+ };
+
+ // Actions for the ActionsMenu
+ const actions = [
+ {
+ label: "Refresh Data",
+ icon: ,
+ noConfirm: true,
+ customFunction: () => {
+ driftApi.refetch();
+ standardsApi.refetch();
+ if (templateId) {
+ comparisonApi.refetch();
+ }
+ },
+ },
+ ...(templateId
+ ? [
+ {
+ label: "Run Standard Now (Currently Selected Tenant only)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ {
+ label: "Run Standard Now (All Tenants in Template)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ tenantFilter: "allTenants",
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ ]
+ : []),
+ ];
+
+ // Add action buttons to each deviation item
+ const deviationItemsWithActions = deviationItems.map((item) => {
+ // Check if this is a template that supports delete action
+ const supportsDelete =
+ item.standardName?.includes("ConditionalAccessTemplate") ||
+ item.standardName?.includes("IntuneTemplate");
+
+ return {
+ ...item,
+ actionButton: (
+ <>
+ }
+ onClick={(e) => handleMenuClick(e, item.id)}
+ size="small"
+ >
+ Actions
+
+
+ >
+ ),
+ };
+ });
+
+ // Add action buttons to accepted deviation items
+ const acceptedDeviationItemsWithActions = acceptedDeviationItems.map((item) => {
+ // Check if this is a template that supports delete action
+ const supportsDelete =
+ item.standardName?.includes("ConditionalAccessTemplate") ||
+ item.standardName?.includes("IntuneTemplate");
+
+ return {
+ ...item,
+ actionButton: (
+ <>
+ }
+ onClick={(e) => handleMenuClick(e, `accepted-${item.id}`)}
+ size="small"
+ >
+ Actions
+
+
+ >
+ ),
+ };
+ });
+
+ // Add action buttons to customer specific deviation items
+ const customerSpecificDeviationItemsWithActions = customerSpecificDeviationItems.map((item) => {
+ // Check if this is a template that supports delete action
+ const supportsDelete =
+ item.standardName?.includes("ConditionalAccessTemplate") ||
+ item.standardName?.includes("IntuneTemplate");
+
+ return {
+ ...item,
+ actionButton: (
+ <>
+ }
+ onClick={(e) => handleMenuClick(e, `customer-${item.id}`)}
+ size="small"
+ >
+ Actions
+
+
+ >
+ ),
+ };
+ });
+
+ // Add action buttons to denied deviation items
+ const deniedDeviationItemsWithActions = deniedDeviationItems.map((item) => ({
+ ...item,
+ actionButton: (
+ <>
+ }
+ onClick={(e) => handleMenuClick(e, `denied-${item.id}`)}
+ size="small"
+ >
+ Actions
+
+
+ >
+ ),
+ }));
+
+ // Calculate compliance metrics for badges
+ const totalPolicies =
+ processedDriftData.alignedCount +
+ processedDriftData.currentDeviationsCount +
+ processedDriftData.acceptedDeviationsCount +
+ processedDriftData.customerSpecificDeviations;
+
+ const compliancePercentage =
+ totalPolicies > 0 ? Math.round((processedDriftData.alignedCount / totalPolicies) * 100) : 0;
+
+ const missingLicensePercentage = 0; // This would need to be calculated from actual license data
+ const combinedScore = compliancePercentage + missingLicensePercentage;
+
+ const title = "Manage Drift";
+ const subtitle = [
+ {
+ icon: ,
+ text: `Template ID: ${templateId || "Loading..."}`,
+ },
+ // Add compliance badges when data is available
+ ...(totalPolicies > 0
+ ? [
+ {
+ component: (
+
+
+
+
+ }
+ label={`${compliancePercentage}% Compliant`}
+ variant="outlined"
+ size="small"
+ color={
+ compliancePercentage === 100
+ ? "success"
+ : compliancePercentage >= 50
+ ? "warning"
+ : "error"
+ }
+ />
+ = 80 ? "success" : combinedScore >= 60 ? "warning" : "error"
+ }
+ />
+
+ ),
+ },
+ ]
+ : []),
+ ];
+
+ return (
+
+
+
+ {/* Check if there's no drift data */}
+ {!driftApi.isFetching &&
+ (!rawDriftData || rawDriftData.length === 0 || tenantDriftData.length === 0) ? (
+
+
+ No Drift Data Available
+
+
+ This standard does not have any drift entries, or it is not a drift compatible
+ standard.
+
+
+ To enable drift monitoring for this tenant, please ensure:
+
+
+
+ A drift template has been created and assigned to this tenant
+
+
+ The standard is configured for drift monitoring
+
+
+ Drift data collection has been completed for this tenant
+
+
+
+ ) : (
+
+ {/* Left side - Chart */}
+
+
+
+
+ {/* Right side - Deviation Management */}
+
+
+ {/* Current Deviations Section */}
+
+ {/* Header with bulk actions */}
+
+ Current Deviations
+
+ {/* Bulk Actions Dropdown */}
+ }
+ onClick={(e) => setBulkActionsAnchorEl(e.currentTarget)}
+ size="small"
+ >
+ Bulk Actions
+
+
+
+
+
+
+
+ {/* Accepted Deviations Section */}
+ {acceptedDeviationItemsWithActions.length > 0 && (
+
+
+ Accepted Deviations
+
+
+
+ )}
+
+ {/* Customer Specific Deviations Section */}
+ {customerSpecificDeviationItemsWithActions.length > 0 && (
+
+
+ Accepted Deviations - Customer Specific
+
+
+
+ )}
+
+ {/* Denied Deviations Section */}
+ {deniedDeviationItemsWithActions.length > 0 && (
+
+
+ Denied Deviations
+
+
+
+ )}
+
+
+
+ )}
+
+ {actionData.ready && (
+
+ )}
+
+ );
+};
+
+ManageDriftPage.getLayout = (page) => {page};
+
+export default ManageDriftPage;
diff --git a/src/pages/tenant/standards/manage-drift/policies-deployed.js b/src/pages/tenant/standards/manage-drift/policies-deployed.js
new file mode 100644
index 000000000000..909b19a733f4
--- /dev/null
+++ b/src/pages/tenant/standards/manage-drift/policies-deployed.js
@@ -0,0 +1,376 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useSettings } from "/src/hooks/use-settings";
+import { useRouter } from "next/router";
+import {
+ Policy,
+ Security,
+ AdminPanelSettings,
+ Devices,
+ ExpandMore,
+ Sync,
+ PlayArrow,
+} from "@mui/icons-material";
+import {
+ Box,
+ Stack,
+ Typography,
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Chip,
+} from "@mui/material";
+import { HeaderedTabbedLayout } from "/src/layouts/HeaderedTabbedLayout";
+import tabOptions from "./tabOptions.json";
+import { CippDataTable } from "/src/components/CippTable/CippDataTable";
+import { CippHead } from "/src/components/CippComponents/CippHead";
+import { ApiGetCall } from "/src/api/ApiCall";
+import standardsData from "/src/data/standards.json";
+
+const PoliciesDeployedPage = () => {
+ const userSettingsDefaults = useSettings();
+ const router = useRouter();
+ const { templateId } = router.query;
+ const tenantFilter = router.query.tenantFilter || userSettingsDefaults.tenantFilter;
+
+ // API call to get standards template data
+ const standardsApi = ApiGetCall({
+ url: "/api/listStandardTemplates",
+ queryKey: "ListStandardsTemplates-Drift",
+ });
+
+ // API call to get standards comparison data
+ const comparisonApi = ApiGetCall({
+ url: "/api/ListStandardsCompare",
+ data: {
+ TemplateId: templateId,
+ TenantFilter: tenantFilter,
+ CompareToStandard: true,
+ },
+ queryKey: `StandardsCompare-${templateId}-${tenantFilter}`,
+ enabled: !!templateId && !!tenantFilter,
+ });
+
+ // API call to get drift data for deviation statuses
+ const driftApi = ApiGetCall({
+ url: "/api/listTenantDrift",
+ data: {
+ tenantFilter: tenantFilter,
+ standardsId: templateId,
+ },
+ queryKey: `TenantDrift-${templateId}-${tenantFilter}`,
+ enabled: !!templateId && !!tenantFilter,
+ });
+
+ // Find the current template from standards data
+ const currentTemplate = (standardsApi.data || []).find(
+ (template) => template.GUID === templateId
+ );
+ const templateStandards = currentTemplate?.standards || {};
+ const comparisonData = comparisonApi.data?.[0] || {};
+
+ // Helper function to get status from comparison data with deviation status
+ const getStatus = (standardKey, templateValue = null, templateType = null) => {
+ const comparisonKey = `standards.${standardKey}`;
+ const value = comparisonData[comparisonKey]?.Value;
+
+ if (value === true) {
+ return "Deployed";
+ } else {
+ // Check if there's drift data for this standard to get the deviation status
+ const driftData = driftApi.data || [];
+
+ // For templates, we need to match against the full template path
+ let searchKeys = [
+ standardKey,
+ `standards.${standardKey}`,
+ ];
+
+ // Add template-specific search keys
+ if (templateValue && templateType) {
+ searchKeys.push(
+ `standards.${templateType}.${templateValue}`,
+ `${templateType}.${templateValue}`,
+ templateValue
+ );
+ }
+
+ const deviation = driftData.find(item =>
+ searchKeys.some(key =>
+ item.standardName === key ||
+ item.policyName === key ||
+ item.standardName?.includes(key) ||
+ item.policyName?.includes(key)
+ )
+ );
+
+ if (deviation && deviation.Status) {
+ return `Deviation - ${deviation.Status}`;
+ }
+
+ return "Deviation - New";
+ }
+ };
+
+ // Helper function to get display name from drift data
+ const getDisplayNameFromDrift = (standardKey, templateValue = null, templateType = null) => {
+ const driftData = driftApi.data || [];
+
+ // For templates, we need to match against the full template path
+ let searchKeys = [
+ standardKey,
+ `standards.${standardKey}`,
+ ];
+
+ // Add template-specific search keys
+ if (templateValue && templateType) {
+ searchKeys.push(
+ `standards.${templateType}.${templateValue}`,
+ `${templateType}.${templateValue}`,
+ templateValue
+ );
+ }
+
+ const deviation = driftData.find(item =>
+ searchKeys.some(key =>
+ item.standardName === key ||
+ item.policyName === key ||
+ item.standardName?.includes(key) ||
+ item.policyName?.includes(key)
+ )
+ );
+
+ return deviation?.standardDisplayName || null;
+ };
+
+ // Helper function to get last refresh date
+ const getLastRefresh = (standardKey) => {
+ const comparisonKey = `standards.${standardKey}`;
+ const lastRefresh = comparisonData[comparisonKey]?.LastRefresh;
+ return lastRefresh ? new Date(lastRefresh).toLocaleDateString() : "N/A";
+ };
+
+ // Helper function to get standard name from standards.json
+ const getStandardName = (standardKey) => {
+ const standardName = `standards.${standardKey}`;
+ const standard = standardsData.find(s => s.name === standardName);
+ return standard?.label || standardKey.replace(/([A-Z])/g, " $1").trim();
+ };
+
+ // Helper function to get template label from standards API data
+ const getTemplateLabel = (templateValue, templateType) => {
+ if (!templateValue || !currentTemplate) return "Unknown Template";
+
+ // Search through all templates in the current template data
+ const allTemplates = currentTemplate.standards || {};
+
+ // Look for the template in the specific type array
+ if (allTemplates[templateType] && Array.isArray(allTemplates[templateType])) {
+ const template = allTemplates[templateType].find(t => t.TemplateList?.value === templateValue);
+ if (template?.TemplateList?.label) {
+ return template.TemplateList.label;
+ }
+ }
+
+ // If not found in the specific type, search through all template types
+ for (const [key, templates] of Object.entries(allTemplates)) {
+ if (Array.isArray(templates)) {
+ const template = templates.find(t => t.TemplateList?.value === templateValue);
+ if (template?.TemplateList?.label) {
+ return template.TemplateList.label;
+ }
+ }
+ }
+
+ return "Unknown Template";
+ };
+
+ // Process Security Standards (everything NOT IntuneTemplates or ConditionalAccessTemplates)
+ const deployedStandards = Object.entries(templateStandards)
+ .filter(([key]) => key !== "IntuneTemplate" && key !== "ConditionalAccessTemplate")
+ .map(([key, value], index) => ({
+ id: index + 1,
+ name: getStandardName(key),
+ category: "Security Standard",
+ status: getStatus(key),
+ lastModified: getLastRefresh(key),
+ standardKey: key,
+ }));
+
+ // Process Intune Templates
+ const intunePolices = (templateStandards.IntuneTemplate || []).map((template, index) => {
+ const standardKey = `IntuneTemplate.${template.TemplateList?.value}`;
+ const driftDisplayName = getDisplayNameFromDrift(standardKey, template.TemplateList?.value, "IntuneTemplate");
+ const templateLabel = getTemplateLabel(template.TemplateList?.value, "IntuneTemplate");
+
+ return {
+ id: index + 1,
+ name: driftDisplayName || `Intune - ${templateLabel}`,
+ category: "Intune Template",
+ platform: "Multi-Platform",
+ status: getStatus(standardKey, template.TemplateList?.value, "IntuneTemplate"),
+ lastModified: getLastRefresh(standardKey),
+ assignedGroups: template.AssignTo || "N/A",
+ templateValue: template.TemplateList?.value,
+ };
+ });
+
+ // Process Conditional Access Templates
+ const conditionalAccessPolicies = (templateStandards.ConditionalAccessTemplate || []).map(
+ (template, index) => {
+ const standardKey = `ConditionalAccessTemplate.${template.TemplateList?.value}`;
+ const driftDisplayName = getDisplayNameFromDrift(standardKey, template.TemplateList?.value, "ConditionalAccessTemplate");
+ const templateLabel = getTemplateLabel(template.TemplateList?.value, "ConditionalAccessTemplate");
+
+ return {
+ id: index + 1,
+ name: driftDisplayName || `Conditional Access - ${templateLabel}`,
+ state: template.state || "Unknown",
+ conditions: "Conditional Access Policy",
+ controls: "Access Control",
+ lastModified: getLastRefresh(standardKey),
+ status: getStatus(standardKey, template.TemplateList?.value, "ConditionalAccessTemplate"),
+ templateValue: template.TemplateList?.value,
+ };
+ }
+ );
+ const actions = [
+ {
+ label: "Refresh Data",
+ icon: ,
+ noConfirm: true,
+ customFunction: () => {
+ standardsApi.refetch();
+ comparisonApi.refetch();
+ driftApi.refetch();
+ },
+ },
+ ...(templateId
+ ? [
+ {
+ label: "Run Standard Now (Currently Selected Tenant only)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ {
+ label: "Run Standard Now (All Tenants in Template)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ tenantFilter: "allTenants",
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ ]
+ : []),
+ ];
+ const title = "Manage Drift";
+ const subtitle = [
+ {
+ icon: ,
+ text: `Template ID: ${templateId || "Loading..."}`,
+ },
+ ];
+
+ return (
+
+
+
+
+ {/* Standards Section */}
+
+ }>
+
+
+ Security Standards
+
+
+
+
+
+
+
+
+ {/* Intune Policies Section */}
+
+ }>
+
+
+ Intune Policies
+
+
+
+
+
+
+
+
+ {/* Conditional Access Policies Section */}
+
+ }>
+
+
+ Conditional Access Policies
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+PoliciesDeployedPage.getLayout = (page) => {page};
+
+export default PoliciesDeployedPage;
diff --git a/src/pages/tenant/standards/manage-drift/recover-policies.js b/src/pages/tenant/standards/manage-drift/recover-policies.js
new file mode 100644
index 000000000000..32b2a059a474
--- /dev/null
+++ b/src/pages/tenant/standards/manage-drift/recover-policies.js
@@ -0,0 +1,227 @@
+import { Layout as DashboardLayout } from "/src/layouts/index.js";
+import { useSettings } from "/src/hooks/use-settings";
+import { useRouter } from "next/router";
+import { Policy, Restore, ExpandMore, Sync, PlayArrow } from "@mui/icons-material";
+import {
+ Box,
+ Stack,
+ Typography,
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Chip,
+ Button,
+} from "@mui/material";
+import { Grid } from "@mui/system";
+import { useEffect, useState } from "react";
+import { useForm } from "react-hook-form";
+import { HeaderedTabbedLayout } from "/src/layouts/HeaderedTabbedLayout";
+import tabOptions from "./tabOptions.json";
+import { CippDataTable } from "/src/components/CippTable/CippDataTable";
+import { CippHead } from "/src/components/CippComponents/CippHead";
+import { CippFormComponent } from "/src/components/CippComponents/CippFormComponent";
+import { ApiPostCall } from "/src/api/ApiCall";
+import { CippApiResults } from "/src/components/CippComponents/CippApiResults";
+
+const RecoverPoliciesPage = () => {
+ const router = useRouter();
+ const { templateId } = router.query;
+ const [selectedPolicies, setSelectedPolicies] = useState([]);
+
+ const formControl = useForm({ mode: "onChange" });
+
+ const selectedBackup = formControl.watch("backupDateTime");
+
+ // Mock data for policies in selected backup - replace with actual API call
+ const backupPolicies = [
+ {
+ id: 1,
+ name: "Multi-Factor Authentication Policy",
+ type: "Conditional Access",
+ lastModified: "2024-01-15",
+ settings: "Require MFA for all users",
+ },
+ {
+ id: 2,
+ name: "Password Policy Standard",
+ type: "Security Standard",
+ lastModified: "2024-01-10",
+ settings: "14 character minimum, complexity required",
+ },
+ {
+ id: 3,
+ name: "Device Compliance Policy",
+ type: "Intune Policy",
+ lastModified: "2024-01-08",
+ settings: "Require encryption, PIN/Password",
+ },
+ ];
+
+ // Recovery API call
+ const recoverApi = ApiPostCall({
+ relatedQueryKeys: ["ListBackupPolicies", "ListPolicyBackups"],
+ });
+
+ const handleRecover = () => {
+ if (selectedPolicies.length === 0 || !selectedBackup) {
+ return;
+ }
+
+ recoverApi.mutate({
+ url: "/api/RecoverPolicies",
+ data: {
+ templateId,
+ backupDateTime: selectedBackup,
+ policyIds: selectedPolicies.map((policy) => policy.id),
+ },
+ });
+ };
+
+ // Actions for the ActionsMenu
+ const actions = [
+ {
+ label: "Refresh Data",
+ icon: ,
+ noConfirm: true,
+ customFunction: () => {
+ // Refresh any relevant data here
+ },
+ },
+ ...(templateId
+ ? [
+ {
+ label: "Run Standard Now (Currently Selected Tenant only)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ {
+ label: "Run Standard Now (All Tenants in Template)",
+ type: "GET",
+ url: "/api/ExecStandardsRun",
+ icon: ,
+ data: {
+ TemplateId: templateId,
+ tenantFilter: "allTenants",
+ },
+ confirmText: "Are you sure you want to force a run of this standard?",
+ multiPost: false,
+ },
+ ]
+ : []),
+ ];
+
+ const title = "Manage Drift";
+ const subtitle = [
+ {
+ icon: ,
+ text: `Template ID: ${templateId || "Loading..."}`,
+ },
+ ];
+
+ return (
+
+
+
+
+ {/* Backup Date Selection */}
+
+ }>
+
+
+ Select Backup Date & Time
+
+
+
+
+
+ {
+ const date = new Date(option.dateTime);
+ return `${date.toLocaleDateString()} @ ${date.toLocaleTimeString()} (${
+ option.policyCount
+ } policies)`;
+ },
+ valueField: "dateTime",
+ }}
+ required={true}
+ validators={{
+ validate: (value) => !!value || "Please select a backup date & time",
+ }}
+ />
+
+
+
+
+
+ {/* Recovery Results */}
+
+
+ {/* Backup Policies Section */}
+ {selectedBackup && (
+
+ }>
+
+
+ Policies in Selected Backup
+
+
+
+
+
+
+
+ Select policies to recover from backup:{" "}
+ {new Date(selectedBackup).toLocaleString()}
+
+ }
+ >
+ Recover Selected Policies ({selectedPolicies.length})
+
+
+ setSelectedPolicies(selectedRows)}
+ />
+
+
+
+ )}
+
+
+
+ );
+};
+
+RecoverPoliciesPage.getLayout = (page) => {page};
+
+export default RecoverPoliciesPage;
diff --git a/src/pages/tenant/standards/manage-drift/tabOptions.json b/src/pages/tenant/standards/manage-drift/tabOptions.json
new file mode 100644
index 000000000000..50b3adfd16dc
--- /dev/null
+++ b/src/pages/tenant/standards/manage-drift/tabOptions.json
@@ -0,0 +1,18 @@
+[
+ {
+ "label": "Manage Drift",
+ "path": "/tenant/standards/manage-drift"
+ },
+ {
+ "label": "Policies and Settings Deployed",
+ "path": "/tenant/standards/manage-drift/policies-deployed"
+ },
+ {
+ "label": "History",
+ "path": "/tenant/standards/manage-drift/history"
+ },
+ {
+ "label": "Tenant Report",
+ "path": "/tenant/standards/manage-drift/compare"
+ }
+]
diff --git a/src/pages/tenant/standards/template.jsx b/src/pages/tenant/standards/template.jsx
index 2a5934014bc6..0262b6a6e1ad 100644
--- a/src/pages/tenant/standards/template.jsx
+++ b/src/pages/tenant/standards/template.jsx
@@ -1,41 +1,148 @@
-import { Box, Button, Container, Stack, Typography, SvgIcon, Grid, Skeleton } from "@mui/material";
+import { Box, Button, Container, Stack, Typography, SvgIcon, Skeleton } from "@mui/material";
+import { Grid } from "@mui/system";
import { Layout as DashboardLayout } from "/src/layouts/index.js";
-import { useForm } from "react-hook-form";
+import { useForm, useWatch } from "react-hook-form";
import { useRouter } from "next/router";
-import { Add } from "@mui/icons-material";
-import { useEffect, useState } from "react";
+import { Add, SaveRounded } from "@mui/icons-material";
+import { useEffect, useState, useCallback, useMemo, useRef, lazy, Suspense } from "react";
import standards from "/src/data/standards";
import CippStandardAccordion from "../../../components/CippStandards/CippStandardAccordion";
-import CippStandardDialog from "../../../components/CippStandards/CippStandardDialog";
+// Lazy load the dialog to improve initial page load performance
+const CippStandardDialog = lazy(() =>
+ import("../../../components/CippStandards/CippStandardDialog")
+);
import CippStandardsSideBar from "../../../components/CippStandards/CippStandardsSideBar";
import { ArrowLeftIcon } from "@mui/x-date-pickers";
-import CheckCircleIcon from "@mui/icons-material/CheckCircle";
import { useDialog } from "../../../hooks/use-dialog";
import { ApiGetCall } from "../../../api/ApiCall";
+import _ from "lodash";
const Page = () => {
const router = useRouter();
const [editMode, setEditMode] = useState(false);
const formControl = useForm({ mode: "onBlur" });
+ const { formState } = formControl;
const [dialogOpen, setDialogOpen] = useState(false);
const [expanded, setExpanded] = useState(null);
const [searchQuery, setSearchQuery] = useState("");
const [selectedStandards, setSelectedStandards] = useState({});
const [updatedAt, setUpdatedAt] = useState(false);
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);
+ const [currentStep, setCurrentStep] = useState(0);
+ const [hasDriftConflict, setHasDriftConflict] = useState(false);
+ const initialStandardsRef = useRef({});
+
+ // Check if this is drift mode
+ const isDriftMode = router.query.type === "drift";
+
+ // Set drift mode flag in form when in drift mode
+ useEffect(() => {
+ if (isDriftMode) {
+ formControl.setValue("isDriftTemplate", true);
+ }
+ }, [isDriftMode, formControl]);
+
+ // Watch form values to check valid configuration
+ const watchForm = useWatch({ control: formControl.control });
+
const existingTemplate = ApiGetCall({
url: `/api/listStandardTemplates`,
data: { id: router.query.id },
queryKey: `listStandardTemplates-${router.query.id}`,
waiting: editMode,
});
+
+ // Check if the template configuration is valid and update currentStep
+ useEffect(() => {
+ const stepsStatus = {
+ step1: !!_.get(watchForm, "templateName"),
+ step2: isDriftMode || _.get(watchForm, "tenantFilter", []).length > 0, // Skip tenant requirement for drift mode
+ step3: Object.keys(selectedStandards).length > 0,
+ step4:
+ _.get(watchForm, "standards") &&
+ Object.keys(selectedStandards).length > 0 &&
+ Object.keys(selectedStandards).every((standardName) => {
+ const standardValues = _.get(watchForm, standardName, {});
+ // Always require an action value which should be an array with at least one element
+ const actionValue = _.get(standardValues, "action");
+ return actionValue && (!Array.isArray(actionValue) || actionValue.length > 0);
+ }),
+ };
+
+ const completedSteps = Object.values(stepsStatus).filter(Boolean).length;
+ setCurrentStep(completedSteps);
+ }, [selectedStandards, watchForm, isDriftMode]);
+
+ // Handle route change events
+ const handleRouteChange = useCallback(
+ (url) => {
+ if (hasUnsavedChanges) {
+ const confirmLeave = window.confirm(
+ "You have unsaved changes. Are you sure you want to leave this page?"
+ );
+ if (!confirmLeave) {
+ router.events.emit("routeChangeError");
+ throw "Route change was aborted";
+ }
+ }
+ },
+ [hasUnsavedChanges, router]
+ );
+
+ // Handle browser back/forward navigation or tab close
+ useEffect(() => {
+ const handleBeforeUnload = (e) => {
+ if (hasUnsavedChanges) {
+ e.preventDefault();
+ e.returnValue = "You have unsaved changes. Are you sure you want to leave this page?";
+ return e.returnValue;
+ }
+ };
+
+ // Add event listeners
+ window.addEventListener("beforeunload", handleBeforeUnload);
+ router.events.on("routeChangeStart", handleRouteChange);
+
+ // Remove event listeners on cleanup
+ return () => {
+ window.removeEventListener("beforeunload", handleBeforeUnload);
+ router.events.off("routeChangeStart", handleRouteChange);
+ };
+ }, [hasUnsavedChanges, handleRouteChange, router.events]);
+
+ // Track form changes
+ useEffect(() => {
+ // Compare the current form values with the initial values to check for real changes
+ const currentValues = formControl.getValues();
+ const initialValues = initialStandardsRef.current;
+
+ if (
+ formState.isDirty ||
+ JSON.stringify(selectedStandards) !== JSON.stringify(initialStandardsRef.current)
+ ) {
+ setHasUnsavedChanges(true);
+ } else {
+ setHasUnsavedChanges(false);
+ }
+ }, [formState.isDirty, selectedStandards, formControl]);
+
useEffect(() => {
if (router.query.id) {
setEditMode(true);
}
if (existingTemplate.isSuccess) {
- formControl.reset(existingTemplate.data?.[0]);
+ //formControl.reset(existingTemplate.data?.[0]);
const apiData = existingTemplate.data?.[0];
+
+ Object.keys(apiData.standards).forEach((key) => {
+ if (Array.isArray(apiData.standards[key])) {
+ apiData.standards[key] = apiData.standards[key].filter(
+ (value) => value !== null && value !== undefined
+ );
+ }
+ });
+
formControl.reset(apiData);
if (router.query.clone) {
formControl.setValue("templateName", `${apiData.templateName} (Clone)`);
@@ -61,27 +168,40 @@ const Page = () => {
});
setSelectedStandards(transformedStandards);
+ // Store initial state for change detection
+ initialStandardsRef.current = { ...transformedStandards };
+ setHasUnsavedChanges(false);
}
}, [existingTemplate.isSuccess, router]);
- const categories = standards.reduce((acc, standard) => {
- const { cat } = standard;
- if (!acc[cat]) {
- acc[cat] = [];
- }
- acc[cat].push(standard);
- return acc;
- }, {});
+ // Memoize categories to avoid unnecessary recalculations
+ const categories = useMemo(() => {
+ return standards.reduce((acc, standard) => {
+ const { cat } = standard;
+ if (!acc[cat]) {
+ acc[cat] = [];
+ }
+ acc[cat].push(standard);
+ return acc;
+ }, {});
+ }, []);
+
+ const handleOpenDialog = useCallback(() => {
+ setDialogOpen(true);
+ }, []);
- const handleOpenDialog = () => setDialogOpen(true);
- const handleCloseDialog = () => setDialogOpen(false);
+ const handleCloseDialog = useCallback(() => {
+ setDialogOpen(false);
+ setSearchQuery("");
+ }, []);
const filterStandards = (standardsList) =>
standardsList.filter(
(standard) =>
- standard.label.toLowerCase().includes(searchQuery) ||
- standard.helpText.toLowerCase().includes(searchQuery) ||
- (standard.tag && standard.tag.some((tag) => tag.toLowerCase().includes(searchQuery)))
+ standard.label.toLowerCase().includes(searchQuery.toLowerCase()) ||
+ standard.helpText.toLowerCase().includes(searchQuery.toLowerCase()) ||
+ (standard.tag &&
+ standard.tag.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase())))
);
const handleToggleStandard = (standardName) => {
@@ -98,12 +218,10 @@ const Page = () => {
if (match) {
standardName = match[1];
}
- console.log("Adding multiple", standardName);
setSelectedStandards((prev) => {
const existingInstances = Object.keys(prev).filter((name) => name.startsWith(standardName));
const newIndex = existingInstances.length;
-
return {
...prev,
[`${standardName}[${newIndex}]`]: true,
@@ -135,15 +253,23 @@ const Page = () => {
setExpanded((prev) => (prev === standardName ? null : standardName));
};
- const actions = [
- {
- label: "Save Template",
- handler: () => createDialog.handleOpen(),
- icon: ,
- },
- ];
const createDialog = useDialog();
+ // Save action that will open the create dialog
+ const handleSave = () => {
+ createDialog.handleOpen();
+ // Will be set to false after successful save in the dialog component
+ };
+
+ // Determine if save button should be disabled based on configuration
+ const isSaveDisabled = isDriftMode
+ ? currentStep < 3 || hasDriftConflict // For drift mode, only require steps 1, 3, and 4 (skip tenant requirement) and no drift conflicts
+ : (!_.get(watchForm, "tenantFilter") ||
+ !_.get(watchForm, "tenantFilter").length ||
+ currentStep < 3);
+
+ const actions = [];
+
const steps = [
"Set a name for the Template",
"Assigned Template to Tenants",
@@ -151,6 +277,19 @@ const Page = () => {
"Configured all Standards",
];
+ const handleSafeNavigation = (url) => {
+ if (hasUnsavedChanges) {
+ const confirmLeave = window.confirm(
+ "You have unsaved changes. Are you sure you want to leave this page?"
+ );
+ if (confirmLeave) {
+ router.push(url);
+ }
+ } else {
+ router.push(url);
+ }
+ };
+
return (
@@ -158,7 +297,13 @@ const Page = () => {
router.back()}
+ onClick={() =>
+ hasUnsavedChanges
+ ? window.confirm(
+ "You have unsaved changes. Are you sure you want to leave this page?"
+ ) && router.back()
+ : router.back()
+ }
startIcon={
@@ -176,61 +321,95 @@ const Page = () => {
sx={{ mb: 3 }}
>
- {editMode ? "Edit Standards Template" : "Add Standards Template"}
+ {editMode
+ ? (isDriftMode ? "Edit Drift Template" : "Edit Standards Template")
+ : (isDriftMode ? "Add Drift Template" : "Add Standards Template")
+ }
- }
- >
- Add Standard to this template
-
+
+ }
+ disabled={isSaveDisabled}
+ >
+ Save Template
+
+ }
+ >
+ Add Standard to Template
+
+
-
- {/* Left Column for Accordions */}
-
-
-
-
-
- {existingTemplate.isLoading && }
- {/* Show accordions based on selectedStandards (which is populated by API when editing) */}
-
+
+ {/* Left Column for Accordions */}
+
+ {
+ // Reset unsaved changes flag
+ setHasUnsavedChanges(false);
+ // Update reference for future change detection
+ initialStandardsRef.current = { ...selectedStandards };
+ }}
/>
-
+
+
+
+ {/* Show accordions based on selectedStandards (which is populated by API when editing) */}
+ {existingTemplate.isLoading ? (
+
+ ) : (
+
+ )}
+
+
-
+