Compare commits

...
2 Commits
Author SHA1 Message Date
Mikael Karlsson c16f85a299 3.9.6 2024-04-22 21:48:16 +10:00
Mikael Karlsson 47968b4219 3.9.5 2024-01-24 21:25:53 +11:00
61 changed files with 7815 additions and 4447 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
RootModule = 'CloudAPIPowerShellManagement.psm1'
# Version number of this module.
ModuleVersion = '3.9.4'
ModuleVersion = '3.9.6'
# Supported PSEditions
# CompatiblePSEditions = @()
+2
View File
@@ -88,6 +88,8 @@ function Initialize-CloudAPIManagement
$certificate
)
$PSModuleAutoloadingPreference = "none"
$global:wpfNS = "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'"
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
+36 -5
View File
@@ -11,7 +11,7 @@ This module handles the WPF UI
function Get-ModuleVersion
{
'3.9.3'
'3.9.6'
}
function Initialize-Window
@@ -1535,7 +1535,7 @@ function Add-RegKeyToSettings
try
{
$keyObj = Get-Item -Path $regKey
$keyObj = Get-Item -Path $regKey -ErrorAction SilentlyContinue
foreach($keyValue in ($keyObj.GetValueNames() | Sort))
{
try
@@ -2463,6 +2463,7 @@ function Get-MainWindow
Add-XamlEvent $script:welcomeForm "gitHubLink" "Add_RequestNavigate" ({ [System.Diagnostics.Process]::Start($_.Uri.AbsoluteUri); $_.Handled = $true })
Add-XamlEvent $script:welcomeForm "licenseLink" "Add_RequestNavigate" ({ [System.Diagnostics.Process]::Start($_.Uri.AbsoluteUri); $_.Handled = $true })
Add-XamlEvent $script:welcomeForm "addCustomApp" "Add_RequestNavigate" ({ [System.Diagnostics.Process]::Start($_.Uri.AbsoluteUri); $_.Handled = $true })
Add-XamlEvent $script:welcomeForm "chkAcceptConditions" "add_click" {
$global:btnAcceptConditions.IsEnabled = ($this.IsChecked -eq $true)
@@ -2471,6 +2472,7 @@ function Get-MainWindow
Add-XamlEvent $script:welcomeForm "btnAcceptConditions" "add_click" {
Save-Setting "" "LicenseAccepted" "True"
Save-Setting "" "FirstTimeRunning" "False"
Save-Setting "" "AppChangeInformed" "true"
Show-ModalObject
if($global:currentViewObject.ViewInfo.Authentication.ShowErrors)
@@ -2484,12 +2486,41 @@ function Get-MainWindow
{
$window.Close()
}
}
}
Show-ModalForm $window.Title $script:welcomeForm -HideButtons
Show-ModalForm $window.Title $script:welcomeForm -HideButtons
}
else
{
if($global:informOldAzureApp -eq $true)
{
$appIdChangeInformed = Get-Setting "" "AppChangeInformed" "false"
if($appIdChangeInformed -ne "true") {
$script:oldAzureAppForm = Get-XamlObject ($global:AppRootFolder + "\Xaml\OldAzureApp.xaml")
Add-XamlEvent $script:oldAzureAppForm "addCustomApp" "Add_RequestNavigate" ({ [System.Diagnostics.Process]::Start($_.Uri.AbsoluteUri); $_.Handled = $true })
Add-XamlEvent $script:oldAzureAppForm "btnOK" "add_click" {
if((Get-XamlProperty $script:oldAzureAppForm "chkChangeApp" "IsChecked") -eq $true) {
Write-Log "Set default app ID to $($global:DefaultAzureApp)"
Save-Setting "EndpointManager" "EMAzureApp" $global:DefaultAzureApp
$script:azureAppChanged = $true
}
if((Get-XamlProperty $script:oldAzureAppForm "chkSkippMessage" "IsChecked") -eq $true) {
Save-Setting "" "AppChangeInformed" "true"
}
Show-ModalObject
if($script:azureAppChanged -eq $true -and $global:currentViewObject) {
[System.Windows.Forms.Application]::DoEvents()
& $global:currentViewObject.ViewInfo.Authenticate
}
}
Show-ModalForm $window.Title $script:oldAzureAppForm -HideButtons
}
}
###!!! Force login here
if($global:currentViewObject.ViewInfo.Authenticate)
{
@@ -2792,7 +2823,7 @@ function Start-DownloadFile
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$wc.Proxy = $proxyURI
$wc.Proxy = [System.Net.WebProxy]::new($proxyURI)
}
try
Binary file not shown.
@@ -393,7 +393,7 @@
"value": "notConfigured"
},
{
"nameResourceKey": "microsoftEdge",
"nameResourceKey": "microsoftEdgeOptionText",
"descriptionResourceKey": "",
"value": "microsoftEdge"
},
@@ -543,7 +543,7 @@
{
"nameResourceKey": "TAPSettings.Tap.numberOfDays",
"descriptionResourceKey": "",
"entityKey": "pinRequiredInsteadOfBiometricTimeout",
"entityKey": "periodBeforePinReset",
"dataType": 100,
"booleanActions": 0,
"category": "SettingDetails.accessRequirements"
@@ -306,7 +306,7 @@
{
"nameResourceKey": "TAPSettings.EncryptData.label",
"descriptionResourceKey": "TAPSettings.EncryptData.tooltip",
"entityKey": "appDataEncryptionType",
"entityKey": "encryptOrgData",
"dataType": 0,
"booleanActions": 101,
"category": "SettingDetails.dataProtection",
@@ -354,7 +354,7 @@
"value": "notConfigured"
},
{
"nameResourceKey": "microsoftEdge",
"nameResourceKey": "microsoftEdgeOptionText",
"descriptionResourceKey": "",
"value": "microsoftEdge"
},
@@ -398,14 +398,12 @@
}
]
},
{
"dataType": 8,
"nameResourceKey": "empty"
},
{
"nameResourceKey": "TAPSettings.PinAccess.label",
"descriptionResourceKey": "TAPSettings.PinAccess.tooltip",
@@ -496,17 +494,17 @@
{
"nameResourceKey": "TAPSettings.Tap.numberOfDays",
"descriptionResourceKey": "",
"entityKey": "pinRequiredInsteadOfBiometricTimeout",
"entityKey": "periodBeforePinReset",
"dataType": 100,
"booleanActions": 0,
"category": "SettingDetails.accessRequirements"
},
{
"nameResourceKey": "TAPSettings.Tap.previousPinBlockCount",
"descriptionResourceKey": "",
"entityKey": "previousPinBlockCount",
"dataType": 14,
"booleanActions": 0,
"nameResourceKey": "TAPSettings.AppPIN.label",
"descriptionResourceKey": "TAPSettings.AppPIN.tooltip",
"entityKey": "disableAppPinIfDevicePinIsSet",
"dataType": 0,
"booleanActions": 201,
"category": "SettingDetails.accessRequirements"
},
{
@@ -66,11 +66,69 @@
{
"nameResourceKey": "androidPlayIntegrityVerdictBasicIntegrity",
"value": "basicIntegrity",
"children": [
{
"dataType": 16,
"category": 39,
"nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeName",
"descriptionResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeBasic",
"value": "basic",
"enabled": true
},
{
"nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeHardwareBacked",
"value": "hardwareBacked",
"enabled": true
}
],
"entityKey": "securityRequiredAndroidSafetyNetEvaluationType",
"booleanActions": 0,
"defaultValue": "basic",
"unconfiguredValue": "basic",
"policyType": 31,
"enabled": false
}
],
"enabled": true
},
{
"nameResourceKey": "androidPlayIntegrityVerdictBasicAndDeviceIntegrity",
"value": "basicIntegrityAndCertified",
"children": [
{
"dataType": 16,
"category": 39,
"nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeName",
"descriptionResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeBasic",
"value": "basic",
"enabled": true
},
{
"nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeHardwareBacked",
"value": "hardwareBacked",
"enabled": true
}
],
"entityKey": "securityRequiredAndroidSafetyNetEvaluationType",
"booleanActions": 0,
"defaultValue": "basic",
"unconfiguredValue": "basic",
"policyType": 31,
"enabled": false
}
],
"enabled": true
}
],
@@ -53,6 +53,23 @@
"booleanActions": 0,
"policyType": 31,
"enabled": true
},
{
"dataType": 0,
"category": 43,
"nameResourceKey": "complianceNoPendingSystemUpdatesName",
"descriptionResourceKey": "complianceNoPendingSystemUpdatesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "requireNoPendingSystemUpdates",
"booleanActions": 1,
"defaultValue": false,
"policyType": 31,
"enabled": false
}
],
"options": [
@@ -917,6 +917,39 @@
"booleanActions": 0,
"policyType": 2,
"enabled": true
},
{
"dataType": 0,
"category": 44,
"nameResourceKey": "disableDeviceLocationName",
"descriptionResourceKey": "disableDeviceLocationDescription",
"childSettings": [
],
"options": [
],
"entityKey": "disableDeviceLocation",
"booleanActions": 3,
"defaultValue": false,
"policyType": 2,
"enabled": false
},
{
"dataType": 0,
"category": 44,
"nameResourceKey": "disableDeviceLocationSharingName",
"childSettings": [
],
"options": [
],
"entityKey": "shareDeviceLocationDisabled",
"booleanActions": 3,
"defaultValue": false,
"policyType": 2,
"enabled": false
}
],
"options": [
@@ -277,6 +277,35 @@
"unconfiguredValue": "noneOption",
"policyType": 9,
"enabled": true
},
{
"dataType": 16,
"category": 44,
"nameResourceKey": "MacAddressRandomizationModeTitleAndroid",
"descriptionResourceKey": "MacAddressRandomizationModeDescriptionAndroid",
"childSettings": [
],
"options": [
{
"nameResourceKey": "MacAddressRandomizationModeDefaultAndroid",
"enabled": true
},
{
"nameResourceKey": "MacAddressRandomizationModeAutomaticAndroid",
"value": "automatic",
"enabled": true
},
{
"nameResourceKey": "MacAddressRandomizationModeHardwareAndroid",
"value": "hardware",
"enabled": true
}
],
"entityKey": "macAddressRandomizationMode",
"booleanActions": 0,
"policyType": 9,
"enabled": false
}
],
"enabled": true
@@ -1395,6 +1424,35 @@
"unconfiguredValue": "noneOption",
"policyType": 9,
"enabled": true
},
{
"dataType": 16,
"category": 44,
"nameResourceKey": "MacAddressRandomizationModeTitleAndroid",
"descriptionResourceKey": "MacAddressRandomizationModeDescriptionAndroid",
"childSettings": [
],
"options": [
{
"nameResourceKey": "MacAddressRandomizationModeDefaultAndroid",
"enabled": true
},
{
"nameResourceKey": "MacAddressRandomizationModeAutomaticAndroid",
"value": "automatic",
"enabled": true
},
{
"nameResourceKey": "MacAddressRandomizationModeHardwareAndroid",
"value": "hardware",
"enabled": true
}
],
"entityKey": "macAddressRandomizationMode",
"booleanActions": 0,
"policyType": 9,
"enabled": false
}
],
"enabled": true
@@ -5,7 +5,7 @@
"showAsSectionHeader": false,
"dataType": 8,
"category": 72,
"nameResourceKey": "androidGeneralKiosk",
"nameResourceKey": "androidRestrictedKiosk",
"childSettings": [
],
@@ -32,20 +32,6 @@
"policyType": 13,
"enabled": true
},
{
"dataType": 10,
"category": 90,
"nameResourceKey": "androidTwelveDeprecationInfoBox",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
@@ -453,7 +453,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -521,6 +521,22 @@
"policyType": 6,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 6,
"enabled": true
},
{
"columns": [
{
@@ -423,7 +423,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -491,6 +491,22 @@
"policyType": 17,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 17,
"enabled": true
},
{
"columns": [
{
@@ -200,7 +200,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -268,6 +268,22 @@
"policyType": 23,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 23,
"enabled": true
},
{
"columns": [
{
@@ -423,7 +423,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -491,6 +491,22 @@
"policyType": 122,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 122,
"enabled": true
},
{
"columns": [
{
@@ -587,6 +587,22 @@
"policyType": 50,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 50,
"enabled": true
},
{
"columns": [
{
@@ -587,6 +587,22 @@
"policyType": 63,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 63,
"enabled": true
},
{
"columns": [
{
@@ -462,7 +462,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -530,6 +530,22 @@
"policyType": 84,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 84,
"enabled": true
},
{
"columns": [
{
@@ -462,7 +462,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -530,6 +530,22 @@
"policyType": 93,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 93,
"enabled": true
},
{
"columns": [
{
@@ -239,7 +239,7 @@
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
"enabled": true
}
],
"entityKey": "keySize",
@@ -307,6 +307,22 @@
"policyType": 103,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 103,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageAnyPurposeCloudCaWarning",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 103,
"enabled": true
},
{
"columns": [
{
@@ -137,20 +137,6 @@
"nameResourceKey": "compliancePasswordRequirementName",
"descriptionResourceKey": "compliancePasswordRequirementDescription",
"childSettings": [
{
"dataType": 10,
"category": 113,
"nameResourceKey": "androidTwelveDeprecationInfoBox",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
@@ -534,6 +520,410 @@
"defaultValue": false,
"policyType": 30,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 113,
"nameResourceKey": "complianceWorkProfileSecurityHeader",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 0,
"category": 113,
"nameResourceKey": "complianceWorkProfilePasswordRequirementName",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 113,
"nameResourceKey": "allAndroidVersionsPasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 113,
"nameResourceKey": "allAndroidVersionsPasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "workProfilePasswordExpirationInDaysTooltipText",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordExpirationInDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockTrimmedDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 16,
"category": 113,
"nameResourceKey": "complianceMinutesOfInactivityBeforePasswordRequiredName",
"descriptionResourceKey": "complianceMinutesOfInactivityBeforePasswordRequiredTrimmedDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "oneMinuteOption",
"value": 1,
"enabled": true
},
{
"nameResourceKey": "fiveMinutesOption",
"value": 5,
"enabled": true
},
{
"nameResourceKey": "tenMinutesOption",
"value": 10,
"enabled": true
},
{
"nameResourceKey": "fifteenMinutesOption",
"value": 15,
"enabled": true
},
{
"nameResourceKey": "thirtyMinutesOption",
"value": 30,
"enabled": true
},
{
"nameResourceKey": "oneHourOption",
"value": 60,
"enabled": true
},
{
"nameResourceKey": "fourHoursOption",
"value": 240,
"enabled": true
},
{
"nameResourceKey": "eightHoursOption",
"value": 480,
"enabled": true
}
],
"entityKey": "workProfileInactiveBeforeScreenLockInMinutes",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 113,
"nameResourceKey": "androidTwelveAndAbovePasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 113,
"nameResourceKey": "androidTwelveAndAbovePasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 16,
"category": 113,
"nameResourceKey": "requiredPasswordComplexityName",
"childSettings": [
],
"options": [
{
"nameResourceKey": "none",
"value": "none",
"enabled": true
},
{
"nameResourceKey": "low",
"value": "low",
"enabled": true
},
{
"nameResourceKey": "medium",
"value": "medium",
"enabled": true
},
{
"nameResourceKey": "high",
"value": "high",
"enabled": true
}
],
"entityKey": "workProfileRequiredPasswordComplexity",
"booleanActions": 0,
"defaultValue": "none",
"unconfiguredValue": "none",
"policyType": 30,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 113,
"nameResourceKey": "androidElevenAndBelowPasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 113,
"nameResourceKey": "androidElevenAndBelowPasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 16,
"category": 113,
"nameResourceKey": "workProfileRequiredPasswordTypeName",
"descriptionResourceKey": "complianceRequiredPasswordTypeTrimmedDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "selectTypeOption",
"enabled": true
},
{
"nameResourceKey": "deviceDefault",
"value": "deviceDefault",
"enabled": true
},
{
"nameResourceKey": "lowSecurityBiometricOption",
"value": "lowSecurityBiometric",
"enabled": true
},
{
"nameResourceKey": "atLeastNumericOption",
"value": "atLeastNumeric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "workProfileMinimumPasswordLengthName",
"descriptionResourceKey": "minimumPasswordLengthTooltipText",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "numericComplex",
"value": "numericComplex",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "workProfileMinimumPasswordLengthName",
"descriptionResourceKey": "minimumPasswordLengthTooltipText",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphabeticOption",
"value": "atLeastAlphabetic",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "workProfileMinimumPasswordLengthName",
"descriptionResourceKey": "minimumPasswordLengthTooltipText",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericOption",
"value": "atLeastAlphanumeric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "workProfileMinimumPasswordLengthName",
"descriptionResourceKey": "minimumPasswordLengthTooltipText",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericWithSymbolsOption",
"value": "alphanumericWithSymbols",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "workProfileMinimumPasswordLengthName",
"descriptionResourceKey": "minimumPasswordLengthTooltipText",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "workProfilePasswordRequiredType",
"booleanActions": 0,
"defaultValue": "deviceDefault",
"unconfiguredValue": "deviceDefault",
"policyType": 30,
"enabled": true
}
],
"options": [
],
"entityKey": "workProfileRequirePassword",
"booleanActions": 1,
"defaultValue": false,
"policyType": 30,
"enabled": true
}
]
}
@@ -1587,6 +1587,46 @@
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 25,
"category": 129,
"nameResourceKey": "vPNPolicyProxyExclListManage",
"emptyValueResourceKey": "vPNPolicyProxyExclListManage",
"childSettings": [
],
"options": [
],
"entityKey": "proxyExclusionList",
"booleanActions": 0,
"unconfiguredValue": [
],
"policyType": 8,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vPNPolicyProxyExclListName",
"descriptionResourceKey": "vPNPolicyProxyExclListDescription2",
"emptyValueResourceKey": "vPNPolicyProxyExclListManage",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"unconfiguredValue": [
],
"policyType": 8,
"enabled": false
}
],
"dataType": 5,
@@ -1563,6 +1563,46 @@
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 25,
"category": 129,
"nameResourceKey": "vPNPolicyProxyExclListManage",
"emptyValueResourceKey": "vPNPolicyProxyExclListManage",
"childSettings": [
],
"options": [
],
"entityKey": "proxyExclusionList",
"booleanActions": 0,
"unconfiguredValue": [
],
"policyType": 12,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vPNPolicyProxyExclListName",
"descriptionResourceKey": "vPNPolicyProxyExclListDescription2",
"emptyValueResourceKey": "vPNPolicyProxyExclListManage",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"unconfiguredValue": [
],
"policyType": 12,
"enabled": false
}
],
"dataType": 5,
@@ -173,6 +173,110 @@
"booleanActions": 0,
"policyType": 124,
"enabled": true
},
{
"dataType": 16,
"category": 121,
"nameResourceKey": "wiFiPolicyProxySettingsName",
"descriptionResourceKey": "wiFiPolicyProxySettingsDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "noneOption",
"value": "none",
"enabled": true
},
{
"nameResourceKey": "manualOption",
"value": "manual",
"children": [
{
"dataType": 20,
"category": 121,
"nameResourceKey": "proxyServerAddressName",
"descriptionResourceKey": "proxyServerAddressDescription",
"emptyValueResourceKey": "proxyAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyManualAddress",
"booleanActions": 0,
"policyType": 124,
"enabled": true
},
{
"dataType": 14,
"category": 121,
"nameResourceKey": "portNumberName",
"descriptionResourceKey": "portNumberDescription",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyManualPort",
"booleanActions": 0,
"policyType": 124,
"enabled": true
},
{
"dataType": 12,
"category": 121,
"nameResourceKey": "proxyExclusionListName",
"descriptionResourceKey": "proxyExclusionListDescription",
"emptyValueResourceKey": "proxyExclusionListExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyExclusionList",
"booleanActions": 0,
"policyType": 124,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "automaticOption",
"value": "automatic",
"children": [
{
"dataType": 20,
"category": 121,
"nameResourceKey": "proxyServerURLName",
"descriptionResourceKey": "proxyServerURLDescription",
"emptyValueResourceKey": "proxyUrlExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyAutomaticConfigurationUrl",
"booleanActions": 0,
"policyType": 124,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "proxySetting",
"booleanActions": 0,
"defaultValue": "none",
"unconfiguredValue": "noneOption",
"policyType": 124,
"enabled": false
}
],
"enabled": true
@@ -901,6 +1005,110 @@
"booleanActions": 0,
"policyType": 124,
"enabled": true
},
{
"dataType": 16,
"category": 121,
"nameResourceKey": "wiFiPolicyProxySettingsName",
"descriptionResourceKey": "wiFiPolicyProxySettingsDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "noneOption",
"value": "none",
"enabled": true
},
{
"nameResourceKey": "manualOption",
"value": "manual",
"children": [
{
"dataType": 20,
"category": 121,
"nameResourceKey": "proxyServerAddressName",
"descriptionResourceKey": "proxyServerAddressDescription",
"emptyValueResourceKey": "proxyAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyManualAddress",
"booleanActions": 0,
"policyType": 124,
"enabled": true
},
{
"dataType": 14,
"category": 121,
"nameResourceKey": "portNumberName",
"descriptionResourceKey": "portNumberDescription",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyManualPort",
"booleanActions": 0,
"policyType": 124,
"enabled": true
},
{
"dataType": 12,
"category": 121,
"nameResourceKey": "proxyExclusionListName",
"descriptionResourceKey": "proxyExclusionListDescription",
"emptyValueResourceKey": "proxyExclusionListExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyExclusionList",
"booleanActions": 0,
"policyType": 124,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "automaticOption",
"value": "automatic",
"children": [
{
"dataType": 20,
"category": 121,
"nameResourceKey": "proxyServerURLName",
"descriptionResourceKey": "proxyServerURLDescription",
"emptyValueResourceKey": "proxyUrlExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyAutomaticConfigurationUrl",
"booleanActions": 0,
"policyType": 124,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "proxySetting",
"booleanActions": 0,
"defaultValue": "none",
"unconfiguredValue": "noneOption",
"policyType": 124,
"enabled": false
}
],
"enabled": true
@@ -794,749 +794,7 @@
"entityKey": "eapType",
"booleanActions": 0,
"policyType": 68,
"enabled": false
},
{
"dataType": 16,
"category": 149,
"nameResourceKey": "eAPTypeName",
"descriptionResourceKey": "eAPTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "selectEAP",
"enabled": true
},
{
"nameResourceKey": "eAPFASTName",
"value": "eapFast",
"children": [
{
"value": "certificate",
"dataType": 9,
"category": 149,
"childSettings": [
],
"options": [
],
"entityKey": "authenticationMethod",
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 16,
"category": 149,
"nameResourceKey": "pACHeading",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
{
"nameResourceKey": "dontUsePACName",
"value": "noProtectedAccessCredential",
"enabled": true
},
{
"nameResourceKey": "usePACName",
"value": "useProtectedAccessCredential",
"enabled": true
},
{
"nameResourceKey": "provisionPACName",
"value": "useProtectedAccessCredentialAndProvision",
"enabled": true
},
{
"nameResourceKey": "provisionPACAnonName",
"value": "useProtectedAccessCredentialAndProvisionAnonymously",
"enabled": true
}
],
"entityKey": "eapFastConfiguration",
"booleanActions": 0,
"defaultValue": "noProtectedAccessCredential",
"policyType": 68,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "eAPTLSName",
"value": "eapTls",
"children": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 149,
"nameResourceKey": "trust",
"descriptionResourceKey": "trustDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 149,
"nameResourceKey": "empty",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "trustedServerCertificateNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNamesName",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
}
],
"dataType": 21,
"category": 149,
"nameResourceKey": "trustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNames",
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 4,
"category": 149,
"nameResourceKey": "selectCertificateProfile",
"descriptionResourceKey": "selectRootCertificateForServerValidationName",
"childSettings": [
],
"options": [
],
"entityKey": "rootCertificateForServerValidation",
"booleanActions": 0,
"unconfiguredValue": "notConfigured",
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "selectRootCertificateForServerValidationName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificate",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 149,
"nameResourceKey": "authentication",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"value": "certificate",
"dataType": 9,
"category": 149,
"childSettings": [
],
"options": [
],
"entityKey": "authenticationMethod",
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 4,
"category": 149,
"nameResourceKey": "selectCertificateProfile",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "identityCertificateForClientAuthentication",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "certificatesOption",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificate",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 20,
"category": 149,
"nameResourceKey": "enableIdentityPrivacyName",
"descriptionResourceKey": "enableIdentityPrivacyDescription",
"emptyValueResourceKey": "identityPrivacyExample",
"childSettings": [
],
"options": [
],
"entityKey": "enableOuterIdentityPrivacy",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "eAPTTLSName",
"value": "eapTtls",
"children": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 149,
"nameResourceKey": "trust",
"descriptionResourceKey": "trustDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 149,
"nameResourceKey": "empty",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "trustedServerCertificateNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNamesName",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
}
],
"dataType": 21,
"category": 149,
"nameResourceKey": "trustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNames",
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 4,
"category": 149,
"nameResourceKey": "selectCertificateProfile",
"descriptionResourceKey": "selectRootCertificateForServerValidationName",
"childSettings": [
],
"options": [
],
"entityKey": "rootCertificateForServerValidation",
"booleanActions": 0,
"unconfiguredValue": "notConfigured",
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "selectRootCertificateForServerValidationName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificate",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 149,
"nameResourceKey": "authentication",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 16,
"category": 149,
"nameResourceKey": "authenticationMethodName",
"descriptionResourceKey": "authenticationMethodTTLSDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "usernameAndPasswordOption",
"value": "usernameAndPassword",
"children": [
{
"dataType": 16,
"category": 149,
"nameResourceKey": "nonEapMethodName",
"descriptionResourceKey": "nonEapMethodDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "selectNonEapMethod",
"enabled": true
},
{
"nameResourceKey": "pAPName",
"value": "unencryptedPassword",
"enabled": true
},
{
"nameResourceKey": "cHAPName",
"value": "challengeHandshakeAuthenticationProtocol",
"enabled": true
},
{
"nameResourceKey": "mSCHAPName",
"value": "microsoftChap",
"enabled": true
},
{
"nameResourceKey": "cHAPTWOName",
"value": "microsoftChapVersionTwo",
"enabled": true
}
],
"entityKey": "nonEapAuthenticationMethodForEapTtls",
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 20,
"category": 149,
"nameResourceKey": "enableIdentityPrivacyName",
"descriptionResourceKey": "enableIdentityPrivacyDescription",
"emptyValueResourceKey": "identityPrivacyExample",
"childSettings": [
],
"options": [
],
"entityKey": "enableOuterIdentityPrivacy",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "certificatesOption",
"value": "certificate",
"children": [
{
"complexOptions": [
{
"dataType": 4,
"category": 149,
"nameResourceKey": "selectCertificateProfile",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "identityCertificateForClientAuthentication",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "certificatesOption",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificate",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 20,
"category": 149,
"nameResourceKey": "enableIdentityPrivacyName",
"descriptionResourceKey": "enableIdentityPrivacyDescription",
"emptyValueResourceKey": "identityPrivacyExample",
"childSettings": [
],
"options": [
],
"entityKey": "enableOuterIdentityPrivacy",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "authenticationMethod",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "lEAPName",
"value": "leap",
"children": [
{
"value": "certificate",
"dataType": 9,
"category": 149,
"childSettings": [
],
"options": [
],
"entityKey": "authenticationMethod",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "pEAPName",
"value": "peap",
"children": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 149,
"nameResourceKey": "trust",
"descriptionResourceKey": "trustDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 149,
"nameResourceKey": "empty",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "trustedServerCertificateNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNamesName",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
}
],
"dataType": 21,
"category": 149,
"nameResourceKey": "trustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNames",
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 4,
"category": 149,
"nameResourceKey": "selectCertificateProfile",
"descriptionResourceKey": "selectRootCertificateForServerValidationName",
"childSettings": [
],
"options": [
],
"entityKey": "rootCertificateForServerValidation",
"booleanActions": 0,
"unconfiguredValue": "notConfigured",
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "selectRootCertificateForServerValidationName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificate",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 149,
"nameResourceKey": "authentication",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 16,
"category": 149,
"nameResourceKey": "authenticationMethodName",
"descriptionResourceKey": "authenticationMethodName",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "usernameAndPasswordOption",
"value": "usernameAndPassword",
"children": [
{
"dataType": 20,
"category": 149,
"nameResourceKey": "enableIdentityPrivacyName",
"descriptionResourceKey": "enableIdentityPrivacyDescription",
"emptyValueResourceKey": "identityPrivacyExample",
"childSettings": [
],
"options": [
],
"entityKey": "enableOuterIdentityPrivacy",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "certificatesOption",
"value": "certificate",
"children": [
{
"complexOptions": [
{
"dataType": 4,
"category": 149,
"nameResourceKey": "selectCertificateProfile",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "identityCertificateForClientAuthentication",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "certificatesOption",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificate",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 68,
"enabled": true
},
{
"dataType": 20,
"category": 149,
"nameResourceKey": "enableIdentityPrivacyName",
"descriptionResourceKey": "enableIdentityPrivacyDescription",
"emptyValueResourceKey": "identityPrivacyExample",
"childSettings": [
],
"options": [
],
"entityKey": "enableOuterIdentityPrivacy",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "authenticationMethod",
"booleanActions": 0,
"policyType": 68,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "eapType",
"booleanActions": 0,
"policyType": 68,
"enabled": false
"enabled": true
}
]
}
@@ -373,20 +373,6 @@
"policyType": 13,
"enabled": true
},
{
"dataType": 10,
"category": 127,
"nameResourceKey": "androidTwelveDeprecationInfoBox",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+64 -28
View File
@@ -160,8 +160,8 @@ function Invoke-ViewActivated
function Show-CompareBulkForm
{
$script:form = Get-XamlObject ($global:AppRootFolder + "\Xaml\BulkCompare.xaml") -AddVariables
if(-not $script:form) { return }
$script:cmpForm = Get-XamlObject ($global:AppRootFolder + "\Xaml\BulkCompare.xaml") -AddVariables
if(-not $script:cmpForm) { return }
$global:cbCompareProvider.ItemsSource = @(($global:compareProviders | Where BulkCompare -ne $null))
$global:cbCompareProvider.SelectedValue = (Get-Setting "Compare" "Provider" "export")
@@ -210,12 +210,12 @@ function Show-CompareBulkForm
$global:dgObjectsToCompare.ItemsSource = $script:compareObjects
Add-XamlEvent $script:form "btnClose" "add_click" {
$script:form = $null
Add-XamlEvent $script:cmpForm "btnClose" "add_click" {
$script:cmpForm = $null
Show-ModalObject
}
Add-XamlEvent $script:form "btnStartCompare" "add_click" {
Add-XamlEvent $script:cmpForm "btnStartCompare" "add_click" {
Write-Status "Compare objects"
Save-Setting "Compare" "Provider" $global:cbCompareProvider.SelectedValue
Save-Setting "Compare" "Type" $global:cbCompareType.SelectedValue
@@ -233,7 +233,7 @@ function Show-CompareBulkForm
Set-CompareProviderOptions $global:cbCompareProvider
Show-ModalForm "Bulk Compare Objects" $script:form -HideButtons
Show-ModalForm "Bulk Compare Objects" $script:cmpForm -HideButtons
}
function Set-CompareProviderOptions
@@ -1114,12 +1114,12 @@ function Set-ColumnVisibility
function Add-CompareProperty
{
param($name, $value1, $value2, $category, $subCategory, $match = $null)
param($name, $value1, $value2, $category, $subCategory, $match = $null, [switch]$skip)
$value1 = if($value1 -eq $null) { "" } else { $value1.ToString().Trim("`"") }
$value2 = if($value2 -eq $null) { "" } else { $value2.ToString().Trim("`"") }
$script:compareProperties += [PSCustomObject]@{
$compare += [PSCustomObject]@{
PropertyName = $name
Object1Value = $value1 #if($value1 -ne $null) { $value1.ToString().Trim("`"") } else { "" }
Object2Value = $value2 #if($value2 -ne $null) { $value2.ToString().Trim("`"") } else { "" }
@@ -1127,6 +1127,11 @@ function Add-CompareProperty
SubCategory = $subCategory
Match = ?? $match ($value1 -eq $value2)
}
if($skip -eq $true) {
$compare.Match = $null
}
$script:compareProperties += $compare
}
function Compare-ObjectsBasedonProperty
@@ -1137,8 +1142,11 @@ function Compare-ObjectsBasedonProperty
Set-ColumnVisibility $false
$skipBasicProperties = Get-XamlProperty $script:cmpForm "chkSkipCompareBasicProperties" "IsChecked"
$coreProps = @((?? $objectType.NameProperty "displayName"), "Description", "Id", "createdDateTime", "lastModifiedDateTime", "version")
$postProps = @("Advertisements")
$skipProps = @("@ObjectFromFile")
foreach ($propName in $coreProps)
{
@@ -1148,7 +1156,7 @@ function Compare-ObjectsBasedonProperty
}
$val1 = ($obj1.$propName | ConvertTo-Json -Depth 10)
$val2 = ($obj2.$propName | ConvertTo-Json -Depth 10)
Add-CompareProperty $propName $val1 $val2
Add-CompareProperty $propName $val1 $val2 -Skip:($skipBasicProperties -eq $true)
}
$addedProps = @()
@@ -1156,19 +1164,21 @@ function Compare-ObjectsBasedonProperty
{
if($propName -in $coreProps) { continue }
if($propName -in $postProps) { continue }
if($propName -in $skipProps) { continue }
if($propName -like "*@OData*" -or $propName -like "#microsoft.graph*") { continue }
$addedProps += $propName
$val1 = ($obj1.$propName | ConvertTo-Json -Depth 10)
$val2 = ($obj2.$propName | ConvertTo-Json -Depth 10)
Add-CompareProperty $propName $val1 $val2
Add-CompareProperty $propName $val1 $val2 -Skip:($skipBasicProperties -eq $true)
}
foreach ($propName in ($obj2.PSObject.Properties | Select Name).Name)
{
if($propName -in $coreProps) { continue }
if($propName -in $postProps) { continue }
if($propName -in $skipProps) { continue }
if($propName -in $addedProps) { continue }
if($propName -like "*@OData*" -or $propName -like "#microsoft.graph*") { continue }
@@ -1178,6 +1188,7 @@ function Compare-ObjectsBasedonProperty
Add-CompareProperty $propName $val1 $val2
}
$skipAssignments = Get-XamlProperty $script:cmpForm "chkSkipCompareAssignments" "IsChecked"
foreach ($propName in $postProps)
{
if(-not ($obj1.PSObject.Properties | Where Name -eq $propName))
@@ -1186,7 +1197,7 @@ function Compare-ObjectsBasedonProperty
}
$val1 = ($obj1.$propName | ConvertTo-Json -Depth 10)
$val2 = ($obj2.$propName | ConvertTo-Json -Depth 10)
Add-CompareProperty $propName $val1 $val2
Add-CompareProperty $propName $val1 $val2 -Skip:($skipAssignments -eq $true)
}
$script:compareProperties
@@ -1230,10 +1241,12 @@ function Compare-ObjectsBasedonDocumentation
$settingsValue = ?? $objectType.CompareValue "Value"
$skipBasicProperties = Get-XamlProperty $script:cmpForm "chkSkipCompareBasicProperties" "IsChecked"
if($docObj1.BasicInfo -and -not ($docObj1.BasicInfo | where Value -eq $obj1.Id))
{
# Make sure the Id property is included
Add-CompareProperty "Id" $obj1.Id $obj2.Id $docObj1.BasicInfo[0].Category
Add-CompareProperty "Id" $obj1.Id $obj2.Id $docObj1.BasicInfo[0].Category -Skip:($skipBasicProperties -eq $true)
}
foreach ($prop in $docObj1.BasicInfo)
@@ -1241,7 +1254,7 @@ function Compare-ObjectsBasedonDocumentation
$val1 = $prop.Value
$prop2 = $docObj2.BasicInfo | Where Name -eq $prop.Name
$val2 = $prop2.Value
Add-CompareProperty $prop.Name $val1 $val2 $prop.Category
Add-CompareProperty $prop.Name $val1 $val2 $prop.Category -Skip:($skipBasicProperties -eq $true)
}
$addedProperties = @()
@@ -1250,11 +1263,16 @@ function Compare-ObjectsBasedonDocumentation
{
foreach ($prop in $docObj1.Settings)
{
if(($prop.SettingId + $prop.ParentSettingId) -in $addedProperties) { continue }
if(($prop.SettingId + $prop.ParentSettingId + $prop.RowIndex) -in $addedProperties) { continue }
$addedProperties += ($prop.SettingId + $prop.ParentSettingId)
$addedProperties += ($prop.SettingId + $prop.ParentSettingId + $prop.RowIndex)
$val1 = $prop.Value
$prop2 = $docObj2.Settings | Where { $_.SettingId -eq $prop.SettingId -and $_.ParentSettingId -eq $prop.ParentSettingId }
$prop2 = $docObj2.Settings | Where { $_.SettingId -eq $prop.SettingId -and $_.ParentSettingId -eq $prop.ParentSettingId -and $_.RowIndex -eq $prop.RowIndex }
if($val1 -isnot [Array] -and $prop2.Value -is [Array])
{
Write-Log "Compare property for $($prop.SettingId) found based on value" 2
$prop2 = $prop2 | Where Value -eq $val1
}
$val2 = $prop2.Value
Add-CompareProperty $prop.Name $val1 $val2 $prop.Category
@@ -1265,12 +1283,18 @@ function Compare-ObjectsBasedonDocumentation
# Add children defined on Object 1 property
foreach ($childProp in $children1)
{
if(($childProp.SettingId + $childProp.ParentSettingId) -in $addedProperties) { continue }
if(($childProp.SettingId + $childProp.ParentSettingId + $childProp.RowIndex) -in $addedProperties) { continue }
$addedProperties += ($childProp.SettingId + $childProp.ParentSettingId)
$addedProperties += ($childProp.SettingId + $childProp.ParentSettingId + $childProp.RowIndex)
$val1 = $childProp.Value
$prop2 = $docObj2.Settings | Where { $_.SettingId -eq $childProp.SettingId -and $_.ParentSettingId -eq $childProp.ParentSettingId }
$prop2 = $docObj2.Settings | Where { $_.SettingId -eq $childProp.SettingId -and $_.ParentSettingId -eq $childProp.ParentSettingId -and $_.RowIndex -eq $childProp.RowIndex}
if($val1 -isnot [Array] -and $prop2.Value -is [Array])
{
Write-Log "Compare property for $($childProp.SettingId) found based on value" 2
$prop2 = $prop2 | Where Value -eq $val1
}
$val2 = $prop2.Value
Add-CompareProperty $childProp.Name $val1 $val2 $prop.Category
}
@@ -1278,11 +1302,16 @@ function Compare-ObjectsBasedonDocumentation
# This is to make sure all children are added under its parent and not last in the table
foreach ($childProp in $children2)
{
if(($childProp.SettingId + $childProp.ParentSettingId) -in $addedProperties) { continue }
if(($childProp.SettingId + $childProp.ParentSettingId + $childProp.RowIndex) -in $addedProperties) { continue }
$addedProperties += ($childProp.SettingId + $childProp.ParentSettingId)
$addedProperties += ($childProp.SettingId + $childProp.ParentSettingId + $childProp.RowIndex)
$val2 = $childProp.Value
$prop2 = $docObj1.Settings | Where { $_.SettingId -eq $childProp.SettingId -and $_.ParentSettingId -eq $childProp.ParentSettingId }
$prop2 = $docObj1.Settings | Where { $_.SettingId -eq $childProp.SettingId -and $_.ParentSettingId -eq $childProp.ParentSettingId -and $_.RowIndex -eq $childProp.RowIndex }
if($val2 -isnot [Array] -and $prop2.Value -is [Array])
{
Write-Log "Compare property for $($childProp.SettingId) found based on value" 2
$prop2 = $prop2 | Where Value -eq $val1
}
$val1 = $prop2.Value
Add-CompareProperty $childProp.Name $val1 $val2 $prop.Category
}
@@ -1291,12 +1320,17 @@ function Compare-ObjectsBasedonDocumentation
# These objects are defined only on Object 2. They will be last in the table
foreach ($prop in $docObj2.Settings)
{
if(($prop.SettingId + $prop.ParentSettingId) -in $addedProperties) { continue }
if(($prop.SettingId + $prop.ParentSettingId + $prop.RowIndex) -in $addedProperties) { continue }
$addedProperties += ($prop.SettingId + $prop.ParentSettingId)
$addedProperties += ($prop.SettingId + $prop.ParentSettingId + $prop.RowIndex)
$val2 = $prop.Value
$prop2 = $docObj1.Settings | Where { $_.SettingId -eq $prop.SettingId -and $_.ParentSettingId -eq $prop.ParentSettingId }
$val1 = $prop2.Value
$prop2 = $docObj1.Settings | Where { $_.SettingId -eq $prop.SettingId -and $_.ParentSettingId -eq $prop.ParentSettingId -and $_.RowIndex -eq $childProp.RowIndex }
if($val2 -isnot [Array] -and $prop2.Value -is [Array])
{
Write-Log "Compare property for $($prop.SettingId) found based on value" 2
$prop2 = $prop2 | Where Value -eq $val2
}
$val1 = $prop2.Value
Add-CompareProperty $prop.Name $val1 $val2 $prop.Category
}
}
@@ -1464,12 +1498,14 @@ function Add-AssignmentInfo
$val2 = $tmpVal
}
$skipAssignments = Get-XamlProperty $script:cmpForm "chkSkipCompareAssignments" "IsChecked"
if($assignment.RawIntent)
{
Add-CompareProperty $assignment.Category $val1 $val2 -Category $assignment.GroupMode -match $match
Add-CompareProperty $assignment.Category $val1 $val2 -Category $assignment.GroupMode -match $match -Skip:($skipAssignments -eq $true)
}
else
{
Add-CompareProperty $assignmentStr $val1 $val2 -Category $assignment.GroupMode -match $match
Add-CompareProperty $assignmentStr $val1 $val2 -Category $assignment.GroupMode -match $match -Skip:($skipAssignments -eq $true)
}
}
+49 -6
View File
@@ -20,7 +20,7 @@ $global:documentationProviders = @()
function Get-ModuleVersion
{
'2.0.3'
'2.2.0'
}
function Invoke-InitializeModule
@@ -1056,15 +1056,40 @@ function Invoke-TranslateSettingsObject
#>
$cfgSettings = (Invoke-GraphRequest "/deviceManagement/configurationPolicies('$($obj.Id)')/settings?`$expand=settingDefinitions&top=1000" -ODataMetadata "minimal" @params).Value
if($obj.'@ObjectFromFile')
{
$cfgSettings = $obj.Settings
}
if(-not $global:cfgCategories)
{
$global:cfgCategories = (Invoke-GraphRequest "/deviceManagement/configurationCategories?`$filter=platforms has 'windows10' and technologies has 'mdm'" -ODataMetadata "minimal" @params).Value
}
if(-not $global:cachedCfgSettings)
{
$global:cachedCfgSettings = @{}
}
$script:settingCatalogasCategories = @{}
foreach($cfgSetting in $cfgSettings)
{
$defObj = $cfgSetting.settingDefinitions | Where id -eq $cfgSetting.settingInstance.settingDefinitionId
if($obj.'@ObjectFromFile' -and -not $cfgSetting.settingDefinitions)
{
if($global:cachedCfgSettings.ContainsKey($cfgSetting.settingInstance.settingDefinitionId) -eq $false)
{
$defObj = Invoke-GraphRequest "/deviceManagement/configurationSettings/$($cfgSetting.settingInstance.settingDefinitionId)"
$global:cachedCfgSettings.Add($defObj.Id, $defObj)
}
}
else
{
$defObj = $cfgSetting.settingDefinitions | Where id -eq $cfgSetting.settingInstance.settingDefinitionId
if($global:cachedCfgSettings.ContainsKey($cfgSetting.settingInstance.settingDefinitionId) -eq $false)
{
$global:cachedCfgSettings.Add($defObj.Id, $defObj)
}
}
#$defObj = $cfgSetting.settingDefinitions | Where { $_.id -eq $cfgSetting.settingInstance.settingDefinitionId -or $_.id -eq $cfgSettings.settingInstanceTemplate.settingDefinitionId }
if(-not $defObj -or $script:settingCatalogasCategories.ContainsKey($defObj.categoryId)) { continue }
@@ -1077,13 +1102,13 @@ function Invoke-TranslateSettingsObject
Category=$catObj
#Settings=$catSettings
RootCategory=$rootCatObj
}))
}))
}
$script:curSettingsCatologPolicy = @()
$cfgSettings | % { Add-SettingsSetting $_.settingInstance $_.settingDefinitions } | Out-Null
#$script:objectSettingsData = $script:curSettingsCatologPolicy
foreach($item in ($script:curSettingsCatologPolicy | Select @{l="CategoryID";e={$_.CategoryDefinition.Id}}, @{l="SubCategoryID";e={$_.SubCategoryDefinition.Id}} -Unique))
@@ -1111,6 +1136,18 @@ function Add-SettingsSetting
$childSettings = @()
$settingsDef = $settingsDefs | Where id -eq $settingInstance.settingDefinitionId
if(-not $settingsDef -and $settingInstance.settingDefinitionId)
{
if($global:cachedCfgSettings.ContainsKey($settingInstance.settingDefinitionId) -eq $false)
{
$settingsDef = Invoke-GraphRequest "/deviceManagement/configurationSettings/$($settingInstance.settingDefinitionId)"
$global:cachedCfgSettings.Add($settingInstance.settingDefinitionId, $settingsDef)
}
else
{
$settingsDef = $global:cachedCfgSettings[$settingInstance.settingDefinitionId]
}
}
$categoryDef = $global:cfgCategories | Where Id -eq $settingsDef.categoryId #$script:settingCatalogasCategories[$settingsDef.categoryId]
if($settingsDef.categoryId -ne $categoryDef.rootCategoryId)
@@ -1127,6 +1164,7 @@ function Add-SettingsSetting
$settingInfo = [PSCustomObject]@{
SettingId = $settingsDef.Id
SettingKey = ""
SettingName = $settingsDef.Name
Name = $settingsDef.displayName
Description=$settingsDef.description
@@ -1145,6 +1183,7 @@ function Add-SettingsSetting
Show = $show
Type = $settingInstance.'@odata.type'
PropertyIndex = 0
RowIndex = 0
ChildSettings = @() #($childSettings | Sort DisplayName)
}
@@ -1210,13 +1249,13 @@ function Add-SettingsSetting
{
$childSettingsArr = @()
# Not sure if this is the best way but it looks better for tested policies
if($script:currentObject.templateReference.templateId)
if($script:currentObject.templateReference.templateId -and $settingsDefs)
{
$childIDs = $settingsDefs.id # Endpoint Security objects
}
else
{
$childIDs = $settingsDef.childIds # Setings Catalog
$childIDs = $settingsDef.childIds # Setings Catalog and from file documentation
}
#foreach($childId in $settingsDefs.id) #$settingsDef.childIds)
foreach($childId in $childIDs)
@@ -1227,6 +1266,7 @@ function Add-SettingsSetting
if($tmpSetting)
{
$tmpSetting.Parent = $childSettings
$tmpSetting.RowIndex = $index
$childSettings += $tmpSetting
$childSettingsArr += $tmpSetting
if($settingsDef.childIds.Count -gt 1)
@@ -1234,6 +1274,7 @@ function Add-SettingsSetting
$tmpSetting.PropertyIndex = $childSettingsArr.Count
}
}
$rowIndex++
}
$settingInfo.ChildSettings += [PSCustomObject]@{
@@ -1349,6 +1390,7 @@ function Get-IntentCategory
return (Get-LanguageString "SecurityTemplate.firewall")
}
elseif($templateType -eq "securityBaseline" -or
$templateType -eq "baseline" -or
$templateType -eq "advancedThreatProtectionSecurityBaseline" -or
$templateType -eq "microsoftEdgeSecurityBaseline")
{
@@ -2092,6 +2134,7 @@ function Invoke-TranslateSection
if($prop.dataType -eq 8)
{
if($prop.nameResourceKey -eq "LearnMore") { continue }
elseif($prop.nameResourceKey -eq "Empty") { $script:CurrentSubCategory = $null }
elseif($prop.nameResourceKey -in $script:categoriesToIgnore) { continue }
elseif($prop.nameResourceKey)
{
+75 -11
View File
@@ -10,7 +10,7 @@ This module will also document some objects based on PowerShell functions
function Get-ModuleVersion
{
'1.6.3'
'1.6.4'
}
function Invoke-InitializeModule
@@ -35,6 +35,7 @@ function Initialize-CDDocumentation
{
$script:allTenantApps = $null
$script:allTermsOfUse = $null
$script:allAuthenticationStrength = $null
$script:allAuthenticationContextClasses = $null
$script:allCustomCompliancePolicies = $null
}
@@ -760,9 +761,10 @@ function Add-CDDocumentCustomProfileProperty
}
elseif($obj.'@OData.Type' -eq "#microsoft.graph.androidManagedAppProtection")
{
$obj | Add-Member Noteproperty -Name "overrideFingerprint" -Value ($obj.pinRequiredInsteadOfBiometricTimeout -ne $null)
$obj | Add-Member Noteproperty -Name "pinReset" -Value ($obj.pinRequiredInsteadOfBiometricTimeout -ne $null)
$obj | Add-Member Noteproperty -Name "overrideFingerprint" -Value ($obj.pinRequiredInsteadOfBiometricTimeout -ne $null -and $obj.pinRequiredInsteadOfBiometricTimeout -ne "PT0S")
$obj | Add-Member Noteproperty -Name "pinReset" -Value ($obj.periodBeforePinReset -ne $null -and $obj.periodBeforePinReset -ne "PT0S")
$obj | Add-Member Noteproperty -Name "managedBrowserSelection" -Value (?: $obj.customBrowserPackageId "unmanagedBrowser" $obj.managedBrowser)
$obj | Add-Member Noteproperty -Name "encryptOrgData" -Value ($obj.appDataEncryptionType -ne "useDeviceSettings")
$retValue = $true
}
@@ -785,10 +787,11 @@ function Add-CDDocumentCustomProfileProperty
$obj | Add-Member Noteproperty -Name "sendDataSelector" -Value $sendDataOption
$obj | Add-Member Noteproperty -Name "overrideFingerprint" -Value ($obj.pinRequiredInsteadOfBiometricTimeout -ne $null)
$obj | Add-Member Noteproperty -Name "pinReset" -Value ($obj.pinRequiredInsteadOfBiometricTimeout -ne $null)
$obj | Add-Member Noteproperty -Name "overrideFingerprint" -Value ($obj.pinRequiredInsteadOfBiometricTimeout -ne $null -and $obj.pinRequiredInsteadOfBiometricTimeout -ne "PT0S")
$obj | Add-Member Noteproperty -Name "pinReset" -Value ($obj.periodBeforePinReset -ne $null -and $obj.periodBeforePinReset -ne "PT0S")
$obj | Add-Member Noteproperty -Name "managedBrowserSelection" -Value (?: $obj.customBrowserPackageId "unmanagedBrowser" $obj.managedBrowser)
$obj | Add-Member Noteproperty -Name "encryptOrgData" -Value ($obj.appDataEncryptionType -ne "useDeviceSettings")
$retValue = $true
}
elseif($obj.'@OData.Type' -eq "#microsoft.graph.windowsUpdateForBusinessConfiguration")
@@ -2759,6 +2762,19 @@ function Invoke-CDDocumentConditionalAccess
elseif($script:allTermsOfUse -isnot [Object[]]) { $script:allTermsOfUse = @($script:allTermsOfUse ) }
}
<#
if(-not $script:allAuthenticationStrength -and (($obj.grantControls.authenticationStrength | measure).Count -gt 0))
{
$script:allAuthenticationStrength = Get-DocOfflineObjects "AuthenticationStrengths"
if(-not $script:allAuthenticationStrength)
{
$script:allAuthenticationStrength = (Invoke-GraphRequest -url "/identity/conditionalAccess/authenticationStrengths/policies?`$select=displayName,Id" -ODataMetadata "minimal").value
}
if(-not $script:allAuthenticationStrength ) { $script:allAuthenticationStrength = @()}
elseif($script:allAuthenticationStrength -isnot [Object[]]) { $script:allAuthenticationStrength = @($script:allAuthenticationStrength ) }
}
#>
if($obj.conditions.locations.includeLocations.Count -gt 0)
{
$tmpObjs = @()
@@ -2998,6 +3014,34 @@ function Invoke-CDDocumentConditionalAccess
EntityKey = "termsOfUse"
})
}
if(($obj.grantControls.authenticationStrength | measure).Count -gt 0)
{
$authenticationStrngth = @()
foreach($tmpId in $obj.grantControls.authenticationStrength)
{
$authenticationStrngth += ?? $obj.grantControls.authenticationStrength.displayName $tmpId
}
Add-CustomSettingObject ([PSCustomObject]@{
Name = Get-LanguageString "AzureCA.WhatIfBlade.authenticationStrength"
Value = $termsOfUse -join $script:objectSeparator
Category = $category
SubCategory = ""
EntityKey = "authenticationStrength"
})
}
if(($obj.grantControls.customAuthenticationFactors | measure).Count -gt 0)
{
Add-CustomSettingObject ([PSCustomObject]@{
Name = Get-LanguageString "AzureCA.menuItemClaimProviderControls"
Value = $obj.grantControls.customAuthenticationFactors -join $script:objectSeparator
Category = $category
SubCategory = ""
EntityKey = "customAuthenticationFactors"
})
}
Add-CustomSettingObject ([PSCustomObject]@{
Name = Get-LanguageString "AzureCA.descriptionContentForControlsAndOr"
@@ -3042,10 +3086,6 @@ function Invoke-CDDocumentConditionalAccess
if($obj.sessionControls.signInFrequency.isEnabled -eq $true)
{
if($obj.sessionControls.cloudAppSecurity.cloudAppSecurityType -eq "mcasConfigured") { $strId = "useCustomControls" }
elseif($obj.sessionControls.cloudAppSecurity.cloudAppSecurityType -eq "monitorOnly") { $strId = "monitorOnly" }
elseif($obj.sessionControls.cloudAppSecurity.cloudAppSecurityType -eq "blockDownloads") { $strId = "blockDownloads" }
if($obj.sessionControls.signInFrequency.type -eq "hours")
{
if($obj.sessionControls.signInFrequency.value -gt 1)
@@ -3057,7 +3097,7 @@ function Invoke-CDDocumentConditionalAccess
$value = Get-LanguageString "AzureCA.SessionLifetime.SignInFrequency.Option.Hour.singular"
}
}
else
elseif($obj.sessionControls.signInFrequency.type -eq "days")
{
if($obj.sessionControls.signInFrequency.value -gt 1)
{
@@ -3068,6 +3108,10 @@ function Invoke-CDDocumentConditionalAccess
$value = Get-LanguageString "AzureCA.SessionLifetime.SignInFrequency.Option.Day.singular"
}
}
else
{
$value = Get-LanguageString "AzureCA.SessionControls.SignInFrequency.everytime"
}
Add-CustomSettingObject ([PSCustomObject]@{
Name = Get-LanguageString "AzureCA.SessionLifetime.SignInFrequency.Option.label"
@@ -3077,6 +3121,26 @@ function Invoke-CDDocumentConditionalAccess
EntityKey = "SignInFrequency"
})
}
if($null -ne $obj.sessionControls.continuousAccessEvaluation)
{
if($obj.sessionControls.continuousAccessEvaluation.mode -eq "strictLocation")
{
$value = Get-LanguageString "AzureCA.SessionControls.Cae.strictLocation"
}
else
{
$value = Get-LanguageString "AzureCA.SessionControls.Cae.disable"
}
Add-CustomSettingObject ([PSCustomObject]@{
Name = Get-LanguageString "AzureCA.SessionControls.Cae.checkboxLabel"
Value = $value
Category = $category
SubCategory = ""
EntityKey = "continuousAccessEvaluation"
})
}
if($obj.sessionControls.persistentBrowser.isEnabled -eq $true)
{
+33 -10
View File
@@ -10,7 +10,7 @@ This module is for the Endpoint Manager/Intune View. It manages Export/Import/Co
#>
function Get-ModuleVersion
{
'3.9.3'
'3.9.6'
}
function Invoke-InitializeModule
@@ -89,6 +89,22 @@ function Invoke-InitializeModule
SubPath = "EndpointManager"
}) "EndpointManager"
Get-SettingValue "ProxyURI"
if($global:FirstTimeRunning) {
Save-Setting "EndpointManager" "EMAzureApp" $global:DefaultAzureApp
}
$currentAppID = Get-SettingValue "EMAzureApp"
$customAppID = Get-SettingValue "EMCustomAppId"
$global:informOldAzureApp = $false
if(($global:OldAzureApps -is [Array] -and $currentAppID -in $global:OldAzureApps) -or (-not $currentAppID -and -not $customAppID))
{
$global:informOldAzureApp = $true
Write-Log "Microsoft Intune PowerShell is being decomissioned. Please change to a supported app eg Microsoft Graph or a custom app!" 2
}
$viewPanel = Get-XamlObject ($global:AppRootFolder + "\Xaml\EndpointManagerPanel.xaml") -AddVariables
Set-EMViewPanel $viewPanel
@@ -105,7 +121,7 @@ function Invoke-InitializeModule
Activating = { Invoke-EMActivatingView }
Authentication = (Get-MSALAuthenticationObject)
Authenticate = { Invoke-EMAuthenticateToMSAL @args }
AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM")
AppInfo = (Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp "EM")
SaveSettings = { Invoke-EMSaveSettings }
Permissions = @()
@@ -802,7 +818,7 @@ function Invoke-EMAuthenticateToMSAL
{
param($params = @{})
$global:EMViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM"
$global:EMViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp "EM"
Set-MSALCurrentApp $global:EMViewObject.AppInfo
& $global:msalAuthenticator.Login -Account (?? $global:MSALToken.Account.UserName (Get-Setting "" "LastLoggedOnUser")) @params
}
@@ -818,7 +834,7 @@ function Invoke-EMActivatingView
Show-MSALError
# Refresh values in case they have changed
$global:EMViewObject.AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM")
$global:EMViewObject.AppInfo = (Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp "EM")
if(-not $global:EMViewObject.Authentication)
{
$global:EMViewObject.Authentication = Get-MSALAuthenticationObject
@@ -830,7 +846,7 @@ function Invoke-EMActivatingView
function Invoke-EMSaveSettings
{
$tmpApp = Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547"
$tmpApp = Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp
if($global:appObj.ClientID -ne $tmpApp.ClientId -and $global:MSALToken)
{
@@ -1131,7 +1147,7 @@ function Start-PostExportEndpointSecurity
{
param($obj, $objectType, $path)
$fileName = (Get-GraphObjectName $obj $objectType)
$fileName = (Get-GraphObjectName $obj $objectType).Trim('.')
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
{
$fileName = ($fileName + "_" + $obj.Id)
@@ -2011,6 +2027,10 @@ function local:Start-ImportApp
{
$fileEncryptionInfo = Copy-MSILOB $packageFile $obj
}
elseif($appType -eq "microsoft.graph.windowsUniversalAppX")
{
$fileEncryptionInfo = Copy-MSIXLOB $packageFile $obj
}
elseif($appType -eq "microsoft.graph.iosLOBApp")
{
$fileEncryptionInfo = Copy-iOSLOB $packageFile $obj
@@ -2144,6 +2164,9 @@ function Add-DetailExtensionApplications
$dlgSave = [System.Windows.Forms.SaveFileDialog]::new()
$dlgSave.InitialDirectory = $pkgPath
$dlgSave.FileName = ($obj.FileName + ".encrypted")
$dlgSave.DefaultExt = "*.encrypted"
$dlgSave.Filter = "Encrypted intunewin (*.encrypted)|*.encrypted|All files (*.*)|*.*"
if($dlgSave.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK -and $dlgSave.Filename)
{
$contentFileObj = Start-DownloadAppContent $obj $dlgSave.FileName
@@ -2158,7 +2181,7 @@ function Add-DetailExtensionApplications
$of = [System.Windows.Forms.OpenFileDialog]::new()
$of.InitialDirectory = $pkgPath
$of.DefaultExt = "*.json"
$of.Filter = "Json (*.json)|*.*"
$of.Filter = "Json (*.json)|*.json"
$of.Multiselect = $false
if($of.ShowDialog() -eq "OK")
@@ -2745,7 +2768,7 @@ function Start-PostExportAdministrativeTemplate
{
param($obj, $objectType, $path)
$fileName = (Get-GraphObjectName $obj $objectType)
$fileName = (Get-GraphObjectName $obj $objectType).Trim('.')
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
{
$fileName = ($fileName + "_" + $obj.Id)
@@ -3009,7 +3032,7 @@ function Start-PostExportRoleDefinitions
{
param($obj, $objectType, $path)
$fileName = (Get-GraphObjectName $obj $objectType)
$fileName = (Get-GraphObjectName $obj $objectType).Trim('.')
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
{
$fileName = ($fileName + "_" + $obj.Id)
@@ -3511,7 +3534,7 @@ function Add-EMAssignmentsToExportFile
if($global:chkExportAssignments.IsChecked -ne $true) { return }
$fileName = (Get-GraphObjectName $obj $objectType)
$fileName = (Get-GraphObjectName $obj $objectType).Trim('.')
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
{
$fileName = ($fileName + "_" + $obj.Id)
+3 -3
View File
@@ -10,7 +10,7 @@ This module is for the Endpoint Info View. It shows read-only objects in Intune
#>
function Get-ModuleVersion
{
'3.9.0'
'3.9.6'
}
function Invoke-InitializeModule
@@ -27,7 +27,7 @@ function Invoke-InitializeModule
Activating = { Invoke-EMInfoActivatingView }
Authentication = (Get-MSALAuthenticationObject)
Authenticate = { Invoke-EMInfoAuthenticateToMSAL }
AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM")
AppInfo = (Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp "EM")
SaveSettings = { Invoke-EMSaveSettings }
Permissions = @()
})
@@ -119,7 +119,7 @@ function Invoke-EMInfoActivatingView
function Invoke-EMInfoAuthenticateToMSAL
{
$global:EMInfoViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM"
$global:EMInfoViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp "EM"
Set-MSALCurrentApp $global:EMInfoViewObject.AppInfo
$usr = (?? $global:MSALToken.Account.UserName (Get-Setting "" "LastLoggedOnUser"))
if($usr)
+37 -1
View File
@@ -10,7 +10,7 @@ This module manages Application objects in Intune e.g. uploading application fil
#>
function Get-ModuleVersion
{
'3.9.3'
'3.9.6'
}
#########################################################################################
@@ -123,6 +123,42 @@ function Copy-MSILOB
$fileEncryptionInfo
}
function Copy-MSIXLOB
{
param($msixFile, $appObj)
if(-not $msixFile -or (Test-Path $msixFile) -eq $false)
{
return
}
$fi = [IO.FileInfo]$msixFile
$appId = $appObj.Id
$appType = $appObj.'@odata.type'.Trim('#')
$tmpFile = [IO.Path]::GetTempFileName()
$fileEncryptionInfo = New-IntuneEncryptedFile $msixFile $tmpFile
$manifest = $fi.Name
$appFileBody = @{
"@odata.type" = "#microsoft.graph.mobileAppContentFile"
name = [IO.Path]::GetFileName($msixFile)
size = (Get-Item $msixFile).Length
sizeEncrypted = (Get-Item $tmpFile).Length
manifest = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($manifest))
isDependency = $false
}
Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody
Remove-Item $tmpFile -Force
$fileEncryptionInfo
}
function Copy-iOSLOB
{
param($pkgFile, $appObj)
+4 -4
View File
@@ -9,7 +9,7 @@ Module for listing Intune assignment filter usage
#>
function Get-ModuleVersion
{
'1.1.0'
'1.1.1'
}
function Invoke-InitializeModule
@@ -109,7 +109,7 @@ function Get-EMIntuneFilterUsage
$batchObjs = @()
foreach($payload in $payloads)
{
$guid = (New-Guid).Guid
$guid = [Guid]::NewGuid().Guid
$payloadsObj = @{
Payload = $payload
@@ -208,7 +208,7 @@ function Get-EMIntuneFilterUsage
if($batchObjs.Count -gt 0)
{
$objName = Get-GraphObjectName $filter $objectType
$responses = Invoke-GraphBatchRequest $batchObjs.Requests $objName -SkipWarnings
$responses = Invoke-GraphBatchRequest @($batchObjs.Requests) $objName -SkipWarnings
foreach($response in ($responses | Where Status -lt 300))
{
@@ -312,7 +312,7 @@ function Get-EMIntuneFilterUsage
if($groupIDs.Count -gt 0)
{
$guid = (New-Guid).Guid
$guid = [Guid]::NewGuid().Guid
$groupObjs = @()
$x = 1
foreach($groupID in $groupIDs)
+3 -3
View File
@@ -22,7 +22,7 @@ $global:EMToolsViewObject = $null
function Get-ModuleVersion
{
'1.0.4'
'1.0.5'
}
function Invoke-InitializeModule
@@ -82,7 +82,7 @@ function Add-EMToolsViewItem
Activating = { Invoke-EMToolsActivatingView }
Authentication = (Get-MSALAuthenticationObject)
Authenticate = { Invoke-EMToolsAuthenticateToMSAL }
AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547")
AppInfo = (Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp)
SaveSettings = { Invoke-EMSaveSettings }
Permissions = @()
})
@@ -121,7 +121,7 @@ function Invoke-EMToolsActivatingView
function Invoke-EMToolsAuthenticateToMSAL
{
$global:EMToolsViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547"
$global:EMToolsViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" $global:DefaultAzureApp
Set-MSALCurrentApp $global:EMToolsViewObject.AppInfo
$usr = (?? $global:MSALToken.Account.UserName (Get-Setting "" "LastLoggedOnUser"))
if($usr)
+39 -23
View File
@@ -10,15 +10,19 @@ This module manages Microsoft Grap fuctions like calling APIs, managing graph ob
#>
function Get-ModuleVersion
{
'3.9.3'
'3.9.6'
}
$global:MSGraphGlobalApps = @(
(New-Object PSObject -Property @{Name="";ClientId="";RedirectUri="";Authority=""}),
(New-Object PSObject -Property @{Name="Microsoft Intune PowerShell";ClientId="d1ddf0e4-d672-4dae-b554-9d5bdfd93547";RedirectUri="urn:ietf:wg:oauth:2.0:oob"; }),
(New-Object PSObject -Property @{Name="Microsoft Graph PowerShell";ClientId="14d82eec-204b-4c2f-b7e8-296a70dab67e";RedirectUri="https://login.microsoftonline.com/common/oauth2/nativeclient";})
(New-Object PSObject -Property @{Name="Microsoft Graph PowerShell";ClientId="14d82eec-204b-4c2f-b7e8-296a70dab67e";RedirectUri="https://login.microsoftonline.com/common/oauth2/nativeclient";}),
(New-Object PSObject -Property @{Name="Decomissioned - Don't use - Microsoft Intune PowerShell";ClientId="d1ddf0e4-d672-4dae-b554-9d5bdfd93547";RedirectUri="urn:ietf:wg:oauth:2.0:oob"; })
)
$global:DefaultAzureApp = "14d82eec-204b-4c2f-b7e8-296a70dab67e"
$global:OldAzureApps = @("d1ddf0e4-d672-4dae-b554-9d5bdfd93547")
function Invoke-InitializeModule
{
$global:graphURL = "https://graph.microsoft.com/beta"
@@ -584,7 +588,7 @@ function Get-GraphObjects
if($SinglePage -eq $true)
{
#Use default page size or use below for a specific page size for testing
#$params.Add("pageSize",10) #!!!
#$params.Add("pageSize",5) #!!!
}
elseif($SingleObject -ne $true -and $SinglePage -ne $true)
{
@@ -1055,7 +1059,7 @@ function Get-GraphMetaData
$fi = [IO.FileInfo]$fileFullPath
$maxAge = (Get-Date).AddDays(-14)
if($fi.Exists -and ($fi.LastWriteTime -gt $maxAge -or $fi.CreationTime -gt $maxAge))
{
{
try
{
[xml]$global:metaDataXML = Get-Content $fi.FullName
@@ -1070,13 +1074,14 @@ function Get-GraphMetaData
$wc = New-Object System.Net.WebClient
$wc.Encoding = [System.Text.Encoding]::UTF8
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$wc.Proxy = $proxyURI
}
try
{
if($proxyURI)
{
$wc.Proxy = [System.Net.WebProxy]::new($proxyURI)
}
[xml]$global:metaDataXML = $wc.DownloadString($url)
# Download to string and then use Save to format the XML output
$global:metaDataXML.Save($fi.FullName)
@@ -1090,6 +1095,16 @@ function Get-GraphMetaData
$wc.Dispose()
}
}
if(-not $global:metaDataXML -and $fi.Exists)
{
Write-Log "Using old version of Graph MetaData file" 2
try
{
[xml]$global:metaDataXML = Get-Content $fi.FullName
}
catch { }
}
}
}
@@ -1410,8 +1425,8 @@ function Start-GraphObjectExport
Write-Log "Start bulk export"
Write-Log "****************************************************************"
$tmpFolder = Expand-FileName (Get-XamlProperty $script:exportForm "txtExportPath" "Text")
Write-Log "Export root folder: $tmpFolder"
$script:exportRoot = Expand-FileName (Get-XamlProperty $script:exportForm "txtExportPath" "Text")
Write-Log "Export root folder: $script:exportRoot"
$global:AADObjectCache = $null
@@ -1425,10 +1440,11 @@ function Start-GraphObjectExport
$txtNameFilter = $global:txtExportNameFilter.Text.Trim()
Save-Setting "" "ExportNameFilter" $txtNameFilter
if($txtNameFilter) { Write-Log "Name filter: $txtNameFilter" }
try
{
$folder = Get-GraphObjectFolder $item.ObjectType (Get-XamlProperty $script:exportForm "txtExportPath" "Text") (Get-XamlProperty $script:exportForm "chkAddObjectType" "IsChecked") (Get-XamlProperty $script:exportForm "chkAddCompanyName" "IsChecked")
$folder = Get-GraphObjectFolder $item.ObjectType $script:exportRoot (Get-XamlProperty $script:exportForm "chkAddObjectType" "IsChecked") (Get-XamlProperty $script:exportForm "chkAddCompanyName" "IsChecked")
$folder = Expand-FileName $folder
@@ -2690,7 +2706,7 @@ function Add-GroupMigrationObject
if(-not $groupId) { return }
$path = Get-GraphMigrationTableFile $global:txtExportPath.Text
$path = Get-GraphMigrationTableFile $script:ExportRoot
if(-not $path) { return }
@@ -2731,7 +2747,7 @@ function Add-GraphMigrationObject
if(-not $objId) { return }
$path = Get-GraphMigrationTableFile $global:txtExportPath.Text
$path = Get-GraphMigrationTableFile $script:ExportRoot
if(-not $path) { return }
@@ -3072,7 +3088,7 @@ function Add-GraphDependencyObjects
$url = "$($url.Trim())&$($depObjectType.QUERYLIST.Trim())"
}
$depObjects = (Invoke-GraphRequest $url -ODataMetadata "none").Value
$depObjects = (Invoke-GraphRequest $url -ODataMetadata "none" -AllPages).Value
$arrDepObjects = @()
foreach($depObject in $depObjects)
{
@@ -3126,8 +3142,8 @@ function Export-GraphObjects
$objectType = $global:curObjectType
Write-Status "Export $($objectType.Title)"
$global:ExportRoot = (Get-XamlProperty $script:exportForm "txtExportPath" "Text")
$folder = Get-GraphObjectFolder $objectType $global:ExportRoot (Get-XamlProperty $script:exportForm "chkAddObjectType" "IsChecked") (Get-XamlProperty $script:exportForm "chkAddCompanyName" "IsChecked")
$script:ExportRoot = (Get-XamlProperty $script:exportForm "txtExportPath" "Text")
$folder = Get-GraphObjectFolder $objectType $script:ExportRoot (Get-XamlProperty $script:exportForm "chkAddObjectType" "IsChecked") (Get-XamlProperty $script:exportForm "chkAddCompanyName" "IsChecked")
$folder = Expand-FileName $folder
@@ -3158,7 +3174,7 @@ function Export-GraphObjects
}
Save-Setting "" "LastUsedFullPath" $folder
Save-Setting "" "LastUsedRoot" $global:ExportRoot
Save-Setting "" "LastUsedRoot" $script:ExportRoot
Write-Status ""
}
@@ -3466,14 +3482,14 @@ function Get-GraphBatchObjects
if($batchArr.Count -eq 0) { return }
$batchResults = (Invoke-GraphBatchRequest $batchArr $objectType.Title).body
$batchResults = @((Invoke-GraphBatchRequest $batchArr $objectType.Title).body)
if($batchResults.Count -ne ($objects.Count - $skipped))
if(($batchResults | measure).Count -ne ($objects.Count - $skipped))
{
Write-Log "Not all batch objects returned. Expected $($objects.Count - $skipped) but only got $($batchResults.Count)"
Write-Log "Not all batch objects returned. Expected $($objects.Count - $skipped) but only got $(($batchResults | measure).Count)"
}
if($objectType -and $batchResults.Count -gt 0)
if($objectType -and ($batchResults | measure).Count -gt 0)
{
$batchResultsTmp = $batchResults
$batchResults = Add-GraphObjectProperties $batchResultsTmp $objectType -property $objectType.ViewProperties
@@ -4397,7 +4413,7 @@ function Save-GraphObjectToFile
function Get-GraphObjectFile
{
param($obj, $objectType, $path)
$fileName = (Get-GraphObjectName $obj $objectType)
$fileName = (Get-GraphObjectName $obj $objectType).Trim('.')
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
{
+72
View File
@@ -1,4 +1,76 @@
# Release Notes
## 3.9.6 - 2024-04-22
**BREAKING CHANGE**<br />
Microsoft are decommissioning the Intune PowerShell App with id d1ddf0e4-d672-4dae-b554-9d5bdfd93547, mentioned [here](https://learn.microsoft.com/en-us/mem/intune/fundamentals/whats-new#plan-for-change-update-your-powershell-scripts-with-a-microsoft-entra-id-registered-app-id-by-april-2024)<br />
This was the default app in IntuneManagement. The default app is now changed to Microsoft Graph PowerShell app with id 14d82eec-204b-4c2f-b7e8-296a70dab67e<br />
The script will automatically use that app for new installationsbr<br />
A warning to change will be displayed if d1ddf0e4-d672-4dae-b554-9d5bdfd93547 is used<br />
You can also register a new app, documented [here](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app) and then configure that app in Settings<br />
<br />
*Note*: This might require consent for the required permissions<br />
<br />
There is no change if you are currently using a custom app or already changed to Microsoft Graph PowerShell in Settings<br />
<br />
Also note that changing application will reset cached accounts<br />
**New features**
- **Compare**<br />
- Added support for ignoring Basic properties and Assignments<br />
Based on [Issue 203](https://github.com/Micke-K/IntuneManagement/issues/203) and [Issue 128](https://github.com/Micke-K/IntuneManagement/issues/128)<br />
**NOTE:** Properties will be logged but with empty value for Match<br />
**Fixes**
- **Compare**<br />
- Fixed issue when comparing Settings Catalog settings with child settings eg Hardened UNC Paths in Security Baseline<br />
- **Import/Export**<br />
- Added support for import of MSIX app content<br />
Based on [Discussion 191](https://github.com/Micke-K/IntuneManagement/discussions/191)<br />
- Disable autoload of modules to prevent loading MSGraph module if found<br />
Based on [Issue 208](https://github.com/Micke-K/IntuneManagement/issues/208)<br />
- **Documentation**<br />
- Language files re-generated.<br />
- AppTypes file re-generated. Some apps were not documented with proper name.<br />
<br />
## 3.9.5 - 2024-01-20
**Fixes**
- **Import/Export**<br />
- Assignments were not exported for some policies with trailing . in the name<br />
Based on [Issue 184](https://github.com/Micke-K/IntuneManagement/issues/184)<br />
**NOTE:** Policy will not export if full path is over 260 characters<br />
- Fixed issue with policies not being exported when Batch was enabled in Settings<br />
and there was only one policy for the specified object type<br />
- Failed to get App Protection policies when Proxy was configured<br />
- Fixed issue with importing policies with dependency in tenants with 100+ policies for a single policy type<br />
Dependency only imported first page. All pages will be imported now to resolve dependencies<br />
Based on [Issue 183](https://github.com/Micke-K/IntuneManagement/issues/183)<br />
- Fixed issue with multiple export folders when using %DateTime% in path<br />
Based on [Issue 189](https://github.com/Micke-K/IntuneManagement/issues/189)<br />
- **Get Assignment Filter usage**<br />
- Filters not returned if only assigned to one policy<br />
Based on [Issue 141](https://github.com/Micke-K/IntuneManagement/issues/141)<br />
**NOTE:** Start the tool from: Views -> Intune Tools -> Intune Filter Usage<br />
- **Compare**<br />
- Comparing Settings Catalog objects with exported objects failed<br />
Issue cause by offline documentation was not working<br />
Based on [Issue 183](https://github.com/Micke-K/IntuneManagement/issues/183)<br />
- **Documentation**<br />
- Offline documentation of Settings Catalog was not working.<br />
Values were always documented from online object<br />
- Conditional Access documentation updates for Android and iOS<br />
- App Protection documentation updates for Android and iOS<br />
- Language files re-generated. Azure shou now be Entra for some documentations.<br />
<br />
## 3.9.4 - 2023-12-18
**Fixes**
+22 -8
View File
@@ -34,6 +34,8 @@
<Grid Grid.Row='2' VerticalAlignment="Stretch" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
@@ -44,27 +46,39 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row='0'>
<StackPanel Orientation="Horizontal" Grid.Row='0' Margin="0,5,5,0" >
<Label Content="Skip Basic Properties" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Skip basic properties like name, description, modified etc." />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='0' Name='chkSkipCompareBasicProperties' VerticalAlignment="Center" IsChecked="false" />
<StackPanel Orientation="Horizontal" Grid.Row='1' Margin="0,5,5,0" >
<Label Content="Skip Assignments" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Skip comapring assignments." />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='1' Name='chkSkipCompareAssignments' VerticalAlignment="Center" IsChecked="false" />
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row='2'>
<Label Content="Save as" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specifies how the export csv should be saved. One file per ObjectType or one file for all objects." />
</StackPanel>
<ComboBox Name="cbCompareSave" Margin="0,5,0,0" MinWidth="250" Grid.Row='0' Grid.Column="1" HorizontalAlignment="Left"
<ComboBox Name="cbCompareSave" Margin="0,5,0,0" MinWidth="250" Grid.Row='2' Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" />
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row='1' >
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row='3' >
<Label Content="Comparison Type" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify how objects should be compared" />
</StackPanel>
<ComboBox Name="cbCompareType" Margin="0,5,0,0" MinWidth="250" Grid.Row='1' Grid.Column="1" HorizontalAlignment="Left"
<ComboBox Name="cbCompareType" Margin="0,5,0,0" MinWidth="250" Grid.Row='3' Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" />
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row='2' >
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row='4' >
<Label Content="CSV Delimiter" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the character to use for separating properties in the CSV file" />
</StackPanel>
<ComboBox Name="cbCompareCSVDelimiter" Margin="0,5,0,0" MinWidth="250" Grid.Row='2' Grid.Column="1" HorizontalAlignment="Left" />
<ComboBox Name="cbCompareCSVDelimiter" Margin="0,5,0,0" MinWidth="250" Grid.Row='4' Grid.Column="1" HorizontalAlignment="Left" />
<Grid Margin="0,0,5,0" Grid.Row='3' >
<Grid Margin="0,0,5,0" Grid.Row='5' >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
@@ -74,7 +88,7 @@
</StackPanel>
</Grid>
<DataGrid Name="dgObjectsToCompare" Margin="0,5,0,5" Grid.Row='3' Grid.Column='1' CanUserAddRows="False" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White" />
<DataGrid Name="dgObjectsToCompare" Margin="0,5,0,5" Grid.Row='5' Grid.Column='1' CanUserAddRows="False" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White" />
</Grid>
+15 -1
View File
@@ -14,6 +14,8 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
@@ -45,10 +47,22 @@
</Grid>
<StackPanel Orientation="Horizontal" Grid.Row='2' Margin="0,5,5,0" >
<Label Content="Skip Basic Properties" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Skip basic properties like name, description, modified etc." />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='2' Name='chkSkipCompareBasicProperties' VerticalAlignment="Center" IsChecked="false" />
<StackPanel Orientation="Horizontal" Grid.Row='3' Margin="0,5,5,0" >
<Label Content="Skip Assignments" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Skip comapring assignments." />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='3' Name='chkSkipCompareAssignments' VerticalAlignment="Center" IsChecked="false" />
<StackPanel Orientation="Horizontal" Grid.Row='4' Margin="0,5,5,0" >
<Label Content="Comparison Type" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify how objects should be compared" />
</StackPanel>
<ComboBox Name="cbCompareType" Margin="0,5,0,0" MinWidth="250" Grid.Row='2' Grid.Column="1" HorizontalAlignment="Left"
<ComboBox Name="cbCompareType" Margin="0,5,0,0" MinWidth="250" Grid.Row='4' Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" />
<TextBlock Grid.Row='999' TextWrapping="Wrap" Margin="5,20,5,0" Grid.ColumnSpan="2">
+41
View File
@@ -0,0 +1,41 @@
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Name="scrollViewerObj"
Margin="5">
<TextBlock
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Height="{Binding ElementName=scrollViewerObj, Path=ViewportHeight}"
Width="{Binding ElementName=scrollViewerObj, Path=ViewportWidth}"
MinWidth="500"
MinHeight="300"
>
<Bold>'Microsoft Intune PowerShell' is being decommissioned!</Bold>
<LineBreak/><LineBreak/>
The current Entra application Microsoft Intune PowerShell with id 'd1ddf0e4-d672-4dae-b554-9d5bdfd93547' is being decommissioned by Microsoft.
<LineBreak /><LineBreak />
The app might still work but might be retired at any time.
<LineBreak/>
Please change Apllication in Settings. Either use 'Microsoft Graph PowerShell' or register a custom app.
<LineBreak /><LineBreak />
See <Hyperlink Name="addCustomApp" NavigateUri="https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app"> Quickstart: Register an application with the Microsoft identity platform</Hyperlink>.
<LineBreak /><LineBreak />
<CheckBox Name='chkChangeApp' VerticalAlignment="Center" IsChecked="false" Margin="5,0,0,0" >Change app to 'Microsoft Graph PowerShell'</CheckBox>
<LineBreak /><LineBreak />
<Bold>Note:</Bold>
<LineBreak />
This might require additional consent prompt and additional app permissions.
</TextBlock>
</ScrollViewer>
<StackPanel Grid.Row='1' Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,5">
<CheckBox Name='chkSkippMessage' VerticalAlignment="Center" IsChecked="false" Margin="5,0,0,0" >Do not show this message again</CheckBox>
<Button Name="btnOK" Content="OK" Width='100' Margin="5,0,0,0" />
</StackPanel>
</Grid>
+2 -2
View File
@@ -34,9 +34,9 @@
<LineBreak /><LineBreak />
<Bold>Note:</Bold>
<LineBreak />
The 'Microsoft Intune PowerShell' Enterprise App in Azure is used by default for API calls.
The 'Microsoft Graph PowerShell' Enterprise App in Azure is used by default for API calls.
<LineBreak />
Go to Settings if you want to use 'Microsoft Graph PowerShell' or a custom App.
Go to Settings if you want to use a custom App. For mor info, see <Hyperlink Name="addCustomApp" NavigateUri="https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app"> Quickstart: Register an application with the Microsoft identity platform</Hyperlink>.
<LineBreak />
This software might use permissions not granted for the existing App.
<LineBreak />