Compare commits

..
4 Commits
Author SHA1 Message Date
Mikael Karlsson e6ec048df0 3.9.0 Module
Added version in the module file
2023-05-04 23:42:37 +10:00
Mikael Karlsson 0fd868ff70 3.9.0 2023-05-04 22:00:12 +10:00
Mikael Karlsson ece28a649f 3.8.1 2023-01-26 22:29:21 +11:00
Mikael Karlsson 897309e48e 3.7.4 2022-11-22 21:54:51 +11:00
69 changed files with 11591 additions and 6194 deletions
+2 -2
View File
@@ -12,7 +12,7 @@
RootModule = 'CloudAPIPowerShellManagement.psm1' RootModule = 'CloudAPIPowerShellManagement.psm1'
# Version number of this module. # Version number of this module.
ModuleVersion = '3.7.3' ModuleVersion = '3.9.0'
# Supported PSEditions # Supported PSEditions
# CompatiblePSEditions = @() # CompatiblePSEditions = @()
@@ -27,7 +27,7 @@ Author = 'Mikael Karlsson'
# CompanyName = '' # CompanyName = ''
# Copyright statement for this module # Copyright statement for this module
Copyright = '(c) 2022 Mikael Karlsson. Software released under MIT License.' Copyright = '(c) 2023 Mikael Karlsson. Software released under MIT License.'
# Description of the functionality provided by this module # Description of the functionality provided by this module
Description = 'Management of Intune and Azure via Cloud APIs like Microsoft Graph API' Description = 'Management of Intune and Azure via Cloud APIs like Microsoft Graph API'
+31 -3
View File
@@ -11,7 +11,7 @@ This module handles the WPF UI
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.7.1' '3.8.1'
} }
function Initialize-Window function Initialize-Window
@@ -415,7 +415,7 @@ function Set-XamlProperty
function Get-XamlProperty function Get-XamlProperty
{ {
param($xamlObj, $controlName, $propertyName, $defaultValue) param($xamlObj, $controlName, $propertyName, $defaultValue = $null)
$obj = $xamlObj.FindName($controlName) $obj = $xamlObj.FindName($controlName)
@@ -423,7 +423,7 @@ function Get-XamlProperty
{ {
if($obj) if($obj)
{ {
return (?? $obj."$propertyName" $null) return (?? $obj."$propertyName" $defaultValue)
} }
else else
{ {
@@ -2666,6 +2666,34 @@ function Show-LogView
} }
} }
function Get-Base64ScriptContent
{
param($encodeContent, [switch]$RemoveSignature)
if(-not $encodeContent) { return }
try
{
$scriptContent = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encodeContent))
if($RemoveSignature -eq $true)
{
$x = $scriptContent.IndexOf("# SIG # Begin signature block")
if($x -gt 0)
{
$scriptContent = $scriptContent.SubString(0,$x)
$scriptContent = $scriptContent + "# SIG # Begin signature block`nSignature data excluded..."
}
}
$scriptContent
}
catch
{
}
}
New-Alias -Name ?? -value Invoke-Coalesce New-Alias -Name ?? -value Invoke-Coalesce
New-Alias -Name ?: -value Invoke-IfTrue New-Alias -Name ?: -value Invoke-IfTrue
Export-ModuleMember -alias * -function * Export-ModuleMember -alias * -function *
+184
View File
@@ -0,0 +1,184 @@
<style type="text/css">
html { }
html,body {
margin:0;
padding:5px;
position:relative;
}
.header-level1 {
font-family:"Arial",sans-serif;
font-size: 18px;
margin-top: 0px;
margin-bottom: 0px;
}
.header-level2 {
font-family:"Arial",sans-serif;
font-size: 16px;
margin-top: 3px;
margin-bottom: 0px;
}
.header-level3 {
font-family:"Arial",sans-serif;
font-size: 14px;
margin-top: 3px;
margin-bottom: 0px;
}
.header-level4 {
font-family:"Arial",sans-serif;
font-size: 12px;
margin-top: 3px;
margin-bottom: 0px;
}
.header-level6 {
font-family:"Arial",sans-serif;
font-size: 10px;
margin-top: 3px;
}
.table-settings {
border: 1px solid #999999;
padding-right: 5px;
font-family:"Arial",sans-serif;
font-size: 11px;
}
.table-settings TR:nth-child(even) {
background-color: #FAFAFA
}
.table-settings th {
background-color: #D0D0D0;
padding: 0px;
text-align:left;
font-size: 12px;
padding-right: 10px;
padding-top: 3px;
font-weight: bold;
border-width: 5px;
padding: 5px;
border-style: none;
border-color: #F2F2F2;
}
.table-settings td {
text-align:left;
padding-right: 5px;
border-width: 5px;
padding: 5px;
border-style: none;
border-color: #F2F2F2;
border-bottom: 1px solid #ddd;
}
.code {
background: #f4f4f4;
border: 1px solid #ddd;
border-left: 3px solid #333333;
color: #666;
page-break-inside: avoid;
font-family: monospace;
font-size: 12px;
line-height: 1.6;
margin-bottom: 2px;
max-width: 100%;
overflow: auto;
padding: 1em 1.5em;
display: block;
word-wrap: break-word;
}
.description summary {
list-style: none;
cursor: pointer;
}
details.description[open] summary::after {
content: attr(data-open);
}
details.description:not([open]) summary::after {
content: attr(data-close);
}
.row-even {
}
.row-odd {
}
.category-level1 {
background-color: #E0E0E0;
font-size: 11px;
font-weight: bold;
}
.category-level2 {
background-color: #E0E0E0;
font-size: 11px;
}
.anchor-style {
font-family:"Arial",sans-serif;
font-size: 11px;
}
.anchor-level2 {
}
.anchor-level3 {
padding-left: 5px;
}
.anchor-level4 {
padding-left: 10px;
}
.anchor-level5 {
padding-left: 15px;
}
.table-value {
border: 0px;
width: 100%;
padding: 0px;
font-family:"Arial",sans-serif;
font-size: 11px;
}
.table-value th {
background-color: #F9F9F9;
padding: 0px;
text-align:left;
font-size: 11px;
padding-right: 0px;
padding-top: 3px;
padding-bottom: 3px;
font-weight: normal;
border-width: 0px;
border-style: none;
}
.table-value tr {
background-color: #FFFFFF;
}
.table-value td {
border-bottom: 0;
padding: 1px;
}
.row-new-property {
background-color: #E7E7E7 !important;
}
</style>
+117
View File
@@ -0,0 +1,117 @@
<style type="text/css">
html { }
html,body {
margin:0;
padding:0 px;
position:relative;
}
h6 {
margin-top: 2px !important;
}
.table-settings {
padding-right: 5px;
font-family:"Arial",sans-serif;
font-size: 11px;
margin-bottom: 0px !important;
}
.table-settings p {
margin-bottom: 0px !important;
}
.table-settings TR:nth-child(even) {
background-color: #FAFAFA
}
.table-settings td {
text-align:left;
border-width: 5px;
padding: 5px !important;
border-style: none;
border-color: #F2F2F2;
border-bottom: 1px solid #ddd;
}
.table-header1 td {
background-color: #D0D0D0;
text-align: left;
font-size: 12px;
font-weight: bold;
border-width: 5px;
padding: 5px;
border-style: none;
border-color: #F2F2F2;
}
.category-level1 {
background-color: #E0E0E0;
font-size: 11px;
font-weight: bold;
}
.category-level2 {
background-color: #E0E0E0;
font-size: 11px;
}
.anchor-style {
font-family:"Arial",sans-serif;
font-size: 11px;
}
.anchor-level2 {
}
.table-value {
border: 0px;
width: 100%;
padding: 0px;
font-family:"Arial",sans-serif;
font-size: 11px;
}
.table-value th {
background-color: #F9F9F9;
padding: 0px;
text-align:left;
font-size: 11px;
padding-right: 0px;
padding-top: 3px;
padding-bottom: 3px;
font-weight: normal;
border-width: 0px;
border-style: none;
}
.table-value tr {
background-color: #FFFFFF;
}
.table-value td {
border-bottom: 0;
padding: 1px;
}
.row-new-property {
background-color: #E7E7E7 !important;
}
.description summary {
list-style: none;
cursor: pointer;
}
details.description[open] summary::after {
content: attr(data-open);
}
details.description:not([open]) summary::after {
content: attr(data-close);
}
</style>
+1 -7
View File
@@ -1014,13 +1014,7 @@
"PolicyTypeLanguageId": "vpn", "PolicyTypeLanguageId": "vpn",
"PlatformLanguageId": "Windows10", "PlatformLanguageId": "Windows10",
"Categories": [ "Categories": [
"vpn", "vpn"
"vpnappsandtrafficrules",
"vpnconditionalaccess",
"vpndnstriggers",
"vpnproxy",
"vpnsplittunneling",
"vpntrustednetwork"
] ]
}, },
{ {
@@ -11,7 +11,7 @@
"entityKey": "configureEmail", "entityKey": "configureEmail",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "Inputs.authenticationType", "nameResourceKey": "Inputs.authenticationType",
@@ -19,7 +19,7 @@
"entityKey": "com.microsoft.outlook.EmailProfile.AccountType", "entityKey": "com.microsoft.outlook.EmailProfile.AccountType",
"dataType": 16, "dataType": 16,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"options": [ "options": [
{ {
"nameResourceKey": "Inputs.basicAuth", "nameResourceKey": "Inputs.basicAuth",
@@ -37,7 +37,7 @@
"entityKey": "com.microsoft.outlook.EmailProfile.EmailUPN", "entityKey": "com.microsoft.outlook.EmailProfile.EmailUPN",
"dataType": 16, "dataType": 16,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"options": [ "options": [
{ {
"nameResourceKey": "userPrincipalNameOption", "nameResourceKey": "userPrincipalNameOption",
@@ -58,7 +58,7 @@
"entityKey": "com.microsoft.outlook.EmailProfile.AccountDomain", "entityKey": "com.microsoft.outlook.EmailProfile.AccountDomain",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -74,7 +74,7 @@
"entityKey": "com.microsoft.outlook.EmailProfile.EmailAddress", "entityKey": "com.microsoft.outlook.EmailProfile.EmailAddress",
"dataType": 16, "dataType": 16,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"options": [ "options": [
{ {
"nameResourceKey": "userPrincipalNameOption", "nameResourceKey": "userPrincipalNameOption",
@@ -92,7 +92,7 @@
"entityKey": "com.microsoft.outlook.EmailProfile.ServerHostName", "entityKey": "com.microsoft.outlook.EmailProfile.ServerHostName",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -108,7 +108,7 @@
"entityKey": "com.microsoft.outlook.EmailProfile.EmailAccountName", "entityKey": "com.microsoft.outlook.EmailProfile.EmailAccountName",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -124,7 +124,7 @@
"entityKey": "IntuneMAMAllowedAccountsOnly", "entityKey": "IntuneMAMAllowedAccountsOnly",
"dataType": 16, "dataType": 16,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -158,7 +158,7 @@
"entityKey": "com.microsoft.outlook.Mail.FocusedInbox", "entityKey": "com.microsoft.outlook.Mail.FocusedInbox",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowBiometricsTitle", "nameResourceKey": "OutlookAppConfig.allowBiometricsTitle",
@@ -166,7 +166,7 @@
"entityKey": "com.microsoft.outlook.Auth.Biometric", "entityKey": "com.microsoft.outlook.Auth.Biometric",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowUserChangeTitle", "nameResourceKey": "OutlookAppConfig.allowUserChangeTitle",
@@ -176,7 +176,7 @@
"booleanActions": 109, "booleanActions": 109,
"unconfiguredValue": true, "unconfiguredValue": true,
"allowMissing": true, "allowMissing": true,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -192,7 +192,7 @@
"entityKey": "com.microsoft.outlook.Contacts.LocalSyncEnabled", "entityKey": "com.microsoft.outlook.Contacts.LocalSyncEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowUserChangeTitle", "nameResourceKey": "OutlookAppConfig.allowUserChangeTitle",
@@ -202,7 +202,7 @@
"booleanActions": 109, "booleanActions": 109,
"unconfiguredValue": true, "unconfiguredValue": true,
"allowMissing": true, "allowMissing": true,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -218,7 +218,7 @@
"entityKey": "com.microsoft.outlook.Mail.officeFeedEnabled", "entityKey": "com.microsoft.outlook.Mail.officeFeedEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowSmartReplyTitle", "nameResourceKey": "OutlookAppConfig.allowSmartReplyTitle",
@@ -226,7 +226,7 @@
"entityKey": "com.microsoft.outlook.Mail.SuggestedRepliesEnabled", "entityKey": "com.microsoft.outlook.Mail.SuggestedRepliesEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowUserChangeTitle", "nameResourceKey": "OutlookAppConfig.allowUserChangeTitle",
@@ -234,7 +234,7 @@
"entityKey": "com.microsoft.outlook.Mail.SuggestedRepliesEnabled.UserChangeAllowed", "entityKey": "com.microsoft.outlook.Mail.SuggestedRepliesEnabled.UserChangeAllowed",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103, "category": "TableHeaders.settings",
"unconfiguredValue": true, "unconfiguredValue": true,
"allowMissing": true, "allowMissing": true,
"Condition": { "Condition": {
@@ -252,7 +252,7 @@
"entityKey": "com.microsoft.outlook.Mail.ExternalRecipientsToolTipEnabled", "entityKey": "com.microsoft.outlook.Mail.ExternalRecipientsToolTipEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowDefaultAppSignatureTitle", "nameResourceKey": "OutlookAppConfig.allowDefaultAppSignatureTitle",
@@ -260,7 +260,7 @@
"entityKey": "com.microsoft.outlook.Mail.DefaultSignatureEnabled", "entityKey": "com.microsoft.outlook.Mail.DefaultSignatureEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.blockExternalImagesTitle", "nameResourceKey": "OutlookAppConfig.blockExternalImagesTitle",
@@ -268,7 +268,7 @@
"entityKey": "com.microsoft.outlook.Mail.BlockExternalImagesEnabled", "entityKey": "com.microsoft.outlook.Mail.BlockExternalImagesEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowUserChangeTitle", "nameResourceKey": "OutlookAppConfig.allowUserChangeTitle",
@@ -278,7 +278,7 @@
"booleanActions": 109, "booleanActions": 109,
"unconfiguredValue": true, "unconfiguredValue": true,
"allowMissing": true, "allowMissing": true,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
@@ -294,7 +294,7 @@
"entityKey": "com.microsoft.outlook.Mail.OrganizeByThreadEnabled", "entityKey": "com.microsoft.outlook.Mail.OrganizeByThreadEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.playMyEmailsTitle", "nameResourceKey": "OutlookAppConfig.playMyEmailsTitle",
@@ -302,7 +302,7 @@
"entityKey": "com.microsoft.outlook.Mail.PlayMyEmailsEnabled", "entityKey": "com.microsoft.outlook.Mail.PlayMyEmailsEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.themesEnabledTitle", "nameResourceKey": "OutlookAppConfig.themesEnabledTitle",
@@ -310,7 +310,7 @@
"entityKey": "com.microsoft.outlook.Settings.ThemesEnabled", "entityKey": "com.microsoft.outlook.Settings.ThemesEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.textPredictionsTitle", "nameResourceKey": "OutlookAppConfig.textPredictionsTitle",
@@ -318,7 +318,7 @@
"entityKey": "com.microsoft.outlook.Mail.TextPredictionsEnabled", "entityKey": "com.microsoft.outlook.Mail.TextPredictionsEnabled",
"dataType": 0, "dataType": 0,
"booleanActions": 120, "booleanActions": 120,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "OutlookAppConfig.allowUserChangeTitle", "nameResourceKey": "OutlookAppConfig.allowUserChangeTitle",
@@ -328,7 +328,7 @@
"booleanActions": 109, "booleanActions": 109,
"unconfiguredValue": true, "unconfiguredValue": true,
"allowMissing": true, "allowMissing": true,
"category": 103, "category": "TableHeaders.settings",
"Condition": { "Condition": {
"Expressions": [ "Expressions": [
{ {
+138 -6
View File
@@ -7,6 +7,96 @@
"booleanActions": 0, "booleanActions": 0,
"category": "AppInformationTab.name" "category": "AppInformationTab.name"
}, },
{
"nameResourceKey": "Inputs.packageIdLabel",
"descriptionResourceKey": "",
"entityKey": "packageIdentifier",
"dataType": 20,
"booleanActions": 0,
"category": "AppInformationTab.name",
"Condition": {
"Expressions": [
{
"property": "@OData.Type",
"value": "#microsoft.graph.winGetApp"
}
]
}
},
{
"nameResourceKey": "Inputs.packageIdLabel",
"descriptionResourceKey": "",
"entityKey": "packageIdentifier",
"dataType": 107,
"booleanActions": 0,
"category": "AppInformationTab.name",
"value": "UWP",
"Condition": {
"type": "and",
"Expressions": [
{
"property": "packageIdentifier",
"value": "9*",
"operator": "like"
},
{
"property": "@OData.Type",
"value": "#microsoft.graph.winGetApp"
}
]
}
},
{
"nameResourceKey": "Inputs.packageIdLabel",
"descriptionResourceKey": "",
"entityKey": "packageIdentifier",
"dataType": 107,
"booleanActions": 0,
"category": "AppInformationTab.name",
"value": "Win32",
"Condition": {
"type": "and",
"Expressions": [
{
"property": "packageIdentifier",
"value": "X*",
"operator": "like"
},
{
"property": "@OData.Type",
"value": "#microsoft.graph.winGetApp"
}
]
}
},
{
"nameResourceKey": "Inputs.packageIdLabel",
"descriptionResourceKey": "",
"entityKey": "packageIdentifier",
"dataType": 107,
"booleanActions": 0,
"category": "AppInformationTab.name",
"value": "Unsupported Store Type",
"Condition": {
"type": "and",
"Expressions": [
{
"property": "packageIdentifier",
"value": "9*",
"operator": "notlike"
},
{
"property": "packageIdentifier",
"value": "X*",
"operator": "notlike"
},
{
"property": "@OData.Type",
"value": "#microsoft.graph.winGetApp"
}
]
}
},
{ {
"nameResourceKey": "Inputs.displayVersionLabel", "nameResourceKey": "Inputs.displayVersionLabel",
"descriptionResourceKey": "", "descriptionResourceKey": "",
@@ -836,10 +926,24 @@
] ]
}, },
{ {
"Columns": [
{
"metadata": {
"entityKey": "returnCode",
"nameResourceKey": "Win32ReturnCodes.Columns.returnCode"
}
},
{
"metadata": {
"entityKey": "type",
"nameResourceKey": "Win32ReturnCodes.Columns.codeType"
}
}
],
"nameResourceKey": "Win32ReturnCodes.selectorLabel", "nameResourceKey": "Win32ReturnCodes.selectorLabel",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "returnCodes", "entityKey": "returnCodes",
"dataType": 20, "dataType": 21,
"booleanActions": 0, "booleanActions": 0,
"category": "Win32Program.selectorLabel" "category": "Win32Program.selectorLabel"
}, },
@@ -892,10 +996,24 @@
"category": "Win32Requirements.selectorLabel" "category": "Win32Requirements.selectorLabel"
}, },
{ {
"Columns": [
{
"metadata": {
"entityKey": "property",
"nameResourceKey": "ApplicabilityRules.GridLabel.property"
}
},
{
"metadata": {
"entityKey": "value",
"nameResourceKey": "ApplicabilityRules.GridLabel.value"
}
}
],
"nameResourceKey": "Win32Requirements.AdditionalRequirements.label", "nameResourceKey": "Win32Requirements.AdditionalRequirements.label",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "requirementRulesSummary", "entityKey": "requirementRulesTranslated",
"dataType": 20, "dataType": 21,
"booleanActions": 0, "booleanActions": 0,
"category": "Win32Requirements.selectorLabel" "category": "Win32Requirements.selectorLabel"
}, },
@@ -908,10 +1026,24 @@
"category": "DetectionRules.selectorLabel" "category": "DetectionRules.selectorLabel"
}, },
{ {
"Columns": [
{
"metadata": {
"entityKey": "property",
"nameResourceKey": "ApplicabilityRules.GridLabel.property"
}
},
{
"metadata": {
"entityKey": "value",
"nameResourceKey": "ApplicabilityRules.GridLabel.value"
}
}
],
"nameResourceKey": "DetectionRules.selectorLabel", "nameResourceKey": "DetectionRules.selectorLabel",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "detectionRulesSummary", "entityKey": "detectionRulesTranslated",
"dataType": 20, "dataType": 21,
"booleanActions": 0, "booleanActions": 0,
"category": "DetectionRules.selectorLabel", "category": "DetectionRules.selectorLabel",
"Condition": { "Condition": {
@@ -923,7 +1055,7 @@
} }
] ]
} }
}, },
{ {
"nameResourceKey": "", "nameResourceKey": "",
"descriptionResourceKey": "", "descriptionResourceKey": "",
+48 -26
View File
@@ -80,7 +80,7 @@
"value": "azureAD" "value": "azureAD"
} }
] ]
} }
] ]
}, },
{ {
@@ -99,40 +99,62 @@
} }
] ]
} }
}, },
{ {
"nameResourceKey": "Autopilot.OOBE.language", "nameResourceKey": "Autopilot.OOBE.language",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"dataType": 102, "dataType": 102,
"category": "Autopilot.OOBE.title", "category": "Autopilot.OOBE.title",
"entityKey": "language", "entityKey": "language",
"booleanActions": 0 "booleanActions": 0,
}, "ChildSettings": [
{
"nameResourceKey": "Autopilot.OOBE.title",
"descriptionResourceKey": "",
"entityKey": "outOfBoxExperienceSettings",
"dataType": 6,
"booleanActions": 0,
"category": "Autopilot.OOBE.title",
"Condition": {
"Expressions": [
{
"property": "language",
"operator": "ne",
"value": "user-select"
}
]
},
"complexOptions": [
{
"nameResourceKey": "Autopilot.OOBE.skipKeyboardSelection",
"descriptionResourceKey": "Autopilot.OOBE.skipKeyboardSelectionInfo",
"entityKey": "skipKeyboardSelectionPage",
"dataType": 0,
"booleanActions": 109,
"category": "Autopilot.OOBE.title",
"Condition": {
"type": "or",
"Expressions": [
{
"property": "isLanguageSet",
"value": true
}
]
}
}
]
}
]
},
{ {
"nameResourceKey": "Autopilot.OOBE.title", "nameResourceKey": "Autopilot.OOBE.title",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "outOfBoxExperienceSettings", "entityKey": "outOfBoxExperienceSettings",
"dataType": 6, "dataType": 6,
"skipAddLevel": true,
"booleanActions": 0, "booleanActions": 0,
"category": "Autopilot.OOBE.title", "category": "Autopilot.OOBE.title",
"complexOptions": [ "complexOptions": [
{
"nameResourceKey": "Autopilot.OOBE.skipKeyboardSelection",
"descriptionResourceKey": "Autopilot.OOBE.skipKeyboardSelectionInfo",
"entityKey": "skipKeyboardSelectionPage",
"dataType": 0,
"booleanActions": 109,
"category": "Autopilot.OOBE.title",
"Condition": {
"type": "or",
"Expressions": [
{
"property": "isLanguageSet",
"value": true
}
]
}
},
{ {
"nameResourceKey": "Autopilot.OOBE.licenseAgreement", "nameResourceKey": "Autopilot.OOBE.licenseAgreement",
"descriptionResourceKey": "Autopilot.OOBE.licenseAgreementInfo", "descriptionResourceKey": "Autopilot.OOBE.licenseAgreementInfo",
@@ -148,7 +170,7 @@
"dataType": 0, "dataType": 0,
"booleanActions": 108, "booleanActions": 108,
"category": "Autopilot.OOBE.title" "category": "Autopilot.OOBE.title"
}, },
{ {
"nameResourceKey": "Autopilot.OOBE.hideEscapeLink", "nameResourceKey": "Autopilot.OOBE.hideEscapeLink",
"descriptionResourceKey": "Autopilot.OOBE.hideEscapeLinkInfo", "descriptionResourceKey": "Autopilot.OOBE.hideEscapeLinkInfo",
@@ -174,7 +196,7 @@
"value": "administrator" "value": "administrator"
} }
] ]
} }
] ]
}, },
{ {
@@ -184,12 +206,12 @@
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": "Autopilot.OOBE.title" "category": "Autopilot.OOBE.title"
}, },
{ {
"nameResourceKey": "Autopilot.OOBE.ApplyComputerNameTemplate.label", "nameResourceKey": "Autopilot.OOBE.ApplyComputerNameTemplate.label",
"descriptionResourceKey": "Autopilot.OOBE.ApplyComputerNameTemplate.infoBalloon", "descriptionResourceKey": "Autopilot.OOBE.ApplyComputerNameTemplate.infoBalloon",
"entityKey": "applyDeviceNameTemplate", "entityKey": "applyDeviceNameTemplate",
"dataType": 103, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": "Autopilot.OOBE.title", "category": "Autopilot.OOBE.title",
"ChildSettings": [ "ChildSettings": [
@@ -5,7 +5,7 @@
"entityKey": "versionInfo", "entityKey": "versionInfo",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "SoftwareUpdates.IosUpdatePolicy.Settings.Schedule.label", "nameResourceKey": "SoftwareUpdates.IosUpdatePolicy.Settings.Schedule.label",
@@ -13,7 +13,7 @@
"entityKey": "updateScheduleType", "entityKey": "updateScheduleType",
"dataType": 16, "dataType": 16,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"options": [ "options": [
{ {
"nameResourceKey": "SoftwareUpdates.IosUpdatePolicy.Settings.Schedule.outsideActiveHours", "nameResourceKey": "SoftwareUpdates.IosUpdatePolicy.Settings.Schedule.outsideActiveHours",
@@ -39,7 +39,7 @@
}, },
{ {
"dataType": 16, "dataType": 16,
"category": 103, "category": "TableHeaders.settings",
"nameResourceKey": "timeZoneName", "nameResourceKey": "timeZoneName",
"descriptionResourceKey": "timeZoneDescription", "descriptionResourceKey": "timeZoneDescription",
"childSettings": [ "childSettings": [
@@ -249,6 +249,6 @@
"entityKey": "timeWidows", "entityKey": "timeWidows",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103 "category": "TableHeaders.settings"
} }
] ]
@@ -13,7 +13,7 @@
"entityKey": "showInstallationProgress", "entityKey": "showInstallationProgress",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.timeout", "nameResourceKey": "EnrollmentStatusScreen.timeout",
@@ -21,7 +21,7 @@
"entityKey": "installProgressTimeoutInMinutes", "entityKey": "installProgressTimeoutInMinutes",
"dataType": 14, "dataType": 14,
"booleanActions": 0, "booleanActions": 0,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.customMessageToggle", "nameResourceKey": "EnrollmentStatusScreen.customMessageToggle",
@@ -29,7 +29,7 @@
"entityKey": "showCustomErrorMessage", "entityKey": "showCustomErrorMessage",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.customMessageTextBox", "nameResourceKey": "EnrollmentStatusScreen.customMessageTextBox",
@@ -37,7 +37,7 @@
"entityKey": "customErrorMessage", "entityKey": "customErrorMessage",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.collectLogToggle", "nameResourceKey": "EnrollmentStatusScreen.collectLogToggle",
@@ -45,7 +45,7 @@
"entityKey": "allowLogCollectionOnInstallFailure", "entityKey": "allowLogCollectionOnInstallFailure",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.enableForAutopilotOnlyToggle", "nameResourceKey": "EnrollmentStatusScreen.enableForAutopilotOnlyToggle",
@@ -53,7 +53,7 @@
"entityKey": "trackInstallProgressForAutopilotOnly", "entityKey": "trackInstallProgressForAutopilotOnly",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.blockToggle", "nameResourceKey": "EnrollmentStatusScreen.blockToggle",
@@ -61,7 +61,7 @@
"entityKey": "blockDeviceSetupRetryByUser", "entityKey": "blockDeviceSetupRetryByUser",
"dataType": 16, "dataType": 16,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"options": [ "options": [
{ {
"nameResourceKey": "SettingDetails.no", "nameResourceKey": "SettingDetails.no",
@@ -77,7 +77,7 @@
"entityKey": "allowDeviceResetOnInstallFailure", "entityKey": "allowDeviceResetOnInstallFailure",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.allowToUseToggle", "nameResourceKey": "EnrollmentStatusScreen.allowToUseToggle",
@@ -85,7 +85,7 @@
"entityKey": "allowDeviceUseOnInstallFailure", "entityKey": "allowDeviceUseOnInstallFailure",
"dataType": 0, "dataType": 0,
"booleanActions": 109, "booleanActions": 109,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "EnrollmentStatusScreen.Apps.useSelectedAppsToggleLabel", "nameResourceKey": "EnrollmentStatusScreen.Apps.useSelectedAppsToggleLabel",
@@ -93,7 +93,7 @@
"entityKey": "waitForApps", "entityKey": "waitForApps",
"dataType": 14, "dataType": 14,
"booleanActions": 0, "booleanActions": 0,
"category": 103 "category": "TableHeaders.settings"
} }
] ]
} }
@@ -13,7 +13,7 @@
"entityKey": "deployableContentDisplayName", "entityKey": "deployableContentDisplayName",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": 103 "category": "TableHeaders.settings"
}, },
{ {
"nameResourceKey": "WindowsQualityUpdateProfile.Details.DaysUntilForcedReboot.label", "nameResourceKey": "WindowsQualityUpdateProfile.Details.DaysUntilForcedReboot.label",
@@ -21,13 +21,13 @@
"entityKey": "expeditedUpdateSettings", "entityKey": "expeditedUpdateSettings",
"dataType": 6, "dataType": 6,
"booleanActions": 0, "booleanActions": 0,
"category": 103, "category": "TableHeaders.settings",
"complexOptions": [ "complexOptions": [
{ {
"nameResourceKey": "WindowsQualityUpdateProfile.Details.DaysUntilForcedReboot.label", "nameResourceKey": "WindowsQualityUpdateProfile.Details.DaysUntilForcedReboot.label",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"dataType": 16, "dataType": 16,
"category": 103, "category": "TableHeaders.settings",
"entityKey": "daysUntilForcedReboot", "entityKey": "daysUntilForcedReboot",
"booleanActions": 0, "booleanActions": 0,
"options": [ "options": [
@@ -44,7 +44,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 108, "policyType": 108,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -1,815 +0,0 @@
{
"devicefirmwareconfigurationinterface_windows10devicefirmwareconfigurationinterface": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 136,
"nameResourceKey": "dfciHeaderName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 136,
"nameResourceKey": "securityFeaturesName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "changeUefiSettingsPermissionName",
"descriptionResourceKey": "changeUefiSettingsPermissionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfiguredOnly",
"value": "notConfiguredOnly",
"enabled": true
},
{
"nameResourceKey": "none",
"value": "none",
"enabled": true
}
],
"entityKey": "changeUefiSettingsPermission",
"booleanActions": 0,
"defaultValue": "notConfiguredOnly",
"unconfiguredValue": "notConfiguredOnly",
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "virtualizationOfCpuAndIOName",
"descriptionResourceKey": "virtualizationOfCpuAndIODescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "virtualizationOfCpuAndIO",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "windowsPlatformBinaryTableName",
"descriptionResourceKey": "windowsPlatformBinaryTableDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "windowsPlatformBinaryTable",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "simultaneousMultiThreadingName",
"descriptionResourceKey": "simultaneousMultiThreadingDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "simultaneousMultiThreading",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 136,
"nameResourceKey": "builtInHardwareName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 136,
"nameResourceKey": "dfciBuiltinHeaderDescName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "camerasName",
"descriptionResourceKey": "camerasDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "cameras",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "frontCamerasName",
"descriptionResourceKey": "frontCamerasDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "frontCamera",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "rearCamerasName",
"descriptionResourceKey": "rearCamerasDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "rearCamera",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "infraredCamerasName",
"descriptionResourceKey": "infraredCamerasDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "infraredCamera",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "microphonesAndSpeakersName",
"descriptionResourceKey": "microphonesAndSpeakersDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "microphonesAndSpeakers",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "microphonesName",
"descriptionResourceKey": "microphonesDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "microphone",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "radiosName",
"descriptionResourceKey": "radiosDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"children": [
{
"dataType": 10,
"category": 136,
"nameResourceKey": "radioWarningInfoBox",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "radios",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "bluetoothName",
"descriptionResourceKey": "bluetoothDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "bluetooth",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "wwanName",
"descriptionResourceKey": "wwanDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "wirelessWideAreaNetwork",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "nfcName",
"descriptionResourceKey": "nfcDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "nearFieldCommunication",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "wifiName",
"descriptionResourceKey": "wifiDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "wiFi",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 136,
"nameResourceKey": "bootOptionsName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "bootFromExternalMediaName",
"descriptionResourceKey": "bootFromExternalMediaDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "bootFromExternalMedia",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": true
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "bootFromBuiltInNetworkAdaptersName",
"descriptionResourceKey": "bootFromBuiltInNetworkAdaptersDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "bootFromBuiltInNetworkAdapters",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 136,
"nameResourceKey": "portName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "usbTypeAPortName",
"descriptionResourceKey": "usbTypeAPortDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "usbTypeAPort",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "usbTypeCPortName",
"descriptionResourceKey": "usbTypeCPortDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "usbTypeCPort",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "sdCardName",
"descriptionResourceKey": "sdCardDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "sdCard",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "wakeOnLANName",
"descriptionResourceKey": "wakeOnLANDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "wakeOnLAN",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{
"dataType": 16,
"category": 136,
"nameResourceKey": "wakeOnPowerName",
"descriptionResourceKey": "wakeOnPowerDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enabledOption",
"value": "enabled",
"enabled": true
},
{
"nameResourceKey": "disabledOption",
"value": "disabled",
"enabled": true
}
],
"entityKey": "wakeOnPower",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
}
]
}
@@ -1078,6 +1078,40 @@
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
}, },
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 44,
"nameResourceKey": "fullyManagedAndCorporateOwnedWorkProfileAndroidEnrollmentTypesHeaderName",
"descriptionResourceKey": "fullyManagedAndCorporateOwnedWorkProfileAndroidEnrollmentTypesHeaderDescription",
"childSettings": [
{
"dataType": 0,
"category": 44,
"nameResourceKey": "androidDeviceOwnerLocateDeviceName",
"descriptionResourceKey": "androidDeviceOwnerLocateDeviceLostModeEnabledDescription",
"childSettings": [
],
"options": [
],
"entityKey": "locateDeviceLostModeEnabled",
"booleanActions": 0,
"defaultValue": false,
"unconfiguredValue": false,
"policyType": 2,
"enabled": false
}
],
"options": [
],
"booleanActions": 0,
"policyType": 2,
"enabled": true
},
{ {
"isSettingDescription": false, "isSettingDescription": false,
"showAsSectionHeader": true, "showAsSectionHeader": true,
@@ -1200,6 +1234,24 @@
"defaultValue": false, "defaultValue": false,
"policyType": 2, "policyType": 2,
"enabled": false "enabled": false
},
{
"dataType": 0,
"category": 44,
"nameResourceKey": "androidDeviceOwnerLocateDeviceName",
"descriptionResourceKey": "androidDeviceOwnerLocateDeviceUserlessDisabledDescription",
"childSettings": [
],
"options": [
],
"entityKey": "locateDeviceUserlessDisabled",
"booleanActions": 3,
"defaultValue": false,
"unconfiguredValue": false,
"policyType": 2,
"enabled": false
} }
], ],
"options": [ "options": [
@@ -617,6 +617,23 @@
"defaultValue": false, "defaultValue": false,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
},
{
"dataType": 0,
"category": 44,
"nameResourceKey": "allowActivationLockWhenSupervisedName",
"descriptionResourceKey": "allowActivationLockWhenSupervisedDescription",
"childSettings": [
],
"options": [
],
"entityKey": "activationLockWhenSupervisedAllowed",
"booleanActions": 9,
"defaultValue": false,
"policyType": 61,
"enabled": true
} }
], ],
"options": [ "options": [
@@ -33,20 +33,47 @@
"enabled": true "enabled": true
}, },
{ {
"dataType": 14, "dataType": 10,
"category": 90, "category": 90,
"nameResourceKey": "minimumPasswordLengthName", "nameResourceKey": "androidTwelveDeprecationInfoBox",
"descriptionResourceKey": "minimumPasswordLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [ "childSettings": [
], ],
"options": [ "options": [
], ],
"entityKey": "passwordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 4, "policyType": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 90,
"nameResourceKey": "allAndroidVersionsPasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 90,
"nameResourceKey": "allAndroidVersionsPasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 13, "policyType": 13,
"enabled": true "enabled": true
}, },
@@ -153,64 +180,6 @@
"policyType": 13, "policyType": 13,
"enabled": true "enabled": true
}, },
{
"dataType": 16,
"category": 90,
"nameResourceKey": "requiredPasswordTypeName",
"descriptionResourceKey": "requiredPasswordTypeDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueKey",
"childSettings": [
],
"options": [
{
"nameResourceKey": "deviceDefault",
"value": "deviceDefault",
"enabled": true
},
{
"nameResourceKey": "lowSecurityBiometricOption",
"value": "lowSecurityBiometric",
"enabled": true
},
{
"nameResourceKey": "required",
"value": "required",
"enabled": true
},
{
"nameResourceKey": "atLeastNumericOption",
"value": "atLeastNumeric",
"enabled": true
},
{
"nameResourceKey": "numericComplex",
"value": "numericComplex",
"enabled": true
},
{
"nameResourceKey": "atLeastAlphabeticOption",
"value": "atLeastAlphabetic",
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericOption",
"value": "atLeastAlphanumeric",
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericWithSymbolsOption",
"value": "alphanumericWithSymbols",
"enabled": true
}
],
"entityKey": "passwordRequiredType",
"booleanActions": 0,
"defaultValue": "atLeastNumeric",
"unconfiguredValue": "atLeastNumeric",
"policyType": 13,
"enabled": true
},
{ {
"dataType": 14, "dataType": 14,
"category": 90, "category": 90,
@@ -296,6 +265,181 @@
"defaultValue": false, "defaultValue": false,
"policyType": 13, "policyType": 13,
"enabled": true "enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 90,
"nameResourceKey": "androidTwelveAndAbovePasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 90,
"nameResourceKey": "androidTwelveAndAbovePasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"dataType": 16,
"category": 90,
"nameResourceKey": "requiredPasswordComplexityName",
"descriptionResourceKey": "requiredPasswordComplexityDescription",
"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": "requiredPasswordComplexity",
"booleanActions": 0,
"defaultValue": "none",
"unconfiguredValue": "none",
"policyType": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 90,
"nameResourceKey": "androidElevenAndBelowPasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 90,
"nameResourceKey": "androidElevenAndBelowPasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"dataType": 16,
"category": 90,
"nameResourceKey": "requiredPasswordTypeName",
"descriptionResourceKey": "requiredPasswordTypeDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueKey",
"childSettings": [
],
"options": [
{
"nameResourceKey": "deviceDefault",
"value": "deviceDefault",
"enabled": true
},
{
"nameResourceKey": "lowSecurityBiometricOption",
"value": "lowSecurityBiometric",
"enabled": true
},
{
"nameResourceKey": "required",
"value": "required",
"enabled": true
},
{
"nameResourceKey": "atLeastNumericOption",
"value": "atLeastNumeric",
"enabled": true
},
{
"nameResourceKey": "numericComplex",
"value": "numericComplex",
"enabled": true
},
{
"nameResourceKey": "atLeastAlphabeticOption",
"value": "atLeastAlphabetic",
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericOption",
"value": "atLeastAlphanumeric",
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericWithSymbolsOption",
"value": "alphanumericWithSymbols",
"enabled": true
}
],
"entityKey": "passwordRequiredType",
"booleanActions": 0,
"defaultValue": "atLeastNumeric",
"unconfiguredValue": "atLeastNumeric",
"policyType": 13,
"enabled": true
},
{
"dataType": 14,
"category": 90,
"nameResourceKey": "minimumPasswordLengthName",
"descriptionResourceKey": "minimumPasswordLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"defaultValue": 4,
"policyType": 13,
"enabled": true
} }
] ]
} }
@@ -14,7 +14,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"isSettingDescription": false, "isSettingDescription": false,
@@ -30,7 +30,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"isSettingDescription": false, "isSettingDescription": false,
@@ -46,7 +46,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"isSettingDescription": false, "isSettingDescription": false,
@@ -62,7 +62,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -87,7 +87,7 @@
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -112,7 +112,7 @@
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -137,7 +137,7 @@
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -162,7 +162,7 @@
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"isSettingDescription": false, "isSettingDescription": false,
@@ -178,7 +178,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"isSettingDescription": false, "isSettingDescription": false,
@@ -194,7 +194,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -226,7 +226,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -432,7 +432,7 @@
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 0, "defaultValue": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"columns": [ "columns": [
@@ -484,7 +484,7 @@
"entityKey": "startDay", "entityKey": "startDay",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
}, },
{ {
@@ -620,7 +620,7 @@
"entityKey": "startTime", "entityKey": "startTime",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
}, },
{ {
@@ -671,7 +671,7 @@
"entityKey": "endDay", "entityKey": "endDay",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
}, },
{ {
@@ -808,7 +808,7 @@
"entityKey": "endTime", "entityKey": "endTime",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
} }
], ],
@@ -825,7 +825,7 @@
"entityKey": "customUpdateTimeWindows", "entityKey": "customUpdateTimeWindows",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
], ],
"enabled": true "enabled": true
@@ -846,7 +846,7 @@
], ],
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"dataType": 16, "dataType": 16,
@@ -1052,7 +1052,7 @@
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 0, "defaultValue": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
}, },
{ {
"columns": [ "columns": [
@@ -1104,7 +1104,7 @@
"entityKey": "startDay", "entityKey": "startDay",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
}, },
{ {
@@ -1240,7 +1240,7 @@
"entityKey": "startTime", "entityKey": "startTime",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
}, },
{ {
@@ -1291,7 +1291,7 @@
"entityKey": "endDay", "entityKey": "endDay",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
}, },
{ {
@@ -1428,7 +1428,7 @@
"entityKey": "endTime", "entityKey": "endTime",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
} }
], ],
@@ -1445,7 +1445,7 @@
"entityKey": "customUpdateTimeWindows", "entityKey": "customUpdateTimeWindows",
"booleanActions": 0, "booleanActions": 0,
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
], ],
"enabled": true "enabled": true
@@ -1456,7 +1456,7 @@
"defaultValue": "alwaysUpdate", "defaultValue": "alwaysUpdate",
"unconfiguredValue": "alwaysUpdate", "unconfiguredValue": "alwaysUpdate",
"policyType": 69, "policyType": 69,
"enabled": false "enabled": true
} }
] ]
} }
@@ -1,451 +1,5 @@
{ {
"systemsecurity_complianceandroidforwork": [ "systemsecurity_complianceandroidforwork": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 113,
"nameResourceKey": "androidPasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 113,
"nameResourceKey": "learnMore",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 0,
"category": 113,
"nameResourceKey": "compliancePasswordRequirementName",
"descriptionResourceKey": "compliancePasswordRequirementDescription",
"childSettings": [
{
"dataType": 16,
"category": 113,
"nameResourceKey": "requiredPasswordTypeName",
"descriptionResourceKey": "complianceRequiredPasswordTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "selectTypeOption",
"enabled": true
},
{
"nameResourceKey": "deviceDefault",
"value": "deviceDefault",
"enabled": true
},
{
"nameResourceKey": "lowSecurityBiometricOption",
"value": "lowSecurityBiometric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastNumericOption",
"value": "numeric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "numericComplex",
"value": "numericComplex",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphabeticOption",
"value": "alphabetic",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericOption",
"value": "alphanumeric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericWithSymbolsOption",
"value": "alphanumericWithSymbols",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "passwordExpirationName",
"descriptionResourceKey": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "passwordRequiredType",
"booleanActions": 0,
"defaultValue": "deviceDefault",
"unconfiguredValue": "deviceDefault",
"policyType": 30,
"enabled": true
}
],
"options": [
],
"entityKey": "passwordRequired",
"booleanActions": 1,
"defaultValue": false,
"policyType": 30,
"enabled": true
},
{
"dataType": 16,
"category": 113,
"nameResourceKey": "complianceMinutesOfInactivityBeforePasswordRequiredName",
"descriptionResourceKey": "complianceMinutesOfInactivityBeforePasswordRequiredDescription",
"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": "passwordMinutesOfInactivityBeforeLock",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{ {
"isSettingDescription": false, "isSettingDescription": false,
"showAsSectionHeader": false, "showAsSectionHeader": false,
@@ -576,6 +130,410 @@
"booleanActions": 0, "booleanActions": 0,
"policyType": 30, "policyType": 30,
"enabled": true "enabled": true
},
{
"dataType": 0,
"category": 113,
"nameResourceKey": "compliancePasswordRequirementName",
"descriptionResourceKey": "compliancePasswordRequirementDescription",
"childSettings": [
{
"dataType": 10,
"category": 113,
"nameResourceKey": "androidTwelveDeprecationInfoBox",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"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": "passwordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueOneYearKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordExpirationDays",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "numberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0,
"policyType": 30,
"enabled": true
},
{
"dataType": 16,
"category": 113,
"nameResourceKey": "complianceMinutesOfInactivityBeforePasswordRequiredName",
"descriptionResourceKey": "complianceMinutesOfInactivityBeforePasswordRequiredDescription",
"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": "passwordMinutesOfInactivityBeforeLock",
"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",
"descriptionResourceKey": "requiredPasswordComplexityDescription",
"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": "requiredPasswordComplexity",
"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": "requiredPasswordTypeName",
"descriptionResourceKey": "complianceRequiredPasswordTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "selectTypeOption",
"enabled": true
},
{
"nameResourceKey": "deviceDefault",
"value": "deviceDefault",
"enabled": true
},
{
"nameResourceKey": "lowSecurityBiometricOption",
"value": "lowSecurityBiometric",
"enabled": true
},
{
"nameResourceKey": "atLeastNumericOption",
"value": "numeric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "numericComplex",
"value": "numericComplex",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphabeticOption",
"value": "alphabetic",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericOption",
"value": "alphanumeric",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "atLeastAlphanumericWithSymbolsOption",
"value": "alphanumericWithSymbols",
"children": [
{
"dataType": 14,
"category": 113,
"nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "passwordMinimumLengthDescription",
"emptyValueResourceKey": "minimumPasswordLengthEmptyValueKeyFourToSixteen",
"childSettings": [
],
"options": [
],
"entityKey": "passwordMinimumLength",
"booleanActions": 0,
"policyType": 30,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "passwordRequiredType",
"booleanActions": 0,
"defaultValue": "deviceDefault",
"unconfiguredValue": "deviceDefault",
"policyType": 30,
"enabled": true
}
],
"options": [
],
"entityKey": "passwordRequired",
"booleanActions": 1,
"defaultValue": false,
"policyType": 30,
"enabled": true
} }
] ]
} }
@@ -1707,303 +1707,6 @@
} }
], ],
"enabled": true "enabled": true
},
{
"nameResourceKey": "microsoftTunnelOption",
"value": "microsoftTunnel",
"children": [
{
"complexOptions": [
{
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyConnectionName",
"descriptionResourceKey": "vPNPolicyConnectionDescription",
"emptyValueResourceKey": "vPNConnectionExample",
"childSettings": [
],
"options": [
],
"entityKey": "connectionName",
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 26,
"category": 129,
"nameResourceKey": "changeMicrosoftTunnelSite",
"descriptionResourceKey": "microsoftTunnelSite",
"emptyValueResourceKey": "selectMicrosoftTunnelSite",
"childSettings": [
],
"options": [
],
"entityKey": "microsoftTunnelSiteId",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "microsoftTunnelSite",
"descriptionResourceKey": "microsoftTunnelSiteDescription",
"emptyValueResourceKey": "selectMicrosoftTunnelSite",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpn",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"complexOptions": [
{
"isSettingDescription": true,
"showAsSectionHeader": false,
"dataType": 8,
"category": 129,
"nameResourceKey": "vPNAppsName",
"descriptionResourceKey": "vPNAppsDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 129,
"nameResourceKey": "appId",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "appId",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 129,
"nameResourceKey": "appNameName",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
}
],
"dataType": 21,
"category": 129,
"nameResourceKey": "Empty",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "targetedMobileApps",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpnPerApp",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 0,
"category": 129,
"nameResourceKey": "androidPersonalWorkProfileAlwaysOnVpnEnabledName",
"descriptionResourceKey": "androidEnterpriseWorkProfileAlwaysOnVpnEnabledDescription",
"childSettings": [
],
"options": [
],
"entityKey": "alwaysOn",
"booleanActions": 2,
"defaultValue": false,
"policyType": 8,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpnAlwaysOn",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"complexOptions": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 129,
"nameResourceKey": "vPNPolicyUseProxyServerName",
"descriptionResourceKey": "vPNPolicyUseProxyServerDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyAutomaticConfigurationScriptName",
"descriptionResourceKey": "vPNPolicyAutomaticConfigurationScriptDescription",
"emptyValueResourceKey": "vPNScriptExample",
"childSettings": [
],
"options": [
],
"entityKey": "automaticConfigurationScriptUrl",
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyAddressName",
"descriptionResourceKey": "vPNPolicyAddressDescription",
"emptyValueResourceKey": "vPNAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "address",
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 14,
"category": 129,
"nameResourceKey": "vPNPolicyPortNumberName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "port",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"dataType": 6,
"category": 129,
"nameResourceKey": "vPNPolicyUseProxyServerName",
"descriptionResourceKey": "vPNPolicyUseProxyServerDescription",
"childSettings": [
],
"options": [
],
"entityKey": "proxyServer",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpnProxy",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"enabled": false
} }
], ],
"entityKey": "connectionType", "entityKey": "connectionType",
@@ -1683,303 +1683,6 @@
} }
], ],
"enabled": true "enabled": true
},
{
"nameResourceKey": "microsoftTunnelOption",
"value": "microsoftTunnel",
"children": [
{
"complexOptions": [
{
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyConnectionName",
"descriptionResourceKey": "vPNPolicyConnectionDescription",
"emptyValueResourceKey": "vPNConnectionExample",
"childSettings": [
],
"options": [
],
"entityKey": "connectionName",
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 26,
"category": 129,
"nameResourceKey": "changeMicrosoftTunnelSite",
"descriptionResourceKey": "microsoftTunnelSite",
"emptyValueResourceKey": "selectMicrosoftTunnelSite",
"childSettings": [
],
"options": [
],
"entityKey": "microsoftTunnelSiteId",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "microsoftTunnelSite",
"descriptionResourceKey": "microsoftTunnelSiteDescription",
"emptyValueResourceKey": "selectMicrosoftTunnelSite",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpn",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"complexOptions": [
{
"isSettingDescription": true,
"showAsSectionHeader": false,
"dataType": 8,
"category": 129,
"nameResourceKey": "vPNAppsName",
"descriptionResourceKey": "vPNAppsDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 129,
"nameResourceKey": "appId",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "appId",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 129,
"nameResourceKey": "appNameName",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
}
],
"dataType": 21,
"category": 129,
"nameResourceKey": "Empty",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "targetedMobileApps",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpnPerApp",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 0,
"category": 129,
"nameResourceKey": "androidPersonalWorkProfileAlwaysOnVpnEnabledName",
"descriptionResourceKey": "androidEnterpriseWorkProfileAlwaysOnVpnEnabledDescription",
"childSettings": [
],
"options": [
],
"entityKey": "alwaysOn",
"booleanActions": 2,
"defaultValue": false,
"policyType": 12,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpnAlwaysOn",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"complexOptions": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 129,
"nameResourceKey": "vPNPolicyUseProxyServerName",
"descriptionResourceKey": "vPNPolicyUseProxyServerDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyAutomaticConfigurationScriptName",
"descriptionResourceKey": "vPNPolicyAutomaticConfigurationScriptDescription",
"emptyValueResourceKey": "vPNScriptExample",
"childSettings": [
],
"options": [
],
"entityKey": "automaticConfigurationScriptUrl",
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyAddressName",
"descriptionResourceKey": "vPNPolicyAddressDescription",
"emptyValueResourceKey": "vPNAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "address",
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 14,
"category": 129,
"nameResourceKey": "vPNPolicyPortNumberName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "port",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"dataType": 6,
"category": 129,
"nameResourceKey": "vPNPolicyUseProxyServerName",
"descriptionResourceKey": "vPNPolicyUseProxyServerDescription",
"childSettings": [
],
"options": [
],
"entityKey": "proxyServer",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"dataType": 5,
"category": 129,
"nameResourceKey": "vpnProxy",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false
} }
], ],
"entityKey": "connectionType", "entityKey": "connectionType",
@@ -559,6 +559,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -2276,6 +2304,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -3993,6 +4049,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -5710,6 +5794,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -7915,6 +8027,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -9632,6 +9772,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -11349,6 +11517,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -13051,6 +13247,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -15141,6 +15365,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -16843,6 +17095,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -18545,6 +18825,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -20289,6 +20597,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -22006,6 +22342,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -23723,6 +24087,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -25440,6 +25832,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -27645,6 +28065,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -29362,6 +29810,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -31079,6 +31555,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -32781,6 +33285,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -34871,6 +35403,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -36573,6 +37133,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -38275,6 +38863,34 @@
"enabled": true "enabled": true
} }
}, },
{
"metadata": {
"dataType": 16,
"category": 129,
"nameResourceKey": "trafficRuleDirectionName",
"descriptionResourceKey": "trafficRuleDirectionDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "outboundOption",
"value": "outbound",
"enabled": true
},
{
"nameResourceKey": "inboundOption",
"value": "inbound",
"enabled": true
}
],
"entityKey": "vpnTrafficDirection",
"booleanActions": 0,
"defaultValue": "outbound",
"policyType": 89,
"enabled": false
}
},
{ {
"metadata": { "metadata": {
"dataType": 14, "dataType": 14,
@@ -1,509 +0,0 @@
{
"vpnappsandtrafficrules_windows10vpn": [
{
"dataType": 16,
"category": 124,
"nameResourceKey": "vPNWipOrAppsName",
"descriptionResourceKey": "vPNWipOrAppsDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": 0,
"enabled": true
},
{
"nameResourceKey": "wipOption",
"value": 1,
"children": [
{
"dataType": 20,
"category": 124,
"nameResourceKey": "wipName",
"descriptionResourceKey": "wipDescription",
"childSettings": [
],
"options": [
],
"entityKey": "windowsInformationProtectionDomain",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "associateAppsOption",
"value": 2,
"children": [
{
"dataType": 19,
"category": 124,
"nameResourceKey": "vPNPolicyOnlyTheseAppsCanUseVPNName",
"descriptionResourceKey": "vPNPolicyOnlyTheseAppsCanUseVPNDescription",
"childSettings": [
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "appIdentifierName",
"descriptionResourceKey": "appIdentifierDescription",
"childSettings": [
],
"options": [
],
"entityKey": "identifier",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 16,
"category": 124,
"nameResourceKey": "eDPPolicyNetworkLocationsListTypeName",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "desktopOption",
"value": "desktop",
"enabled": true
},
{
"nameResourceKey": "universalOption",
"value": "universal",
"enabled": true
}
],
"entityKey": "appType",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 124,
"nameResourceKey": "vPNPolicyAssociatedAppsName",
"descriptionResourceKey": "vPNPolicyAssociatedAppsDescription",
"childSettings": [
],
"options": [
],
"entityKey": "associatedApps",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": true
}
],
"options": [
{
"nameResourceKey": "enableOption",
"value": true,
"enabled": true
},
{
"nameResourceKey": "disableOption",
"value": false,
"enabled": true
}
],
"entityKey": "onlyAssociatedAppsCanUseConnection",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "syntheticWipOrApps",
"booleanActions": 0,
"defaultValue": 0,
"unconfiguredValue": 0,
"policyType": 89,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "ruleName",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 16,
"category": 124,
"nameResourceKey": "trafficRuleRoutingPolicyTypeName",
"descriptionResourceKey": "trafficRuleRoutingPolicyTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "noneOption",
"value": "none",
"enabled": true
},
{
"nameResourceKey": "splitTunnelOption",
"value": "splitTunnel",
"enabled": true
},
{
"nameResourceKey": "forceTunnelOption",
"value": "forceTunnel",
"enabled": true
}
],
"entityKey": "routingPolicyType",
"booleanActions": 0,
"defaultValue": "none",
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 14,
"category": 124,
"nameResourceKey": "protocolsName",
"descriptionResourceKey": "empty",
"childSettings": [
{
"columns": [
{
"metadata": {
"dataType": 14,
"category": 124,
"nameResourceKey": "lowerPortName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "lowerNumber",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 14,
"category": 124,
"nameResourceKey": "upperPortName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExampleUpper",
"childSettings": [
],
"options": [
],
"entityKey": "upperNumber",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 124,
"nameResourceKey": "localPortRangesName",
"descriptionResourceKey": "localPortRangesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "localPortRanges",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 14,
"category": 124,
"nameResourceKey": "lowerPortName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "lowerNumber",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 14,
"category": 124,
"nameResourceKey": "upperPortName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExampleUpper",
"childSettings": [
],
"options": [
],
"entityKey": "upperNumber",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 124,
"nameResourceKey": "remotePortRangesName",
"descriptionResourceKey": "remotePortRangesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "remotePortRanges",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"options": [
],
"entityKey": "protocols",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "trafficRuleAppName",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "appId",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 16,
"category": 124,
"nameResourceKey": "trafficRuleAppTypeName",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
{
"nameResourceKey": "desktopOption",
"value": "desktop",
"enabled": true
},
{
"nameResourceKey": "universalOption",
"value": "universal",
"enabled": true
}
],
"entityKey": "appType",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"columns": [
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "lowerIPv4AddressName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "lowerAddress",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "upperIPv4AddressName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyAddressExampleUpper",
"childSettings": [
],
"options": [
],
"entityKey": "upperAddress",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 124,
"nameResourceKey": "localAddressRangesName",
"descriptionResourceKey": "localAddressRangesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "localAddressRanges",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"columns": [
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "lowerIPv4AddressName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "lowerAddress",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 124,
"nameResourceKey": "upperIPv4AddressName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyAddressExampleUpper",
"childSettings": [
],
"options": [
],
"entityKey": "upperAddress",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 124,
"nameResourceKey": "remoteAddressRangesName",
"descriptionResourceKey": "remoteAddressRangesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "remoteAddressRanges",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 124,
"nameResourceKey": "vPNPolicyNetworkTrafficRulesName",
"descriptionResourceKey": "vPNPolicyNetworkTrafficRulesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trafficRules",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": true
}
]
}
@@ -1,116 +0,0 @@
{
"vpnconditionalaccess_windows10vpn": {
"dataType": 19,
"category": 125,
"nameResourceKey": "enableConditionalAccessName",
"descriptionResourceKey": "enableConditionalAccessDescription",
"childSettings": [
{
"dataType": 19,
"category": 125,
"nameResourceKey": "enableSingleSignOnName",
"descriptionResourceKey": "enableSingleSignOnDescription",
"childSettings": [
{
"complexOptions": [
{
"dataType": 20,
"category": 125,
"nameResourceKey": "eDPPolicyAppsListNameName",
"descriptionResourceKey": "eDPPolicyAppsListNameDescription",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"dataType": 20,
"category": 125,
"nameResourceKey": "sCEPPolicyObjectIdentifierColumnName",
"descriptionResourceKey": "sCEPPolicyObjectIdentifierColumnDescription",
"childSettings": [
],
"options": [
],
"entityKey": "objectIdentifier",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"dataType": 6,
"category": 125,
"nameResourceKey": "sCEPPolicyExtendedKeyUsageName",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "singleSignOnEku",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"dataType": 20,
"category": 125,
"nameResourceKey": "issuerHashName",
"descriptionResourceKey": "issuerHashDescription",
"childSettings": [
],
"options": [
],
"entityKey": "singleSignOnIssuerHash",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"options": [
{
"nameResourceKey": "enableOption",
"value": true,
"enabled": true
},
{
"nameResourceKey": "disableOption",
"value": false,
"enabled": true
}
],
"entityKey": "enableSingleSignOnWithAlternateCertificate",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"options": [
{
"nameResourceKey": "enableOption",
"value": true,
"enabled": true
},
{
"nameResourceKey": "disableOption",
"value": false,
"enabled": true
}
],
"entityKey": "enableConditionalAccess",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
@@ -1,438 +0,0 @@
{
"vpndnstriggers_windows10vpn": [
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "vPNPolicyDNSSuffixesName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "dNSSuffixExample",
"childSettings": [
],
"options": [
],
"entityKey": "unusedForSingleItems",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "vPNPolicyDNSSuffixSearchListName",
"descriptionResourceKey": "vPNPolicyDNSSuffixSearchListDescription",
"childSettings": [
],
"options": [
],
"entityKey": "dnsSuffixes",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "dNSName",
"descriptionResourceKey": "dNSNameDescription1809",
"emptyValueResourceKey": "dNSNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"columns": [
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "dNSServer",
"descriptionResourceKey": "dNSServerDescription",
"emptyValueResourceKey": "vPNAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "unusedForSingleItems",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "dNSServer",
"descriptionResourceKey": "enterOnlyOneForDns",
"childSettings": [
],
"options": [
],
"entityKey": "servers",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "proxy",
"descriptionResourceKey": "vPNProxyDescription1809",
"emptyValueResourceKey": "proxyDNSExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyServerUri",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 19,
"category": 126,
"nameResourceKey": "vPNDnsAutoTriggerName",
"descriptionResourceKey": "vPNDnsAutoTriggerDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "enabledOption",
"value": true,
"enabled": true
},
{
"nameResourceKey": "notConfigured",
"value": false,
"enabled": true
}
],
"entityKey": "autoTrigger",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 19,
"category": 126,
"nameResourceKey": "vPNDnsPersistentName",
"descriptionResourceKey": "vPNDnsPersistentDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "enabledOption",
"value": true,
"enabled": true
},
{
"nameResourceKey": "notConfigured",
"value": false,
"enabled": true
}
],
"entityKey": "persistent",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "vPNPolicyNameResolutionPolicyTableRulesName",
"descriptionResourceKey": "vPNPolicyNameResolutionPolicyTableRulesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "dnsRules",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": true
},
{
"columns": [
{
"metadata": {
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 126,
"nameResourceKey": "vPNPolicyNameResolutionPolicyTableRulesName",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "dNSName",
"descriptionResourceKey": "dNSNameDescription1809",
"emptyValueResourceKey": "dNSNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 126,
"nameResourceKey": "enterOnlyOneForDns",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"columns": [
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "dNSServer",
"descriptionResourceKey": "dNSServerDescription",
"emptyValueResourceKey": "vPNAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "unusedForSingleItems",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "dNSServer",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "servers",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "proxy",
"descriptionResourceKey": "vPNProxyDescription1809",
"emptyValueResourceKey": "proxyDNSExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyServerUri",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "vPNPolicyNameResolutionPolicyTableRulesName",
"descriptionResourceKey": "vPNPolicyNameResolutionPolicyTableRulesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "dnsRules",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": false
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "dNSName",
"descriptionResourceKey": "dNSNameDescription",
"emptyValueResourceKey": "dNSNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 126,
"nameResourceKey": "enterOnlyOneForDns",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"columns": [
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "dNSServer",
"descriptionResourceKey": "dNSServerDescription",
"emptyValueResourceKey": "vPNAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "unusedForSingleItems",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "dNSServer",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "servers",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 126,
"nameResourceKey": "proxy",
"emptyValueResourceKey": "proxyDNSExample",
"childSettings": [
],
"options": [
],
"entityKey": "proxyServerUri",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 126,
"nameResourceKey": "vPNPolicyDNSNamesAndServersName",
"descriptionResourceKey": "vPNPolicyDNSNamesAndServersName",
"childSettings": [
],
"options": [
],
"entityKey": "dnsRules",
"booleanActions": 0,
"defaultValue": false,
"policyType": 89,
"enabled": false
}
]
}
@@ -1,119 +0,0 @@
{
"vpnproxy_windows10vpn": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 128,
"nameResourceKey": "vPNPolicyUseProxyServerName",
"descriptionResourceKey": "vPNPolicyUseProxyServerDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"complexOptions": [
{
"dataType": 20,
"category": 128,
"nameResourceKey": "vPNPolicyAutomaticConfigurationScriptName",
"descriptionResourceKey": "vPNPolicyAutomaticConfigurationScriptDescription",
"emptyValueResourceKey": "vPNScriptExample",
"childSettings": [
],
"options": [
],
"entityKey": "automaticConfigurationScriptUrl",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"dataType": 20,
"category": 128,
"nameResourceKey": "vPNPolicyAddressName",
"descriptionResourceKey": "vPNPolicyAddressDescription",
"emptyValueResourceKey": "vPNAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "address",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"dataType": 14,
"category": 128,
"nameResourceKey": "vPNPolicyPortNumberName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "proxyPortExample",
"childSettings": [
],
"options": [
],
"entityKey": "port",
"booleanActions": 0,
"policyType": 89,
"enabled": true
},
{
"dataType": 16,
"category": 128,
"nameResourceKey": "vPNPolicyBypassProxySettingsForLocalAddressesName",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "enableOption",
"value": "true",
"enabled": true
},
{
"nameResourceKey": "disableOption",
"value": "false",
"enabled": true
}
],
"entityKey": "bypassProxyServerForLocalAddress",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"dataType": 6,
"category": 128,
"nameResourceKey": "vPNPolicyUseProxyServerName",
"descriptionResourceKey": "vPNPolicyUseProxyServerDescription",
"childSettings": [
],
"options": [
],
"entityKey": "proxyServer",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
]
}
@@ -1,81 +0,0 @@
{
"vpnsplittunneling_windows10vpn": {
"dataType": 19,
"category": 123,
"nameResourceKey": "vPNPolicySendAllNetworkTrafficThroughVPNName",
"descriptionResourceKey": "vPNPolicySendAllNetworkTrafficThroughVPNDescription",
"childSettings": [
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 123,
"nameResourceKey": "vPNPolicyDestinationPrefixName",
"descriptionResourceKey": "vPNPolicyDestinationPrefixName",
"emptyValueResourceKey": "proxyAddressExample",
"childSettings": [
],
"options": [
],
"entityKey": "destinationPrefix",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
},
{
"metadata": {
"dataType": 14,
"category": 123,
"nameResourceKey": "vPNPolicyPrefixSizeName",
"descriptionResourceKey": "vPNPolicyPrefixSizeName",
"childSettings": [
],
"options": [
],
"entityKey": "prefixSize",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 123,
"nameResourceKey": "vPNPolicyRoutesForThisConnectionName",
"descriptionResourceKey": "vPNPolicyRoutesForThisConnectionDescription",
"childSettings": [
],
"options": [
],
"entityKey": "routes",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
],
"options": [
{
"nameResourceKey": "enableOption",
"value": true,
"enabled": true
},
{
"nameResourceKey": "disableOption",
"value": false,
"enabled": true
}
],
"entityKey": "enableSplitTunneling",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
@@ -1,39 +0,0 @@
{
"vpntrustednetwork_windows10vpn": {
"columns": [
{
"metadata": {
"dataType": 20,
"category": 129,
"nameResourceKey": "vPNPolicyTrustedNetworkDomainColumnName",
"descriptionResourceKey": "",
"emptyValueResourceKey": "VPNPolicyTrustedNetworkDomainExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedNetworkDomains",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
],
"dataType": 21,
"category": 129,
"nameResourceKey": "vPNPolicyTrustedNetworkDomainName",
"descriptionResourceKey": "vPNPolicyTrustedNetworkDomainDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedNetworkDomains",
"booleanActions": 0,
"policyType": 89,
"enabled": true
}
}
@@ -50,7 +50,7 @@
"dataType": 20, "dataType": 20,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypePermittedUrlsColumnName", "nameResourceKey": "webContentFilterTypePermittedUrlsColumnName",
"emptyValueResourceKey": "WebContentFilterWhiteListedUrlExample", "emptyValueResourceKey": "WebContentFilterPermittedUrlExample",
"childSettings": [ "childSettings": [
], ],
@@ -86,7 +86,7 @@
"dataType": 20, "dataType": 20,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeBlockedUrlsColumnName", "nameResourceKey": "webContentFilterTypeBlockedUrlsColumnName",
"emptyValueResourceKey": "WebContentFilterBlackListedUrlExample", "emptyValueResourceKey": "WebContentFilterBlockedUrlExample",
"childSettings": [ "childSettings": [
], ],
@@ -119,7 +119,7 @@
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsOption", "nameResourceKey": "webContentFilterTypePermittedUrlsOption",
"value": "#microsoft.graph.iosWebContentFilterSpecificWebsitesAccess", "value": "#microsoft.graph.iosWebContentFilterSpecificWebsitesAccess",
"children": [ "children": [
{ {
@@ -127,7 +127,7 @@
"showAsSectionHeader": false, "showAsSectionHeader": false,
"dataType": 8, "dataType": 8,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsHeaderName", "nameResourceKey": "webContentFilterTypePermittedUrlsHeaderName",
"descriptionResourceKey": "empty", "descriptionResourceKey": "empty",
"childSettings": [ "childSettings": [
@@ -144,7 +144,7 @@
"showAsSectionHeader": false, "showAsSectionHeader": false,
"dataType": 8, "dataType": 8,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsLinkTextName", "nameResourceKey": "webContentFilterTypePermittedUrlsLinkTextName",
"descriptionResourceKey": "empty", "descriptionResourceKey": "empty",
"childSettings": [ "childSettings": [
@@ -162,7 +162,7 @@
"metadata": { "metadata": {
"dataType": 20, "dataType": 20,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsColumnUrlName", "nameResourceKey": "webContentFilterTypePermittedUrlsColumnUrlName",
"emptyValueResourceKey": "kioskModeAppStoreExample", "emptyValueResourceKey": "kioskModeAppStoreExample",
"childSettings": [ "childSettings": [
@@ -180,7 +180,7 @@
"metadata": { "metadata": {
"dataType": 20, "dataType": 20,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsColumnBookmarkPathName", "nameResourceKey": "webContentFilterTypePermittedUrlsColumnBookmarkPathName",
"emptyValueResourceKey": "WebContentFilterBookmarkPathExample", "emptyValueResourceKey": "WebContentFilterBookmarkPathExample",
"childSettings": [ "childSettings": [
@@ -198,7 +198,7 @@
"metadata": { "metadata": {
"dataType": 20, "dataType": 20,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsColumnTitleName", "nameResourceKey": "webContentFilterTypePermittedUrlsColumnTitleName",
"emptyValueResourceKey": "WebContentFilterBookmarkTitleExample", "emptyValueResourceKey": "WebContentFilterBookmarkTitleExample",
"childSettings": [ "childSettings": [
@@ -215,8 +215,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 140, "category": 140,
"nameResourceKey": "webContentFilterTypeWhitelistedUrlsTableName", "nameResourceKey": "webContentFilterTypeSpecificUrlsTableName",
"descriptionResourceKey": "webContentFilterTypeWhitelistedUrlsTableDescription", "descriptionResourceKey": "webContentFilterTypeSpecificUrlsTableDescription",
"childSettings": [ "childSettings": [
], ],
@@ -125,6 +125,748 @@
], ],
"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": "selectCertificateProfiles",
"descriptionResourceKey": "selectRootCertificatesForServerValidationName",
"childSettings": [
],
"options": [
],
"entityKey": "rootCertificatesForServerValidation",
"booleanActions": 0,
"unconfiguredValue": "notConfigured",
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "selectRootCertificatesForServerValidationName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificates",
"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": "selectCertificateProfiles",
"descriptionResourceKey": "selectRootCertificatesForServerValidationName",
"childSettings": [
],
"options": [
],
"entityKey": "rootCertificatesForServerValidation",
"booleanActions": 0,
"unconfiguredValue": "notConfigured",
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "selectRootCertificatesForServerValidationName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificates",
"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": "selectCertificateProfiles",
"descriptionResourceKey": "selectRootCertificatesForServerValidationName",
"childSettings": [
],
"options": [
],
"entityKey": "rootCertificatesForServerValidation",
"booleanActions": 0,
"unconfiguredValue": "notConfigured",
"policyType": 68,
"enabled": true
}
],
"dataType": 5,
"category": 149,
"nameResourceKey": "selectRootCertificatesForServerValidationName",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "selectCertificates",
"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
},
{
"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", "nameResourceKey": "eAPTLSName",
"value": "eapTls", "value": "eapTls",
@@ -794,7 +1536,7 @@
"entityKey": "eapType", "entityKey": "eapType",
"booleanActions": 0, "booleanActions": 0,
"policyType": 68, "policyType": 68,
"enabled": true "enabled": false
} }
] ]
} }
@@ -183,7 +183,77 @@
"booleanActions": 3, "booleanActions": 3,
"defaultValue": false, "defaultValue": false,
"policyType": 13, "policyType": 13,
"enabled": true "enabled": false
},
{
"dataType": 16,
"category": 127,
"nameResourceKey": "blockAddingAccountsName",
"descriptionResourceKey": "blockAddingAccountsDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "allowAllAccountsExceptGoogle",
"value": "allowAllExceptGoogleAccounts",
"enabled": true
},
{
"nameResourceKey": "allowAllAccounts",
"value": "allowAll",
"children": [
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 127,
"nameResourceKey": "domainAllowListTableName",
"emptyValueResourceKey": "domainAllowListTableEmptyValueExample",
"childSettings": [
],
"options": [
],
"entityKey": "empty",
"booleanActions": 0,
"policyType": 13,
"enabled": true
}
}
],
"dataType": 21,
"category": 127,
"nameResourceKey": "domainAllowListName",
"descriptionResourceKey": "domainAllowListDescription",
"childSettings": [
],
"options": [
],
"entityKey": "allowedGoogleAccountDomains",
"booleanActions": 0,
"policyType": 13,
"enabled": false
}
],
"enabled": true
},
{
"nameResourceKey": "blockAllAccounts",
"value": "blockAll",
"enabled": true
}
],
"entityKey": "workProfileAccountUse",
"booleanActions": 0,
"defaultValue": "allowAllExceptGoogleAccounts",
"unconfiguredValue": "allowAllExceptGoogleAccounts",
"policyType": 13,
"enabled": false
}, },
{ {
"dataType": 0, "dataType": 0,
@@ -304,29 +374,56 @@
"enabled": true "enabled": true
}, },
{ {
"dataType": 0, "dataType": 10,
"category": 127, "category": 127,
"nameResourceKey": "workProfileRequirePasswordName", "nameResourceKey": "androidTwelveDeprecationInfoBox",
"descriptionResourceKey": "workProfileRequirePasswordDescription", "childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 127,
"nameResourceKey": "allAndroidVersionsPasswordHeader",
"childSettings": [ "childSettings": [
{ {
"dataType": 14, "isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 127, "category": 127,
"nameResourceKey": "workProfileMinimumPasswordLengthName", "nameResourceKey": "allAndroidVersionsPasswordHeaderDescription",
"descriptionResourceKey": "workProfileMinimumPasswordLengthDescription",
"emptyValueResourceKey": "workProfileMinimumPasswordLengthEmptyValueKey",
"childSettings": [ "childSettings": [
], ],
"options": [ "options": [
], ],
"entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 4,
"policyType": 13, "policyType": 13,
"enabled": true "enabled": true
}, }
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileRequirePasswordName",
"descriptionResourceKey": "workProfileRequirePasswordDescription",
"childSettings": [
{ {
"dataType": 16, "dataType": 16,
"category": 127, "category": 127,
@@ -430,6 +527,191 @@
"policyType": 13, "policyType": 13,
"enabled": true "enabled": true
}, },
{
"dataType": 14,
"category": 127,
"nameResourceKey": "workProfileNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "workProfileNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "workProfileNumberOfPreviousPasswordsToBlockEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordPreviousPasswordBlockCount",
"booleanActions": 0,
"defaultValue": 5,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockFaceUnlockName",
"descriptionResourceKey": "workProfileBlockFaceUnlockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockFaceUnlock",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockFingerprintUnlockName",
"descriptionResourceKey": "workProfileBlockFingerprintUnlockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockFingerprintUnlock",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockIrisUnlockName",
"descriptionResourceKey": "workProfileBlockIrisUnlockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockIrisUnlock",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockSmartLockName",
"descriptionResourceKey": "workProfileBlockSmartLockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockTrustAgents",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 127,
"nameResourceKey": "androidTwelveAndAbovePasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 127,
"nameResourceKey": "androidTwelveAndAbovePasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{
"dataType": 16,
"category": 127,
"nameResourceKey": "workProfileRequiredPasswordComplexityName",
"descriptionResourceKey": "workProfileRequiredPasswordComplexityDescription",
"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": 13,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 127,
"nameResourceKey": "androidElevenAndBelowPasswordHeader",
"childSettings": [
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 127,
"nameResourceKey": "androidElevenAndBelowPasswordHeaderDescription",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 13,
"enabled": true
},
{ {
"dataType": 16, "dataType": 16,
"category": 127, "category": 127,
@@ -549,86 +831,18 @@
{ {
"dataType": 14, "dataType": 14,
"category": 127, "category": 127,
"nameResourceKey": "workProfileNumberOfPreviousPasswordsToBlockName", "nameResourceKey": "workProfileMinimumPasswordLengthName",
"descriptionResourceKey": "workProfileNumberOfPreviousPasswordsToBlockDescription", "descriptionResourceKey": "workProfileMinimumPasswordLengthDescription",
"emptyValueResourceKey": "workProfileNumberOfPreviousPasswordsToBlockEmptyValueKey", "emptyValueResourceKey": "workProfileMinimumPasswordLengthEmptyValueKey",
"childSettings": [ "childSettings": [
], ],
"options": [ "options": [
], ],
"entityKey": "workProfilePasswordPreviousPasswordBlockCount", "entityKey": "workProfilePasswordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 5, "defaultValue": 4,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockFaceUnlockName",
"descriptionResourceKey": "workProfileBlockFaceUnlockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockFaceUnlock",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockFingerprintUnlockName",
"descriptionResourceKey": "workProfileBlockFingerprintUnlockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockFingerprintUnlock",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockIrisUnlockName",
"descriptionResourceKey": "workProfileBlockIrisUnlockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockIrisUnlock",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": true
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "workProfileBlockSmartLockName",
"descriptionResourceKey": "workProfileBlockSmartLockDescription",
"childSettings": [
],
"options": [
],
"entityKey": "workProfilePasswordBlockTrustAgents",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13, "policyType": 13,
"enabled": true "enabled": 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
+9 -5
View File
@@ -11,7 +11,7 @@ Objects can be compared based on Properties or Documentatation info.
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.9' '1.0.11'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -422,8 +422,8 @@ function Invoke-BulkCompareNamedObjects
Write-Log "Compare $($item.ObjectType.Title) objects" Write-Log "Compare $($item.ObjectType.Title) objects"
Write-Log "----------------------------------------------------------------" Write-Log "----------------------------------------------------------------"
$graphObjects = @(Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType) [array]$graphObjects = Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType
$nameProp = ?? $item.ObjectType.NameProperty "displayName" $nameProp = ?? $item.ObjectType.NameProperty "displayName"
foreach($graphObj in ($graphObjects | Where { $_.Object."$($nameProp)" -imatch [regex]::Escape($sourcePattern) })) foreach($graphObj in ($graphObjects | Where { $_.Object."$($nameProp)" -imatch [regex]::Escape($sourcePattern) }))
@@ -516,7 +516,11 @@ function Start-BulkCompareExportObjects
Write-Log "****************************************************************" Write-Log "****************************************************************"
$compareObjectsResult = @() $compareObjectsResult = @()
$txtNameFilter = (Get-XamlProperty $global:ccContentProviderOptions.Content "txtCompareNameFilter" "Text").Trim() $txtNameFilter = (Get-XamlProperty $global:ccContentProviderOptions.Content "txtCompareNameFilter" "Text")
if($txtNameFilter -is [String])
{
$txtNameFilter = $txtNameFilter.Trim()
}
$rootFolder = (Get-XamlProperty $global:ccContentProviderOptions.Content "txtExportPath" "Text") $rootFolder = (Get-XamlProperty $global:ccContentProviderOptions.Content "txtExportPath" "Text")
$compareProps = $script:defaultCompareProps $compareProps = $script:defaultCompareProps
@@ -561,7 +565,7 @@ function Start-BulkCompareExportObjects
{ {
Save-Setting "" "LastUsedFullPath" $folder Save-Setting "" "LastUsedFullPath" $folder
$graphObjects = @(Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType) [array]$graphObjects = Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType
foreach ($fileObj in @(Get-GraphFileObjects $folder -ObjectType $item.ObjectType)) foreach ($fileObj in @(Get-GraphFileObjects $folder -ObjectType $item.ObjectType))
{ {
+2 -2
View File
@@ -1,6 +1,6 @@
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.1' '1.0.2'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -106,7 +106,7 @@ function Start-BulkCopyObjects
Write-Log "Copy $($item.ObjectType.Title) objects" Write-Log "Copy $($item.ObjectType.Title) objects"
Write-Log "----------------------------------------------------------------" Write-Log "----------------------------------------------------------------"
$graphObjects = @(Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType) [array]$graphObjects = Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType
$nameProp = ?? $item.ObjectType.NameProperty "displayName" $nameProp = ?? $item.ObjectType.NameProperty "displayName"
File diff suppressed because it is too large Load Diff
+516 -8
View File
@@ -10,7 +10,7 @@ This module will also document some objects based on PowerShell functions
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.4.0' '1.6.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -27,6 +27,7 @@ function Invoke-InitializeModule
PostAddValue = { Invoke-CDDocumentCustomPostAdd @args } PostAddValue = { Invoke-CDDocumentCustomPostAdd @args }
ObjectDocumented = { Invoke-CDDocumentCustomObjectDocumented @args } ObjectDocumented = { Invoke-CDDocumentCustomObjectDocumented @args }
TranslateSectionFile = { Invoke-CDDocumentTranslateSectionFile @args } TranslateSectionFile = { Invoke-CDDocumentTranslateSectionFile @args }
PostSettingsCatalog = { Invoke-CDDocumentPostSettingsCatalog @args }
}) })
} }
@@ -150,11 +151,16 @@ function Invoke-CDDocumentObject
} }
elseif($type -eq '#microsoft.graph.deviceComplianceScript') elseif($type -eq '#microsoft.graph.deviceComplianceScript')
{ {
Invoke-CDDocumentdeviceComplianceScript $documentationObj Invoke-CDDocumentDeviceComplianceScript $documentationObj
return [PSCustomObject]@{ return [PSCustomObject]@{
Properties = @("Name","Value","Category","SubCategory") Properties = @("Name","Value","Category","SubCategory")
} }
} }
elseif($type -eq '#microsoft.graph.roleScopeTag')
{
Invoke-CDDocumentScopeTag $documentationObj
return $true
}
} }
function Get-CDAllManagedApps function Get-CDAllManagedApps
@@ -810,7 +816,13 @@ function Add-CDDocumentCustomProfileProperty
$obj.outOfBoxExperienceSettings | Add-Member Noteproperty -Name "azureADJoinType" -Value $joinType $obj.outOfBoxExperienceSettings | Add-Member Noteproperty -Name "azureADJoinType" -Value $joinType
$obj.outOfBoxExperienceSettings | Add-Member Noteproperty -Name "isLanguageSet" -Value (?: ([String]::IsNullOrEmpty($obj.language)) $false $true) $obj.outOfBoxExperienceSettings | Add-Member Noteproperty -Name "isLanguageSet" -Value (?: ([String]::IsNullOrEmpty($obj.language)) $false $true)
if([String]::IsNullOrEmpty($obj.language))
{
$obj.language = "user-select"
}
$retValue = $true $retValue = $true
} }
elseif($obj.'@OData.Type' -eq "#microsoft.graph.officeSuiteApp") elseif($obj.'@OData.Type' -eq "#microsoft.graph.officeSuiteApp")
@@ -1186,9 +1198,15 @@ function Add-CDDocumentCustomProfileProperty
$requirementRulesSummary = @() $requirementRulesSummary = @()
$detectionRulesSummary = @() $detectionRulesSummary = @()
$returnCodes = @() $returnCodes = @()
$detectionRules = @()
$requirementRules = @()
foreach($rc in $obj.returnCodes) foreach($rc in $obj.returnCodes)
{ {
$returnCodes += ("{0} {1}" -f @($rc.returnCode,(Get-LanguageString "Win32ReturnCodes.CodeTypes.$($rc.type)"))) $returnCodes += [PSCustomObject]@{
returnCode = $rc.returnCode
type = (Get-LanguageString "Win32ReturnCodes.CodeTypes.$($rc.type)")
}
#$returnCodes += ("{0} {1}" -f @($rc.returnCode,(Get-LanguageString "Win32ReturnCodes.CodeTypes.$($rc.type)")))
} }
$dependencyApps = @() $dependencyApps = @()
@@ -1226,17 +1244,26 @@ function Add-CDDocumentCustomProfileProperty
{ {
$lngId = "script" $lngId = "script"
$textValue = $rule.displayName $textValue = $rule.displayName
Add-ObjectScript $rule.displayName ("{0} - {1}" -f @($obj.displayName, "Requirement script")) $rule.ScriptContent
} }
$requirementRulesSummary += ("{0} {1}" -f @((Get-LanguageString "Win32Requirements.AdditionalRequirements.RequirementTypeOptions.$lngId"),$textValue)) $requirementRulesSummary += ("{0} {1}" -f @((Get-LanguageString "Win32Requirements.AdditionalRequirements.RequirementTypeOptions.$lngId"),$textValue))
$requirementRules += Add-CDDocumentRequirementRule $rule
} }
if(($obj.detectionRules | Where '@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptDetection")) if(($obj.detectionRules | Where '@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptDetection"))
{ {
$detectionRulesType = Get-LanguageString "DetectionRules.RuleConfigurationOptions.customScript" $detectionRulesType = Get-LanguageString "DetectionRules.RuleConfigurationOptions.customScript"
foreach($rule in $obj.detectionRules)
{
$header = (Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label")
Add-ObjectScript $header ("{0} - {1}" -f @($obj.displayName,$header)) $rule.ScriptContent
}
} }
else else
{ {
$detectionRulesType = Get-LanguageString "DetectionRules.RuleConfigurationOptions.manual" $detectionRulesType = Get-LanguageString "DetectionRules.RuleConfigurationOptions.manual"
foreach($rule in $obj.detectionRules) foreach($rule in $obj.detectionRules)
{ {
if($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppFileSystemDetection") if($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppFileSystemDetection")
@@ -1254,15 +1281,21 @@ function Add-CDDocumentCustomProfileProperty
$lngId = "mSI" $lngId = "mSI"
$textValue = $rule.productCode $textValue = $rule.productCode
} }
$detectionRulesSummary += ("{0} {1}" -f @((Get-LanguageString "DetectionRules.Manual.RuleTypeOptions.$lngId"),$textValue)) $detectionRulesSummary += ("{0} {1}" -f @((Get-LanguageString "DetectionRules.Manual.RuleTypeOptions.$lngId"),$textValue))
$detectionRules += Add-CDDocumentDetectionRule $rule
} }
} }
$obj | Add-Member Noteproperty -Name "requirementRulesSummary" -Value ($requirementRulesSummary -join $objSeparator) -Force $obj | Add-Member Noteproperty -Name "requirementRulesSummary" -Value ($requirementRulesSummary -join $objSeparator) -Force
$obj | Add-Member Noteproperty -Name "detectionRulesSummary" -Value ($detectionRulesSummary -join $objSeparator) -Force $obj | Add-Member Noteproperty -Name "detectionRulesSummary" -Value ($detectionRulesSummary -join $objSeparator) -Force
$obj | Add-Member Noteproperty -Name "dependencyApps" -Value ($dependencyApps -join $objSeparator) -Force $obj | Add-Member Noteproperty -Name "dependencyApps" -Value ($dependencyApps -join $objSeparator) -Force
$obj | Add-Member Noteproperty -Name "supersededApps" -Value ($supersededApps -join $objSeparator) -Force $obj | Add-Member Noteproperty -Name "supersededApps" -Value ($supersededApps -join $objSeparator) -Force
$obj | Add-Member Noteproperty -Name "detectionRulesType" -Value $detectionRulesType -Force $obj | Add-Member Noteproperty -Name "detectionRulesType" -Value $detectionRulesType -Force
$obj | Add-Member Noteproperty -Name "returnCodes" -Value ($returnCodes -join $objSeparator) -Force $obj | Add-Member Noteproperty -Name "requirementRulesTranslated" -Value $requirementRules -Force
$obj | Add-Member Noteproperty -Name "detectionRulesTranslated" -Value $detectionRules -Force
$obj | Add-Member Noteproperty -Name "returnCodes" -Value $returnCodes -Force
$obj | Add-Member Noteproperty -Name "win10Release" -Value (Get-LanguageString "MinimumOperatingSystem.Windows.V10Release.release$($obj.minimumSupportedWindowsRelease)") -Force $obj | Add-Member Noteproperty -Name "win10Release" -Value (Get-LanguageString "MinimumOperatingSystem.Windows.V10Release.release$($obj.minimumSupportedWindowsRelease)") -Force
} }
elseif($obj.'@OData.Type' -eq "#microsoft.graph.deviceHealthScript") elseif($obj.'@OData.Type' -eq "#microsoft.graph.deviceHealthScript")
@@ -1274,12 +1307,29 @@ function Add-CDDocumentCustomProfileProperty
if($obj.detectionScriptContent) if($obj.detectionScriptContent)
{ {
$obj | Add-Member Noteproperty -Name "detectionScriptContentString" -Value ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(($obj.detectionScriptContent)))) $obj | Add-Member Noteproperty -Name "detectionScriptContentString" -Value ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(($obj.detectionScriptContent))))
$header = Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label"
Add-ObjectScript $header ("{1} - {0}" -f $obj.displayName,$header) $obj.detectionScriptContent
} }
if($obj.remediationScriptContent) if($obj.remediationScriptContent)
{ {
$obj | Add-Member Noteproperty -Name "remediationScriptContentString" -Value ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(($obj.remediationScriptContent)))) $obj | Add-Member Noteproperty -Name "remediationScriptContentString" -Value ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(($obj.remediationScriptContent))))
$header = Get-LanguageString "ProactiveRemediations.Create.Settings.RemediationScriptMultiLineTextBox.label"
Add-ObjectScript $header ("{1} - {0}" -f $obj.displayName,$header) $obj.remediationScriptContent
}
}
elseif($obj.'@OData.Type' -eq "#microsoft.graph.deviceManagementScript")
{
if($obj.ScriptContent)
{
Add-ObjectScript $obj.FileName ("{1} - {0}" -f $obj.displayName,(Get-LanguageString "WindowsManagement.powerShellScriptObjectName")) $obj.ScriptContent
}
}
elseif($obj.'@OData.Type' -eq "#microsoft.graph.deviceShellScript")
{
if($obj.ScriptContent)
{
Add-ObjectScript $obj.FileName ("{1} - {0}" -f $obj.displayName,(Get-LanguageString "WindowsManagement.shellScriptObjectName")) $rule.ScriptContent
} }
} }
elseif($obj.'@OData.Type' -eq "#microsoft.graph.windows10TeamGeneralConfiguration") elseif($obj.'@OData.Type' -eq "#microsoft.graph.windows10TeamGeneralConfiguration")
{ {
@@ -1313,6 +1363,13 @@ function Add-CDDocumentCustomProfileProperty
$obj | Add-Member Noteproperty -Name "hasForceRestart" -Value $true $obj | Add-Member Noteproperty -Name "hasForceRestart" -Value $true
} }
} }
elseif($obj.'@OData.Type' -like "#microsoft.graph.windowsWifiConfiguration")
{
if($obj.wifiSecurityType -eq "wpa2Personal")
{
$obj.preSharedKey = "********"
}
}
if(($obj.PSObject.Properties | where Name -eq "securityRequireSafetyNetAttestationBasicIntegrity") -and if(($obj.PSObject.Properties | where Name -eq "securityRequireSafetyNetAttestationBasicIntegrity") -and
($obj.PSObject.Properties | where Name -eq "securityRequireSafetyNetAttestationCertifiedDevice")) ($obj.PSObject.Properties | where Name -eq "securityRequireSafetyNetAttestationCertifiedDevice"))
@@ -1332,6 +1389,7 @@ function Add-CDDocumentCustomProfileProperty
$retValue = $true $retValue = $true
} }
if(($obj.PSObject.Properties | Where Name -eq "periodOfflineBeforeWipeIsEnforced")) if(($obj.PSObject.Properties | Where Name -eq "periodOfflineBeforeWipeIsEnforced"))
{ {
#Conditional Launch settings for AppProtection policies #Conditional Launch settings for AppProtection policies
@@ -1377,6 +1435,390 @@ function Add-CDDocumentCustomProfileProperty
return $retValue return $retValue
} }
function Add-CDDocumentRequirementRule
{
param($rule)
$strYes = Get-LanguageString "SettingDetails.yes"
$strNo = Get-LanguageString "SettingDetails.no"
$ruleInfo = @()
if($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppFileSystemRequirement")
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.requirementType")
value = (Get-LanguageString "Win32Requirements.AdditionalRequirements.RequirementTypeOptions.fileType")
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.path")
value = $rule.path
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.fileOrFolder")
value = $rule.fileOrFolderName
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.File.property")
value = switch($rule.detectionType)
{
"createdDate" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.dateCreated") }
"modifiedDate" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.dateModified") }
"doesNotExist" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.doesNotExist") }
"exists" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.fileOrFolderExists") }
"sizeInMB" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.sizeInMB") }
"version" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.version") }
Default { Get-LanguageString "BooleanActions.notConfigured" }
}
}
if($rule.detectionValue -and $rule.operator)
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.operator")
value = (Get-CDDocumentOperatorString $rule.operator)
}
$detectionValue = $rule.detectionValue
if($rule.detectionType -eq "createdDate" -or $rule.detectionType -eq "modifiedDate")
{
try {
$tmpDate = Get-Date $rule.detectionValue
$detectionValue = $tmpDate.ToString()
} catch {}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.value")
value = $detectionValue
}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.associatedWith32Bit")
value = (?: ($rule.check32BitOn64System -eq $true) ($strYes) ($strNo))
}
}
elseif($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppRegistryRequirement")
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.requirementType")
value = (Get-LanguageString "Win32Requirements.AdditionalRequirements.RequirementTypeOptions.registry")
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Registry.keyPath")
value = $rule.keyPath
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Registry.valueName")
value = $rule.valueName
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Registry.registryRequirement")
value = switch($rule.detectionType)
{
"doesNotExist"
{
if($rule.valueName)
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.valueDoesNotExist")
}
else
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.keyDoesNotExist")
}
}
"exists" {
if($rule.valueName)
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.valueExists")
}
else
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.keyExists")
}
}
"integer" { (Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.integerComparison") }
"string" { (Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.stringComparison") }
"version" { (Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.versionComparison") }
Default { Get-LanguageString "BooleanActions.notConfigured" }
}
}
if($rule.detectionValue -and $rule.operator)
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Registry.operator")
value = (Get-CDDocumentOperatorString $rule.operator)
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.value")
value = $rule.detectionValue
}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.associatedWith32Bit")
value = (?: ($rule.check32BitOn64System -eq $true) ($strYes) ($strNo))
}
}
elseif($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptRequirement")
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.requirementType")
value = (Get-LanguageString "Win32Requirements.AdditionalRequirements.RequirementTypeOptions.script")
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.scriptName")
value = $rule.displayName
}
<#
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.scriptContent")
$scriptContent = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($rule.scriptContent))
value = $scriptContent
}
#>
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.CustomScript.runAs32Bit")
value = (?: ($rule.runAs32Bit -eq $true) ($strYes) ($strNo))
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.loggedOnCredentials")
value = (?: ($rule.runAsAccount -ne "system") ($strYes) ($strNo))
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.enforceSignatureCheck")
value = (?: ($rule.enforceSignatureCheck -eq $true) ($strYes) ($strNo))
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.requirementMethod")
value = switch($rule.detectionType)
{
"string" { (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.RequirementMethodOptions.string") }
"dateTime" { (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.RequirementMethodOptions.dateTime") }
"integer" { (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.RequirementMethodOptions.integer") }
"float" { (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.RequirementMethodOptions.float") }
"version" { (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.RequirementMethodOptions.version") }
"boolean" { (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.RequirementMethodOptions.boolean") }
Default { Get-LanguageString "BooleanActions.notConfigured" }
}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Registry.operator")
value = (Get-CDDocumentOperatorString $rule.operator)
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "Win32Requirements.AdditionalRequirements.Script.value")
value = $rule.detectionValue
}
}
return $ruleInfo
}
function Add-CDDocumentDetectionRule
{
param($rule)
$ruleInfo = @()
if($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppFileSystemDetection")
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.ruleType")
value = (Get-LanguageString "DetectionRules.Manual.RuleTypeOptions.file")
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.path")
value = $rule.path
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.fileOrFolder")
value = $rule.fileOrFolderName
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.detectionMethod")
value = switch($rule.detectionType)
{
"createdDate" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.dateCreated") }
"modifiedDate" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.dateModified") }
"doesNotExist" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.doesNotExist") }
"exists" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.fileOrFolderExists") }
"sizeInMB" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.sizeInMB") }
"version" { (Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.version") }
Default { Get-LanguageString "BooleanActions.notConfigured" }
}
}
if($rule.detectionValue -and $rule.operator)
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.operator")
value = (Get-CDDocumentOperatorString $rule.operator)
}
$detectionValue = $rule.detectionValue
if($rule.detectionType -eq "createdDate" -or $rule.detectionType -eq "modifiedDate")
{
try {
$tmpDate = Get-Date $rule.detectionValue
$detectionValue = $tmpDate.ToString()
} catch {}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.FileRule.value")
value = $detectionValue
}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.associatedWith32Bit")
value = (?: ($rule.check32BitOn64System -eq $true) (Get-LanguageString "SettingDetails.yes") (Get-LanguageString "SettingDetails.no"))
}
}
elseif($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppRegistryDetection")
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.ruleType")
value = (Get-LanguageString "DetectionRules.Manual.RuleTypeOptions.registry")
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.keyPath")
value = $rule.keyPath
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.valueName")
value = $rule.valueName
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.detectionMethod")
value = switch($rule.detectionType)
{
"doesNotExist"
{
if($rule.valueName)
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.valueDoesNotExist")
}
else
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.keyDoesNotExist")
}
}
"exists" {
if($rule.valueName)
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.valueExists")
}
else
{
(Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.keyExists")
}
}
"integer" { (Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.integerComparison") }
"string" { (Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.stringComparison") }
"version" { (Get-LanguageString "DetectionRules.Manual.RegistryRule.DetectionMethodOptions.versionComparison") }
Default { Get-LanguageString "BooleanActions.notConfigured" }
}
}
if($rule.detectionValue -and $rule.operator)
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.operator")
value = (Get-CDDocumentOperatorString $rule.operator)
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.value")
value = $rule.detectionValue
}
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.RegistryRule.associatedWith32Bit")
value = (?: ($rule.check32BitOn64System -eq $true) (Get-LanguageString "SettingDetails.yes") (Get-LanguageString "SettingDetails.no"))
}
}
else #win32LobAppProductCodeDetection
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.ruleType")
value = (Get-LanguageString "DetectionRules.Manual.RuleTypeOptions.mSI")
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.MsiRule.productCode")
value = $rule.productCode
}
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.MsiRule.productVersionCheck")
value = (?: ($null -ne $rule.productVersion) (Get-LanguageString "SettingDetails.yes") (Get-LanguageString "SettingDetails.no"))
}
if($null -ne $rule.productVersion)
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.MsiRule.operator")
value = (Get-CDDocumentOperatorString $rule.productVersionOperator)
}
}
if($null -ne $rule.productVersion)
{
$ruleInfo += [PSCustomObject]@{
property = (Get-LanguageString "DetectionRules.Manual.MsiRule.productVersion")
value = (Get-CDDocumentOperatorString $rule.productVersion)
}
}
}
return $ruleInfo
}
function Get-CDDocumentOperatorString
{
param($operator)
$lngString = switch ($operator)
{
"notConfigured" { Get-LanguageString "BooleanActions.notConfigured" }
"equal" { Get-LanguageString "DetectionRules.ComparisonOperators.equals" }
"notEqual" { Get-LanguageString "DetectionRules.ComparisonOperators.notEqualTo" }
"greaterThan" { Get-LanguageString "DetectionRules.ComparisonOperators.greaterThan" }
"greaterThanOrEqual" { Get-LanguageString "DetectionRules.ComparisonOperators.greaterThanOrEqualTo" }
"lessThan" { Get-LanguageString "DetectionRules.ComparisonOperators.lessThan" }
"lessThanOrEqual" { Get-LanguageString "DetectionRules.ComparisonOperators.lessThanOrEqualTo" }
"exists" { Get-LanguageString "DetectionRules.Manual.FileRule.DetectionMethodOptions.fileOrFolderExists" }
Default { $operator }
}
$lngString
}
# App Config # App Config
function Invoke-CDDocumentiosMobileAppConfiguration function Invoke-CDDocumentiosMobileAppConfiguration
{ {
@@ -3851,7 +4293,7 @@ function Invoke-CDDocumentTranslateSectionFile
#endregion #endregion
#region #region
function Invoke-CDDocumentdeviceComplianceScript function Invoke-CDDocumentDeviceComplianceScript
{ {
param($documentationObj) param($documentationObj)
@@ -3914,4 +4356,70 @@ function Invoke-CDDocumentdeviceComplianceScript
SubCategory = $null SubCategory = $null
}) })
} }
#endregion
#region Settings Catalog
function Invoke-CDDocumentPostSettingsCatalog
{
param($obj, $objectType, $settingsData)
if($obj.templateReference.TemplateId.StartsWith("19c8aa67-f286-4861-9aa0-f23541d31680"))
{
$reusableSettingsType = Get-GraphObjectType "ReusableSettings"
if($reusableSettingsType)
{
foreach($setting in ($settingsData | Where SettingId -eq "vendor_msft_firewall_mdmstore_firewallrules_{firewallrulename}_remoteaddressdynamickeywords"))
{
$reusableSettings = Invoke-GraphRequest -Url "$($reusableSettingsType.API)/$($setting.RawValue)"
if($reusableSettings.displayName)
{
$setting.Value = $reusableSettings.displayName
}
else
{
Write-Log "No Reusable Settings object found with ID $($setting.RawValue)" 2
}
}
}
}
}
#endregion
#region Scope Tags
function Invoke-CDDocumentScopeTag
{
param($obj, $objectType)
$script:objectSeparator = ?? $global:cbDocumentationObjectSeparator.SelectedValue ([System.Environment]::NewLine)
$script:propertySeparator = ?? $global:cbDocumentationPropertySeparator.SelectedValue ","
$groupIDs, $groupInfo, $filterIds,$filtersInfo = Get-ObjectAssignments $obj.Object
$nameLabel = Get-LanguageString "Inputs.displayNameLabel"
$descriptionLabel = Get-LanguageString "TableHeaders.description"
$assignmentsLabel = Get-LanguageString "TableHeaders.assignments"
$scopeTagInfo = Get-TableObjects $obj.ObjectType
if(-not $scopeTagInfo)
{
$scopeTagInfo = [PSCustomObject]@{
TypeName = (Get-LanguageString "SettingDetails.scopeTags")
ObjectType = $obj.ObjectType
Properties = @($nameLabel, "id", $descriptionLable, $assignmentsLabel)
Items = @()
}
Set-TableObjects $scopeTagInfo
}
$scopeTagInfo.Items += ([PSCustomObject]@{
$nameLabel = $obj.displayName
ID = $obj.Id
$descriptionLabel = $obj.Description
$assignmentsLabel = ($groupInfo.displayName -join $script:objectSeparator)
Object = $documentationObj.Object
})
}
#endregion #endregion
+657
View File
@@ -0,0 +1,657 @@
function Get-ModuleVersion
{
'1.0.0'
}
function Invoke-InitializeModule
{
Add-OutputType ([PSCustomObject]@{
Name="HTML"
Value="html"
OutputOptions = (Add-HTMLOptionsControl)
#Activate = { Invoke-HTMLActivate @args }
PreProcess = { Invoke-HTMLPreProcessItems @args }
NewObjectGroup = { Invoke-HTMLNewObjectGroup2 @args }
NewObjectType = { Invoke-HTMLNewObjectType2 @args }
Process = { Invoke-HTMLProcessItem @args }
PostProcess = { Invoke-HTMLPostProcessItems @args }
ProcessAllObjects = { Invoke-HTMLProcessAllObjects @args }
})
}
function Add-HTMLOptionsControl
{
$script:htmlForm = Get-XamlObject ($global:AppRootFolder + "\Xaml\DocumentationHTMLOptions.xaml") -AddVariables
Set-XamlProperty $script:htmlForm "cbHTMLDocumentOutputFile" "ItemsSource" ("[ { Name: `"Single file`",Value: `"Full`" }, { Name: `"One file per object`",Value: `"Object`" }]" | ConvertFrom-Json)
Set-XamlProperty $script:htmlForm "cbHTMLDocumentOutputFile" "SelectedValue" (Get-Setting "Documentation" "HTMLDocumentFileType" "Full")
Set-XamlProperty $script:htmlForm "chkHTMLOpenDocument" "IsChecked" (Get-Setting "Documentation" "HTMLOpenFile" $true)
Set-XamlProperty $script:htmlForm "txtHTMLDocumentName" "Text" (Get-Setting "Documentation" "HTMLDocumentName" "")
Set-XamlProperty $script:htmlForm "txtHTMLCSSFile" "Text" (Get-Setting "Documentation" "HTMLCSSFile" "")
Add-XamlEvent $script:htmlForm "browseHTMLDocumentName" "add_click" {
$sf = [System.Windows.Forms.SaveFileDialog]::new()
$sf.DefaultExt = "*.html"
$sf.Filter = "HTML (*.html)|*.html|All files (*.*)|*.*"
if($sf.ShowDialog() -eq "OK")
{
Set-XamlProperty $script:htmlForm "txtHTMLDocumentName" "Text" $sf.FileName
Save-Setting "Documentation" "HTMLDocumentName" $sf.FileName
}
}
Add-XamlEvent $script:htmlForm "browseHTMLCSSFile" "add_click" {
$of = [System.Windows.Forms.OpenFileDialog]::new()
$of.Multiselect = $false
$of.Filter = "CSS Files (*.css)|*.css|All files (*.*)|*.*"
if($of.ShowDialog())
{
Set-XamlProperty $script:htmlForm "txtHTMLCSSFile" "Text" $of.FileName
Save-Setting "Documentation" "HTMLCSSFile" $of.FileName
}
}
$script:htmlForm
}
function Invoke-HTMLPreProcessItems
{
$script:sectionAnchors = @()
$script:totAnchors = @()
$script:htmlStrings = $null
$script:currentItemFileName = $null
Save-Setting "Documentation" "HTMLDocumentName" (Get-XamlProperty $script:htmlForm "txtHTMLDocumentName" "Text" "")
Save-Setting "Documentation" "HTMLCSSFile" (Get-XamlProperty $script:htmlForm "txtHTMLCSSFile" "Text" "")
Save-Setting "Documentation" "HTMLOpenFile" (Get-XamlProperty $script:htmlForm "chkHTMLOpenDocument" "IsChecked")
Save-Setting "Documentation" "HTMLDocumentFileType" (Get-XamlProperty $script:htmlForm "cbHTMLDocumentOutputFile" "SelectedValue" '')
$defaultCSSFile = $global:AppRootFolder + "\Documentation\DefaultHTMLStyle.css"
$HTMLCssFile = Get-XamlProperty $script:htmlForm "txtHTMLCSSFile" "Text" $defaultCSSFile
if(-not $HTMLCssFile)
{
Write-Log "CSS file not specified. Using default" 2
$HTMLCssFile = $defaultCSSFile
}
elseif([IO.File]::Exists($HTMLCssFile) -eq -$false)
{
Write-Log "CSS file $($HTMLCssFile) not found. Using default" 2
$HTMLCssFile = $defaultCSSFile
}
$cssStyle = ""
if([IO.File]::Exists($HTMLCssFile))
{
Write-Log "Using CSS file $($HTMLCssFile)"
$cssStyle = ((Get-Content -Raw -Path $HTMLCssFile) + [System.Environment]::NewLine)
}
else
{
Write-Log "CSS file $($HTMLCssFile) not found. No styles applied" 2
}
$script:cssStyle = $cssStyle
$fileName = Expand-FileName (Get-XamlProperty $script:htmlForm "txtHTMLDocumentName" "Text" "%MyDocuments%\%Organization%-%Date%.html")
$script:outFile = $fileName
$script:documentPath = [io.path]::GetDirectoryName($fileName)
$script:outputType = (Get-XamlProperty $script:htmlForm "cbHTMLDocumentOutputFile" "SelectedValue" "Full")
if($script:outputType -eq "Object")
{
Write-Log "Document one file for each object + index file"
}
else
{
Write-Log "Document one single file for all objects"
$script:outputType = "Full"
$script:htmlStrings = [System.Text.StringBuilder]::new()
}
}
function Invoke-HTMLPostProcessItems
{
$userName = $global:me.displayName
if($global:me.givenName -and $global:me.surname)
{
$userName = ($global:me.givenName + " " + $global:me.surname)
}
$script:htmlContent = [System.Text.StringBuilder]::new()
$script:htmlContent.AppendLine("<HTML>")
$script:htmlContent.AppendLine($script:cssStyle)
$script:htmlContent.AppendLine("<H1 class='header-level1'>$((?? $script:htmlDocTitle "Intune documentation"))</H1>")
$mail = ""
if($global:me.mail)
{
$mail = " ($($global:me.mail))"
}
$script:htmlContent.AppendLine("Organization: $($global:Organization.displayName)<br />")
$script:htmlContent.AppendLine("Generated by: $userName$mail<br />")
$script:htmlContent.AppendLine("Generated: $((Get-Date).ToShortDateString()) $((Get-Date).ToLongTimeString())<br />")
if($script:sectionAnchors.Count -gt 0)
{
$script:htmlContent.AppendLine("<br />")
$script:htmlContent.AppendLine("<H2 class='header-level2'>Table of Contents</H2>")
}
$tocMaxLevel = 4
foreach($header in $script:sectionAnchors)
{
if($tocMaxLevel -gt 0 -and $header.Level -gt $tocMaxLevel)
{
continue
}
$script:htmlContent.AppendLine("<a href='$($header.FileName)#$($header.Anchor)' class='anchor-style anchor-level$($header.Level)'>$($header.Name)</a><br />")
}
if($script:sectionAnchors.Count -gt 0)
{
$script:htmlContent.AppendLine("<br />")
}
$htmlText = $script:htmlContent.ToString()
if($script:outputType -eq "Full")
{
$htmlText += $script:htmlStrings.ToString()
}
$htmlText += "</HTML>"
Save-DocumentationFile $htmlText $script:outFile -OpenFile:((Get-Setting "Documentation" "HTMLOpenFile" $true) -eq $true)
}
function Invoke-HTMLNewObjectGroup
{
param($obj, $documentedObj)
$script:objectHeaderLevel = 2
$objectTypeString = Get-ObjectTypeString $obj.Object $obj.ObjectType
Add-HTMLHeader (?? $objectTypeString $obj.ObjectType.Title)
}
function Invoke-HTMLNewObjectType
{
param($obj, $documentedObj, [int]$groupCategoryCount = 0)
$script:objectHeaderLevel = 3
if($obj.ObjectType.GroupId -eq "EndpointSecurity")
{
$objectTypeString = $obj.CategoryName
}
else
{
$objectTypeString = $obj.ObjectType.Title
}
Add-HTMLHeader (?? $objectTypeString $obj.ObjectType.Title)
$script:objectHeaderLevel = 4
}
function Invoke-HTMLNewObjectGroup2
{
param($groupId)
$script:objectHeaderLevel = 2
$objectTypeString = Get-ObjectTypeString -ObjectType $groupId
Add-HTMLHeader (?? $objectTypeString $obj.ObjectType.Title)
}
function Invoke-HTMLNewObjectType2
{
param($objectTypeName)
$script:objectHeaderLevel = 3
Add-HTMLHeader $objectTypeName
$script:objectHeaderLevel = 4
}
function Add-HTMLHeader
{
param ($headerText, [int]$level = $script:objectHeaderLevel, [switch]$ToT, [switch]$SkipTOC)
if($script:htmlStrings)
{
$prefix = ""
if($ToT -eq $true)
{
$prefix = "Table $(($script:totAnchors.Count + 1)). "
}
if($ToT -eq $true)
{
$sectionAnchor = "table-$(($script:totAnchors.Count + 1))"
}
else
{
$sectionAnchor = "section-$(($script:sectionAnchors.Count + 1))"
}
$script:htmlStrings.AppendLine("<H$($level) id=`"$prefix$($sectionAnchor)`" class='header-level$($level)'>$headerText</H$($level)>")
$FileName = $script:currentItemFileName
}
else
{
$sectionAnchor = $null
$FileName = $null
}
if($ToT -eq $true)
{
$script:totAnchors += [PSCustomObject]@{
Name = $headerText
Anchor = $sectionAnchor
Level = $level
FileName = $FileName
}
}
elseif($SkipTOC -ne $true)
{
$script:sectionAnchors += [PSCustomObject]@{
Name = $headerText
Anchor = $sectionAnchor
Level = $level
FileName = $FileName
}
}
}
function Invoke-HTMLProcessItem
{
param($obj, $objectType, $documentedObj)
if(!$documentedObj -or !$obj -or !$objectType) { return }
$objName = Get-GraphObjectName $obj $objectType
if($script:outputType -eq "Object")
{
$script:totAnchors = @()
$script:htmlStrings = [System.Text.StringBuilder]::new()
$script:currentItemFileName = (Remove-InvalidFileNameChars "$($objName).html")
}
Add-HTMLHeader $objName
$script:htmlStrings.AppendLine("<br />")
try
{
foreach($tableType in @("BasicInfo","FilteredSettings"))
{
if($tableType -eq "BasicInfo")
{
$properties = @("Name","Value")
}
elseif($global:txtHTMLDocumentationProperties.SelectedValue -eq 'extended' -and $documentedObj.DisplayProperties)
{
$properties = @("Name","Value","Description")
}
elseif($global:txtHTMLDocumentationProperties.SelectedValue -eq 'custom' -and $global:txtHTMLCustomProperties.Text)
{
$properties = @()
foreach($prop in $global:txtHTMLCustomProperties.Text.Split(","))
{
# This will add language support for custom columens (or replacing existing header)
$propInfo = $prop.Split('=')
if(($propInfo | measure).Count -gt 1)
{
$properties += $propInfo[0]
Set-DocColumnHeaderLanguageId $propInfo[0] $propInfo[1]
}
else
{
$properties += $prop
}
}
}
else
{
$properties = (?? $documentedObj.DefaultDocumentationProperties (@("Name","Value")))
}
$lngId = ?: ($tableType -eq "BasicInfo") "SettingDetails.basics" "TableHeaders.settings" -AddCategories
Add-HTMLTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId -AddCategories -AddSubcategories
}
if(($documentedObj.ComplianceActions | measure).Count -gt 0)
{
$properties = @("Action","Schedule","MessageTemplate","EmailCC")
Add-HTMLTableItems $obj $objectType $documentedObj.ComplianceActions $properties "Category.complianceActionsLabel"
}
if(($documentedObj.ApplicabilityRules | measure).Count -gt 0)
{
$properties = @("Rule","Property","Value")
Add-HTMLTableItems $obj $objectType $documentedObj.ApplicabilityRules $properties "SettingDetails.applicabilityRules"
}
Add-HTMLObjectSettings $obj $objectType $documentedObj
if(($documentedObj.Assignments | measure).Count -gt 0)
{
if($documentedObj.Assignments[0].RawIntent)
{
$properties = @("GroupMode","Group","Filter","FilterMode")
$settingsObj = $documentedObj.Assignments | Where { $_.Settings -ne $null } | Select -First 1
if($settingsObj)
{
foreach($objProp in $settingsObj.Settings.Keys)
{
if($objProp -in $properties) { continue }
if($objProp -in @("Category","RawIntent")) { continue }
$properties += ("Settings." + $objProp)
}
}
}
else
{
$isFilterAssignment = $false
foreach($assignment in $documentedObj.Assignments)
{
if(($assignment.target.PSObject.Properties | Where Name -eq "deviceAndAppManagementAssignmentFilterType"))
{
$isFilterAssignment = $true
break
}
}
$properties = @("Group")
if($isFilterAssignment)
{
$properties += @("Filter","FilterMode")
}
}
Add-HTMLTableItems $obj $objectType $documentedObj.Assignments $properties "TableHeaders.assignments" -AddCategories
}
}
catch
{
Write-LogError "Failed to process object $objName" $_.Exception
}
if($script:outputType -eq "Object")
{
$script:htmlContent = [System.Text.StringBuilder]::new()
$script:htmlContent.AppendLine("<HTML>")
$script:htmlContent.AppendLine($script:cssStyle)
$htmlText = $script:htmlContent.ToString()
$htmlText += $script:htmlStrings.ToString()
$htmlText += "</HTML>"
$fileName = "$($script:documentPath)\$($script:currentItemFileName)"
Save-DocumentationFile $htmlText $fileName
$script:htmlStrings = $null
}
}
function Add-HTMLTableItems
{
param($obj, $objectType, $items, $properties, $lngId, [switch]$AddCategories, [switch]$AddSubcategories, $captionOverride)
if($captionOverride)
{
$caption = $captionOverride
}
elseif($lngId)
{
$caption = "$((Get-LanguageString $lngId)) - $((Get-GraphObjectName $obj $objectType))"
}
else
{
$caption = "$((Get-GraphObjectName $obj $objectType)) ($($objectType.Title))"
}
$tableText = [System.Text.StringBuilder]::new()
$tableText.AppendLine("<table class='table-settings'>")
# Add Header row
$tableText.AppendLine("<tr>")
$columnCount = 0
foreach($prop in $properties)
{
$tableText.AppendLine("<th>$((Invoke-DocTranslateColumnHeader $prop.Split(".")[-1]))</th>")
$columnCount++
}
$tableText.AppendLine("</tr>")
$curCategory = ""
$curSubCategory = ""
$columnCategory = $null
$columnSubCategory = $null
$row = 1
foreach($itemObj in $items)
{
$newCategory = $false
$newSubCategory = $false
$additionalRowClass = ""
if($itemObj.Category -and $curCategory -ne $itemObj.Category -and $AddCategories -eq $true)
{
# Add Category row
$tableText.AppendLine("<tr>")
$tableText.AppendLine("<td colspan=`"$($columnCount)`" class='category-level1'>$($itemObj.Category)</td>")
$tableText.AppendLine("</tr>")
$curCategory = $itemObj.Category
$curSubCategory = ""
$row = 1
$newCategory = $true
$curentPropertyIndex = 0
}
if($itemObj.SubCategory -and $curSubCategory -ne $itemObj.SubCategory -and $AddSubcategories -eq $true)
{
# Add Sub-category row
$tableText.AppendLine("<tr>")
$tableText.AppendLine("<td colspan=`"$($columnCount)`" class='category-level2'>$($itemObj.SubCategory)</td>")
$tableText.AppendLine("</tr>")
$curSubCategory = $itemObj.SubCategory
$row = 1
$newSubCategory = $true
$curentPropertyIndex = 0
}
if($itemObj.PropertyIndex -is [int] -and $itemObj.PropertyIndex -gt 0 -and $itemObj.PropertyIndex -eq 1)
{
$curentPropertyIndex = $itemObj.PropertyIndex
$additionalRowClass = "row-new-property"
}
try
{
if(($row % 2) -eq 1)
{
$rowClass = "row-odd"
}
else
{
$rowClass = "row-even"
}
$row++
$tableText.AppendLine("<tr class='$($rowClass) $($additionalRowClass)'>")
$curCol = 1
foreach($prop in $properties)
{
try
{
$propArr = $prop.Split('.')
$tmpObj = $itemObj
$propName = $propArr[-1]
for($x = 0; $x -lt ($propArr.Count - 1);$x++)
{
$tmpObj = $tmpObj."$($propArr[$x])"
}
if($propName -eq "Value" -and ($itemObj.FullValueTable | measure).Count -gt 0)
{
$tableText.AppendLine("<td><table class='table-value'>")
$tableText.AppendLine("<tr>")
foreach($tableObjectProp in $itemObj.FullValueTable[0].PSObject.Properties)
{
$tableText.AppendLine("<th>$($tableObjectProp.Name)</th>")
}
$tableText.AppendLine("</tr>")
foreach($tableValue in $itemObj.FullValueTable)
{
$tableText.AppendLine("<tr>")
foreach($tableObjectProp in $itemObj.FullValueTable[0].PSObject.Properties)
{
$tableText.AppendLine("<td>$($tableValue."$($tableObjectProp.Name)")</td>")
}
$tableText.AppendLine("</tr>")
}
$tableText.AppendLine("</table></td>")
}
else
{
$style = ""
if($curCol -eq 1 -and $itemObj.Level)
{
try
{
$level = [int]$itemObj.Level
$style = " style='padding-left:$((5 + ($level * 5)))px;'"
}
catch{}
}
$tableText.AppendLine("<td class='property-column$($curCol)'$style>$((Set-HTMLText $tmpObj.$propName))</td>")
}
}
catch
{
Write-LogError "Failed to add property value for $prop" $_.Exception
}
$curCol++
}
}
catch
{
Write-Log "Failed to process property" 2
}
finally
{
$tableText.AppendLine("</tr>")
}
}
$tableText.AppendLine("</table>")
$script:htmlStrings.Append($tableText.ToString())
Add-HTMLHeader $caption -level 6
}
function Invoke-HTMLProcessAllObjects
{
param($documentationInfo)
$scopeTagInfo = Get-TableObjects "ScopeTags"
if($allObjectTypeObjdocumentationInfoects.ObjectType.Id -eq "ScopeTags")
{
if(($documentationInfo.Items | measure).Count -gt 0)
{
Add-HTMLHeader $documentationInfo.TypeName
Add-HTMLTableItems $null $documentationInfo.ObjectType $documentationInfo.Items -captionOverride (Get-LanguageString "SettingDetails.scopeTags")
}
}
}
function Set-HTMLText
{
param([string]$text, [switch]$NoCodeBlock)
if(-not $text)
{
return
}
$txtSummary = ""
if($text -and $text.Length -gt 250)
{
$summaryMax = 40
# Show the first row or the first $max characters if first row is too short or too long
$idx = $text.IndexOfAny(@("`r","`n"))
if($idx -gt 10 -and $idx -lt 50)
{
$summaryMax = $idx
}
$txtSummary = $text.SubString(0,$summaryMax)
}
$code = $false
if($NoCodeBlock -ne $true)
{
$trimText = $text.Trim()
if($trimText.StartsWith("<") -and $trimText.EndsWith(">"))
{
$code = $true
$text = "<pre class='code'>$($text.Replace('&', '&amp;').Replace('<', '&lt;').Replace('>', '&gt;').Replace('"', '&quot;'))</pre>"
if($txtSummary)
{
$txtSummary = $txtSummary.Replace('&', '&amp;').Replace('<', '&lt;').Replace('>', '&gt;').Replace('"', '&quot;')
}
}
}
if($code -eq $false)
{
$text = $text.Replace("`r`n", "<br />")
$text = $text.Replace("`n", "<br />")
$text = $text.Replace('&', '&amp;')
}
if($txtSummary)
{
"<details class='description'><summary data-open='Minimize' data-close='$($txtSummary)...expand'></summary>$text</details>"
}
else
{
$text
}
}
function Add-HTMLObjectSettings
{
param($obj, $objectType, $documentedObj)
foreach($objectScript in $documentedObj.Scripts)
{
if(-not $objectScript.ScriptContent -or -not $objectScript.Caption) { continue }
$script:htmlStrings.AppendLine("<pre class='code'>")
$script:htmlStrings.AppendLine($objectScript.ScriptContent)
$script:htmlStrings.AppendLine("</pre>")
Add-HTMLHeader $objectScript.Caption -Level 6 -SkipTOC
}
}
+311 -128
View File
@@ -1,34 +1,127 @@
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.0' '1.1.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
{ {
Add-OutputType ([PSCustomObject]@{ Add-OutputType ([PSCustomObject]@{
Name="Markdown (Experimental)" Name="Markdown"
Value="md" Value="md"
#OutputOptions = (Add-MDOptionsControl) OutputOptions = (Add-MDOptionsControl)
#Activate = { Invoke-MDActivate @args } #Activate = { Invoke-MDActivate @args }
PreProcess = { Invoke-MDPreProcessItems @args } PreProcess = { Invoke-MDPreProcessItems @args }
NewObjectGroup = { Invoke-MDNewObjectGroup @args } NewObjectGroup = { Invoke-MDNewObjectGroup2 @args }
NewObjectType = { Invoke-MDNewObjectType2 @args }
Process = { Invoke-MDProcessItem @args } Process = { Invoke-MDProcessItem @args }
PostProcess = { Invoke-MDPostProcessItems @args } PostProcess = { Invoke-MDPostProcessItems @args }
ProcessAllObjects = { Invoke-MDProcessAllObjects @args } ProcessAllObjects = { Invoke-MDProcessAllObjects @args }
}) })
} }
function Add-MDOptionsControl
{
$script:mdForm = Get-XamlObject ($global:AppRootFolder + "\Xaml\DocumentationMDOptions.xaml") -AddVariables
Set-XamlProperty $script:mdForm "txtMDDocumentName" "Text" (Get-Setting "Documentation" "MDDocumentName" "")
Set-XamlProperty $script:mdForm "txtMDCSSFile" "Text" (Get-Setting "Documentation" "MDCSSFile" "")
Set-XamlProperty $script:mdForm "chkMDIncludeCSS" "IsChecked" (Get-Setting "Documentation" "MDIncludeCSS" $true)
Set-XamlProperty $script:mdForm "chkMDOpenDocument" "IsChecked" (Get-Setting "Documentation" "MDOpenFile" $true)
Set-XamlProperty $script:mdForm "cbMDDocumentOutputFile" "ItemsSource" ("[ { Name: `"Single file`",Value: `"Full`" }, { Name: `"One file per object`",Value: `"Object`" }]" | ConvertFrom-Json)
Set-XamlProperty $script:mdForm "cbMDDocumentOutputFile" "SelectedValue" (Get-Setting "Documentation" "MDDocumentFileType" "Full")
Add-XamlEvent $script:mdForm "browseMDDocumentName" "add_click" {
$sf = [System.Windows.Forms.SaveFileDialog]::new()
$sf.DefaultExt = "*.md"
$sf.Filter = "MD (*.md)|*.md|All files (*.*)|*.*"
if($sf.ShowDialog() -eq "OK")
{
Set-XamlProperty $script:MDForm "txtMDDocumentName" "Text" $sf.FileName
Save-Setting "Documentation" "MDDocumentName" $sf.FileName
}
}
Add-XamlEvent $script:mdForm "browseMDCSSFile" "add_click" {
$of = [System.Windows.Forms.OpenFileDialog]::new()
$of.Multiselect = $false
$of.Filter = "CSS Files (*.css)|*.css|All files (*.*)|*.*"
if($of.ShowDialog())
{
Set-XamlProperty $script:mdForm "txtMDCSSFile" "Text" $of.FileName
Save-Setting "Documentation" "txtMDCSSFile" $of.FileName
}
}
$script:mdForm
}
function Invoke-MDProcessAllObjects
{
param($allObjectTypeObjects, $objectType)
}
function Invoke-MDPreProcessItems function Invoke-MDPreProcessItems
{ {
$script:mdStrings = [System.Text.StringBuilder]::new()
$script:sectionAnchors = @() $script:sectionAnchors = @()
$script:totAnchors = @() $script:totAnchors = @()
$script:mdStrings = $null
$script:currentItemFileName = $null
Save-Setting "Documentation" "MDDocumentName" (Get-XamlProperty $script:mdForm "txtMDDocumentName" "Text" "")
Save-Setting "Documentation" "MDIncludeCSS" (Get-XamlProperty $script:mdForm "chkMDIncludeCSS" "IsChecked")
Save-Setting "Documentation" "MDCSSFile" (Get-XamlProperty $script:mdForm "txtMDCSSFile" "Text" "")
Save-Setting "Documentation" "MDOpenFile" (Get-XamlProperty $script:mdForm "chkMDOpenDocument" "IsChecked")
Save-Setting "Documentation" "MDDocumentFileType" (Get-XamlProperty $script:mdForm "cbMDDocumentOutputFile" "SelectedValue" '')
$defaultCSSFile = $global:AppRootFolder + "\Documentation\DefaultMDStyle.css"
$MDCssFile = Get-XamlProperty $script:mdForm "txtMDCSSFile" "Text" $defaultCSSFile
if(-not $MDCssFile)
{
Write-Log "CSS file not specified. Using default" 2
$MDCssFile = $defaultCSSFile
}
elseif([IO.File]::Exists($MDCssFile) -eq -$false)
{
Write-Log "CSS file $($MDCssFile) not found. Using default" 2
$MDCssFile = $defaultCSSFile
}
$cssStyle = ""
if([IO.File]::Exists($MDCssFile))
{
Write-Log "Using CSS file $($MDCssFile)"
$cssStyle = Get-Content -Raw -Path $MDCssFile
$cssStyle += [System.Environment]::NewLine
}
else
{
Write-Log "CSS file $($MDCssFile) not found. No styles applied" 2
}
$script:cssStyle = $cssStyle
$fileName = Expand-FileName (Get-XamlProperty $script:mdForm "txtMDDocumentName" "Text" "%MyDocuments%\%Organization%-%Date%.md")
$script:outFile = $fileName
$script:documentPath = [io.path]::GetDirectoryName($fileName)
$script:outputType = (Get-XamlProperty $script:mdForm "cbMDDocumentOutputFile" "SelectedValue" "Full")
if($script:outputType -eq "Object")
{
Write-Log "Document one file for each object + index file"
}
else
{
Write-Log "Document one single file for all objects"
$script:outputType = "Full"
$script:mdStrings = [System.Text.StringBuilder]::new()
}
} }
function Invoke-MDPostProcessItems function Invoke-MDPostProcessItems
{ {
$userName = $global:me.displayName $userName = $global:me.displayName
if($global:me.givenName -and $global:me.surname) if($global:me.givenName -and $global:me.surname)
{ {
@@ -59,24 +152,38 @@ function Invoke-MDPostProcessItems
foreach($header in $script:sectionAnchors) foreach($header in $script:sectionAnchors)
{ {
$script:mdContent.AppendLine("[$($header.Name)](#$($header.Anchor))`n") $indent = [String]::new(" ", (($header.Level - 1) * 2))
$script:mdContent.AppendLine("$($indent)- [$($header.Name)]($($header.FileName)#$($header.Anchor))`n")
} }
$mdText = $script:cssStyle
$script:mdContent.AppendLine("") $script:mdContent.AppendLine("")
$mdText = $script:mdContent.ToString() $mdText += $script:mdContent.ToString()
$mdText += $script:mdStrings.ToString() if($script:outputType -eq "Full")
{
$mdText += $script:mdStrings.ToString()
}
$fileName = Expand-FileName "%MyDocuments%\%Organization%-%Date%.md" Save-DocumentationFile $mdText $script:outFile -OpenFile:((Get-Setting "Documentation" "MDOpenFile" $true) -eq $true)
<#
$fileName = Expand-FileName (Get-XamlProperty $script:mdForm "txtMDDocumentName" "Text" "%MyDocuments%\%Organization%-%Date%.md")
try try
{ {
$mdText | Out-File -FilePath $fileName -Force -Encoding utf8 -ErrorAction Stop $mdText | Out-File -FilePath $fileName -Force -Encoding utf8 -ErrorAction Stop
Write-Log "Markdown document $fileName saved successfully" Write-Log "Markdown document $fileName saved successfully"
if((Get-Setting "Documentation" "MDOpenFile" $true) -eq $true)
{
Invoke-Item $fileName
}
} }
catch catch
{ {
Write-LogError "Failed to save Markdown file" $_.Exception Write-LogError "Failed to save Markdown file: $fileName." $_.Exception
} }
#>
} }
function Invoke-MDNewObjectGroup function Invoke-MDNewObjectGroup
@@ -86,7 +193,39 @@ function Invoke-MDNewObjectGroup
$objectTypeString = Get-ObjectTypeString $obj.Object $obj.ObjectType $objectTypeString = Get-ObjectTypeString $obj.Object $obj.ObjectType
Add-MDHeader "$((?? $objectTypeString $obj.ObjectType.Title))" -Level 1 -USEHtml Add-MDHeader "$((?? $objectTypeString $obj.ObjectType.Title))" -Level 1 -USEHtml
}
function Invoke-MDNewObjectType
{
param($obj, $documentedObj, [int]$groupCategoryCount = 0)
if($obj.ObjectType.GroupId -eq "EndpointSecurity")
{
$objectTypeString = $obj.CategoryName
}
else
{
$objectTypeString = $obj.ObjectType.Title
}
Add-MDHeader "$((?? $objectTypeString $obj.ObjectType.Title))" -Level 2 -USEHtml
}
function Invoke-MDNewObjectGroup2
{
param($groupId)
$objectTypeString = Get-ObjectTypeString -ObjectType $groupId
Add-MDHeader $objectTypeString -Level 1 -USEHtml
}
function Invoke-MDNewObjectType2
{
param($objectTypeName)
Add-MDHeader $objectTypeName -Level 2 -USEHtml
} }
function Invoke-MDProcessItem function Invoke-MDProcessItem
@@ -97,7 +236,14 @@ function Invoke-MDProcessItem
$objName = Get-GraphObjectName $obj $objectType $objName = Get-GraphObjectName $obj $objectType
Add-MDHeader $objName -Level 2 -USEHtml if($script:outputType -eq "Object")
{
$script:totAnchors = @()
$script:mdStrings = [System.Text.StringBuilder]::new()
$script:currentItemFileName = "./$((Remove-InvalidFileNameChars "$($objName).md").Replace(" ","_"))"
}
Add-MDHeader $objName -Level 3 -USEHtml
$script:mdStrings.AppendLine("") $script:mdStrings.AppendLine("")
@@ -164,7 +310,6 @@ function Invoke-MDProcessItem
if(($documentedObj.Assignments | measure).Count -gt 0) if(($documentedObj.Assignments | measure).Count -gt 0)
{ {
$params = @{}
if($documentedObj.Assignments[0].RawIntent) if($documentedObj.Assignments[0].RawIntent)
{ {
$properties = @("GroupMode","Group","Filter","FilterMode") $properties = @("GroupMode","Group","Filter","FilterMode")
@@ -197,15 +342,26 @@ function Invoke-MDProcessItem
{ {
$properties += @("Filter","FilterMode") $properties += @("Filter","FilterMode")
} }
$params.Add("AddCategories", $true)
} }
Add-MDTableItems $obj $objectType $documentedObj.Assignments $properties "TableHeaders.assignments" @params Add-MDTableItems $obj $objectType $documentedObj.Assignments $properties "TableHeaders.assignments" -AddCategories
} }
} }
catch catch
{ {
Write-LogError "Failed to process object $objName" $_.Exception Write-LogError "Failed to process object $objName" $_.Exception
}
if($script:outputType -eq "Object")
{
$script:mdContent = [System.Text.StringBuilder]::new()
$script:mdContent.AppendLine($script:cssStyle)
$mdText = $script:mdContent.ToString()
$mdText += $script:mdStrings.ToString()
$fileName = "$($script:documentPath)\$($script:currentItemFileName)"
Save-DocumentationFile $mdText $fileName
$script:mdStrings = $null
} }
} }
@@ -227,24 +383,17 @@ function Add-MDTableItems
} }
$tableText = [System.Text.StringBuilder]::new() $tableText = [System.Text.StringBuilder]::new()
$tableText.AppendLine("<table>") $tableText.AppendLine("<table class='table-settings'>")
$tableText.AppendLine("<tr>") $tableText.AppendLine("<tr class='table-header1'>")
$columnHeaders = "|"
$columnChars = "|"
$columnCount = 0 $columnCount = 0
foreach($prop in $properties) foreach($prop in $properties)
{ {
$tableText.AppendLine("<td> $($prop.Split(".")[-1]) </td>") $tableText.AppendLine("<td>$((Invoke-DocTranslateColumnHeader $prop.Split(".")[-1]))</td>")
$columnCount++ $columnCount++
$columnHeaders += ((Invoke-DocTranslateColumnHeader ($prop.Split(".")[-1])) + "|")
$columnChars += "----|"
} }
$tableText.AppendLine("</tr>") $tableText.AppendLine("</tr>")
#Add-MDText $columnHeaders
#Add-MDText $columnChars
$curCategory = "" $curCategory = ""
$curSubCategory = "" $curSubCategory = ""
@@ -253,34 +402,39 @@ function Add-MDTableItems
foreach($itemObj in $items) foreach($itemObj in $items)
{ {
$additionalRowClass = ""
if($itemObj.Category -and $curCategory -ne $itemObj.Category -and $AddCategories -eq $true) if($itemObj.Category -and $curCategory -ne $itemObj.Category -and $AddCategories -eq $true)
{ {
$tableText.AppendLine("<tr>") $tableText.AppendLine("<tr>")
$tableText.AppendLine("<td colspan=`"$($columnCount)`">`n`n**$((Set-MDText $itemObj.Category))**`n`n</td>") $tableText.AppendLine("<td colspan=`"$($columnCount)`" class='category-level1'>$((Set-MDText $itemObj.Category))</td>")
$tableText.AppendLine("</tr>") $tableText.AppendLine("</tr>")
#$columnCategory = "|**" + (Set-MDText $itemObj.Category) + "**|"
#Add-MDText $columnCategory
$curCategory = $itemObj.Category $curCategory = $itemObj.Category
$curSubCategory = "" $curSubCategory = ""
$curentPropertyIndex = 0
} }
if($itemObj.SubCategory -and $curSubCategory -ne $itemObj.SubCategory -and $AddSubcategories -eq $true) if($itemObj.SubCategory -and $curSubCategory -ne $itemObj.SubCategory -and $AddSubcategories -eq $true)
{ {
$tableText.AppendLine("<tr>") $tableText.AppendLine("<tr>")
$tableText.AppendLine("<td colspan=`"$($columnCount)`">`n`n***$((Set-MDText $itemObj.SubCategory))***`n`n</td>") $tableText.AppendLine("<td colspan=`"$($columnCount)`" class='category-level2'>$((Set-MDText $itemObj.SubCategory))</td>")
$tableText.AppendLine("</tr>") $tableText.AppendLine("</tr>")
#$columnSubCategory = "|***" + (Set-MDText $itemObj.SubCategory) + "***|"
#Add-MDText $columnSubCategory
$curSubCategory = $itemObj.SubCategory $curSubCategory = $itemObj.SubCategory
$curentPropertyIndex = 0
}
if($itemObj.PropertyIndex -is [int] -and $itemObj.PropertyIndex -gt 0 -and $itemObj.PropertyIndex -eq 1)
{
$curentPropertyIndex = $itemObj.PropertyIndex
$additionalRowClass = "row-new-property"
} }
#$columnData = "|"
try try
{ {
$tableText.AppendLine("<tr>") $tableText.AppendLine("<tr class='$($additionalRowClass)'>")
$curCol = 1
foreach($prop in $properties) foreach($prop in $properties)
{ {
try try
@@ -293,7 +447,49 @@ function Add-MDTableItems
{ {
$tmpObj = $tmpObj."$($propArr[$x])" $tmpObj = $tmpObj."$($propArr[$x])"
} }
$tableText.AppendLine("<td>$((Set-MDText "$($tmpObj.$propName)" -CodeBlock))</td>")
if($propName -eq "Value" -and ($itemObj.FullValueTable | measure).Count -gt 0)
{
$tableText.AppendLine("<td><table class='table-value'>")
$tableText.AppendLine("<tr>")
foreach($tableObjectProp in $itemObj.FullValueTable[0].PSObject.Properties)
{
$tableText.AppendLine("<td class='table-header1'>$($tableObjectProp.Name)</td>")
}
$tableText.AppendLine("</tr>")
foreach($tableValue in $itemObj.FullValueTable)
{
$tableText.AppendLine("<tr>")
foreach($tableObjectProp in $itemObj.FullValueTable[0].PSObject.Properties)
{
$tableText.AppendLine("<td>$($tableValue."$($tableObjectProp.Name)")</td>")
}
$tableText.AppendLine("</tr>")
}
$tableText.AppendLine("</table></td>")
}
else
{
$style = ""
if($curCol -eq 1 -and $itemObj.Level)
{
try
{
$level = [int]$itemObj.Level
$style = " style='padding-left:$((5 + ($level * 5)))px !important;'"
}
catch{}
}
$params = @{}
if($curCol -gt 0)
{
$params.Add("CodeBlock", $true)
}
$tableText.AppendLine("<td class='property-column$($curCol)'$style>$((Set-MDText $tmpObj.$propName @params))</td>")
}
#$columnData += "$((Set-MDText "$($tmpObj.$propName)"))|" #$columnData += "$((Set-MDText "$($tmpObj.$propName)"))|"
} }
catch catch
@@ -301,6 +497,7 @@ function Add-MDTableItems
#$columnData += "|" #$columnData += "|"
Write-LogError "Failed to add property value for $prop" $_.Exception Write-LogError "Failed to add property value for $prop" $_.Exception
} }
$curCol++
} }
} }
@@ -337,57 +534,93 @@ function Add-MDText
function Set-MDText function Set-MDText
{ {
param($text, [switch]$CodeBlock) param([string]$text, [switch]$CodeBlock)
if($null -eq $text) { return }
$txtSummary = ""
$textOut = ""
if($text -and $text.Length -gt 250)
{
$summaryMax = 40
# Show the first row or the first $max characters if first row is too short or too long
$idx = $text.IndexOfAny(@("`r","`n"))
if($idx -gt 10 -and $idx -lt 50)
{
$summaryMax = $idx
}
$txtSummary = $text.SubString(0,$summaryMax)
}
if($CodeBlock -eq $true) if($CodeBlock -eq $true)
{ {
$trimText = $text.Trim() $trimText = $text.Trim()
if($trimText.StartsWith("<") -and $trimText.EndsWith(">")) if($trimText.StartsWith("<?xml") -or $trimText.StartsWith("<xml") -or ($trimText.StartsWith("<") -and $trimText.EndsWith(">")))
{ {
return ([Environment]::NewLine + [Environment]::NewLine + "``````xml" + [Environment]::NewLine + $text + [Environment]::NewLine + "``````" + [Environment]::NewLine + [Environment]::NewLine) $textOut = ([Environment]::NewLine + [Environment]::NewLine + "``````xml" + [Environment]::NewLine + $text + [Environment]::NewLine + "``````" + [Environment]::NewLine + [Environment]::NewLine)
} }
} }
if($CodeBlock -eq $false -or -not $textOut)
{
$text = $text.Replace("|", '`|')
$text = $text.Replace("*", '`*')
$text = $text.Replace("$", '`$')
$text = $text.Replace("`r`n", "<br />")
$textOut = $text.Replace("`n", "<br />")
}
$text = $text.Replace("|", '`|') if($txtSummary)
$text = $text.Replace("*", '`*') {
$text = $text.Replace("$", '`$') "<details class='description'><summary data-open='Minimize' data-close='$($txtSummary)...expand'></summary>$textOut</details>"
$text = $text.Replace("`r`n", "<br />") }
$text = $text.Replace("`n", "<br />") else
{
$text $textOut
}
} }
function Add-MDHeader function Add-MDHeader
{ {
param($text, [int]$level = 1, [switch]$AddParagraph, [switch]$UseHTML, [switch]$ToT, [switch]$SkipTOC) param($text, [int]$level = 1, [switch]$AddParagraph, [switch]$UseHTML, [switch]$ToT, [switch]$SkipTOC)
$prefix = "" if($script:mdStrings)
if($ToT -eq $true)
{
$prefix = "Table $(($script:totAnchors.Count + 1)). "
}
if($UseHTML -eq $true)
{ {
$prefix = ""
if($ToT -eq $true) if($ToT -eq $true)
{ {
$sectionAnchor = "table-$(($script:totAnchors.Count + 1))" $prefix = "Table $(($script:totAnchors.Count + 1)). "
} }
else
{
$sectionAnchor = "section-$(($script:sectionAnchors.Count + 1))"
}
$script:mdStrings.AppendLine("<h$level id=`"$prefix$($sectionAnchor)`">$text</h$level>")
}
else
{
# Warnig: Not complete! Use HTML if not working...
$text = "$prefix$text"
$sectionAnchor = $text.ToLower().Replace(" ","-").Replace("[","").Replace("]","")
$mdHeader = [String]::new('#',$level) if($UseHTML -eq $true)
$script:mdStrings.AppendLine("$mdHeader $text") {
if($ToT -eq $true)
{
$sectionAnchor = "table-$(($script:totAnchors.Count + 1))"
}
else
{
$sectionAnchor = "section-$(($script:sectionAnchors.Count + 1))"
}
$script:mdStrings.AppendLine("<h$level id=`"$prefix$($sectionAnchor)`">$text</h$level>")
}
else
{
# Warnig: Not complete! Use HTML if not working...
$text = "$prefix$text"
$sectionAnchor = $text.ToLower().Replace(" ","-").Replace("[","").Replace("]","")
$mdHeader = [String]::new('#',$level)
$script:mdStrings.AppendLine("$mdHeader $text")
}
$FileName = $script:currentItemFileName
}
else
{
$sectionAnchor = $null
$FileName = $null
} }
if($ToT -eq $true) if($ToT -eq $true)
@@ -395,6 +628,8 @@ function Add-MDHeader
$script:totAnchors += [PSCustomObject]@{ $script:totAnchors += [PSCustomObject]@{
Name = $text Name = $text
Anchor = $sectionAnchor Anchor = $sectionAnchor
FileName = $FileName
Level = $level
} }
} }
elseif($SkipTOC -ne $true) elseif($SkipTOC -ne $true)
@@ -402,6 +637,8 @@ function Add-MDHeader
$script:sectionAnchors += [PSCustomObject]@{ $script:sectionAnchors += [PSCustomObject]@{
Name = $text Name = $text
Anchor = $sectionAnchor Anchor = $sectionAnchor
FileName = $FileName
Level = $level
} }
} }
@@ -415,68 +652,14 @@ function Add-MDHeader
function Add-MDObjectSettings function Add-MDObjectSettings
{ {
param($obj, $objectType, $documentedObj) param($obj, $objectType, $documentedObj)
if($obj."@OData.Type" -eq "#microsoft.graph.deviceManagementScript") foreach($objectScript in $documentedObj.Scripts)
{ {
if($obj.ScriptContent) if(-not $objectScript.ScriptContent -or -not $objectScript.Caption) { continue }
{
$script:mdStrings.AppendLine("~~~powershell")
$script:mdStrings.AppendLine((Get-DocScriptContent $obj.ScriptContent))
$script:mdStrings.AppendLine("~~~")
$caption = "{1} - {0}" -f $obj.fileName,(Get-LanguageString "WindowsManagement.powerShellScriptObjectName")
Add-MDHeader $caption -Level 6 -SkipTOC -AddParagraph
}
}
if($obj."@OData.Type" -eq "#microsoft.graph.deviceShellScript")
{
if($obj.ScriptContent)
{
$script:mdStrings.AppendLine("~~~shell")
$script:mdStrings.AppendLine((Get-DocScriptContent $obj.ScriptContent))
$script:mdStrings.AppendLine("~~~")
$caption = "{1} - {0}" -f $obj.fileName,(Get-LanguageString "WindowsManagement.shellScriptObjectName") $script:mdStrings.AppendLine("~~~powershell")
Add-MDHeader $caption -Level 6 -SkipTOC -AddParagraph $script:mdStrings.AppendLine($objectScript.ScriptContent)
} $script:mdStrings.AppendLine("~~~")
} Add-MDHeader $objectScript.Caption -Level 6 -SkipTOC -AddParagraph
elseif($obj."@OData.Type" -eq "#microsoft.graph.deviceHealthScript")
{
if($obj.detectionScriptContent)
{
$script:mdStrings.AppendLine("~~~powershell")
$script:mdStrings.AppendLine((Get-DocScriptContent $obj.detectionScriptContent))
$script:mdStrings.AppendLine("~~~")
$caption = Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label"
Add-MDHeader $caption -Level 6 -SkipTOC -AddParagraph
}
if($obj.remediationScriptContent)
{
$script:mdStrings.AppendLine("~~~powershell")
$script:mdStrings.AppendLine((Get-DocScriptContent $obj.remediationScriptContent))
$script:mdStrings.AppendLine("~~~")
$caption = Get-LanguageString "ProactiveRemediations.Create.Settings.RemediationScriptMultiLineTextBox.label"
Add-MDHeader $caption -Level 6 -SkipTOC -AddParagraph
}
}
elseif($obj."@OData.Type" -eq "#microsoft.graph.win32LobApp")
{
foreach($rule in ($obj.requirementRules | Where { $_.'@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptRequirement" } ))
{
$script:mdStrings.AppendLine("~~~powershell")
$script:mdStrings.AppendLine((Get-DocScriptContent $obj.scriptContent))
$script:mdStrings.AppendLine("~~~")
$caption = "{0} - {1}" -f @($obj.displayName, "Requirement script")
Add-MDHeader $caption -Level 6 -SkipTOC -AddParagraph
}
foreach($rule in ($obj.detectionRules | Where { $_.'@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptDetection" } ))
{
$script:mdStrings.AppendLine("~~~powershell")
$script:mdStrings.AppendLine((Get-DocScriptContent $obj.scriptContent))
$script:mdStrings.AppendLine("~~~")
$caption = "{0} - {1}" -f @($obj.displayName,(Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label"))
Add-MDHeader $caption -Level 6 -SkipTOC -AddParagraph
}
} }
} }
+53 -105
View File
@@ -3,7 +3,7 @@
#https://docs.microsoft.com/en-us/office/vba/api/overview/word #https://docs.microsoft.com/en-us/office/vba/api/overview/word
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.3.0' '1.5.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -76,8 +76,6 @@ function Add-WordOptionsControl
$global:txtWordTitleProperty.Text = Get-Setting "Documentation" "WordTitleProperty" "Intune documentation" $global:txtWordTitleProperty.Text = Get-Setting "Documentation" "WordTitleProperty" "Intune documentation"
$global:txtWordSubjectProperty.Text = Get-Setting "Documentation" "WordSubjectProperty" "Intune documentation" $global:txtWordSubjectProperty.Text = Get-Setting "Documentation" "WordSubjectProperty" "Intune documentation"
$global:chkWordIncludeScripts.IsChecked = ((Get-Setting "Documentation" "WordIncludeScripts" "true") -ne "false")
$global:chkWordExcludeScriptSignature.IsChecked = ((Get-Setting "Documentation" "WordExcludeScriptSignature" "false") -ne "false")
$global:chkWordAttachJsonFile.IsChecked = ((Get-Setting "Documentation" "WordAttatchJsonFile" "false") -ne "false") $global:chkWordAttachJsonFile.IsChecked = ((Get-Setting "Documentation" "WordAttatchJsonFile" "false") -ne "false")
$global:txtWordScriptTableStyle.Text = Get-Setting "Documentation" "WordScriptTableStyle" "" $global:txtWordScriptTableStyle.Text = Get-Setting "Documentation" "WordScriptTableStyle" ""
@@ -142,8 +140,6 @@ function Invoke-WordPreProcessItems
Save-Setting "Documentation" "WordTitleProperty" $global:txtWordTitleProperty.Text Save-Setting "Documentation" "WordTitleProperty" $global:txtWordTitleProperty.Text
Save-Setting "Documentation" "WordSubjectProperty" $global:txtWordSubjectProperty.Text Save-Setting "Documentation" "WordSubjectProperty" $global:txtWordSubjectProperty.Text
Save-Setting "Documentation" "WordIncludeScripts" $global:chkWordIncludeScripts.IsChecked
Save-Setting "Documentation" "WordExcludeScriptSignature" $global:chkWordExcludeScriptSignature.IsChecked
Save-Setting "Documentation" "WordAttatchJsonFile" $global:chkWordAttachJsonFile.IsChecked Save-Setting "Documentation" "WordAttatchJsonFile" $global:chkWordAttachJsonFile.IsChecked
Save-Setting "Documentation" "WordScriptTableStyle" $global:txtWordScriptTableStyle.Text Save-Setting "Documentation" "WordScriptTableStyle" $global:txtWordScriptTableStyle.Text
@@ -466,35 +462,22 @@ function Set-WordContentControlText
function Invoke-WordNewObjectGroup function Invoke-WordNewObjectGroup
{ {
param($obj, $documentedObj) param($groupId)
$script:objectHeaderLevel = 2 $objectTypeString = Get-ObjectTypeString -ObjectType $groupId
$objectTypeString = Get-ObjectTypeString $obj.Object $obj.ObjectType Add-DocText $objectTypeString $global:txtWordHeader1Style.Text
Add-DocText (?? $objectTypeString $obj.ObjectType.Title) $global:txtWordHeader1Style.Text
} }
function Invoke-WordNewObjectType function Invoke-WordNewObjectType
{ {
param($obj, $documentedObj, [int]$groupCategoryCount = 0) param($objectTypeName)
if($groupCategoryCount -le 1 -or -not $global:txtWordHeader3Style.Text) { return }
$script:objectHeaderLevel = 2 $script:objectHeaderLevel = 2
if($obj.ObjectType.GroupId -eq "EndpointSecurity") Add-DocText $objectTypeName (Get-ObjectLevelHeader)
{
$objectTypeString = $obj.CategoryName
}
else
{
$objectTypeString = $obj.ObjectType.Title
}
Add-DocText (?? $objectTypeString $obj.ObjectType.Title) (Get-ObjectLevelHeader) $script:objectHeaderLevel = 3
$script:objectHeaderLevel = 3;
} }
function local:Get-ObjectLevelHeader function local:Get-ObjectLevelHeader
@@ -610,6 +593,7 @@ function Invoke-WordProcessItem
$settingProps += ("Settings." + $objProp) $settingProps += ("Settings." + $objProp)
} }
} }
$params.Add("AddCategories", $true)
} }
else else
{ {
@@ -649,6 +633,7 @@ function Invoke-WordProcessItem
if($fi.Exists) if($fi.Exists)
{ {
$script:doc.Application.Selection.InlineShapes.AddOLEObject("",$fi.FullName,$false,$true,"$($env:WinDir)\System32\Notepad.exe",0,$fi.Name) $script:doc.Application.Selection.InlineShapes.AddOLEObject("",$fi.FullName,$false,$true,"$($env:WinDir)\System32\Notepad.exe",0,$fi.Name)
$script:doc.Application.Selection.TypeParagraph()
try { $fi.Delete() } catch {} # Cleanup try { $fi.Delete() } catch {} # Cleanup
} }
} }
@@ -666,12 +651,18 @@ function Set-DocTableSettingsItems
$secondColumn = $firstColumn + 1 $secondColumn = $firstColumn + 1
$script:docTable.Cell(1, $firstColumn).Range.Text = (Invoke-WordTranslateColumnHeader "Settings") $script:docTable.Cell(1, $firstColumn).Range.Text = (Invoke-DocTranslateColumnHeader "Settings")
$script:docTable.Cell(1, $secondColumn).Range.Text = "" $script:docTable.Cell(1, $secondColumn).Range.Text = ""
$row = 2 $row = 2
foreach($itemObj in $items) foreach($itemObj in $items)
{ {
#if($script:docTable.Rows($row).Cells.Count -eq 1) { $row++;continue } # Category / Sub-category
while($script:docTable.Cell($row,1).Next.RowIndex -gt $row)
{
# Category / Sub-category
$row++;
}
$script:docTable.Cell($row, $firstColumn).Range.Text = "" $script:docTable.Cell($row, $firstColumn).Range.Text = ""
$script:docTable.Cell($row, $secondColumn).Range.Text = "" $script:docTable.Cell($row, $secondColumn).Range.Text = ""
$script:docTable.Cell($row, $firstColumn).Split($properties.Count,1) $script:docTable.Cell($row, $firstColumn).Split($properties.Count,1)
@@ -680,7 +671,7 @@ function Set-DocTableSettingsItems
$cellRow = $row $cellRow = $row
foreach($settingProp in $properties) foreach($settingProp in $properties)
{ {
$script:docTable.Cell($cellRow, $firstColumn).Range.Text = (Invoke-WordTranslateColumnHeader ($settingProp.Split('.')[-1])) $script:docTable.Cell($cellRow, $firstColumn).Range.Text = (Invoke-DocTranslateColumnHeader ($settingProp.Split('.')[-1]))
$propArr = $settingProp.Split('.') $propArr = $settingProp.Split('.')
$tmpObj = $itemObj $tmpObj = $itemObj
@@ -690,7 +681,7 @@ function Set-DocTableSettingsItems
$tmpObj = $tmpObj."$($propArr[$x])" $tmpObj = $tmpObj."$($propArr[$x])"
} }
$script:docTable.Cell($cellRow, $secondColumn).Column.Cells($cellRow).Range.Text = "$($tmpObj.$propName)" $script:docTable.Cell($cellRow, $secondColumn).Range.Text = "$($tmpObj.$propName)"
$cellRow++ $cellRow++
} }
@@ -726,6 +717,7 @@ function Invoke-WordProcessAllObjects
$nameLabel = $obj.displayName $nameLabel = $obj.displayName
ID = $obj.Id ID = $obj.Id
$descriptionLable = $obj.Description $descriptionLable = $obj.Description
Object = $obj
} }
} }
@@ -794,10 +786,23 @@ function Add-DocTableItems
$curSubCategory = "" $curSubCategory = ""
$row = 2 $row = 2
$curentPropertyIndex = 0
foreach($itemObj in $items) foreach($itemObj in $items)
{ {
try try
{ {
if(($itemObj.Category -and $curCategory -ne $itemObj.Category -and $AddCategories -eq $true) -or
($itemObj.SubCategory -and $curSubCategory -ne $itemObj.SubCategory -and $AddSubcategories -eq $true))
{
$curentPropertyIndex = 0
}
if($itemObj.PropertyIndex -is [int] -and $itemObj.PropertyIndex -gt 0 -and $itemObj.PropertyIndex -eq 1)
{
$curentPropertyIndex = $itemObj.PropertyIndex
# !!! ToDo: Set style for new property
}
$i = 1 $i = 1
foreach($prop in $properties) foreach($prop in $properties)
{ {
@@ -831,9 +836,24 @@ function Add-DocTableItems
} }
} }
$levelExtra = ""
if($i -eq 1 -and $itemObj.Level)
{
try
{
$level = ([int]$itemObj.Level) # - 1
if($level -lt 0) { $level = 0 }
if($level -gt 0)
{
$levelExtra = [String]::new(" ", ($level * 2)) #Should probably use tab stops instead
}
}
catch{}
}
if($null -ne $propValue) if($null -ne $propValue)
{ {
$script:docTable.Cell($row, $i).Range.Text = $propValue $script:docTable.Cell($row, $i).Range.Text = "$levelExtra$propValue"
} }
if($propValueFull -and $global:chkWordDocumentationLimitAttach.IsChecked -eq $true) if($propValueFull -and $global:chkWordDocumentationLimitAttach.IsChecked -eq $true)
@@ -850,7 +870,6 @@ function Add-DocTableItems
$propValueFull | Out-File -LiteralPath $tmpFile -Force $propValueFull | Out-File -LiteralPath $tmpFile -Force
$fi = [IO.FileInfo]$tmpFile $fi = [IO.FileInfo]$tmpFile
[void]$script:docTable.Cell($row, $i).Range.InlineShapes.AddOLEObject("",$fi.FullName,$false,$true,"$($env:WinDir)\System32\Notepad.exe",0,"Full value") [void]$script:docTable.Cell($row, $i).Range.InlineShapes.AddOLEObject("",$fi.FullName,$false,$true,"$($env:WinDir)\System32\Notepad.exe",0,"Full value")
#$script:doc.Application.Selection.InlineShapes.AddOLEObject("",$fi.FullName,$false,$true,"$($env:WinDir)\System32\Notepad.exe",0,"Full value", $script:docTable.Cell($row, $i).Range)
try { $fi.Delete() } catch {} try { $fi.Delete() } catch {}
} }
} }
@@ -1041,85 +1060,14 @@ function Set-DocObjectStyle
$styleSet $styleSet
} }
function Add-DocObjectSettings
function Add-DocObjectSettings
{ {
param($obj, $objectType, $documentedObj) param($obj, $objectType, $documentedObj)
if($obj."@OData.Type" -eq "#microsoft.graph.deviceManagementScript") foreach($objectScript in $documentedObj.Scripts)
{ {
if($obj.ScriptContent -and $global:chkWordIncludeScripts.IsChecked -eq $true) if(-not $objectScript.ScriptContent -or -not $objectScript.Caption) { continue }
{
$caption = "{1} - {0}" -f $obj.displayName,(Get-LanguageString "WindowsManagement.powerShellScriptObjectName")
Add-DocTableScript $caption $obj.FileName (Get-DocScriptContent $obj.ScriptContent)
}
}
if($obj."@OData.Type" -eq "#microsoft.graph.deviceShellScript")
{
if($obj.ScriptContent -and $global:chkWordIncludeScripts.IsChecked -eq $true)
{
$caption = "{1} - {0}" -f $obj.displayName,(Get-LanguageString "WindowsManagement.shellScriptObjectName")
Add-DocTableScript $caption $obj.FileName (Get-DocScriptContent $obj.ScriptContent)
}
}
elseif($obj."@OData.Type" -eq "#microsoft.graph.deviceHealthScript")
{
if($obj.detectionScriptContent)
{
$caption = Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label"
$header = "{1} - {0}" -f $obj.displayName,$caption
Add-DocTableScript $header $caption (Get-DocScriptContent $obj.detectionScriptContent)
}
if($obj.remediationScriptContent) Add-DocTableScript $objectScript.Caption $objectScript.Header $objectScript.ScriptContent
{ }
$caption = Get-LanguageString "ProactiveRemediations.Create.Settings.RemediationScriptMultiLineTextBox.label"
$header = "{1} - {0}" -f $obj.displayName,$caption
Add-DocTableScript $header $caption (Get-DocScriptContent $obj.remediationScriptContent)
}
}
elseif($obj."@OData.Type" -eq "#microsoft.graph.win32LobApp")
{
foreach($rule in ($obj.requirementRules | Where { $_.'@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptRequirement" } ))
{
$caption = "{0} - {1}" -f @($obj.displayName, "Requirement script")
Add-DocTableScript $caption $rule.displayName (Get-DocScriptContent $rule.scriptContent)
}
foreach($rule in ($obj.detectionRules | Where { $_.'@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptDetection" } ))
{
$caption = "{0} - {1}" -f @($obj.displayName,(Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label"))
Add-DocTableScript $caption (Get-LanguageString "ProactiveRemediations.Create.Settings.DetectionScriptMultiLineTextBox.label") (Get-DocScriptContent $rule.scriptContent)
}
}
}
function Get-DocScriptContent
{
param($encodeContent)
if(-not $encodeContent) { return }
try
{
$scriptContent = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encodeContent))
if($global:chkWordExcludeScriptSignature.IsChecked -eq $true)
{
$x = $scriptContent.IndexOf("# SIG # Begin signature block")
if($x -gt 0)
{
$scriptContent = $scriptContent.SubString(0,$x)
$scriptContent = $scriptContent + "# SIG # Begin signature block`nSignature data excluded..."
}
}
$scriptContent
}
catch
{
}
} }
+400 -47
View File
@@ -1,5 +1,4 @@
<# <#
<#
.SYNOPSIS .SYNOPSIS
Module for managing Intune objects Module for managing Intune objects
@@ -11,7 +10,7 @@ This module is for the Endpoint Manager/Intune View. It manages Export/Import/Co
#> #>
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.7.3' '3.9.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -90,7 +89,7 @@ function Invoke-InitializeModule
Deactivating = { Invoke-EMDeactivateView } Deactivating = { Invoke-EMDeactivateView }
Activating = { Invoke-EMActivatingView } Activating = { Invoke-EMActivatingView }
Authentication = (Get-MSALAuthenticationObject) Authentication = (Get-MSALAuthenticationObject)
Authenticate = { Invoke-EMAuthenticateToMSAL } Authenticate = { Invoke-EMAuthenticateToMSAL @args }
AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM") AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM")
SaveSettings = { Invoke-EMSaveSettings } SaveSettings = { Invoke-EMSaveSettings }
@@ -121,7 +120,7 @@ function Invoke-InitializeModule
ViewID = "IntuneGraphAPI" ViewID = "IntuneGraphAPI"
API = "/identity/conditionalAccess/policies" API = "/identity/conditionalAccess/policies"
Permissons=@("Policy.Read.All","Policy.ReadWrite.ConditionalAccess","Application.Read.All") Permissons=@("Policy.Read.All","Policy.ReadWrite.ConditionalAccess","Application.Read.All")
Dependencies = @("NamedLocations","Applications","TermsOfUse") Dependencies = @("NamedLocations","Applications","TermsOfUse","AuthenticationStrengths","AssignmentFilters")
GroupId = "ConditionalAccess" GroupId = "ConditionalAccess"
ImportExtension = { Add-ConditionalAccessImportExtensions @args } ImportExtension = { Add-ConditionalAccessImportExtensions @args }
PreImportCommand = { Start-PreImportConditionalAccess @args } PreImportCommand = { Start-PreImportConditionalAccess @args }
@@ -129,21 +128,19 @@ function Invoke-InitializeModule
ExpandAssignmentsList = $false ExpandAssignmentsList = $false
}) })
if((Get-SettingValue "PreviewFeatures" $false) -eq $true) Add-ViewItem (New-Object PSObject -Property @{
{ Title = "Terms of use"
Add-ViewItem (New-Object PSObject -Property @{ Id = "TermsOfUse"
Title = "Terms of use" ViewID = "IntuneGraphAPI"
Id = "TermsOfUse" ViewProperties = @("id", "displayName")
ViewID = "IntuneGraphAPI" Expand = "files"
ViewProperties = @("id", "displayName") QUERYLIST = "`$expand=files"
Expand = "files" API = "/identityGovernance/termsOfUse/agreements"
QUERYLIST = "`$expand=files" Permissons=@("Agreement.ReadWrite.All")
API = "/identityGovernance/termsOfUse/agreements" PreImportCommand = { Start-PreImportTermsOfUse @args }
Permissons=@("Agreement.ReadWrite.All") PostExportCommand = { Start-PostExportTermsOfUse @args }
PreImportCommand = { Start-PreImportTermsOfUse @args } GroupId = "ConditionalAccess"
GroupId = "ConditionalAccess" })
})
}
Add-ViewItem (New-Object PSObject -Property @{ Add-ViewItem (New-Object PSObject -Property @{
Title = "Named Locations" Title = "Named Locations"
@@ -166,11 +163,13 @@ function Invoke-InitializeModule
PostListCommand = { Start-PostListEndpointSecurity @args } PostListCommand = { Start-PostListEndpointSecurity @args }
PostExportCommand = { Start-PostExportEndpointSecurity @args } PostExportCommand = { Start-PostExportEndpointSecurity @args }
PostFileImportCommand = { Start-PostFileImportEndpointSecurity @args } PostFileImportCommand = { Start-PostFileImportEndpointSecurity @args }
PostGetCommand = { Start-PostGetEndpointSecurity @args }
#PreCopyCommand = { Start-PreCopyEndpointSecurity @args } #PreCopyCommand = { Start-PreCopyEndpointSecurity @args }
PostCopyCommand = { Start-PostCopyEndpointSecurity @args } PostCopyCommand = { Start-PostCopyEndpointSecurity @args }
PreUpdateCommand = { Start-PreUpdateEndpointSecurity @args } PreUpdateCommand = { Start-PreUpdateEndpointSecurity @args }
Permissons=@("DeviceManagementConfiguration.ReadWrite.All") Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
GroupId = "EndpointSecurity" Dependencies = @("ReusableSettings")
GroupId = "EndpointSecurity"
}) })
Add-ViewItem (New-Object PSObject -Property @{ Add-ViewItem (New-Object PSObject -Property @{
@@ -254,11 +253,13 @@ function Invoke-InitializeModule
PreReplaceCommand = { Start-PreReplaceEnrollmentRestrictions @args } # Note: Uses same PreReplaceCommand as restrictions PreReplaceCommand = { Start-PreReplaceEnrollmentRestrictions @args } # Note: Uses same PreReplaceCommand as restrictions
PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args } # Note: Uses same PostReplaceCommand as restrictions PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args } # Note: Uses same PostReplaceCommand as restrictions
PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args } # Note: Uses same PreFilesImportCommand as restrictions PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args } # Note: Uses same PreFilesImportCommand as restrictions
PreImportAssignmentsCommand = { Start-PreImportAssignmentsEnrollmentRestrictions @args } # Note: Uses same PreFilesImportCommand as restrictions
PostListCommand = { Start-PostListESP @args } PostListCommand = { Start-PostListESP @args }
#PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args } # Note: Uses same PreUpdateCommand as restrictions #PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args } # Note: Uses same PreUpdateCommand as restrictions
#QUERYLIST = "`$filter=endsWith(id,'Windows10EnrollmentCompletionPageConfiguration')" #QUERYLIST = "`$filter=endsWith(id,'Windows10EnrollmentCompletionPageConfiguration')"
Permissons=@("DeviceManagementServiceConfig.ReadWrite.All") Permissons=@("DeviceManagementServiceConfig.ReadWrite.All")
SkipRemoveProperties = @('Id') SkipRemoveProperties = @('Id')
Dependencies = @("Applications")
AssignmentsType = "enrollmentConfigurationAssignments" AssignmentsType = "enrollmentConfigurationAssignments"
PropertiesToRemoveForUpdate = @('priority') PropertiesToRemoveForUpdate = @('priority')
GroupId = "WinEnrollment" GroupId = "WinEnrollment"
@@ -277,6 +278,7 @@ function Invoke-InitializeModule
PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args } PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args }
PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args } PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args }
PostListCommand = { Start-PostListEnrollmentRestrictions @args } PostListCommand = { Start-PostListEnrollmentRestrictions @args }
PreImportAssignmentsCommand = { Start-PreImportAssignmentsEnrollmentRestrictions @args }
#PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args } #PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args }
PropertiesToRemoveForUpdate = @('priority') PropertiesToRemoveForUpdate = @('priority')
Permissons=@("DeviceManagementServiceConfig.ReadWrite.All") Permissons=@("DeviceManagementServiceConfig.ReadWrite.All")
@@ -448,6 +450,11 @@ function Invoke-InitializeModule
PreUpdateCommand = { Start-PreUpdateApplication @args } PreUpdateCommand = { Start-PreUpdateApplication @args }
PreImportCommand = { Start-PreImportCommandApplication @args } PreImportCommand = { Start-PreImportCommandApplication @args }
DetailExtension = { Add-DetailExtensionApplications @args } DetailExtension = { Add-DetailExtensionApplications @args }
PreImportAssignmentsCommand = { Start-PreImportAssignmentsApplications @args }
PreDeleteCommand = { Start-PreDeleteApplications @args }
PostExportCommand = { Start-PostExportApplications @args }
PostListCommand = { Start-PostListApplications @args }
ExportExtension = { Add-ScriptExportExtensions @args }
GroupId = "Apps" GroupId = "Apps"
ScopeTagsReturnedInList = $false ScopeTagsReturnedInList = $false
}) })
@@ -551,6 +558,8 @@ function Invoke-InitializeModule
Icon="DeviceConfiguration" Icon="DeviceConfiguration"
PostExportCommand = { Start-PostExportSettingsCatalog @args } PostExportCommand = { Start-PostExportSettingsCatalog @args }
PreUpdateCommand = { Start-PreUpdateSettingsCatalog @args } PreUpdateCommand = { Start-PreUpdateSettingsCatalog @args }
PostGetCommand = { Start-PostGetSettingsCatalog @args }
Dependencies = @("ReusableSettings")
GroupId = "DeviceConfiguration" GroupId = "DeviceConfiguration"
}) })
@@ -580,6 +589,7 @@ function Invoke-InitializeModule
QUERYLIST = "`$filter=isBuiltIn%20eq%20false" QUERYLIST = "`$filter=isBuiltIn%20eq%20false"
Permissons=@("DeviceManagementRBAC.ReadWrite.All") Permissons=@("DeviceManagementRBAC.ReadWrite.All")
PostExportCommand = { Start-PostExportScopeTags @args } PostExportCommand = { Start-PostExportScopeTags @args }
PostGetCommand = { Start-PostGetScopeTags @args }
ImportOrder = 10 ImportOrder = 10
DocumentAll = $true DocumentAll = $true
GroupId = "TenantAdmin" GroupId = "TenantAdmin"
@@ -652,10 +662,13 @@ function Invoke-InitializeModule
PreDeleteCommand = { Start-PreDeleteDeviceHealthScripts @args } PreDeleteCommand = { Start-PreDeleteDeviceHealthScripts @args }
PreImportCommand = { Start-PreImportDeviceHealthScripts @args } PreImportCommand = { Start-PreImportDeviceHealthScripts @args }
PreUpdateCommand = { Start-PreUpdateDeviceHealthScripts @args } PreUpdateCommand = { Start-PreUpdateDeviceHealthScripts @args }
PostExportCommand = { Start-PostExportDeviceHealthScripts @args }
ExportExtension = { Add-ScriptExportExtensions @args }
Permissons=@("DeviceManagementConfiguration.ReadWrite.All") Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
GroupId = "EndpointAnalytics" GroupId = "EndpointAnalytics"
Icon = "Report" Icon = "Report"
AssignmentsType = "deviceHealthScriptAssignments" AssignmentsType = "deviceHealthScriptAssignments"
AssignmentProperties = @("target","runSchedule","runRemediationScript")
PropertiesToRemoveForUpdate = @('version','isGlobalScript','highestAvailableVersion') PropertiesToRemoveForUpdate = @('version','isGlobalScript','highestAvailableVersion')
}) })
@@ -690,13 +703,79 @@ function Invoke-InitializeModule
ViewProperties = @("fileName","status","Id") ViewProperties = @("fileName","status","Id")
}) })
#> #>
Add-ViewItem (New-Object PSObject -Property @{
Title = "Reusable Settings"
Id = "ReusableSettings"
ViewID = "IntuneGraphAPI"
API = "/deviceManagement/reusablePolicySettings"
PropertiesToRemove = @('Settings','@OData.Type')
PostGetCommand = { Start-PostGetReusableSettings @args }
ImportOrder = 70
Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
ExpandAssignmentsList = $false
SkipRemoveProperties = @("@OData.Type")
Icon = "EndpointSecurity"
GroupId = "EndpointSecurity"
})
Add-ViewItem (New-Object PSObject -Property @{
Title = "Authentication Strengths"
Id = "AuthenticationStrengths"
ViewID = "IntuneGraphAPI"
API = "/identity/conditionalAccess/authenticationStrengths/policies"
PreImportCommand = { Start-PreImportCommandAuthenticationStrengths @args }
PropertiesToRemove = @()
ImportOrder = 45
Permissons=@("Policy.ReadWrite.ConditionalAccess")
ExpandAssignmentsList = $false
Icon = "ConditionalAccess"
GroupId = "EndpointSecurity"
})
Add-ViewItem (New-Object PSObject -Property @{
Title = "Authentication Context"
Id = "AuthenticationContext"
ViewID = "IntuneGraphAPI"
API = "/identity/conditionalAccess/authenticationContextClassReferences"
PropertiesToRemove = @("@odata.type")
SkipRemoveProperties = @('Id')
ImportOrder = 46
PreImportCommand = { Start-PreImportCommandAuthenticationContext @args }
Permissons=@("Policy.ReadWrite.ConditionalAccess")
ExpandAssignmentsList = $false
Icon = "ConditionalAccess"
GroupId = "EndpointSecurity"
})
Add-ViewItem (New-Object PSObject -Property @{
Title = "W365 Provisioning Policies"
Id = "W365ProvisioningPolicies"
ViewID = "IntuneGraphAPI"
API = "/deviceManagement/virtualEndpoint/provisioningPolicies"
Permissons=@("CloudPC.ReadWrite.All")
Icon = "Devices"
GroupId = "DeviceConfiguration"
})
Add-ViewItem (New-Object PSObject -Property @{
Title = "W365 User Settings"
Id = "W365UserSettings"
ViewID = "IntuneGraphAPI"
API = "/deviceManagement/virtualEndpoint/userSettings"
Permissons = @("CloudPC.ReadWrite.All")
Icon = "Devices"
GroupId = "DeviceConfiguration"
})
} }
function Invoke-EMAuthenticateToMSAL function Invoke-EMAuthenticateToMSAL
{ {
param($params = @{})
$global:EMViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM" $global:EMViewObject.AppInfo = Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547" "EM"
Set-MSALCurrentApp $global:EMViewObject.AppInfo Set-MSALCurrentApp $global:EMViewObject.AppInfo
& $global:msalAuthenticator.Login -Account (?? $global:MSALToken.Account.UserName (Get-Setting "" "LastLoggedOnUser")) & $global:msalAuthenticator.Login -Account (?? $global:MSALToken.Account.UserName (Get-Setting "" "LastLoggedOnUser")) @params
} }
function Invoke-EMDeactivateView function Invoke-EMDeactivateView
@@ -863,7 +942,7 @@ function Set-EMViewPanel
$global:btnLoadAllPages.add_click({ $global:btnLoadAllPages.add_click({
Write-Status "Loading $($global:curObjectType.Title) objects" Write-Status "Loading $($global:curObjectType.Title) objects"
$graphObjects = @(Get-GraphObjects -property $global:curObjectType.ViewProperties -objectType $global:curObjectType -AllPages) [array]$graphObjects = Get-GraphObjects -property $global:curObjectType.ViewProperties -objectType $global:curObjectType -AllPages
$graphObjects | ForEach-Object { $global:dgObjects.ItemsSource.AddNewItem($_) | Out-Null } $graphObjects | ForEach-Object { $global:dgObjects.ItemsSource.AddNewItem($_) | Out-Null }
$global:dgObjects.ItemsSource.CommitNew() $global:dgObjects.ItemsSource.CommitNew()
Set-GraphPagesButtonStatus Set-GraphPagesButtonStatus
@@ -873,7 +952,7 @@ function Set-EMViewPanel
$global:btnLoadNextPage.add_click({ $global:btnLoadNextPage.add_click({
Write-Status "Loading $($global:curObjectType.Title) objects" Write-Status "Loading $($global:curObjectType.Title) objects"
$graphObjects = @(Get-GraphObjects -property $global:curObjectType.ViewProperties -objectType $global:curObjectType -SinglePage) [array]$graphObjects = Get-GraphObjects -property $global:curObjectType.ViewProperties -objectType $global:curObjectType -SinglePage
$graphObjects | ForEach-Object { $global:dgObjects.ItemsSource.AddNewItem($_) | Out-Null } $graphObjects | ForEach-Object { $global:dgObjects.ItemsSource.AddNewItem($_) | Out-Null }
$global:dgObjects.ItemsSource.CommitNew() $global:dgObjects.ItemsSource.CommitNew()
Set-GraphPagesButtonStatus Set-GraphPagesButtonStatus
@@ -1000,17 +1079,19 @@ function Start-PostListEndpointSecurity
if(-not $script:baseLineTemplates) { return } if(-not $script:baseLineTemplates) { return }
foreach($obj in $objList) foreach($obj in $objList)
{ {
if(-not $obj.Object.templateId) { continue } if(-not $obj.Object.templateId) { continue }
if($obj.Object.templateId -ne $baseLineTemplate.Id) if($obj.Object.templateId -ne $baseLineTemplate.Id)
{ {
$baseLineTemplate = $script:baseLineTemplates | Where Id -eq $obj.Object.templateId $baseLineTemplate = $script:baseLineTemplates | Where Id -eq $obj.Object.templateId
} }
if($baseLineTemplate) if($baseLineTemplate)
{ {
$obj | Add-Member -MemberType NoteProperty -Name "Type" -Value $baseLineTemplate.displayName $obj | Add-Member -MemberType NoteProperty -Name "Type" -Value $baseLineTemplate.displayName
$obj | Add-Member -MemberType NoteProperty -Name "Category" -Value (?: ($baseLineTemplate.templateSubtype -eq "none") $baseLineTemplate.templateType $baseLineTemplate.templateSubtype) $obj | Add-Member -MemberType NoteProperty -Name "Category" -Value (?: ($baseLineTemplate.templateSubtype -eq "none") $baseLineTemplate.templateType $baseLineTemplate.templateSubtype)
} }
} }
$objList $objList
} }
@@ -1028,7 +1109,7 @@ function Start-PostExportEndpointSecurity
$settings = Invoke-GraphRequest -Url "$($objectType.API)/$($obj.id)/settings" $settings = Invoke-GraphRequest -Url "$($objectType.API)/$($obj.id)/settings"
$settingsJson = "{ `"settings`": $((ConvertTo-Json $settings.value -Depth 20 ))`n}" $settingsJson = "{ `"settings`": $((ConvertTo-Json $settings.value -Depth 20 ))`n}"
$fileName = "$path\$((Remove-InvalidFileNameChars $fileName))_Settings.json" $fileName = "$path\$((Remove-InvalidFileNameChars $fileName))_Settings.json"
$settingsJson | Out-File -LiteralPath $fileName -Force Save-GraphObjectToFile $settingsJson $fileName
} }
function Start-PostFileImportEndpointSecurity function Start-PostFileImportEndpointSecurity
@@ -1039,7 +1120,7 @@ function Start-PostFileImportEndpointSecurity
if($settings) if($settings)
{ {
Start-GraphPreImport $settings Start-GraphPreImport $settings
Invoke-GraphRequest -Url "$($objectType.API)/$($obj.id)/updateSettings" -Body ($settings | ConvertTo-Json -Depth 20) -Method "POST" Invoke-GraphRequest -Url "$($objectType.API)/$($obj.id)/updateSettings" -Body ($settings | ConvertTo-Json -Depth 50) -Method "POST"
} }
} }
@@ -1123,6 +1204,18 @@ function Start-PreUpdateEndpointSecurity
Remove-Property $obj "templateId" Remove-Property $obj "templateId"
} }
function Start-PostGetEndpointSecurity
{
param($obj, $objectType)
Add-EndpointSecurityInfo $obj
}
function local:Add-EndpointSecurityInfo
{
param($obj, $baseLineTemplate = $null)
}
#endregion #endregion
#region #region
@@ -1133,7 +1226,7 @@ function Start-PostFileImportDeviceConfiguration
if($obj.'@OData.Type' -like "#microsoft.graph.windows10GeneralConfiguration") if($obj.'@OData.Type' -like "#microsoft.graph.windows10GeneralConfiguration")
{ {
$tmpObj = Get-Content -LiteralPath $importFile | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $importFile
if(($tmpObj.privacyAccessControls | measure).Count -gt 0) if(($tmpObj.privacyAccessControls | measure).Count -gt 0)
{ {
@@ -1829,15 +1922,23 @@ function Start-PostFileImportApplications
{ {
param($obj, $objectType, $file) param($obj, $objectType, $file)
$tmpObj = Get-Content -LiteralPath $file | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $file
if(-not ($obj.PSObject.Properties | Where Name -eq '@odata.type')) if(-not ($obj.PSObject.Properties | Where Name -eq '@odata.type'))
{ {
# Add @odata.type property if it is missing. Required by app package import # Add @odata.type property if it is missing. Required by app package import
$obj | Add-Member -MemberType NoteProperty -Name '@odata.type' -Value $objectType.'@odata.type' $obj | Add-Member -MemberType NoteProperty -Name '@odata.type' -Value $objectType.'@odata.type'
} }
$fi = [IO.FileInfo]$file
$tmpFilName = $fi.DirectoryName + "\" + $obj.FileName
if([IO.File]::Exists($tmpFilName) -eq $false)
{
$tmpFilName = $null
}
Start-ImportApp $obj Start-ImportApp $obj $tmpFilName
} }
function local:Start-ImportApp function local:Start-ImportApp
@@ -1923,7 +2024,6 @@ function Start-PreImportCommandApplication
@{ "Import" = $false } @{ "Import" = $false }
} }
Write-Log "### TEST ### OData.Type: $($obj.'@OData.Type')"
if($obj.'@OData.Type' -eq '#microsoft.graph.officeSuiteApp') if($obj.'@OData.Type' -eq '#microsoft.graph.officeSuiteApp')
{ {
if($obj.officeSuiteAppDefaultFileFormat -eq "notConfigured") if($obj.officeSuiteAppDefaultFileFormat -eq "notConfigured")
@@ -1982,6 +2082,117 @@ function Add-DetailExtensionApplications
} }
} }
function Start-PreImportAssignmentsApplications
{
param($obj, $objectType, $file, $assignments)
if($obj.'@odata.type' -eq "#microsoft.graph.windowsMicrosoftEdgeApp")
{
foreach($assignment in $assignments)
{
Remove-Property $assignment.target "deviceAndAppManagementAssignmentFilterId"
Remove-Property $assignment.target "deviceAndAppManagementAssignmentFilterType"
}
@{"Assignments"=$assignments}
}
elseif($obj.'@odata.type' -eq "#microsoft.graph.winGetApp")
{
Write-LogDebug "Wait for app to be published"
$i = 2
Start-Sleep -s ($i)
$x = 0
while($x -lt 10)
{
###!!!
$appInfo = Invoke-GraphRequest -Url "$($objectType.API)/$($obj.id)" -ODataMetadata "skip"
if($appInfo.publishingState -eq "Published")
{
Write-LogDebug "Application $($obj.displayName) is published"
return
}
Start-Sleep -s ($i)
$x++
if($x -ge 5) { $i++ }
}
Write-Log "Application '$($obj.displayName)' is not published. Skipping assignment" 2
@{"Import"=$false}
}
}
function Start-PreDeleteApplications
{
if($obj.'@odata.type' -eq "#microsoft.graph.microsoftStoreForBusinessApp")
{
# Don't delete Microsoft Store for Business Apps
@{ "Delete" = $false }
}
}
function Start-PostExportApplications
{
param($obj, $objectType, $path)
if($global:chkExportScript.IsChecked)
{
$fileName = Get-GraphObjectFile $obj $objectType
$fi = [IO.FileInfo]"$path\$fileName"
try
{
foreach($rule in ($obj.detectionRules | Where '@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptDetection"))
{
if($rule.ScriptContent)
{
[IO.File]::WriteAllBytes(("$path\$($fi.BaseName)_DetectionScript.ps1"), ([System.Convert]::FromBase64String($rule.ScriptContent)))
}
}
foreach($rule in $obj.requirementRules)
{
if($rule.'@OData.Type' -eq "#microsoft.graph.win32LobAppPowerShellScriptRequirement")
{
if($rule.ScriptContent)
{
[IO.File]::WriteAllBytes(("$path\$($fi.BaseName)_RequirementScript.ps1"), ([System.Convert]::FromBase64String($rule.ScriptContent)))
}
}
}
}
catch
{
Write-LogError "Failed to export scripts" $_.Exception
}
}
}
function Start-PostListApplications
{
param($objList, $objectType)
foreach($obj in ($objList | Where { $_.Object."@OData.Type" -eq "#microsoft.graph.winGetApp"}))
{
if($obj.Object.packageIdentifier -like "9*")
{
$installerType = "UWP"
}
elseif($obj.Object.packageIdentifier -like "X*")
{
$installerType = "Win32"
}
else
{
$objName = Get-GraphObjectName $obj.Object $objectType
Write-Log "Unknown package identifier for app $($objName): $($obj.Object.packageIdentifier)" 2
$installerType = "Unknown"
}
$obj.Object | Add-Member -MemberType NoteProperty -Name "InstallerType" -Value $installerType
}
$objList
}
#endregion #endregion
#region Group Policy/Administrative Templates functions #region Group Policy/Administrative Templates functions
@@ -2187,7 +2398,7 @@ function Start-PostExportAdministrativeTemplate
} }
$fileName = "$path\$((Remove-InvalidFileNameChars $fileName))_Settings.json" $fileName = "$path\$((Remove-InvalidFileNameChars $fileName))_Settings.json"
ConvertTo-Json $settings -Depth 20 | Out-File -LiteralPath $fileName -Force Save-GraphObjectToFile $settings $fileName
} }
function Start-PostCopyAdministrativeTemplate function Start-PostCopyAdministrativeTemplate
@@ -2208,7 +2419,7 @@ function Start-PostFileImportAdministrativeTemplate
$settings = Get-EMSettingsObject $obj $objectType $file -settingsProperty "definitionValues" -SettingsArray $settings = Get-EMSettingsObject $obj $objectType $file -settingsProperty "definitionValues" -SettingsArray
if($settings) if($settings)
{ {
$tmpObj = (Get-Content -LiteralPath $file) | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $file
Import-GPOSetting $obj $settings -CustomADMX:($tmpObj.policyConfigurationIngestionType -eq "Custom") Import-GPOSetting $obj $settings -CustomADMX:($tmpObj.policyConfigurationIngestionType -eq "Custom")
} }
@@ -2222,8 +2433,8 @@ function Start-LoadAdministrativeTemplate
$fi = [IO.FileInfo]$fileName $fi = [IO.FileInfo]$fileName
if($fi.Exists -eq $false) { return } if($fi.Exists -eq $false) { return }
$obj = Get-Content -LiteralPath $fi.FullName | ConvertFrom-Json $obj = Get-GraphObjectFromFile $fi.FullName
if($obj.definitionValues) if($obj.definitionValues)
{ {
@@ -2234,7 +2445,7 @@ function Start-LoadAdministrativeTemplate
if([IO.File]::Exists($settingsFile)) if([IO.File]::Exists($settingsFile))
{ {
$definitionValues = Get-Content -LiteralPath $settingsFile | ConvertFrom-Json $definitionValues = Get-GraphObjectFromFile $settingsFile
$obj | Add-Member Noteproperty -Name "definitionValues" -Value $definitionValues -Force $obj | Add-Member Noteproperty -Name "definitionValues" -Value $definitionValues -Force
} }
@@ -2444,7 +2655,7 @@ function Start-PostExportRoleDefinitions
$fileName = "$path\$((Remove-InvalidFileNameChars $fileName)).json" $fileName = "$path\$((Remove-InvalidFileNameChars $fileName)).json"
if([IO.File]::Exists($fileName)) if([IO.File]::Exists($fileName))
{ {
$tmpObj = Get-Content -LiteralPath $fileName | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $fileName
} }
else else
{ {
@@ -2468,7 +2679,7 @@ function Start-PostExportRoleDefinitions
if($roleAssignmentsArr.Count -gt 0) if($roleAssignmentsArr.Count -gt 0)
{ {
$tmpObj.RoleAssignments = $roleAssignmentsArr $tmpObj.RoleAssignments = $roleAssignmentsArr
$tmpObj | ConvertTo-Json -Depth 20 | Out-File -LiteralPath $fileName Save-GraphObjectToFile $tmpObj $fileName
} }
} }
} }
@@ -2485,7 +2696,7 @@ function Start-PostFileImportRoleDefinitions
{ {
param($obj, $objectType, $file) param($obj, $objectType, $file)
$tmpObj = Get-Content -LiteralPath $file | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $file
$loadedScopeTags = $global:LoadedDependencyObjects["ScopeTags"] $loadedScopeTags = $global:LoadedDependencyObjects["ScopeTags"]
if(($tmpObj.RoleAssignments | measure).Count -gt 0 -and ($loadedScopeTags | measure).Count -gt 0) if(($tmpObj.RoleAssignments | measure).Count -gt 0 -and ($loadedScopeTags | measure).Count -gt 0)
@@ -2535,6 +2746,21 @@ function Start-PreUpdateSettingsCatalog
@{"Method"="PUT"} @{"Method"="PUT"}
} }
function Start-PostGetSettingsCatalog
{
param($obj, $objectType)
if(-not $obj.Object.Assignments)
{
$url = "$($objectType.API)/$($obj.id)/assignments"
$assignments = (Invoke-GraphRequest -Url $url).Value
if($assignments)
{
$obj.Object.Assignments = $assignments
}
}
}
#endregion #endregion
#region Notification functions #region Notification functions
@@ -2551,7 +2777,7 @@ function Start-PostFileImportNotifications
{ {
param($obj, $objectType, $file) param($obj, $objectType, $file)
$tmpObj = Get-Content -LiteralPath $file | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $file
foreach($localizedNotificationMessage in $tmpObj.localizedNotificationMessages) foreach($localizedNotificationMessage in $tmpObj.localizedNotificationMessages)
{ {
@@ -2705,6 +2931,17 @@ function Start-PostListEnrollmentRestrictions
} }
} }
function Start-PreImportAssignmentsEnrollmentRestrictions
{
param($obj, $objectType, $file, $assignments)
if($obj.Priority -eq 0)
{
# Skip Assignment for Default Policy
@{ "Import" = $false }
}
}
#endregion #endregion
#region #region
@@ -2724,6 +2961,19 @@ function Start-PostExportScopeTags
Add-EMAssignmentsToExportFile $obj $objectType $path Add-EMAssignmentsToExportFile $obj $objectType $path
} }
function Start-PostGetScopeTags
{
param($obj, $objectType)
$strAPI = "$($objectType.API)/$($obj.Object.Id)/assignments"
$tmpObj = Invoke-GraphRequest -Url $strAPI
if(($tmpObj.value | measure).count -gt 0)
{
$obj.Object.assignments = $tmpObj.value
}
}
#endregion #endregion
#region AutoPilot #region AutoPilot
@@ -2793,6 +3043,34 @@ function Start-PreUpdateDeviceHealthScripts
} }
} }
function Start-PostExportDeviceHealthScripts
{
param($obj, $objectType, $path)
if($global:chkExportScript.IsChecked)
{
$fileName = Get-GraphObjectFile $obj $objectType
$fi = [IO.FileInfo]"$path\$fileName"
try
{
if($obj.detectionScriptContent)
{
[IO.File]::WriteAllBytes(("$path\$($fi.BaseName)_DetectionScript.ps1"), ([System.Convert]::FromBase64String($obj.detectionScriptContent)))
}
if($obj.remediationScriptContent)
{
[IO.File]::WriteAllBytes(("$path\$($fi.BaseName)_RemediationScript.ps1"), ([System.Convert]::FromBase64String($obj.remediationScriptContent)))
}
}
catch
{
Write-LogError "Failed to export scripts" $_.Exception
}
}
}
#endregion #endregion
#region Generic functions #region Generic functions
@@ -2815,7 +3093,7 @@ function Save-EMDefaultPolicy
# Clean up from old version of the script that used the wrong name for Default policies # Clean up from old version of the script that used the wrong name for Default policies
try { [IO.File]::Delete($oldFile) | Out-Null } Catch {} try { [IO.File]::Delete($oldFile) | Out-Null } Catch {}
} }
$obj | ConvertTo-Json -Depth 20 | Out-File -LiteralPath "$path\$((Remove-InvalidFileNameChars $fileName)).json" Save-GraphObjectToFile $obj "$path\$((Remove-InvalidFileNameChars $fileName)).json"
} }
} }
catch {} catch {}
@@ -2831,7 +3109,7 @@ function Get-EMSettingsObject
if($fi.Exists) if($fi.Exists)
{ {
# Settings property removed during import so lets try exported file first # Settings property removed during import so lets try exported file first
$tmpObj = (Get-Content -LiteralPath $fi.FullName) | ConvertFrom-Json $tmpObj = Get-GraphObjectFromFile $fi.FullName
if($SettingsArray -eq $true) if($SettingsArray -eq $true)
{ {
# Only the an array of settings is expected # Only the an array of settings is expected
@@ -2855,9 +3133,8 @@ function Get-EMSettingsObject
{ {
Write-Log "Settings file '$($fiSettings.FullName)' was not found" 2 Write-Log "Settings file '$($fiSettings.FullName)' was not found" 2
return return
} }
Get-GraphObjectFromFile $fiSettings.FullName
(Get-Content -LiteralPath $fiSettings.FullName) | ConvertFrom-Json
} }
else else
{ {
@@ -2880,7 +3157,8 @@ function Add-EMAssignmentsToExportFile
Write-Log "File not found: $fileName. Could not add assignments to file" 3 Write-Log "File not found: $fileName. Could not add assignments to file" 3
return return
} }
$tmpObj = Get-Content -LiteralPath $fileName | ConvertFrom-Json
$tmpObj = Get-GraphObjectFromFile $fileName
if(-not $url) if(-not $url)
{ {
@@ -2897,7 +3175,7 @@ function Add-EMAssignmentsToExportFile
{ {
$tmpObj.Assignments = $assignments $tmpObj.Assignments = $assignments
} }
ConvertTo-Json $tmpObj -Depth 20 | Out-File -LiteralPath $fileName -Force Save-GraphObjectToFile $tmpObj $fileName
} }
} }
@@ -3016,6 +3294,22 @@ function Start-PreImportConditionalAccess
{ {
$obj.state = $global:cbImportCAState.SelectedValue $obj.state = $global:cbImportCAState.SelectedValue
} }
if($obj.grantControls.authenticationStrength)
{
$obj.grantControls.operator = "AND"
$tmpObj = Get-GraphObjectFromFile $file
$authSetting = [PSCustomObject]@{
id = $tmpObj.grantControls.authenticationStrength.id
}
$obj.grantControls.authenticationStrength = $authSetting
}
if($obj.sessionControls.disableResilienceDefaults -eq $false)
{
$obj.sessionControls.disableResilienceDefaults = $null
}
} }
function Start-PostExportConditionalAccess function Start-PostExportConditionalAccess
@@ -3094,12 +3388,32 @@ function Start-PreImportTermsOfUse
return return
} }
Write-Log "Add file data: $pdfFile"
$bytes = [IO.File]::ReadAllBytes($pdfFile) $bytes = [IO.File]::ReadAllBytes($pdfFile)
$file.fileData = [PSCustomObject]@{ $file.fileData = [PSCustomObject]@{
data = [Convert]::ToBase64String($bytes) data = [Convert]::ToBase64String($bytes)
} }
} }
} }
function Start-PostExportTermsOfUse
{
param($obj, $objectType, $path)
foreach($file in $obj.Files)
{
$url = "agreements/$($obj.id)/file/localizations('$($file.id)')/fileData/data"
$data = (Invoke-GraphRequest -Url $url -ODataMetadata "Minimal").Value
if($data)
{
Write-Log "Save file $($file.FileName)"
$fileName = "$path\$($file.FileName)"
[IO.File]::WriteAllBytes($fileName, [System.Convert]::FromBase64String($data))
}
}
}
#endregion #endregion
#region ADMXFiles #region ADMXFiles
@@ -3174,7 +3488,46 @@ function Start-PreDeleteADMXFiles
@{ "Delete" = $false } @{ "Delete" = $false }
} }
#endregion
#region Reusable Groups
function Start-PostGetReusableSettings
{
param($obj, $objectType)
$strAPI = "$($objectType.API)/$($obj.Object.Id)?`$select=settinginstance,displayname,description"
$tmpObj = Invoke-GraphRequest -Url $strAPI
if($tmpObj.settingInstance)
{
$obj.Object | Add-Member Noteproperty -Name "settingInstance" -Value $tmpObj.settingInstance -Force
}
}
#endregon
#region Authentication Strength
function Start-PreImportCommandAuthenticationStrengths
{
param($obj, $objectType, $file, $assignments)
if($obj.policyType -ne "custom")
{
Write-Log "Built-in Authentication Strength objects cannot be imported" 2
@{ "Import" = $false }
}
}
#endregion
#region Authentication Strength
function Start-PreImportCommandAuthenticationContext
{
param($obj, $objectType, $file, $assignments)
#@{ "Method" = "PATCH" }
}
#endregion
#nedregion
Export-ModuleMember -alias * -function * Export-ModuleMember -alias * -function *
+55 -1
View File
@@ -10,7 +10,7 @@ This module is for the Endpoint Info View. It shows read-only objects in Intune
#> #>
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.5.0' '3.9.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -22,6 +22,7 @@ function Invoke-InitializeModule
ID = "EMInfoGraphAPI" ID = "EMInfoGraphAPI"
ViewPanel = $viewPanel ViewPanel = $viewPanel
AuthenticationID = "MSAL" AuthenticationID = "MSAL"
AllowDelete = $false
ItemChanged = { Show-GraphObjects -ObjectTypeChanged; Invoke-ModuleFunction "Invoke-GraphObjectsChanged"; Write-Status ""} ItemChanged = { Show-GraphObjects -ObjectTypeChanged; Invoke-ModuleFunction "Invoke-GraphObjectsChanged"; Write-Status ""}
Activating = { Invoke-EMInfoActivatingView } Activating = { Invoke-EMInfoActivatingView }
Authentication = (Get-MSALAuthenticationObject) Authentication = (Get-MSALAuthenticationObject)
@@ -87,6 +88,24 @@ function Invoke-InitializeModule
Permissons=@("DeviceManagementServiceConfig.ReadWrite.All") Permissons=@("DeviceManagementServiceConfig.ReadWrite.All")
ExpandAssignmentsList = $false ExpandAssignmentsList = $false
}) })
Add-ViewItem (New-Object PSObject -Property @{
Title = "Tenant Settings"
Id = "TenantSettings"
ViewID = "EMInfoGraphAPI"
API = "deviceManagement/settings"
NameProperty = "Name"
AlwaysImport = $true
#ExportFullObject = $true
ViewProperties = @("Name")
ShowButtons = @("Import","Export","View")
Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
PreImportCommand = { Start-PreImportTenantSettings @args }
GetObjectName = { Start-GetObjectNameTenantSettings @args }
PostListCommand = { Start-PostListTenantSettings @args }
Icon="TenantSettings"
ExpandAssignmentsList = $false
})
} }
function Invoke-EMInfoActivatingView function Invoke-EMInfoActivatingView
@@ -107,4 +126,39 @@ function Invoke-EMInfoAuthenticateToMSAL
{ {
& $global:msalAuthenticator.Login -Account $usr & $global:msalAuthenticator.Login -Account $usr
} }
}
function Start-PreImportTenantSettings
{
param($obj, $objectType)
$objClone = $obj | ConvertTo-Json -Depth 50 | ConvertFrom-Json
if($objClone.deviceComplianceCheckinThresholdDays -lt 1)
{
$objClone.deviceComplianceCheckinThresholdDays = 30
}
Remove-Property $objClone "@odata.type"
$json = @{ "settings" = $objClone } | ConvertTo-Json -Depth 50
(Invoke-GraphRequest -Url "deviceManagement" -Content $json -HttpMethod "PATCH") | Out-Null
return (@{"Import"=$false})
}
function Start-GetObjectNameTenantSettings
{
param($objList, $objectType)
return "Tenant Settings"
}
function Start-PostListTenantSettings
{
param($objList, $objectType)
if(($objList | measure).Count -eq 1)
{
$objList[0].Name = "Tenant Settings"
#$objList[0] | Add-Member -MemberType NoteProperty -Name "SettingName" -Value "Tenant Settings"
}
$objList
} }
+50 -15
View File
@@ -10,7 +10,7 @@ This module manages Application objects in Intune e.g. uploading application fil
#> #>
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.4.0' '3.9.0'
} }
######################################################################################### #########################################################################################
@@ -357,26 +357,37 @@ function Send-IntuneFileToAzureStorage
$ids += $id $ids += $id
$start = $chunk * $chunkSizeInBytes $start = $chunk * $chunkSizeInBytes
$length = [Math]::Min($chunkSizeInBytes, $fileSize - $start) $length = [Math]::Min([uint64]($chunkSizeInBytes), [uint64]($fileSize - $start))
$bytes = $reader.ReadBytes($length) $bytes = $reader.ReadBytes($length)
$currentChunk = $chunk + 1 $currentChunk = $chunk + 1
Write-Status "Uploading file to Azure Storage`n`nUploading chunk $currentChunk of $chunks ($(($currentChunk / $chunks*100))%)" Write-Status "Uploading file to Azure Storage`n`nUploading chunk $currentChunk of $chunks ($(("{0:N2}" -f ($currentChunk / $chunks*100)))%)"
Write-AzureStorageChunk $sasUri $id $bytes if((Write-AzureStorageChunk $sasUri $id $bytes) -eq $false)
{
Write-Log "Upload failed. Abourting..." 3
break
}
if ($currentChunk -lt $chunks -and $sasRenewalTimer.ElapsedMilliseconds -ge 450000) if ($currentChunk -lt $chunks -and $sasRenewalTimer.ElapsedMilliseconds -ge 450000)
{ {
Request-RenewAzureStorageUpload $fileUri Request-RenewAzureStorageUpload $fileUri
$sasRenewalTimer.Restart() $sasRenewalTimer.Restart()
} }
} }
$reader.Close()
} }
catch
{
Write-Log "Failed to send file to Intune. $($_.Exception.Message)" 3
}
finally finally
{ {
if ($reader -ne $null) { $reader.Dispose() } if ($reader -ne $null)
{
$reader.Close()
$reader.Dispose()
}
} }
# Finalize the upload. # Finalize the upload.
@@ -443,15 +454,39 @@ function Write-AzureStorageChunk
$curProgressPreference = $ProgressPreference $curProgressPreference = $ProgressPreference
$ProgressPreference = 'SilentlyContinue' $ProgressPreference = 'SilentlyContinue'
try
{ $success = $false
$response = Invoke-WebRequest $uri -Method Put -Headers $headers -Body $encodedBody $retryCount = 0
} while($true)
catch {
{
Write-Log "Failed to upload file chunk. $($_.Exception.Message)" 3 try
} {
$response = Invoke-WebRequest $uri -Method Put -Headers $headers -Body $encodedBody -UseBasicParsing
if($retryCount -gt 0)
{
Write-Log "Chunk uploaded successfully"
}
$success = $true
break
}
catch
{
if($_.Exception.HResult -eq -2146233079 -and $retryCount -lt 6)
{
Write-Log "Failed to upload file chunk. Retry in 10 s" 2
$retryCount++
Start-Sleep -Seconds 10
}
else
{
Write-Log "Failed to upload file chunk. $($_.Exception.Message)" 3
break
}
}
}
$ProgressPreference = $curProgressPreference $ProgressPreference = $curProgressPreference
$success
} }
function Get-IntuneKey function Get-IntuneKey
+5 -6
View File
@@ -10,7 +10,7 @@ This module manages Authentication for the application with MSAL. It is also res
#> #>
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.7.2' '3.8.1'
} }
$global:msalAuthenticator = $null $global:msalAuthenticator = $null
@@ -37,7 +37,7 @@ function Invoke-InitializeModule
Name = "Azure AD China" Name = "Azure AD China"
Value = "china" Value = "china"
URL = "login.partner.microsoftonline.cn" URL = "login.partner.microsoftonline.cn"
GraphURL = "https://microsoftgraph.chinacloudapi.cn" GraphURL = "microsoftgraph.chinacloudapi.cn"
} }
) )
@@ -209,16 +209,15 @@ function Set-MSALGraphEnvironment
} }
} }
} }
elseif($cuAADEnv.GraphURL) elseif($curAADEnv.GraphURL)
{ {
$graphEnv = $cuAADEnv.GraphURL $graphEnv = $curAADEnv.GraphURL
} }
Write-Log "Use Graph environment: $graphEnv" Write-Log "Use Graph environment: $graphEnv"
$global:MSALGraphEnvironment = $graphEnv $global:MSALGraphEnvironment = $graphEnv
} }
function Get-MSALUserInfo function Get-MSALUserInfo
{ {
if($global:MSALToken) if($global:MSALToken)
@@ -231,7 +230,7 @@ function Get-MSALUserInfo
$global:Me = $tmpMe $global:Me = $tmpMe
Write-Log "Get profile picture" Write-Log "Get profile picture"
$global:profilePhoto = "$($env:LOCALAPPDATA)\CloudAPIPowerShellManagement\$($global:Me.Id).jpeg" $global:profilePhoto = "$($env:LOCALAPPDATA)\CloudAPIPowerShellManagement\$($global:Me.Id).jpeg"
MSGraph\Invoke-GraphRequest "me/photos/48x48/`$value" -OutFile $global:profilePhoto -SkipAuthentication | Out-Null MSGraph\Invoke-GraphRequest "me/photos/48x48/`$value" -OutFile $global:profilePhoto -SkipAuthentication -NoError | Out-Null
} }
Write-Log "Get organization info" Write-Log "Get organization info"
+342 -101
View File
@@ -10,7 +10,7 @@ This module manages Microsoft Grap fuctions like calling APIs, managing graph ob
#> #>
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.7.2' '3.9.0'
} }
$global:MSGraphGlobalApps = @( $global:MSGraphGlobalApps = @(
@@ -451,7 +451,35 @@ function Invoke-GraphRequest
} }
else else
{ {
Write-LogError "Failed to invoke MS Graph with URL $Url (Request ID: $requestId). Status code: $($_.Exception.Response.StatusCode)" $_.Excption $extMessage = $null
try
{
$reader = New-Object System.IO.StreamReader($_.Exception.Response.GetResponseStream())
$reader.BaseStream.Position = 0
$reader.DiscardBufferedData()
$response = $reader.ReadToEnd() | ConvertFrom-Json
if($response.Error.Message)
{
$extMessage = $response.Error.Message
try
{
if($response.Error.Message.StartsWith("{") -and $response.Error.Message.EndsWith("}"))
{
$message = $response.Error.Message | ConvertFrom-Json
if($message.Message)
{
$extMessage = ". Response message: $($message.Message)"
}
}
}
catch {}
$extMessage = ". Response message: $($extMessage)"
}
}
catch{}
Write-LogError "Failed to invoke MS Graph with URL $Url (Request ID: $requestId). Status code: $($_.Exception.Response.StatusCode)$extMessage" $_.Exception
} }
} }
} while($retryRequest -eq $true) } while($retryRequest -eq $true)
@@ -559,21 +587,31 @@ function Get-GraphObjects
if($graphObjects -and ($graphObjects | GM -Name Value -MemberType NoteProperty)) if($graphObjects -and ($graphObjects | GM -Name Value -MemberType NoteProperty))
{ {
$retObjects = $graphObjects.Value $retObjects = $graphObjects.Value
} }
else else
{ {
$retObjects = $graphObjects $retObjects = $graphObjects
} }
$graphObjects = Add-GraphObjectProperties $retObjects $objectType $property $exclude $SortProperty if($retObjects)
if($SingleObject -ne $true -and $objectType.PostListCommand)
{ {
$graphObjects = & $objectType.PostListCommand $graphObjects $objectType $graphObjects = Add-GraphObjectProperties $retObjects $objectType $property $exclude $SortProperty
if($SingleObject -ne $true -and $objectType.PostListCommand)
{
$graphObjects = & $objectType.PostListCommand $graphObjects $objectType
}
}
else
{
$graphObjects = $null
} }
$graphObjects if(($graphObjects | measure).Count -gt 0)
{
$graphObjects
}
} }
function Add-GraphObjectProperties function Add-GraphObjectProperties
@@ -693,12 +731,12 @@ function Show-GraphObjects
$script:nextGraphPage = $null $script:nextGraphPage = $null
$graphObjects = @(Get-GraphObjects -property $global:curObjectType.ViewProperties -objectType $global:curObjectType -SinglePage -Filter $filter) [array]$graphObjects = Get-GraphObjects -property $global:curObjectType.ViewProperties -objectType $global:curObjectType -SinglePage -Filter $filter
$dgObjects.AutoGenerateColumns = $false $dgObjects.AutoGenerateColumns = $false
$dgObjects.Columns.Clear() $dgObjects.Columns.Clear()
if(($graphObjects | measure).Count -gt 0) if($graphObjects)
{ {
$tmpObj = $graphObjects | Select -First 1 $tmpObj = $graphObjects | Select -First 1
@@ -781,6 +819,7 @@ function Show-GraphObjects
if($ctrl.Name -eq "btnDelete") if($ctrl.Name -eq "btnDelete")
{ {
$allowDelete = Get-SettingValue "EMAllowDelete" $allowDelete = Get-SettingValue "EMAllowDelete"
if($global:currentViewObject.ViewInfo.AllowDelete -eq $false) { $allowDelete = $false }
$ctrl.Visibility = (?: ($allowDelete -eq $true) "Visible" "Collapsed") $ctrl.Visibility = (?: ($allowDelete -eq $true) "Visible" "Collapsed")
} }
elseif(-not $global:curObjectType.ShowButtons -or ($global:curObjectType.ShowButtons | Where-Object { $ctrl.Name -like "*$($_)" } )) elseif(-not $global:curObjectType.ShowButtons -or ($global:curObjectType.ShowButtons | Where-Object { $ctrl.Name -like "*$($_)" } ))
@@ -1305,6 +1344,18 @@ function Get-GraphBatchObjectTypes
$silentViewObjects $silentViewObjects
} }
function Get-GraphObjectType
{
param($objTypeId)
$intuneView = $global:viewObjects | Where { $_.ViewInfo.Id -eq "IntuneGraphAPI" }
if($intuneView)
{
($intuneView.ViewItems | Where Id -eq $objTypeId)
}
}
function Start-GraphObjectExport function Start-GraphObjectExport
{ {
Write-Status "Export objects" -Block Write-Status "Export objects" -Block
@@ -1335,7 +1386,7 @@ function Start-GraphObjectExport
$folder = Expand-FileName $folder $folder = Expand-FileName $folder
Write-Status "Get a list of all $($item.ObjectType.Title) objects" -SkipLog -Force Write-Status "Get a list of all $($item.ObjectType.Title) objects" -SkipLog -Force
$objects = @(Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType) [array]$objects = Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType
if((Get-SettingValue "UseBatchAPI") -eq $true) if((Get-SettingValue "UseBatchAPI") -eq $true)
{ {
@@ -1345,6 +1396,7 @@ function Start-GraphObjectExport
$total = ($batchObjects | measure).Count $total = ($batchObjects | measure).Count
foreach($batchResult in $batchObjects) foreach($batchResult in $batchObjects)
{ {
if(-not $batchResult.Object) { continue }
$objName = Get-GraphObjectName $batchResult.Object $batchResult.ObjectType $objName = Get-GraphObjectName $batchResult.Object $batchResult.ObjectType
Write-Status "Export $($item.Title): $objName ($($i)/$($total))" -Force Write-Status "Export $($item.Title): $objName ($($i)/$($total))" -Force
Export-GraphObject $batchResult.Object $batchResult.ObjectType $folder -IsFullObject Export-GraphObject $batchResult.Object $batchResult.ObjectType $folder -IsFullObject
@@ -1621,7 +1673,7 @@ function Show-GraphImportForm
$navigationPropObjects = @() $navigationPropObjects = @()
foreach ($fileObj in $filesToImport) foreach ($fileObj in $filesToImport)
{ {
if($allowUpdate -and $global:cbImportType.SelectedValue -ne "alwaysImport" -and (Reset-GraphObjet $fileObj $global:dgObjects.ItemsSource)) if($allowUpdate -and $global:cbImportType.SelectedValue -ne "alwaysImport" -and (Reset-GraphObject $fileObj $global:dgObjects.ItemsSource))
{ {
continue continue
} }
@@ -1839,7 +1891,7 @@ function Start-GraphObjectImport
try try
{ {
Write-Status "Get $($item.Title) objects" -Force Write-Status "Get $($item.Title) objects" -Force
$graphObjects = @(Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType) [array]$graphObjects = Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType
} }
catch {} catch {}
} }
@@ -1864,7 +1916,7 @@ function Start-GraphObjectImport
continue continue
} }
if($allowUpdate -and $global:cbImportType.SelectedValue -ne "alwaysImport" -and $graphObjects -and (Reset-GraphObjet $fileObj $graphObjects)) if($allowUpdate -and $global:cbImportType.SelectedValue -ne "alwaysImport" -and $graphObjects -and (Reset-GraphObject $fileObj $graphObjects))
{ {
$importedObjects++ $importedObjects++
continue continue
@@ -2048,7 +2100,7 @@ function Show-GraphBulkDeleteForm
Write-Log "Start bulk delete" Write-Log "Start bulk delete"
Write-Log "****************************************************************" Write-Log "****************************************************************"
foreach($item in ($global:dgBulkDeleteObjects.ItemsSource | Where Selected -eq $true)) foreach($item in ($global:dgBulkDeleteObjects.ItemsSource | Where Selected -eq $true | sort-object -property @{e={$_.ObjectType.ImportOrder}} -Descending))
{ {
Write-Log "----------------------------------------------------------------" Write-Log "----------------------------------------------------------------"
Write-Log "Delete $($item.ObjectType.Title) objects" Write-Log "Delete $($item.ObjectType.Title) objects"
@@ -2060,8 +2112,8 @@ function Show-GraphBulkDeleteForm
try try
{ {
Write-Status "Get $($item.Title) objects" -Force Write-Status "Get $($item.ObjectType.Title) objects" -Force
$objects = @(Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType) [array]$objects = Get-GraphObjects -property $item.ObjectType.ViewProperties -objectType $item.ObjectType
foreach($obj in $objects) foreach($obj in $objects)
{ {
$objName = Get-GraphObjectName $obj.Object $obj.ObjectType $objName = Get-GraphObjectName $obj.Object $obj.ObjectType
@@ -2071,7 +2123,7 @@ function Show-GraphBulkDeleteForm
continue continue
} }
Write-Status "Delete $($item.Title): $objName" -Force -SkipLog Write-Status "Delete $($item.ObjectType.Title): $objName" -Force -SkipLog
Remove-GraphObject $obj.Object $obj.ObjectType $folder Remove-GraphObject $obj.Object $obj.ObjectType $folder
} }
} }
@@ -2113,12 +2165,7 @@ function Get-GraphFileObjects
} }
else else
{ {
$json = Get-Content -LiteralPath $file.FullName -Raw $graphObj = Get-GraphObjectFromFile $file.FullName
if($global:Organization.Id)
{
$json = $json -replace "%OrganizationId%",$global:Organization.Id
}
$graphObj = (ConvertFrom-Json $json)
} }
$obj = New-Object PSObject -Property @{ $obj = New-Object PSObject -Property @{
@@ -2194,16 +2241,16 @@ function Import-GraphFile
} }
} }
function Reset-GraphObjet function Reset-GraphObject
{ {
param($fileObj, $objectList) param($fileObj, $objectList)
$nameProp = ?? $fileObj.ObjectType.NameProperty "displayName" $nameProp = ?? $fileObj.ObjectType.NameProperty "displayName"
$curObject = $objectList | Where { $_.Object.$nameProp -eq $fileObj.Object.$nameProp -and $_.Object.'@OData.Type' -eq $fileObj.Object.'@OData.Type' } $curObject = $objectList | Where { $_.Object.$nameProp -eq $fileObj.Object.$nameProp -and $_.Object.'@OData.Type' -eq $fileObj.Object.'@OData.Type' }
if($global:cbImportType.SelectedValue -eq "skipIfExist" -and ($curObject | measure).Count -gt 0) if($global:cbImportType.SelectedValue -eq "skipIfExist" -and ($curObject | measure).Count -gt 0 -and $fileObj.ObjectType.AlwaysImport -ne $true)
{ {
Write-Log "Objects with name $($fileObj.Object.$nameProp) already exists. Object will not be imported" Write-Log "Object with name $($fileObj.Object.$nameProp) already exists. Object will not be imported"
return $true return $true
} }
elseif(($curObject | measure).Count -gt 1) elseif(($curObject | measure).Count -gt 1)
@@ -2213,7 +2260,12 @@ function Reset-GraphObjet
} }
elseif(($curObject | measure).Count -eq 1) elseif(($curObject | measure).Count -eq 1)
{ {
Write-Log "Update $((Get-GraphObjectName $fileObj.Object $fileObj.ObjectType)) with id $($curObject.Object.Id)" $idInfo = ""
if([String]::IsNullOrEmpty($curObject.Object.Id) -eq $false)
{
$idInfo = " with id $($curObject.Object.Id)"
}
Write-Log "Update $((Get-GraphObjectName $fileObj.Object $fileObj.ObjectType))$idInfo"
$objectType = $fileObj.ObjectType $objectType = $fileObj.ObjectType
# Clone the object before removing properties # Clone the object before removing properties
@@ -2369,10 +2421,12 @@ function Import-GraphObjectAssignment
if($preConfig["Import"] -eq $false) { return } # Assignment managed manually so skip further processing if($preConfig["Import"] -eq $false) { return } # Assignment managed manually so skip further processing
$api = ?? $preConfig["API"] "$($objectType.API)/$($newObj.Id)/assign" $api = ?? $preConfig["API"] "$($objectType.API)/$($obj.Id)/assign"
$method = ?? $preConfig["Method"] "POST" $method = ?? $preConfig["Method"] "POST"
$clonedAssignments = ?? $preConfig["Assignments"] $clonedAssignments
$keepProperties = ?? $objectType.AssignmentProperties @("target") $keepProperties = ?? $objectType.AssignmentProperties @("target")
$keepTargetProperties = ?? $objectType.AssignmentTargetProperties @("@odata.type","groupId","deviceAndAppManagementAssignmentFilterId","deviceAndAppManagementAssignmentFilterType") $keepTargetProperties = ?? $objectType.AssignmentTargetProperties @("@odata.type","groupId","deviceAndAppManagementAssignmentFilterId","deviceAndAppManagementAssignmentFilterType")
@@ -2417,8 +2471,7 @@ function Import-GraphObjectAssignment
if($objectType.PostImportAssignmentsCommand) if($objectType.PostImportAssignmentsCommand)
{ {
& $objectType.PostImportAssignmentsCommand $obj $objectType $fromFile $objAssign & $objectType.PostImportAssignmentsCommand $obj $objectType $fromFile $objAssign
} }
} }
#endregion #endregion
@@ -2491,7 +2544,6 @@ function Add-GraphMigrationInfo
if($objType -eq "#microsoft.graph.groupAssignmentTarget" -or if($objType -eq "#microsoft.graph.groupAssignmentTarget" -or
$objType -eq "#microsoft.graph.exclusionGroupAssignmentTarget") $objType -eq "#microsoft.graph.exclusionGroupAssignmentTarget")
{ {
#Add-GroupMigrationObject $objInfo.groupid
Add-GraphMigrationObject $objInfo.groupid "/groups" "Group" Add-GraphMigrationObject $objInfo.groupid "/groups" "Group"
} }
elseif($objType -eq "#microsoft.graph.allLicensedUsersAssignmentTarget" -or elseif($objType -eq "#microsoft.graph.allLicensedUsersAssignmentTarget" -or
@@ -2572,7 +2624,7 @@ function Add-GroupMigrationObject
if(-not $groupObj) if(-not $groupObj)
{ {
# Get group info # Get group info
$groupObj = Invoke-GraphRequest "/groups/$groupId" -ODataMetadata "none" $groupObj = Invoke-GraphRequest "/groups/$groupId" -ODataMetadata "none" -NoError
} }
if($groupObj) if($groupObj)
@@ -2587,9 +2639,13 @@ function Add-GroupMigrationObject
$grouspPath = Join-Path $path "Groups" $grouspPath = Join-Path $path "Groups"
if(-not (Test-Path $grouspPath)) { mkdir -Path $grouspPath -Force -ErrorAction SilentlyContinue | Out-Null } if(-not (Test-Path $grouspPath)) { mkdir -Path $grouspPath -Force -ErrorAction SilentlyContinue | Out-Null }
$fileName = "$grouspPath\$((Remove-InvalidFileNameChars $groupObj.displayName)).json" $fileName = "$grouspPath\$((Remove-InvalidFileNameChars $groupObj.displayName)).json"
ConvertTo-Json $groupObj -Depth 50 | Out-File $fileName -Force Save-GraphObjectToFile $groupObj $fileName
} }
} }
else
{
Write-Log "No group found with ID $($groupId). It might be deleted." 2
}
} }
function Add-GraphMigrationObject function Add-GraphMigrationObject
@@ -2609,13 +2665,13 @@ function Add-GraphMigrationObject
if(-not $graphObj) if(-not $graphObj)
{ {
# Get object info # Get object info
$graphObj = Invoke-GraphRequest "$($grapAPI)/$objId" -ODataMetadata "none" $graphObj = Invoke-GraphRequest "$($grapAPI)/$objId" -ODataMetadata "none" -NoError
} }
if($graphObj) if($graphObj)
{ {
# Add object to cache # Add object to cache
if($global:AADObjectCache.ContainsKey($objId) -eq $false) { $global:AADObjectCache.Add($objId, $ugraphObjserObj) } if($global:AADObjectCache.ContainsKey($objId) -eq $false) { $global:AADObjectCache.Add($objId, $graphObj ) }
# Add object to migration file # Add object to migration file
if((Add-GraphMigrationObjectToFile $graphObj $path $objTypeName)) if((Add-GraphMigrationObjectToFile $graphObj $path $objTypeName))
@@ -2626,10 +2682,14 @@ function Add-GraphMigrationObject
$grouspPath = Join-Path $path "Groups" $grouspPath = Join-Path $path "Groups"
if(-not (Test-Path $grouspPath)) { mkdir -Path $grouspPath -Force -ErrorAction SilentlyContinue | Out-Null } if(-not (Test-Path $grouspPath)) { mkdir -Path $grouspPath -Force -ErrorAction SilentlyContinue | Out-Null }
$fileName = "$grouspPath\$((Remove-InvalidFileNameChars $graphObj.displayName)).json" $fileName = "$grouspPath\$((Remove-InvalidFileNameChars $graphObj.displayName)).json"
ConvertTo-Json $graphObj -Depth 50 | Out-File $fileName -Force Save-GraphObjectToFile $graphObj $fileName
} }
} }
} }
else
{
Write-Log "No $objTypeName found with ID $($groupId). It might be deleted." 2
}
} }
function Get-GraphMigrationObject function Get-GraphMigrationObject
@@ -2754,22 +2814,23 @@ function Get-GraphMigrationObjectsFromFile
foreach($migObj in $migFileObj.Objects) foreach($migObj in $migFileObj.Objects)
{ {
if($migObj.Type -like "*group*") if($migObj.Type -like "*group*")
{ {
$obj = (Invoke-GraphRequest "/groups?`$filter=displayName eq '$($migObj.DisplayName)'").Value $migTableGroupName = $migObj.DisplayName.Trim()
$obj = (Invoke-GraphRequest "/groups?`$filter=displayName eq '$($migTableGroupName)'").Value
if(-not $obj) if(-not $obj)
{ {
$groupFi = $null $groupFi = $null
if($global:GraphMigrationTable) if($global:GraphMigrationTable)
{ {
$fi = [IO.FileInfo]$global:GraphMigrationTable $fi = [IO.FileInfo]$global:GraphMigrationTable
$groupFi = [IO.FileInfo]($fi.DirectoryName + "\Groups\$((Remove-InvalidFileNameChars $migObj.DisplayName)).json") $groupFi = [IO.FileInfo]($fi.DirectoryName + "\Groups\$((Remove-InvalidFileNameChars $migTableGroupName)).json")
} }
if($groupFi.Exists -eq $true) if($groupFi.Exists -eq $true)
{ {
# ToDo: Create group from Json (could be a dynamic group) # ToDo: Create group from Json (could be a dynamic group)
# Warn if synched group # Warn if synched group
$groupObj = (Get-Content -LiteralPath $groupFi.FullName) | ConvertFrom-Json $groupObj = Get-GraphObjectFromFile $groupFi.FullName
#isAssignableToRole - For Role assignment groupd. #isAssignableToRole - For Role assignment groupd.
$keepProps = @("displayName","description","mailEnabled","mailNickname","securityEnabled","membershipRule","groupTypes", "membershipRuleProcessingState") $keepProps = @("displayName","description","mailEnabled","mailNickname","securityEnabled","membershipRule","groupTypes", "membershipRuleProcessingState")
@@ -2779,31 +2840,47 @@ function Get-GraphMigrationObjectsFromFile
Remove-Property $groupObj $prop.Name Remove-Property $groupObj $prop.Name
} }
$groupObj.displayName = $groupObj.displayName.Trim()
$groupJson = ConvertTo-Json $groupObj -Depth 50 $groupJson = ConvertTo-Json $groupObj -Depth 50
} }
else else
{ {
Write-Log "No group object found for $($migObj.DisplayName). Creating a cloud group with default settings" 2 $groupName = $migTableGroupName
Write-Log "No group object found for $groupName. Creating a cloud group with default settings" 2
$dateStr = ((Get-Date).ToString("yyMMddHHmmss"))
if(($groupName.Length + $dateStr.Length) -gt 64)
{
$nickName = $groupName.Substring(0,(64-$dateStr.Length))
}
else
{
$nickName = $groupName
}
$nickName = $nickName + $dateStr
$groupJson = @" $groupJson = @"
{ {
"displayName": "$($migObj.DisplayName)", "displayName": "$($groupName)",
"groupTypes": [
],
"mailEnabled": false, "mailEnabled": false,
"mailNickname" "NotSet" "mailNickname": "$($nickName)",
"securityEnabled": true "securityEnabled": true
} }
"@ "@
} }
Write-Log "Create AAD Group $($migObj.DisplayName)" Write-Log "Create AAD Group $($migTableGroupName)"
$obj = Invoke-GraphRequest "/groups" -HttpMethod "POST" -Content $groupJson $obj = Invoke-GraphRequest "/groups" -HttpMethod "POST" -Content $groupJson
} }
$global:MigrationTableCache += (New-Object PSObject -Property @{
OriginalId = $migObj.Id if($obj)
Id = $obj.Id {
Type = $migObj.Type $global:MigrationTableCache += (New-Object PSObject -Property @{
}) OriginalId = $migObj.Id
Id = $obj.Id
Type = $migObj.Type
})
}
} }
} }
} }
@@ -3017,7 +3094,7 @@ function Export-GraphObject
[switch]$SkipAddID, [switch]$SkipAddID,
[switch]$PassThru) [switch]$PassThru)
if(-not $exportFolder) { return } if(-not $exportFolder -or -not $objToExport -or -not $objectType) { return }
Write-Status "Export $((Get-GraphObjectName $objToExport $objectType))" Write-Status "Export $((Get-GraphObjectName $objToExport $objectType))"
@@ -3057,14 +3134,7 @@ function Export-GraphObject
} }
$fullPath = ([IO.Path]::Combine($exportFolder, (Remove-InvalidFileNameChars "$($fileName).json"))) $fullPath = ([IO.Path]::Combine($exportFolder, (Remove-InvalidFileNameChars "$($fileName).json")))
$json = $obj | ConvertTo-Json -Depth 50 Save-GraphObjectToFile $obj $fullPath
if($global:Organization.Id)
{
$json = $json -replace $global:Organization.Id, "%OrganizationId%"
}
$json | Out-File -LiteralPath $fullPath -Force
if($objectType.PostExportCommand) if($objectType.PostExportCommand)
{ {
@@ -3097,12 +3167,11 @@ function Set-GraphNavigationPropertiesFromFile
} }
# Reload data from file. Some object properties was removed before import... # Reload data from file. Some object properties was removed before import...
$objFileInfo = (ConvertFrom-Json (Get-Content -LiteralPath $navPropObject.File.FileInfo.FullName -Raw)) $objFileInfo = Get-GraphObjectFromFile $navPropObject.File.FileInfo.FullName
if(-not ($objFileInfo.PSObject.Properties | Where { $_.Name -like "#CustomRef_*" })) { return } if(-not ($objFileInfo.PSObject.Properties | Where { $_.Name -like "#CustomRef_*" })) { return }
Set-GraphNavigationProperties $navPropObject.ImportedObject $objFileInfo $navPropObject.File.ObjectType Set-GraphNavigationProperties $navPropObject.ImportedObject $objFileInfo $navPropObject.File.ObjectType
} }
function Set-GraphNavigationProperties function Set-GraphNavigationProperties
@@ -3129,25 +3198,49 @@ function Set-GraphNavigationProperties
# Is this the correct way of filter out Assignments, summaries etc.? # Is this the correct way of filter out Assignments, summaries etc.?
if($prop.ContainsTarget -eq $true) { continue } if($prop.ContainsTarget -eq $true) { continue }
if(-not ($oldObj."$($prop.Name)@odata.associationLink")) { continue } if(-not ($oldObj."$($prop.Name)@odata.associationLink")) { continue }
$associationLink = $oldObj."$($prop.Name)@odata.associationLink" -replace $oldObj.Id,$newObj.Id $associationLink = $oldObj."$($prop.Name)@odata.associationLink" -replace $oldObj.Id,$newObj.Id
$refBodyObjs = $null #@() $refBodyObjs = @()
$refObjName = $null $refObjName = $null
$refObjId = $null $refObjId = $null
if($prop.Type -like "Collection(*")
{
$multiNavProperty = $true
$method = "POST"
}
else
{
$multiNavProperty = $false
$method = "PUT"
}
if($FromOldObject -eq $true) if($FromOldObject -eq $true)
{ {
$navProp = Invoke-GraphRequest -URL $oldObj."$($prop.Name)@odata.navigationLink" -ODataMetadata "minimal" -NoError $navProp = Invoke-GraphRequest -URL $oldObj."$($prop.Name)@odata.navigationLink" -ODataMetadata "minimal" -NoError
if(-not $navProp) { continue } if(-not $navProp) { continue }
if($multiNavProperty)
{
$navProperties = $navProp.Value
}
else
{
$navProperties = $navProp
}
$refObjName = Get-GraphObjectName $navProp $navProp foreach($navProp in $navProperties)
$refObjId = $navProp.Id {
$refBodyObjs += [PSCustomObject]@{
$refBodyObjs = ([PSCustomObject]@{ RefObjName = $navProp.displayName ### NOT Correct. Migh be another property but we don't know the type
"@odata.id" = ("https://$global:MSALGraphEnvironment/beta/$($objectType.API)('$($navProp.Id)')") RefObjId = $navProp.Id
}) RefBody = ([PSCustomObject]@{
"@odata.id" = ("https://$global:MSALGraphEnvironment/beta/$($objectType.API)('$($navProp.Id)')")
})
}
}
} }
else else
{ {
@@ -3156,50 +3249,58 @@ function Set-GraphNavigationProperties
$idx = $oldObj."#CustomRef_$($prop.Name)".IndexOf("|:|") $idx = $oldObj."#CustomRef_$($prop.Name)".IndexOf("|:|")
if($idx -gt -1) if($idx -gt -1)
{ {
$refObjName = $oldObj."#CustomRef_$($prop.Name)".SubString(0,$idx) $refObjNames = $oldObj."#CustomRef_$($prop.Name)".SubString(0,$idx)
} }
else else
{ {
$refObjName = $oldObj."#CustomRef_$($prop.Name)" $refObjNames = $oldObj."#CustomRef_$($prop.Name)"
} }
$refObjects = Invoke-GraphRequest -URL "$($objectType.API)?`$filter=$($nameProp) eq '$($refObjName)'" -NoError
$objectsFound = ($refObjects.value | measure).Count foreach($refObjName in $refObjNames.Split(","))
{
$refObjects = Invoke-GraphRequest -URL "$($objectType.API)?`$filter=$($nameProp) eq '$($refObjName)'" -NoError
if($objectsFound -eq 1) $objectsFound = ($refObjects.value | measure).Count
{
# Are there any references that allows multiple ref objects? if($objectsFound -eq 1)
foreach($refObj in $refObjects.value)
{ {
$refBodyObjs = ([PSCustomObject]@{ # Are there any references that allows multiple ref objects?
"@odata.id" = ("https://$global:MSALGraphEnvironment/beta/$($objectType.API)('$($refObj.Id)')") foreach($refObj in $refObjects.value)
}) {
$refObjId = $refObj.Id $refBodyObjs += [PSCustomObject]@{
RefObjName = $refObjName
RefObjId = $refObj.Id
RefBody = ([PSCustomObject]@{
"@odata.id" = ("https://$global:MSALGraphEnvironment/beta/$($objectType.API)('$($refObj.Id)')")
})
}
}
}
elseif($objectsFound -gt 1)
{
Write-Log "Multiple objects ($objectsFound) found with $nameProp $refObjName. Skipping reference." 2
continue
}
else
{
Write-Log "No object found with $nameProp $refObjName" 2
continue
} }
}
elseif($objectsFound -gt 1)
{
Write-Log "Multiple objects ($objectsFound) found with $nameProp $refObjName. Skipping reference." 2
continue
}
else
{
Write-Log "No object found with $nameProp $refObjName" 2
continue
} }
} }
Write-Log "Add $refObjName ($refObjId) to navigation property $($prop.Name)" foreach($refObject in $refBodyObjs)
{
$body = $refBodyObjs | ConvertTo-Json -Depth 50 Write-Log "Add $($refObject.RefObjName) ($($refObject.RefObjId)) to navigation property $($prop.Name)"
Invoke-GraphRequest -URL $associationLink -HttpMethod "PUT" -Content $body | Out-Null $body = $refObject.RefBody | ConvertTo-Json -Depth 50
Invoke-GraphRequest -URL $associationLink -HttpMethod $method -Content $body | Out-Null
}
} }
} }
<# <#
Add Navigation Property data to the object so it included in the exported json file Add Navigation Property data to the object so they are included in the exported json file
#> #>
function Add-GraphNavigationProperties function Add-GraphNavigationProperties
{ {
@@ -3264,6 +3365,7 @@ function Get-GraphBatchObjects
$batchArr = @() $batchArr = @()
$batchTotal = 0 $batchTotal = 0
$objectType = $null $objectType = $null
foreach($obj in $objects) foreach($obj in $objects)
{ {
$objectType = $obj.ObjectType $objectType = $obj.ObjectType
@@ -3460,7 +3562,11 @@ function Import-GraphObject
$newObj = (Invoke-GraphRequest -Url $strAPI -Content $json -HttpMethod $method @params) $newObj = (Invoke-GraphRequest -Url $strAPI -Content $json -HttpMethod $method @params)
if($newObj -and $method -eq "POST") if($newObj -is [Boolean] -and $newObj -and $method -eq "PATCH")
{
$newObj = (Get-GraphObject -obj $obj -objectType $objectType -SkipAssignments).Object
}
elseif($newObj -and $method -eq "POST")
{ {
Write-Log "$($objectType.Title) object imported successfully with id: $($newObj.Id)" Write-Log "$($objectType.Title) object imported successfully with id: $($newObj.Id)"
} }
@@ -3984,6 +4090,12 @@ function Get-GraphObjectName
{ {
param($obj, $objectType) param($obj, $objectType)
if($objectType.GetObjectName)
{
return (& $objectType.GetObjectName $obj $objectType)
}
$obj."$((?? ($objectType.NameProperty) "displayName"))" $obj."$((?? ($objectType.NameProperty) "displayName"))"
} }
@@ -4120,3 +4232,132 @@ function Get-GraphEntityTypeProperties
$properties $properties
} }
function Get-GraphObjectFromFile
{
param($fileName)
if(-not $fileName) { return }
if([System.IO.File]::Exists($fileName) -eq $false)
{
Write-LogDebug "File $fileName not found" 2
return
}
$json = Get-Content -LiteralPath $fileName -Raw
if($global:Organization.Id)
{
$json = $json -replace "%OrganizationId%",$global:Organization.Id
}
try
{
$json | ConvertFrom-Json
}
catch
{
Write-LogError "Failed to convert json file $fileName" $_.Exception
}
}
function Save-GraphObjectToFile
{
param($obj, $fileName)
$json = $obj | ConvertTo-Json -Depth 50
if($global:Organization.Id)
{
$json = $json -replace $global:Organization.Id, "%OrganizationId%"
}
try
{
$json | Out-File -LiteralPath $fileName -Force -ErrorAction Stop
}
catch
{
Write-LogError "Failed to save file $fileName" $_.Exception
}
}
function Get-GraphObjectFile
{
param($obj, $objectType, $path)
$fileName = (Get-GraphObjectName $obj $objectType)
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
{
$fileName = ($fileName + "_" + $obj.Id)
}
$fileName = "$((Remove-InvalidFileNameChars $fileName)).json"
if($path)
{
$fileName = "$path\$fileName"
}
$fileName
}
function Confirm-GraphMatchFilter
{
param($graphObj, [string]$filter)
if(-not $filter.Trim()) { return $true }
$filterScope = ""
if($filter -like "scope:*" -or $filter -like "tag:*")
{
$filterScope = $filter.Split(':')[1]
}
$objName = Get-GraphObjectName $graphObj.Object $graphObj.ObjectType
if($filterScope)
{
if(($graphObj.Object.PSObject.Properties | Where Name -eq "roleScopeTagIds"))
{
$scopeTagProperty = "roleScopeTagIds"
}
elseif(($graphObj.Object.PSObject.Properties | Where Name -eq "roleScopeTags"))
{
$scopeTagProperty = "roleScopeTags"
}
else
{
Write-Log "$objName excluded based on Scope(Tags) not supported on $($graphObj.ObjectType.GroupId) objects"
continue
}
if(-not $script:scopeTags -and $script:offlineDocumentation -ne $true)
{
$script:scopeTags = (Invoke-GraphRequest -Url "/deviceManagement/roleScopeTags").Value
}
$found = $false
foreach($scopeTagId in $graphObj.Object."$scopeTagProperty")
{
$scopeTagObj = $script:scopeTags | Where Id -eq $scopeTagId
if($scopeTagObj -and $filterScope -and $scopeTagObj.displayName -match [RegEx]::Escape($filterScope))
{
return $true
}
}
if($found -eq $false)
{
Write-Log "$objName excluded based on no Scope(Tags) found that matches the filter"
return $false
}
}
else
{
if($objName -and $filter -and $objName -notmatch [RegEx]::Escape($filter))
{
Write-Log "$objName excluded based on the name does not match the filter"
return $false
}
}
return $true
}
+7 -3
View File
@@ -240,10 +240,10 @@ Start-WithJson.cmd is included as an example on how to start the script with jso
**Note:** If the file can't be created, the script will revert back registry. Make sure that the script can write to the file. It is not recommended to store the file in a folder that requires UAC to get write permissions. **Note:** If the file can't be created, the script will revert back registry. Make sure that the script can write to the file. It is not recommended to store the file in a folder that requires UAC to get write permissions.
## Supported Intune objects ## Supported Intune objects
* ADMX Files * ADMX Files [^1]
* App Configurations (App and Device) * App Configurations (App and Device)
* App Protection * App Protection
* Applications * Applications [^2]
* Apple Enrolment Types - NOT fully tested * Apple Enrolment Types - NOT fully tested
* Autopilot profiles * Autopilot profiles
* Baseline Security profiles * Baseline Security profiles
@@ -252,7 +252,7 @@ Start-WithJson.cmd is included as an example on how to start the script with jso
* Conditional Access * Conditional Access
* Custom Attributes * Custom Attributes
* Device Configuration (Administrative Templates, Configuration Policies, Android OEM Config, Settings Catalog) * Device Configuration (Administrative Templates, Configuration Policies, Android OEM Config, Settings Catalog)
* Endpoint Security (Account Protection, Disk Encryption, Firewall, Security Baselines etc.) * Endpoint Security (Account Protection, Disk Encryption, Firewall, Security Baselines etc.) [^3]
* Enrollment Restrictions * Enrollment Restrictions
* Enrollment Status Page profiles * Enrollment Status Page profiles
* Feature Updates * Feature Updates
@@ -263,6 +263,7 @@ Start-WithJson.cmd is included as an example on how to start the script with jso
* Notifications * Notifications
* Policy Sets * Policy Sets
* Quality Updates * Quality Updates
* Reusable Settings
* Role Definitions * Role Definitions
* Scope Tags * Scope Tags
* Scripts (PowerShell and Shell scripts, supports download of script) * Scripts (PowerShell and Shell scripts, supports download of script)
@@ -271,6 +272,9 @@ Start-WithJson.cmd is included as an example on how to start the script with jso
* Update Policies * Update Policies
* Co-management Settings * Co-management Settings
[^1]: ADMX file must be located in the export folder or in the folder defined in Settings. Administrative Template policies based on ADMX files must be imported after the ADMX file is imported.
[^2]: Export is support but .intunewin files will not be exported. The .intunewin file must exist in the exported folder or in the folder defined in Settings -> App packages folder.
[^3]: Some Endpoint Security policies will be exported to the SettingsCatalg since they are based the Settings Catalog API.
**Note:** The scripts are using the BETA version of the Graph API which might change at any time. **Note:** The scripts are using the BETA version of the Graph API which might change at any time.
+138
View File
@@ -1,4 +1,142 @@
# Release Notes # Release Notes
## 3.9.0 - 2023-05-04
**New features**
- **Added support for Authentication Context objects**<br />
- These are used by Conditional Access policies<br />
Based on [Issue 109](https://github.com/Micke-K/IntuneManagement/issues/109)<br />
- **Added support for Windows 365 Cloud PC settings**<br />
- Based on [Issue 125](https://github.com/Micke-K/IntuneManagement/issues/125)<br />
- **Added support for Export/Import Tennant Settings**<br />
- This is added the Intune Info view for now (Views -> Intune Info)<br />
This means that there is no support for Bulk Import/Export. It must be done manually<br />
This is to minimize the risk of re-importing Tenant settings<br />
Based on [Discussion 131](https://github.com/Micke-K/IntuneManagement/discussions/131)<br />
**Fixes**
- **Documentation**<br />
- Added full documentation of Requirement and Detection rules for Win Apps<br />
Based on [Issue 119](https://github.com/Micke-K/IntuneManagement/issues/119)<br />
- Fixed issue were documentation could crash if Reusable Settings policies exists<br />
Based on [Issue 123](https://github.com/Micke-K/IntuneManagement/issues/123)<br />
- Regenerated Language files and Translation tables for Template policies<br />
- **Intunwin File Upload**<br />
- Fixed issue when uploading very large files<br />
Based on [Issue 112](https://github.com/Micke-K/IntuneManagement/issues/112)<br />
- Fixed issue when IE not installed<br />
- **Compare**<br />
- Fixed issue where Compare could generate an exception in the log<br />
Based on [Issue 128](https://github.com/Micke-K/IntuneManagement/issues/128)<br />
**Note:** Issue 128 is only partially fixed. Compare needs a major update to fix the rest<br />
- **Import**<br />
- Fixed an issue when creating Cloud groups based on on-prem groups without MigTable<br />
- Fixed an issue when importing groups with a space in the beginning<br />
**Note:** Inital spaces will be removed when importing groups<br />
- Fixed issue when importing Endpoint Status Page polices with applications defined<br />
- Fixed issue when importing Proactive Remediations (Health Scripts) with assignments<br />
- Fixed issue when importing a Conditional Policy with Session propery disableResilienceDefaults set to $false<br />
- Fixed issue when importing WiFi profiles. Support for multiple references was added eg multiple server verification certificates<br />
Based on [Issue 114](https://github.com/Micke-K/IntuneManagement/issues/114)<br />
- Terms of Use was not visible in the menu<br />
**Note:** This might generate a Consent prompt if Use Default Permissions is not enabled<br />
Additional permission required on the Azure App: Agreement.ReadWrite.All<br />
<br />
## 3.8.1 - 2023-01-26
**New features**
- **Added support for Reusable Settings objects**<br />
- These are used by some of the Endpoint Security polices like Firewall rules<br />
Based on private request<br />
Note: No documentation support yet<br />
- **Added support for custom Authentication Strengths objects**<br />
- These can be used in Conditional Access policies<br />
Based on [Issue 109](https://github.com/Micke-K/IntuneManagement/issues/109)<br />
Note: Not all issues in 109 are fixed yet and no documentation support yet<br />
- **Export/Import**<br />
- PowerShell files for Health Scripts exported to the Export folder<br />
- PowerShell files for Application Detection scripts are exported to the Export folder<br />
Both scripts exports are based on [Issue 103](https://github.com/Micke-K/IntuneManagement/issues/103)<br />
- **Documentation**<br />
- Documentation engine completely rewritten for Settings Catalog and had major updates for other object types<br />
Please create an issue if there are any problems<br />
- Added support for HTML output<br />
- MD output is now official with included support for CSS and single file Output.<br />
Based on [Issue 35](https://github.com/Micke-K/IntuneManagement/issues/35)<br />
- Added support for indent on sub-properties so it will be visible that a property is set based on a parent<br />
Based on [Discussion 90](https://github.com/Micke-K/IntuneManagement/discussions/90)<br />
- Added option to skip assignments in the documentation<br />
Based on [Issue 102](https://github.com/Micke-K/IntuneManagement/issues/102)<br />
- Moved some Output options to generic output settings; Document scripts and Remove script signature<br />
- **Generic**<br />
- Added new property on applications, InstallerType. This can be added as a new column to the View for Applications.<br />
It specifies the New Microsoft Store App type; UWP or Win32<br />
Based on [Issue 101](https://github.com/Micke-K/IntuneManagement/issues/101)<br />
- Added response information f an API call failed. The log should now have a better description on why an API failed.<br />
**Fixes**
- **Documentation**<br />
- Lots of documentation issues fixed by the new Documentation engine<br />
- Sections and policies should now be in correct alphabetic order<br />
Based on [Discussion 90](https://github.com/Micke-K/IntuneManagement/discussions/90)<br />
- Fixed issues with assignments for Setting Catalog issues<br />
Based on [Issue 102](https://github.com/Micke-K/IntuneManagement/issues/102)<br />
- Translation files re-generated<br />
- Fixed error message: "Invoke-WordTranslateColumnHeader is not recognized as the name of a cmdlet"
Based on [Issue 99](https://github.com/Micke-K/IntuneManagement/issues/99)<br />
- **Authentication**<br />
- Fixed an issue when authentication to China Cloud<br />
Based on [Issue 106](https://github.com/Micke-K/IntuneManagement/issues/106)<br />
<br />
## 3.7.4 - 2022-11-17
**Fixes**
Lots of these issues are based on [Issue 94](https://github.com/Micke-K/IntuneManagement/issues/94)<br />
Thank you **Dominique** for all the amazing help with testing!<br />
- **Import/Export**<br />
- Added support for Export of TermsOfUse PDF files<br />
Based on [Issue 27](https://github.com/Micke-K/IntuneManagement/issues/27)<br />
- Fixed an issue where it failed to import .intunewin files during bulk import<br />
- Fixed issue with importing Edge app assignments<br />
- Changed the order for Bulk delete to make sure policies are deleted in the correct order<br />
- Lots of logging fixes for Bulk Export - Logged error when exporting object types not used<br />
- Business Store Apps will not be delete - Not supported<br />
- No import of assignments for default policies (Enrollment Status Page and Enrolment Restrictions)<br />
- Lots of logging fixes for Bulk Delete - Errors if deleting default policies, trying to delete object types that were not used etc.<br />
- **Documentation**<br />
- Added intent for Win32 Assignments<br />
Based on [Issue 98](https://github.com/Micke-K/IntuneManagement/issues/98)<br />
- Fixed an error when documenting Assignments for Win32 apps - Invoke-WordTranslateColumnHeader was missing/removed<br />
Based on [Issue 99](https://github.com/Micke-K/IntuneManagement/issues/99)<br />
<br />
- **Logging**<br />
- Added additional response error information if it failed to call a Graph API<br />
- Missing groups will now only generate a warning instead of Graph API error<br />
- No error for users without a profile photo<br />
<br />
<br />
## 3.7.3 - 2022-10-24 ## 3.7.3 - 2022-10-24
**Fixes** **Fixes**
+58 -30
View File
@@ -19,6 +19,8 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -33,7 +35,7 @@
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the targeted object type for the documentation" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the targeted object type for the documentation" />
</StackPanel> </StackPanel>
<ComboBox Name="cbDocumentationType" Margin="0,5,0,0" MinWidth="250" Grid.Column="1" HorizontalAlignment="Left" <ComboBox Name="cbDocumentationType" Margin="0,5,0,0" MinWidth="250" Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" /> DisplayMemberPath="Name" SelectedValuePath="Value" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="1"> <StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="1">
<Label Content="Language" /> <Label Content="Language" />
@@ -55,39 +57,18 @@
<ComboBox Name="cbDocumentationObjectSeparator" Margin="0,5,0,0" Width="100" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Left" <ComboBox Name="cbDocumentationObjectSeparator" Margin="0,5,0,0" Width="100" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" /> DisplayMemberPath="Name" SelectedValuePath="Value" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="4"> <StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="7" Grid.ColumnSpan="2" Name="spDocumentFilter">
<Label Content="Output value" /> <Label Content="Filter" />
<Rectangle Style="{DynamicResource InfoIcon}"> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Filter policies by name or Scope (Tag)" />
<Rectangle.ToolTip>
<TextBlock>
Specifys the output value for subproperties in Administrative Template policies<LineBreak />
<Bold>Value</Bold>: Documents only the value<LineBreak />
<Bold>Value with label</Bold>: Documents the sub-property value with the label of the property<LineBreak />
<Bold>Note</Bold>: This is only supported on Administrative Templates for the moment<LineBreak />
</TextBlock>
</Rectangle.ToolTip>
</Rectangle>
</StackPanel> </StackPanel>
<ComboBox Name="cbDocumentationValueOutputProperty" Margin="0,5,0,0" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Left" DisplayMemberPath="Name" SelectedValuePath="Value" /> <TextBox Text="" Name="txtDocumentFilter" Padding="0,2,0,2" Grid.Row='8' Margin="5,0,0,0" Grid.ColumnSpan="2" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="5"> <StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="9" Grid.ColumnSpan="2" Name="spDocumentFromFolder">
<Label Content="Set unconfigured value" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Set the unconfigured value if the propery is not configured and the property definition has an unconfigured value set" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='5' Name='chkSetUnconfiguredValue' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="6">
<Label Content="Set default value" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Set the default value if the propery is not configured and the property definition has a default value configured" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='6' Name='chkSetDefaultValue' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="7" Grid.ColumnSpan="2" Name="spDocumentFromFolder">
<Label Content="Source files" /> <Label Content="Source files" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Create documentation from exported files" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Create documentation from exported files" />
</StackPanel> </StackPanel>
<Grid Grid.Row='8' Margin="5,0,0,0" Grid.ColumnSpan="2" Name="grdDocumentFromFolder"> <Grid Grid.Row='10' Margin="5,0,0,0" Grid.ColumnSpan="2" Name="grdDocumentFromFolder">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="5" /> <ColumnDefinition Width="5" />
@@ -100,7 +81,6 @@
<Button Grid.Column="2" Name="browseDocumentFromFolder" Padding="5,0,5,0" Width="50" ToolTip="Browse for export folder">...</Button> <Button Grid.Column="2" Name="browseDocumentFromFolder" Padding="5,0,5,0" Width="50" ToolTip="Browse for export folder">...</Button>
</Grid> </Grid>
<Label Content="Objects to document" Grid.Row="0" Grid.Column="4" /> <Label Content="Objects to document" Grid.Row="0" Grid.Column="4" />
<DataGrid Name="grdDocumentObjects" Grid.Row="1" Grid.RowSpan="99" Grid.Column="4" CanUserAddRows="False" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White" Margin="0,0,5,0"> <DataGrid Name="grdDocumentObjects" Grid.Row="1" Grid.RowSpan="99" Grid.Column="4" CanUserAddRows="False" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White" Margin="0,0,5,0">
<!-- <!--
@@ -130,6 +110,9 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -148,7 +131,7 @@
<Label Content="Skip unconfigured properties" /> <Label Content="Skip unconfigured properties" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Exclude properties that are empty or set to 'Not configured'" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Exclude properties that are empty or set to 'Not configured'" />
</StackPanel> </StackPanel>
<CheckBox Grid.Column='1' Grid.Row='1' Name='chkSkipNotConfigured' VerticalAlignment="Center" IsChecked="true" /> <CheckBox Grid.Column='1' Grid.Row='1' Name='chkSkipNotConfigured' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="2"> <StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="2">
<Label Content="Skip default values" /> <Label Content="Skip default values" />
@@ -161,6 +144,51 @@
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Exclude properties that are marked as disabled. If this is NOT checked, dispabled properties will still be excluded if the same EntityKey is used on an enabled property" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Exclude properties that are marked as disabled. If this is NOT checked, dispabled properties will still be excluded if the same EntityKey is used on an enabled property" />
</StackPanel> </StackPanel>
<CheckBox Grid.Column='1' Grid.Row='3' Name='chkSkipDisabled' VerticalAlignment="Center" IsChecked="true" /> <CheckBox Grid.Column='1' Grid.Row='3' Name='chkSkipDisabled' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="4">
<Label Content="Output value" />
<Rectangle Style="{DynamicResource InfoIcon}">
<Rectangle.ToolTip>
<TextBlock>
Specifys the output value for subproperties in Administrative Template policies<LineBreak />
<Bold>Value</Bold>: Documents only the value<LineBreak />
<Bold>Value with label</Bold>: Documents the sub-property value with the label of the property<LineBreak />
<Bold>Note</Bold>: This is only supported on Administrative Templates for the moment<LineBreak />
</TextBlock>
</Rectangle.ToolTip>
</Rectangle>
</StackPanel>
<ComboBox Name="cbDocumentationValueOutputProperty" Margin="0,5,0,0" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Left" DisplayMemberPath="Name" SelectedValuePath="Value" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="5">
<Label Content="Set unconfigured value" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Set the unconfigured value if the propery is not configured and the property definition has an unconfigured value set" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='5' Name='chkSetUnconfiguredValue' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="6">
<Label Content="Set default value" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Set the default value if the propery is not configured and the property definition has a default value configured" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='6' Name='chkSetDefaultValue' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='7' Margin="0,5,5,0">
<Label Content="Document scripts" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Include scripts in the documentation" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='7' Name='chkIncludeScripts' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='8' Margin="0,5,5,0">
<Label Content="Remove script signature" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Remove signature block from PowerShell scripts to reduce script documentation size" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='8' Name='chkExcludeScriptSignature' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='9' Margin="0,5,5,0">
<Label Content="Skip Assignments" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Exclude assignments from the documentation" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='9' Name='chkExcludeAssignments' VerticalAlignment="Center" IsChecked="true" />
</Grid> </Grid>
<Label Name="lblCustomOptions" Grid.Row="1" Margin="0,10,5,0" /> <Label Name="lblCustomOptions" Grid.Row="1" Margin="0,10,5,0" />
+82
View File
@@ -0,0 +1,82 @@
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="grdWordOptions">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="TitleColumn" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row='0' Margin="0,0,5,0">
<Label Content="Document name" />
<Rectangle Style="{DynamicResource InfoIcon}">
<Rectangle.ToolTip>
<TextBlock>
Full path to the name of the output file<LineBreak />
Default value is %MyDocuments%\%Organization%-%Date%.HTML<LineBreak />
Special folders and environmentvariables can be used
</TextBlock>
</Rectangle.ToolTip>
</Rectangle>
</StackPanel>
<Grid Grid.Column='1' Grid.Row='0' Margin="0,5,5,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="" Name="txtHTMLDocumentName" />
<Button Grid.Column="2" Name="browseHTMLDocumentName" Padding="5,0,5,0" Width="50" ToolTip="Select output document">...</Button>
</Grid>
<StackPanel Orientation="Horizontal" Grid.Row='1' Margin="0,0,5,0">
<Label Content="CSS Style" />
<Rectangle Style="{DynamicResource InfoIcon}">
<Rectangle.ToolTip>
<TextBlock>
Species the CSS file used for styling the HTML document.<LineBreak />
The CSS file will be ingected to the output document<LineBreak />
Default value is %ScriptRoot%\Documentation\DefaultHTMLStyle.css
</TextBlock>
</Rectangle.ToolTip>
</Rectangle>
</StackPanel>
<Grid Grid.Column='1' Grid.Row='1' Margin="0,5,5,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="" Name="txtHTMLCSSFile" />
<Button Grid.Column="2" Name="browseHTMLCSSFile" Padding="5,0,5,0" Width="50" ToolTip="Browse for CSS file">...</Button>
</Grid>
<StackPanel Orientation="Horizontal" Grid.Row='2' Margin="0,0,5,0">
<Label Content="Open document" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="This will open the document when finished" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='2' Name='chkHTMLOpenDocument' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='3' Margin="0,5,5,0" >
<Label Content="Output File" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the targeted file for the documentation. One single file for all objects or one file per object." />
</StackPanel>
<ComboBox Name="cbHTMLDocumentOutputFile" Margin="0,5,0,0" MinWidth="250" Grid.Row='3' Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" />
</Grid>
+88
View File
@@ -0,0 +1,88 @@
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="grdWordOptions">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="TitleColumn" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row='0' Margin="0,0,5,0">
<Label Content="Document name" />
<Rectangle Style="{DynamicResource InfoIcon}">
<Rectangle.ToolTip>
<TextBlock>
Full path to the name of the output file<LineBreak />
Default value is %MyDocuments%\%Organization%-%Date%.md<LineBreak />
Special folders and environmentvariables can be used
</TextBlock>
</Rectangle.ToolTip>
</Rectangle>
</StackPanel>
<Grid Grid.Column='1' Grid.Row='0' Margin="0,5,5,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="" Name="txtMDDocumentName" />
<Button Grid.Column="2" Name="browseMDDocumentName" Padding="5,0,5,0" Width="50" ToolTip="Select output document">...</Button>
</Grid>
<StackPanel Orientation="Horizontal" Grid.Row='1' Margin="0,0,5,0">
<Label Content="Include CSS" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify if the CSS document shouldbe added to the MD file(s)" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='1' Name='chkMDIncludeCSS' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='2' Margin="0,0,5,0">
<Label Content="CSS Style" />
<Rectangle Style="{DynamicResource InfoIcon}">
<Rectangle.ToolTip>
<TextBlock>
Species the CSS file used for styling the MD document.<LineBreak />
The CSS file will be ingected to the output document<LineBreak />
Default value is %ScriptRoot%\Documentation\DefaultMDStyle.css
</TextBlock>
</Rectangle.ToolTip>
</Rectangle>
</StackPanel>
<Grid Grid.Column='1' Grid.Row='2' Margin="0,5,5,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="" Name="txtMDCSSFile" />
<Button Grid.Column="2" Name="browseMDCSSFile" Padding="5,0,5,0" Width="50" ToolTip="Browse for CSS file">...</Button>
</Grid>
<StackPanel Orientation="Horizontal" Grid.Row='3' Margin="0,0,5,0">
<Label Content="Open document" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="This will open the document when finished" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='3' Name='chkMDOpenDocument' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='4' Margin="0,5,5,0" >
<Label Content="Output File" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the targeted file for the documentation. One single file for all objects or one file per object." />
</StackPanel>
<ComboBox Name="cbMDDocumentOutputFile" Margin="0,5,0,0" MinWidth="250" Grid.Row='4' Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" />
</Grid>
-12
View File
@@ -240,18 +240,6 @@
</StackPanel> </StackPanel>
<CheckBox Grid.Column='1' Grid.Row='20' Name='chkWordOpenDocument' VerticalAlignment="Center" IsChecked="true" /> <CheckBox Grid.Column='1' Grid.Row='20' Name='chkWordOpenDocument' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='21' Margin="0,0,5,0">
<Label Content="Document scripts" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Include scripts in the documentation" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='21' Name='chkWordIncludeScripts' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='22' Margin="0,0,5,0">
<Label Content="Remove script signature" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Remove signature block from PowerShell scripts to reduce script documentation size" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='22' Name='chkWordExcludeScriptSignature' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='23' Margin="0,0,5,0"> <StackPanel Orientation="Horizontal" Grid.Row='23' Margin="0,0,5,0">
<Label Content="Attach Json file" /> <Label Content="Attach Json file" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Attach the Json file to the documentation" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Attach the Json file to the documentation" />
+26
View File
@@ -0,0 +1,26 @@
<Viewbox Width="18" Height="18" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas Height="18" Width="18">
<Canvas.Resources>
<LinearGradientBrush x:Key="deed83ab-7995-4b1b-9000-e569a21c2014" StartPoint="0.064690001308918,0.0795900002121925" EndPoint="0.064690001308918,0.187000006437302" MappingMode="RelativeToBoundingBox">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Offset="0.225" Color="#50e6ff" />
<GradientStop Offset="1" Color="#198ab3" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<LinearGradientBrush x:Key="deed83ab-7995-4b1b-9000-e569a21c2015" StartPoint="0.0619699992239475,0.0220100004225969" EndPoint="0.0698100030422211,0.119529999792576" MappingMode="RelativeToBoundingBox">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Offset="0.225" Color="#50e6ff" />
<GradientStop Offset="1" Color="#198ab3" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Canvas.Resources>
<Path Data="M11.783 16.761a1.15 1.15 0 0 0 1.154-1.146 1.08 1.08 0 0 0-.008-.139c-.452-3.615-2.515-6.56-6.45-6.56-4 0-6.07 2.493-6.473 6.57a1.158 1.158 0 0 0 1.032 1.269 1.112 1.112 0 0 0 .116.006Z" Fill="{StaticResource deed83ab-7995-4b1b-9000-e569a21c2014}" />
<Path Data="M6.541 9.773A3.6 3.6 0 0 1 4.577 9.2l1.944 5.08 1.931-5.051a3.608 3.608 0 0 1-1.911.544Z" Fill="#FFFFFF" />
<Ellipse Canvas.Left="2.886" Canvas.Top="2.518" Width="7.256" Height="7.256" Fill="{StaticResource deed83ab-7995-4b1b-9000-e569a21c2015}" />
<Path Data="M18 8.611V7.127l-.208-.078-1.592-.521-.416-1.015L16.6 3.8l-1.047-1.046-.208.1-1.483.754-1.015-.408-.647-1.8h-1.488l-.078.208-.52 1.592-1.009.414a3.61 3.61 0 0 1 .966 1.833 2.851 2.851 0 1 1 1.422 5.32 2.884 2.884 0 0 1-.641-.078 7.369 7.369 0 0 1 1.68 2.972l.341-1.039 1.015-.417 1.717.807 1.042-1.041-.1-.208-.754-1.484.407-1.018Z" Fill="#0078d4" />
</Canvas>
</Viewbox>