Beispiel #1
0
        private async static Task UpdateByHttpClient(GroupPolicyConfiguration configuration, string newPolicId)
        {
            var token = await Authentication.Graph.TokenService.GetToken("dc293766-b44d-48e6-bc3d-a14569148567", "a7223375-8d73-437d-a391-1c30f50afd49", "JQXW_GIhdb3_74-h8U7e_ABFuR5u9vK937");

            var httpClient = HttpClientService.GetInstance(token);

            var definitionValues = new GroupDefinitionValue()
            {
                added      = BuildDefinitionValues(configuration.DefinitionValues),
                deletedIds = new List <string>(),
                updated    = new List <UpdatedDefinitionValue>()
            };

            //var requestUrl = $"https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations('{newPolicId}')/updateDefinitionValues";
            var requestUrl = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations('4f40a132-334c-4632-8af8-01df0eb35dc3')/updateDefinitionValues";
            var content    = JsonConvert.SerializeObject(definitionValues, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            content = content.Replace("definitionodatabind", "*****@*****.**", StringComparison.OrdinalIgnoreCase);
            content = System.IO.File.ReadAllText("C:\\configurationprofile.txt");
            var httpContent = new StringContent(content, Encoding.UTF8, "application/json");
            var response    = await httpClient.PostAsync(requestUrl, httpContent);
        }
        public async Task <GroupPolicyConfiguration> AddGroupPolicyConfigurationAsync(GroupPolicyConfiguration groupPolicy)
        {
            var resource = graphServiceClient.DeviceManagement.GroupPolicyConfigurations.Request();

            signalRMessage.sendMessage($"POST: {resource.RequestUrl}");
            var groupPolicyConfiguration = await resource.AddAsync(groupPolicy);

            signalRMessage.sendMessage($"Success: added {groupPolicyConfiguration.ODataType} '{groupPolicyConfiguration.DisplayName}'");
            return(groupPolicyConfiguration);
        }
        public async Task AddIntuneConfig(string result)
        {
            // Supported device configuration types need to be declared to distinguish from other intune items

            // Windows 10
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10GeneralConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsDeliveryOptimizationConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsUpdateForBusinessConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10EndpointProtectionConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10CustomConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsKioskConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsDefenderAdvancedThreatProtectionConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10PkcsCertificateProfile");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsHealthMonitoringConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10TeamGeneralConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsDomainJoinConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.editionUpgradeConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10EasEmailProfileConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsIdentityProtectionConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows10NetworkBoundaryConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.sharedPCConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsWifiConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows81TrustedRootCertificate");
            supportedDeviceConfigurations.Add("#microsoft.graph.windows81SCEPCertificateProfile");
            supportedDeviceConfigurations.Add("microsoft.graph.groupPolicyConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.groupPolicyConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.windowsHealthMonitoringConfiguration");

            // Android Enterprise Device Owner
            supportedDeviceConfigurations.Add("#microsoft.graph.androidDeviceOwnerGeneralDeviceConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidDeviceOwnerEnterpriseWiFiConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidDeviceOwnerWiFiConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidDeviceOwnerTrustedRootCertificate");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidDeviceOwnerImportedPFXCertificateProfile");

            // Android Enterprise Work Profile
            supportedDeviceConfigurations.Add("#microsoft.graph.androidWorkProfileGeneralDeviceConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidWorkProfileCustomConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidWorkProfileNineWorkEasConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.androidWorkProfileTrustedRootCertificate");

            // iOS
            supportedDeviceConfigurations.Add("#microsoft.graph.iosTrustedRootCertificate");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosPkcsCertificateProfile");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosWiFiConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosCustomConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosGeneralDeviceConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosEasEmailProfileConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosDeviceFeaturesConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.iosEnterpriseWiFiConfiguration");

            // macOS
            supportedDeviceConfigurations.Add("#microsoft.graph.macOSWiFiConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.macOSEndpointProtectionConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.macOSGeneralDeviceConfiguration");
            supportedDeviceConfigurations.Add("#microsoft.graph.macOSDeviceFeaturesConfiguration");

            GraphJson json = JsonConvert.DeserializeObject <GraphJson>(result);

            switch (json.OdataValue)
            {
            case string odataValue when odataValue.Contains("microsoft.graph.groupPolicyConfiguration"):

                JObject groupPolicyJsonObject = JObject.Parse(result);

                // drop custom json payload
                groupPolicyJsonObject.Remove("configuredSettings");

                GroupPolicyConfiguration groupPolicy = groupPolicyJsonObject.ToObject <GroupPolicyConfiguration>();


                // Translate scope tag with table
                List <string> groupPolicyScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in groupPolicy.RoleScopeTagIds)
                {
                    try
                    {
                        groupPolicyScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        groupPolicyScopeTagMapping.Add("0");
                    }
                }

                groupPolicy.RoleScopeTagIds = groupPolicyScopeTagMapping;

                GroupPolicyConfiguration createdGroupPolicy = await graphIntune.AddGroupPolicyConfigurationAsync(groupPolicy);

                // add configured values to gpo
                await graphIntune.AddExportedGroupPolicyConfigurationValuesAsync(result, createdGroupPolicy.Id);

                break;


            case string odataValue when odataValue.Contains("CompliancePolicy"):

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && compliancePolicies == null)
                {
                    this.compliancePolicies = await graphIntune.GetDeviceCompliancePoliciesAsync();
                }

                JObject o  = JObject.Parse(result);
                JObject o2 = JObject.Parse(@"{scheduledActionsForRule:[{ruleName:'PasswordRequired',scheduledActionConfigurations:[{actionType:'block',gracePeriodHours:'0',notificationTemplateId:'',notificationMessageCCList:[]}]}]}");
                o.Add("scheduledActionsForRule", o2.SelectToken("scheduledActionsForRule"));
                string jsonPolicy = JsonConvert.SerializeObject(o);

                DeviceCompliancePolicy deviceCompliancePolicy = JsonConvert.DeserializeObject <DeviceCompliancePolicy>(jsonPolicy);

                // Translate scope tag with table
                List <string> compliancePolicyScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in deviceCompliancePolicy.RoleScopeTagIds)
                {
                    try
                    {
                        compliancePolicyScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        compliancePolicyScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                deviceCompliancePolicy.RoleScopeTagIds = compliancePolicyScopeTagMapping;

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (compliancePolicies.All(p => !p.Id.Contains(deviceCompliancePolicy.Id)) && compliancePolicies.All(p => !p.DisplayName.Contains(deviceCompliancePolicy.DisplayName)))
                    {
                        await graphIntune.AddDeviceCompliancePolicyAsync(deviceCompliancePolicy);
                    }
                    else
                    {
                        if (compliancePolicies.Any(p => p.Id.Contains(deviceCompliancePolicy.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{deviceCompliancePolicy.DisplayName}' ({deviceCompliancePolicy.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{deviceCompliancePolicy.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.AddDeviceCompliancePolicyAsync(deviceCompliancePolicy);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (compliancePolicies.Any(p => p.Id.Contains(deviceCompliancePolicy.Id)))
                    {
                        deviceCompliancePolicy.ScheduledActionsForRule = null;
                        await graphIntune.PatchDeviceCompliancePolicyAsync(deviceCompliancePolicy);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.AddDeviceCompliancePolicyAsync(deviceCompliancePolicy);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (compliancePolicies.Any(policy => policy.DisplayName.Equals(deviceCompliancePolicy.DisplayName)))
                    {
                        deviceCompliancePolicy.ScheduledActionsForRule = null;
                        string replaceObjectId = compliancePolicies.Where(policy => policy.DisplayName.Equals(deviceCompliancePolicy.DisplayName)).Select(policy => policy.Id).First();
                        deviceCompliancePolicy.Id = replaceObjectId;
                        await graphIntune.PatchDeviceCompliancePolicyAsync(deviceCompliancePolicy);
                    }
                    else
                    {
                        await graphIntune.AddDeviceCompliancePolicyAsync(deviceCompliancePolicy);
                    }
                    break;
                }
                break;

            case string odataValue when supportedDeviceConfigurations.Contains(odataValue):

                DeviceConfiguration deviceConfiguration = JsonConvert.DeserializeObject <DeviceConfiguration>(result);

                // request fails when true
                deviceConfiguration.SupportsScopeTags = null;

                // Translate scope tag with table
                List <string> scopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in deviceConfiguration.RoleScopeTagIds)
                {
                    try
                    {
                        scopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        scopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                deviceConfiguration.RoleScopeTagIds = scopeTagMapping;

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && deviceConfigurations == null)
                {
                    deviceConfigurations = await graphIntune.GetDeviceConfigurationsAsync();
                }

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (deviceConfigurations.All(p => !p.Id.Contains(deviceConfiguration.Id)) && deviceConfigurations.All(p => !p.DisplayName.Contains(deviceConfiguration.DisplayName)))
                    {
                        await graphIntune.AddDeviceConfigurationAsync(deviceConfiguration);
                    }
                    else
                    {
                        if (deviceConfigurations.Any(p => p.Id.Contains(deviceConfiguration.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{deviceConfiguration.DisplayName}' ({deviceConfiguration.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{deviceConfiguration.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.AddDeviceConfigurationAsync(deviceConfiguration);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (deviceConfigurations.Any(p => p.Id.Contains(deviceConfiguration.Id)))
                    {
                        await graphIntune.PatchDeviceConfigurationAsync(deviceConfiguration);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.AddDeviceConfigurationAsync(deviceConfiguration);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (deviceConfigurations.Any(policy => policy.DisplayName.Equals(deviceConfiguration.DisplayName)))
                    {
                        string replaceObjectId = deviceConfigurations.Where(policy => policy.DisplayName.Equals(deviceConfiguration.DisplayName)).Select(policy => policy.Id).First();
                        deviceConfiguration.Id = replaceObjectId;
                        await graphIntune.PatchDeviceConfigurationAsync(deviceConfiguration);
                    }
                    else
                    {
                        await graphIntune.AddDeviceConfigurationAsync(deviceConfiguration);
                    }
                    break;
                }
                break;

            case string odataValue when odataValue.Contains("deviceManagementScripts"):

                DeviceManagementScript deviceManagementScript = JsonConvert.DeserializeObject <DeviceManagementScript>(result);

                // Translate scope tag with table
                List <string> deviceManagementScriptScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in deviceManagementScript.RoleScopeTagIds)
                {
                    try
                    {
                        deviceManagementScriptScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        deviceManagementScriptScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                deviceManagementScript.RoleScopeTagIds = deviceManagementScriptScopeTagMapping;


                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && deviceManagementScipts == null)
                {
                    deviceManagementScipts = await graphIntune.GetDeviceManagementScriptsAsync();
                }

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (deviceManagementScipts.All(p => !p.Id.Contains(deviceManagementScript.Id)) && deviceManagementScipts.All(p => !p.DisplayName.Contains(deviceManagementScript.DisplayName)))
                    {
                        await graphIntune.AddDeviceManagementScriptAsync(deviceManagementScript);
                    }
                    else
                    {
                        if (deviceManagementScipts.Any(p => p.Id.Contains(deviceManagementScript.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{deviceManagementScript.DisplayName}' ({deviceManagementScript.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{deviceManagementScript.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.AddDeviceManagementScriptAsync(deviceManagementScript);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (deviceManagementScipts.Any(p => p.Id.Contains(deviceManagementScript.Id)))
                    {
                        await graphIntune.PatchDeviceManagementScriptAsync(deviceManagementScript);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.AddDeviceManagementScriptAsync(deviceManagementScript);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (deviceManagementScipts.Any(policy => policy.DisplayName.Equals(deviceManagementScript.DisplayName)))
                    {
                        string replaceObjectId = deviceManagementScipts.Where(policy => policy.DisplayName.Equals(deviceManagementScript.DisplayName)).Select(policy => policy.Id).First();
                        deviceManagementScript.Id = replaceObjectId;
                        await graphIntune.PatchDeviceManagementScriptAsync(deviceManagementScript);
                    }
                    else
                    {
                        await graphIntune.AddDeviceManagementScriptAsync(deviceManagementScript);
                    }
                    break;
                }
                break;

            case string odataValue when odataValue.Contains("WindowsAutopilotDeploymentProfile"):

                WindowsAutopilotDeploymentProfile windowsAutopilotDeploymentProfile = JsonConvert.DeserializeObject <WindowsAutopilotDeploymentProfile>(result);

                // Translate scope tag with table
                List <string> autopilotScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in windowsAutopilotDeploymentProfile.RoleScopeTagIds)
                {
                    try
                    {
                        autopilotScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        autopilotScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                windowsAutopilotDeploymentProfile.RoleScopeTagIds = autopilotScopeTagMapping;

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && windowsAutopilotDeploymentProfiles == null)
                {
                    windowsAutopilotDeploymentProfiles = await graphIntune.GetWindowsAutopilotDeploymentProfiles();
                }

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (windowsAutopilotDeploymentProfiles.All(p => !p.Id.Contains(windowsAutopilotDeploymentProfile.Id)) && windowsAutopilotDeploymentProfiles.All(p => !p.DisplayName.Contains(windowsAutopilotDeploymentProfile.DisplayName)))
                    {
                        await graphIntune.AddWindowsAutopilotDeploymentProfile(windowsAutopilotDeploymentProfile);
                    }
                    else
                    {
                        if (windowsAutopilotDeploymentProfiles.Any(p => p.Id.Contains(windowsAutopilotDeploymentProfile.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{windowsAutopilotDeploymentProfile.DisplayName}' ({windowsAutopilotDeploymentProfile.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{windowsAutopilotDeploymentProfile.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.AddWindowsAutopilotDeploymentProfile(windowsAutopilotDeploymentProfile);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (windowsAutopilotDeploymentProfiles.Any(p => p.Id.Contains(windowsAutopilotDeploymentProfile.Id)))
                    {
                        await graphIntune.PatchWindowsAutopilotDeploymentProfile(windowsAutopilotDeploymentProfile);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.AddWindowsAutopilotDeploymentProfile(windowsAutopilotDeploymentProfile);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (windowsAutopilotDeploymentProfiles.Any(policy => policy.DisplayName.Equals(windowsAutopilotDeploymentProfile.DisplayName)))
                    {
                        string replaceObjectId = windowsAutopilotDeploymentProfiles.Where(policy => policy.DisplayName.Equals(windowsAutopilotDeploymentProfile.DisplayName)).Select(policy => policy.Id).First();
                        windowsAutopilotDeploymentProfile.Id = replaceObjectId;
                        await graphIntune.PatchWindowsAutopilotDeploymentProfile(windowsAutopilotDeploymentProfile);
                    }
                    else
                    {
                        await graphIntune.AddWindowsAutopilotDeploymentProfile(windowsAutopilotDeploymentProfile);
                    }
                    break;
                }
                break;

            case string odataValue when odataValue.Contains("#microsoft.graph.iosManagedAppProtection"):

                IosManagedAppProtection iosManagedAppProtection = JsonConvert.DeserializeObject <IosManagedAppProtection>(result);

                // Translate scope tag with table
                List <string> iosAppScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in iosManagedAppProtection.RoleScopeTagIds)
                {
                    try
                    {
                        iosAppScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        iosAppScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                iosManagedAppProtection.RoleScopeTagIds = iosAppScopeTagMapping;

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && iosManagedAppProtections == null)
                {
                    iosManagedAppProtections = await graphIntune.GetIosManagedAppProtectionsAsync();
                }

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (iosManagedAppProtections.All(p => !p.Id.Contains(iosManagedAppProtection.Id)) && iosManagedAppProtections.All(p => !p.DisplayName.Contains(iosManagedAppProtection.DisplayName)))
                    {
                        await graphIntune.ImportIosManagedAppProtectionAsync(result);
                    }
                    else
                    {
                        if (iosManagedAppProtections.Any(p => p.Id.Contains(iosManagedAppProtection.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{iosManagedAppProtection.DisplayName}' ({iosManagedAppProtection.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{iosManagedAppProtection.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.ImportIosManagedAppProtectionAsync(result);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (iosManagedAppProtections.Any(p => p.Id.Contains(iosManagedAppProtection.Id)))
                    {
                        await graphIntune.ImportPatchIosManagedAppProtectionAsync(result);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.ImportIosManagedAppProtectionAsync(result);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (iosManagedAppProtections.Any(policy => policy.DisplayName.Equals(iosManagedAppProtection.DisplayName)))
                    {
                        string replaceObjectId = iosManagedAppProtections.Where(policy => policy.DisplayName.Equals(iosManagedAppProtection.DisplayName)).Select(policy => policy.Id).First();
                        // Replace id in json file
                        JObject jObject = JObject.Parse(result);
                        jObject.SelectToken("id").Replace(replaceObjectId);

                        await graphIntune.ImportPatchIosManagedAppProtectionAsync(jObject.ToString());
                    }
                    else
                    {
                        await graphIntune.ImportIosManagedAppProtectionAsync(result);
                    }
                    break;
                }

                break;

            case string odataValue when odataValue.Contains("#microsoft.graph.androidManagedAppProtection"):

                AndroidManagedAppProtection androidManagedAppProtection = JsonConvert.DeserializeObject <AndroidManagedAppProtection>(result);

                // Translate scope tag with table
                List <string> androidAppScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in androidManagedAppProtection.RoleScopeTagIds)
                {
                    try
                    {
                        androidAppScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        androidAppScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                androidManagedAppProtection.RoleScopeTagIds = androidAppScopeTagMapping;

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && androidManagedAppProtections == null)
                {
                    androidManagedAppProtections = await graphIntune.GetAndroidManagedAppProtectionsAsync();
                }

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (androidManagedAppProtections.All(p => !p.Id.Contains(androidManagedAppProtection.Id)) && androidManagedAppProtections.All(p => !p.DisplayName.Contains(androidManagedAppProtection.DisplayName)))
                    {
                        await graphIntune.ImportAndroidManagedAppProtectionAsync(result);
                    }
                    else
                    {
                        if (androidManagedAppProtections.Any(p => p.Id.Contains(androidManagedAppProtection.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{androidManagedAppProtection.DisplayName}' ({androidManagedAppProtection.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{androidManagedAppProtection.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.ImportAndroidManagedAppProtectionAsync(result);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (androidManagedAppProtections.Any(p => p.Id.Contains(androidManagedAppProtection.Id)))
                    {
                        await graphIntune.ImportPatchAndroidManagedAppProtectionAsync(result);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.ImportAndroidManagedAppProtectionAsync(result);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (androidManagedAppProtections.Any(policy => policy.DisplayName.Equals(androidManagedAppProtection.DisplayName)))
                    {
                        string replaceObjectId = androidManagedAppProtections.Where(policy => policy.DisplayName.Equals(androidManagedAppProtection.DisplayName)).Select(policy => policy.Id).First();
                        // Replace id in json file
                        JObject jObject = JObject.Parse(result);
                        jObject.SelectToken("id").Replace(replaceObjectId);

                        await graphIntune.ImportPatchAndroidManagedAppProtectionAsync(jObject.ToString());
                    }
                    else
                    {
                        await graphIntune.ImportAndroidManagedAppProtectionAsync(result);
                    }
                    break;
                }
                break;

            case string odataValue when odataValue.Contains("#microsoft.graph.targetedManagedAppConfiguration"):

                TargetedManagedAppConfiguration targetedManagedAppConfiguration = JsonConvert.DeserializeObject <TargetedManagedAppConfiguration>(result);

                // Translate scope tag with table
                List <string> appConfigScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in targetedManagedAppConfiguration.RoleScopeTagIds)
                {
                    try
                    {
                        appConfigScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        appConfigScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                targetedManagedAppConfiguration.RoleScopeTagIds = appConfigScopeTagMapping;

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && targetedManagedAppConfigurations == null)
                {
                    targetedManagedAppConfigurations = await graphIntune.GetTargetedManagedAppConfigurationsAsync();
                }


                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (targetedManagedAppConfigurations.All(p => !p.Id.Contains(targetedManagedAppConfiguration.Id)) && targetedManagedAppConfigurations.All(p => !p.DisplayName.Contains(targetedManagedAppConfiguration.DisplayName)))
                    {
                        await graphIntune.ImportTargetedManagedAppConfigurationAsync(result);
                    }
                    else
                    {
                        if (targetedManagedAppConfigurations.Any(p => p.Id.Contains(targetedManagedAppConfiguration.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{targetedManagedAppConfiguration.DisplayName}' ({targetedManagedAppConfiguration.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{targetedManagedAppConfiguration.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.ImportTargetedManagedAppConfigurationAsync(result);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (targetedManagedAppConfigurations.Any(p => p.Id.Contains(targetedManagedAppConfiguration.Id)))
                    {
                        await graphIntune.ImportPatchTargetedManagedAppConfigurationAsync(result);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.ImportTargetedManagedAppConfigurationAsync(result);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (targetedManagedAppConfigurations.Any(policy => policy.DisplayName.Equals(targetedManagedAppConfiguration.DisplayName)))
                    {
                        string replaceObjectId = targetedManagedAppConfigurations.Where(policy => policy.DisplayName.Equals(targetedManagedAppConfiguration.DisplayName)).Select(policy => policy.Id).First();
                        // Replace id in json file
                        JObject jObject = JObject.Parse(result);
                        jObject.SelectToken("id").Replace(replaceObjectId);

                        await graphIntune.ImportPatchTargetedManagedAppConfigurationAsync(jObject.ToString());
                    }
                    else
                    {
                        await graphIntune.ImportTargetedManagedAppConfigurationAsync(result);
                    }
                    break;
                }
                break;

            case string odataValue when odataValue.Contains("MobileAppConfiguration"):

                ManagedDeviceMobileAppConfiguration managedDeviceMobileAppConfiguration = JsonConvert.DeserializeObject <ManagedDeviceMobileAppConfiguration>(result);

                // Translate scope tag with table
                List <string> managedAppScopeTagMapping = new List <string>();

                foreach (string roleScopeTagId in managedDeviceMobileAppConfiguration.RoleScopeTagIds)
                {
                    try
                    {
                        managedAppScopeTagMapping.Add(scopeTagMigrationTable[roleScopeTagId].ToString());
                    }
                    catch
                    {
                        managedAppScopeTagMapping.Add("0");
                    }
                }

                // Replace assigned scope tags with conversion
                managedDeviceMobileAppConfiguration.RoleScopeTagIds = managedAppScopeTagMapping;

                if (overwriteBehaviour != OverwriteBehaviour.IMPORT_AS_DUPLICATE && managedDeviceMobileAppConfigurations == null)
                {
                    managedDeviceMobileAppConfigurations = await graphIntune.GetManagedDeviceMobileAppConfigurationsAsync();
                }

                switch (overwriteBehaviour)
                {
                case OverwriteBehaviour.DISCARD:
                    if (managedDeviceMobileAppConfigurations.All(p => !p.Id.Contains(managedDeviceMobileAppConfiguration.Id)) && managedDeviceMobileAppConfigurations.All(p => !p.DisplayName.Contains(managedDeviceMobileAppConfiguration.DisplayName)))
                    {
                        await graphIntune.AddManagedDeviceMobileAppConfigurationAsync(managedDeviceMobileAppConfiguration);
                    }
                    else
                    {
                        if (managedDeviceMobileAppConfigurations.Any(p => p.Id.Contains(managedDeviceMobileAppConfiguration.Id)))
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{managedDeviceMobileAppConfiguration.DisplayName}' ({managedDeviceMobileAppConfiguration.Id}) already exists!");
                        }
                        else
                        {
                            signalRMessage.sendMessage($"Discarding configuration '{managedDeviceMobileAppConfiguration.DisplayName}' - configuration with this name already exists!");
                        }
                    }
                    break;

                case OverwriteBehaviour.IMPORT_AS_DUPLICATE:
                    await graphIntune.AddManagedDeviceMobileAppConfigurationAsync(managedDeviceMobileAppConfiguration);

                    break;

                case OverwriteBehaviour.OVERWRITE_BY_ID:

                    // match by object ID
                    if (managedDeviceMobileAppConfigurations.Any(p => p.Id.Contains(managedDeviceMobileAppConfiguration.Id)))
                    {
                        await graphIntune.PatchManagedDeviceMobileAppConfigurationAsync(managedDeviceMobileAppConfiguration);
                    }
                    // Create a new policy
                    else
                    {
                        await graphIntune.AddManagedDeviceMobileAppConfigurationAsync(managedDeviceMobileAppConfiguration);
                    }
                    break;

                case OverwriteBehaviour.OVERWRITE_BY_NAME:
                    if (managedDeviceMobileAppConfigurations.Any(policy => policy.DisplayName.Equals(managedDeviceMobileAppConfiguration.DisplayName)))
                    {
                        string replaceObjectId = managedDeviceMobileAppConfigurations.Where(policy => policy.DisplayName.Equals(managedDeviceMobileAppConfiguration.DisplayName)).Select(policy => policy.Id).First();
                        managedDeviceMobileAppConfiguration.Id = replaceObjectId;
                        await graphIntune.PatchManagedDeviceMobileAppConfigurationAsync(managedDeviceMobileAppConfiguration);
                    }
                    else
                    {
                        await graphIntune.AddManagedDeviceMobileAppConfigurationAsync(managedDeviceMobileAppConfiguration);
                    }
                    break;
                }
                break;

            case string odataValue when odataValue.Contains("#microsoft.graph.mdmWindowsInformationProtectionPolicy"):
                MdmWindowsInformationProtectionPolicy windowsInformationProtection = JsonConvert.DeserializeObject <MdmWindowsInformationProtectionPolicy>(result);

                await graphIntune.AddMdmWindowsInformationProtectionsAsync(windowsInformationProtection);

                break;

            case string odataValue when odataValue.Contains("#microsoft.graph.windowsInformationProtectionPolicy"):
                WindowsInformationProtectionPolicy windowsInformationProtectionUnmanaged = JsonConvert.DeserializeObject <WindowsInformationProtectionPolicy>(result);

                await graphIntune.AddWindowsInformationProtectionsAsync(windowsInformationProtectionUnmanaged);

                break;

            default:
                throw new System.Exception($"Unsupported configuration type {json.OdataValue}");
            }
        }
Beispiel #4
0
        private static async Task CreateGroupPolicyConfiguraion(GraphServiceClient graphClient, GroupPolicyConfiguration configuration)
        {
            try
            {
                var newConfiguration = await graphClient.DeviceManagement.GroupPolicyConfigurations
                                       .Request()
                                       .AddAsync(configuration);

                await graphClient.DeviceManagement.GroupPolicyConfigurations[newConfiguration.Id]
                .Assign(configuration.Assignments)
                .Request()
                .PostAsync();
                foreach (var definitionValue in configuration.DefinitionValues)
                {
                    await graphClient.DeviceManagement.GroupPolicyConfigurations[newConfiguration.Id]
                    .UpdateDefinitionValues(new List <GroupPolicyDefinitionValue>()
                    {
                        new GroupPolicyDefinitionValue()
                        {
                            ODataType          = definitionValue.ODataType,
                            Enabled            = definitionValue.Enabled,
                            ConfigurationType  = definitionValue.ConfigurationType,
                            Definition         = definitionValue.Definition,
                            PresentationValues = definitionValue.PresentationValues
                        }
                    }, new List <GroupPolicyDefinitionValue>(), new List <string>())
                    .Request()
                    .PostAsync();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #5
0
 private static async Task UpdateGroupPolicyConfiguration(GraphServiceClient graphClient, string configurationId, DateTimeOffset?lastModifiedDateTime, GroupPolicyConfiguration configuration)
 {
     try
     {
         if (!lastModifiedDateTime.HasValue || lastModifiedDateTime < configuration.LastModifiedDateTime)
         {
             await graphClient.DeviceManagement.GroupPolicyConfigurations[configurationId]
             .Request()
             .UpdateAsync(new GroupPolicyConfiguration()
             {
                 DisplayName     = configuration.DisplayName,
                 Description     = configuration.Description,
                 RoleScopeTagIds = configuration.RoleScopeTagIds
             });
             if (configuration.Assignments != null)
             {
                 await graphClient.DeviceManagement.GroupPolicyConfigurations[configurationId]
                 .Assign(configuration.Assignments)
                 .Request()
                 .PostAsync();
             }
             if (configuration.DefinitionValues != null)
             {
                 await graphClient.DeviceManagement.GroupPolicyConfigurations[configurationId]
                 .UpdateDefinitionValues(null, configuration.DefinitionValues, null)
                 .Request()
                 .PostAsync();
             }
         }
         else
         {
         }
     }
     catch (Exception ex)
     {
     }
 }