Compare commits

...
14 Commits
Author SHA1 Message Date
Mikael Karlsson 47968b4219 3.9.5 2024-01-24 21:25:53 +11:00
Mikael Karlsson 6ac211a2bf 3.9.4 2023-12-18 19:37:17 +11:00
Mikael Karlsson 83c845fc33 3.9.3 Fix 2023-12-11 19:00:23 +11:00
Mikael Karlsson f5613442bd 3.9.3 2023-12-11 18:58:13 +11:00
Mikael Karlsson ab7b062946 3.9.2 2023-10-17 20:34:44 +11:00
Mikael Karlsson ea3af64316 3.9.1 2023-08-30 20:07:18 +10:00
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
Mikael Karlsson 2dc5eca089 Merge branch 'master' of https://github.com/Micke-K/IntuneManagement 2022-10-25 20:28:23 +11:00
Mikael Karlsson 02c162efd3 Updated the version 2022-10-25 20:27:22 +11:00
Mikael Karlsson aae21c3960 Update ReleaseNotes.md 2022-10-24 23:41:21 +11:00
Mikael Karlsson 103b1c2e66 3.7.3 2022-10-24 19:19:30 +11:00
94 changed files with 72835 additions and 44747 deletions
+42
View File
@@ -0,0 +1,42 @@
using System;
using System.Net;
using System.Net.Http;
using Microsoft.Identity.Client;
public class HttpFactoryWithProxy : IMsalHttpClientFactory
{
private static HttpClient _httpClient;
public HttpFactoryWithProxy(string proxyURI) : this(proxyURI, null, null)
{
}
public HttpFactoryWithProxy(string proxyURI, string proxyUserName = null, string proxyPassword = null)
{
if (_httpClient == null)
{
var proxy = new WebProxy
{
Address = new Uri(proxyURI),
BypassProxyOnLocal = false,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(
userName: proxyUserName,
password: proxyPassword)
};
var httpClientHandler = new HttpClientHandler
{
Proxy = proxy,
};
_httpClient = new HttpClient(handler: httpClientHandler);
}
}
public HttpClient GetHttpClient()
{
return _httpClient;
}
}
File diff suppressed because it is too large Load Diff
+3 -3
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.2' ModuleVersion = '3.9.5'
# 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'
@@ -69,7 +69,7 @@ Description = 'Management of Intune and Azure via Cloud APIs like Microsoft Grap
NestedModules = @() NestedModules = @()
# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @("Initialize-CloudAPIManagement","Initialize-CloudAPIManagement") FunctionsToExport = @("Initialize-CloudAPIManagement")
# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
# CmdletsToExport = @() # CmdletsToExport = @()
+12 -4
View File
@@ -93,9 +93,18 @@ function Initialize-CloudAPIManagement
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName PresentationFramework
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$global:hideUI = ($Silent -eq $true) $global:hideUI = ($Silent -eq $true)
$global:SilentBatchFile = $SilentBatchFile $global:SilentBatchFile = $SilentBatchFile
if($tenantId)
{
$global:AzureAppId = $appId
$global:ClientSecret = $secret
$global:ClientCert = $certificate
}
if($global:hideUI -ne $true) if($global:hideUI -ne $true)
{ {
# Run with UI # Run with UI
@@ -126,12 +135,11 @@ function Initialize-CloudAPIManagement
Write-Error "Tenant Id is missing. Use -TenantId <Tenant-guid> on the command line to run silent batch jobs" Write-Error "Tenant Id is missing. Use -TenantId <Tenant-guid> on the command line to run silent batch jobs"
return return
} }
$global:TenantId = $tenantId
$global:AzureAppId = $appId
$global:ClientSecret = $secret
$global:ClientCert = $certificate
} }
$global:TenantId = $tenantId
if($ShowConsoleWindow -ne $true) if($ShowConsoleWindow -ne $true)
{ {
Hide-Console Hide-Console
+203 -9
View File
@@ -11,7 +11,7 @@ This module handles the WPF UI
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.7.1' '3.9.5'
} }
function Initialize-Window function Initialize-Window
@@ -58,6 +58,7 @@ function Start-CoreApp
$global:useDefaultFolderDialog = $false $global:useDefaultFolderDialog = $false
$global:WindowsAPICodePackLoaded = $false $global:WindowsAPICodePackLoaded = $false
$script:proxyURI = $null
$global:loadedModules = @() $global:loadedModules = @()
$global:viewObjects = @() $global:viewObjects = @()
@@ -235,6 +236,8 @@ function Write-Log
if(-not $global:logFileMaxSize) { [Int64]$global:logFileMaxSize = Get-SettingValue "LogFileSize" 1024; $global:logFileMaxSize = $global:logFileMaxSize * 1kb } if(-not $global:logFileMaxSize) { [Int64]$global:logFileMaxSize = Get-SettingValue "LogFileSize" 1024; $global:logFileMaxSize = $global:logFileMaxSize * 1kb }
if($null -eq $global:logOutputError) { $global:logOutputError = Get-SettingValue "LogOutputError" }
$fi = [IO.FileInfo]$global:logFile $fi = [IO.FileInfo]$global:logFile
if($fi.Length -gt $global:logFileMaxSize) if($fi.Length -gt $global:logFileMaxSize)
@@ -286,12 +289,19 @@ function Write-Log
if($type -eq 2) if($type -eq 2)
{ {
Write-Warning $Text Write-Warning $Text
$typeStr = "Error" $typeStr = "Warning"
} }
elseif($type -eq 3) elseif($type -eq 3)
{ {
$host.ui.WriteErrorLine($Text) if($global:logOutputError -ne $false)
$typeStr = "Warning" {
$host.ui.WriteErrorLine($Text)
}
else
{
Write-Warning $Text
}
$typeStr = "Error"
} }
else else
{ {
@@ -415,7 +425,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 +433,7 @@ function Get-XamlProperty
{ {
if($obj) if($obj)
{ {
return (?? $obj."$propertyName" $null) return (?? $obj."$propertyName" $defaultValue)
} }
else else
{ {
@@ -667,8 +677,15 @@ function Show-UpdatesDialog
{ {
if($mystream) { $mystream.Dispose() } if($mystream) { $mystream.Dispose() }
} }
$params = @{}
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$params.Add("proxy", $proxyURI)
$params.Add("UseBasicParsing", $true)
}
$content = Invoke-RestMethod "https://api.github.com/repos/Micke-K/IntuneManagement/contents/ReleaseNotes.md" $content = Invoke-RestMethod "https://api.github.com/repos/Micke-K/IntuneManagement/contents/ReleaseNotes.md" @params
if($content) if($content)
{ {
$txt = [System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($content.content))) $txt = [System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($content.content)))
@@ -703,7 +720,15 @@ function Get-IsLatestVersion
$gitHubVer = $null $gitHubVer = $null
$content = Invoke-RestMethod "https://api.github.com/repos/Micke-K/IntuneManagement/releases/latest" $params = @{}
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$params.Add("proxy", $proxyURI)
$params.Add("UseBasicParsing", $true)
}
$content = Invoke-RestMethod "https://api.github.com/repos/Micke-K/IntuneManagement/releases/latest" @params
if($content.Name) if($content.Name)
{ {
try try
@@ -715,7 +740,15 @@ function Get-IsLatestVersion
if($null -eq $gitHubVer) if($null -eq $gitHubVer)
{ {
$content = Invoke-RestMethod "https://api.github.com/repos/Micke-K/IntuneManagement/contents/CloudAPIPowerShellManagement.psd1" $params = @{}
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$params.Add("proxy", $proxyURI)
$params.Add("UseBasicParsing", $true)
}
$content = Invoke-RestMethod "https://api.github.com/repos/Micke-K/IntuneManagement/contents/CloudAPIPowerShellManagement.psd1" @params
$gitHubText = [System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($content.content))) $gitHubText = [System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($content.content)))
$gitHubInfo = Get-ModuleDataTable $gitHubText $gitHubInfo = Get-ModuleDataTable $gitHubText
try try
@@ -1150,6 +1183,10 @@ function Expand-FileName
[Environment]::SetEnvironmentVariable("DateTime",$null,[System.EnvironmentVariableTarget]::Process) [Environment]::SetEnvironmentVariable("DateTime",$null,[System.EnvironmentVariableTarget]::Process)
[Environment]::SetEnvironmentVariable("Organization",$null,[System.EnvironmentVariableTarget]::Process) [Environment]::SetEnvironmentVariable("Organization",$null,[System.EnvironmentVariableTarget]::Process)
# Remove invalid path characters
$re = "[{0}]" -f [RegEx]::Escape(([IO.Path]::GetInvalidPathChars() -join ''))
$fileName = $fileName -replace $re
$fileName $fileName
} }
@@ -1168,6 +1205,8 @@ function Initialize-Settings
$global:Debug = Get-SettingValue "Debug" $global:Debug = Get-SettingValue "Debug"
$global:logFile = $null $global:logFile = $null
$global:logFileMaxSize = $null $global:logFileMaxSize = $null
$global:logOutputError = $null
$script:proxyURI = $null
if($Updated -eq $true) if($Updated -eq $true)
{ {
@@ -1943,6 +1982,14 @@ function Add-DefaultSettings
DefaultValue = 1024 DefaultValue = 1024
}) "General" }) "General"
Add-SettingsObject (New-Object PSObject -Property @{
Title = "Add errors to PowerShell output"
Key = "LogOutputError"
Type = "Boolean"
Description = "Write errors to the Error Output of the PS Host. If disabled, errors will be written as a Warning. Eg. disable this if automation should skip logging PowerShell errors."
DefaultValue = $true
}) "General"
Add-SettingsObject (New-Object PSObject -Property @{ Add-SettingsObject (New-Object PSObject -Property @{
Title = "Debug" Title = "Debug"
Key = "Debug" Key = "Debug"
@@ -1998,6 +2045,12 @@ function Add-DefaultSettings
Description = "Adds the organization name next to the login info on the menu bar" Description = "Adds the organization name next to the login info on the menu bar"
}) "General" }) "General"
Add-SettingsObject (New-Object PSObject -Property @{
Title = "Proxy URI"
Key = "ProxyURI"
Description = "Specify the URI for the proxy eg http://&lt;server&gt;:&lt;port&gt;"
}) "General"
} }
function Add-SettingsObject function Add-SettingsObject
@@ -2435,6 +2488,15 @@ function Get-MainWindow
Show-ModalForm $window.Title $script:welcomeForm -HideButtons Show-ModalForm $window.Title $script:welcomeForm -HideButtons
} }
else
{
###!!! Force login here
if($global:currentViewObject.ViewInfo.Authenticate)
{
# Skip for now...need additional code to skip previous login and force this based on setting.
#!!!& $global:currentViewObject.ViewInfo.Authenticate -Params (@{"Interactve"=$true})
}
}
}) })
foreach($view in $global:viewObjects) foreach($view in $global:viewObjects)
@@ -2666,6 +2728,138 @@ 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
{
}
}
function Get-ProxyURI
{
if($null -eq $script:proxyURI)
{
$script:proxyUri = Get-SettingValue "ProxyURI"
}
if($null -eq $script:proxyURI)
{
$script:proxyUri = ""
}
return $script:proxyURI
}
function Start-DownloadFile
{
param($sourceURL, $targetFile)
Write-Log "Download file from $sourceURL"
if(-not $sourceURL)
{
return
}
if(-not $targetFile)
{
Write-Log "Target file is missing"
return
}
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$wc = New-Object System.Net.WebClient
$wc.Encoding = [System.Text.Encoding]::UTF8
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$wc.Proxy = [System.Net.WebProxy]::new($proxyURI)
}
try
{
$title = $sourceURL.Split("/")[-1]
$title = $title.Split("/")[0]
}
catch
{
$title = $sourceURL
}
try
{
Write-Status "Download file: `n$title"
$wc.DownloadFile($sourceURL, $targetFile)
Write-Log "File downloaded to $targetFile"
}
catch
{
Write-LogError "Failed to download file" $_.Exception
}
finally
{
$wc.Dispose()
}
}
function Get-ASCIIBytes
{
param($String)
$bytes = [System.Text.Encoding]::ASCII.GetBytes($String)
if ($bytes[0] -eq 0x2b -and $bytes[1] -eq 0x2f -and $bytes[2] -eq 0x76)
{ [Text.Encoding]::UTF7.GetBytes($String) }
elseif ($bytes[0] -eq 0xff -and $bytes[1] -eq 0xfe)
{ [Text.Encoding]::Unicode.GetBytes($String) }
elseif ($bytes[0] -eq 0xfe -and $bytes[1] -eq 0xff)
{ [Text.Encoding]::BigEndianUnicode.GetBytes($String) }
elseif ($bytes[0] -eq 0x00 -and $bytes[1] -eq 0x00 -and $bytes[2] -eq 0xfe -and $bytes[3] -eq 0xff)
{ [Text.Encoding]::UTF32.GetBytes($String) }
elseif ($bytes[0] -eq 0xef -and $bytes[1] -eq 0xbb -and $bytes[2] -eq 0xbf)
{ [Text.Encoding]::UTF8.GetBytes($String) }
$bytes
}
function Get-DataGridValues
{
param($dataGrid)
$dgColumns = $dataGrid.Columns
$properties = @()
foreach($tmpCol in $dgColumns)
{
if(-not $tmpCol.Binding.Path.Path) { continue }
$propName = $tmpCol.Binding.Path.Path
$properties += @{n=$tmpCol.Header;e=([Scriptblock]::Create("`$_.$propName"))}
}
($dataGrid.ItemsSource | Select -Property $properties)
}
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": [
{ {
+139 -7
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": {
@@ -967,12 +1099,12 @@
"category": "SettingDetails.dependencyCategory" "category": "SettingDetails.dependencyCategory"
}, },
{ {
"nameResourceKey": "supersedenceCategory", "nameResourceKey": "AppRelationshipStatus.Tabs.supersedence",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "supersededApps", "entityKey": "supersededApps",
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": "SettingDetails.supersedenceCategory" "category": "AppRelationshipStatus.Tabs.supersedence"
} }
] ]
} }
+41 -19
View File
@@ -106,33 +106,55 @@
"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",
@@ -189,7 +211,7 @@
"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": [
@@ -393,7 +393,7 @@
"value": "notConfigured" "value": "notConfigured"
}, },
{ {
"nameResourceKey": "microsoftEdge", "nameResourceKey": "microsoftEdgeOptionText",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"value": "microsoftEdge" "value": "microsoftEdge"
}, },
@@ -543,7 +543,7 @@
{ {
"nameResourceKey": "TAPSettings.Tap.numberOfDays", "nameResourceKey": "TAPSettings.Tap.numberOfDays",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "pinRequiredInsteadOfBiometricTimeout", "entityKey": "periodBeforePinReset",
"dataType": 100, "dataType": 100,
"booleanActions": 0, "booleanActions": 0,
"category": "SettingDetails.accessRequirements" "category": "SettingDetails.accessRequirements"
@@ -306,7 +306,7 @@
{ {
"nameResourceKey": "TAPSettings.EncryptData.label", "nameResourceKey": "TAPSettings.EncryptData.label",
"descriptionResourceKey": "TAPSettings.EncryptData.tooltip", "descriptionResourceKey": "TAPSettings.EncryptData.tooltip",
"entityKey": "appDataEncryptionType", "entityKey": "encryptOrgData",
"dataType": 0, "dataType": 0,
"booleanActions": 101, "booleanActions": 101,
"category": "SettingDetails.dataProtection", "category": "SettingDetails.dataProtection",
@@ -354,7 +354,7 @@
"value": "notConfigured" "value": "notConfigured"
}, },
{ {
"nameResourceKey": "microsoftEdge", "nameResourceKey": "microsoftEdgeOptionText",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"value": "microsoftEdge" "value": "microsoftEdge"
}, },
@@ -398,14 +398,12 @@
} }
] ]
}, },
{ {
"dataType": 8, "dataType": 8,
"nameResourceKey": "empty" "nameResourceKey": "empty"
}, },
{ {
"nameResourceKey": "TAPSettings.PinAccess.label", "nameResourceKey": "TAPSettings.PinAccess.label",
"descriptionResourceKey": "TAPSettings.PinAccess.tooltip", "descriptionResourceKey": "TAPSettings.PinAccess.tooltip",
@@ -496,17 +494,17 @@
{ {
"nameResourceKey": "TAPSettings.Tap.numberOfDays", "nameResourceKey": "TAPSettings.Tap.numberOfDays",
"descriptionResourceKey": "", "descriptionResourceKey": "",
"entityKey": "pinRequiredInsteadOfBiometricTimeout", "entityKey": "periodBeforePinReset",
"dataType": 100, "dataType": 100,
"booleanActions": 0, "booleanActions": 0,
"category": "SettingDetails.accessRequirements" "category": "SettingDetails.accessRequirements"
}, },
{ {
"nameResourceKey": "TAPSettings.Tap.previousPinBlockCount", "nameResourceKey": "TAPSettings.AppPIN.label",
"descriptionResourceKey": "", "descriptionResourceKey": "TAPSettings.AppPIN.tooltip",
"entityKey": "previousPinBlockCount", "entityKey": "disableAppPinIfDevicePinIsSet",
"dataType": 14, "dataType": 0,
"booleanActions": 0, "booleanActions": 201,
"category": "SettingDetails.accessRequirements" "category": "SettingDetails.accessRequirements"
}, },
{ {
@@ -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"
} }
] ]
} }
@@ -0,0 +1,69 @@
[
{
"nameResourceKey": "TableHeaders.policyType",
"descriptionResourceKey": "",
"entityKey": "WindowsDriverUpdateProfile.Subtitle.automatic",
"dataType": 200,
"booleanActions": 0,
"category": 1000,
"Condition": {
"Expressions": [
{
"property": "approvalType",
"value": "automatic"
}
]
}
},
{
"nameResourceKey": "TableHeaders.policyType",
"descriptionResourceKey": "",
"entityKey": "WindowsDriverUpdateProfile.Subtitle.manual",
"dataType": 200,
"booleanActions": 0,
"category": 1000,
"Condition": {
"Expressions": [
{
"property": "approvalType",
"value": "manual"
}
]
}
},
{
"nameResourceKey": "WindowsDriverUpdateProfile.Details.ApprovalMethod.label",
"descriptionResourceKey": "",
"entityKey": "approvalType",
"dataType": 16,
"booleanActions": 0,
"category": "TableHeaders.settings",
"options": [
{
"nameResourceKey": "WindowsDriverUpdateProfile.ApprovalMethod.automatic",
"value": "automatic"
},
{
"nameResourceKey": "WindowsDriverUpdateProfile.ApprovalMethod.manual",
"value": "manual"
}
]
},
{
"nameResourceKey": "WindowsDriverUpdateProfile.Details.DeploymentDeferralInDays.label",
"descriptionResourceKey": "",
"entityKey": "deploymentDeferralInDays",
"formatStringKey": "WindowsDriverUpdateProfile.Details.DeploymentDeferralInDays.value",
"dataType": 108,
"booleanActions": 0,
"category": "TableHeaders.settings",
"Condition": {
"Expressions": [
{
"property": "approvalType",
"value": "automatic"
}
]
}
}
]
@@ -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": [
@@ -113,6 +113,164 @@
"defaultValue": false, "defaultValue": false,
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 2,
"nameResourceKey": "appNameName",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "name",
"booleanActions": 0,
"policyType": 2,
"enabled": false
}
},
{
"metadata": {
"dataType": 20,
"category": 2,
"nameResourceKey": "packageName",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "appId",
"booleanActions": 0,
"policyType": 2,
"enabled": false
}
},
{
"metadata": {
"dataType": 20,
"category": 2,
"nameResourceKey": "appUrlName",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "appStoreUrl",
"booleanActions": 0,
"policyType": 2,
"enabled": false
}
},
{
"metadata": {
"dataType": 20,
"category": 2,
"nameResourceKey": "appPublisherName",
"descriptionResourceKey": "Empty",
"childSettings": [
],
"options": [
],
"entityKey": "publisher",
"booleanActions": 0,
"policyType": 2,
"enabled": false
}
}
],
"dataType": 21,
"category": 2,
"nameResourceKey": "certificateInstallTitle",
"descriptionResourceKey": "certificateInstallDescription",
"childSettings": [
],
"options": [
],
"entityKey": "certInstallApps",
"booleanActions": 0,
"policyType": 2,
"enabled": false
},
{
"complexOptions": [
{
"dataType": 11,
"category": 2,
"nameResourceKey": "selectSecurityApp",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "securityLogAppId",
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
],
"dataType": 5,
"category": 2,
"nameResourceKey": "securityLogsTitle",
"emptyValueResourceKey": "selectSecurityApp",
"childSettings": [
],
"options": [
],
"entityKey": "securityLogApp",
"booleanActions": 0,
"policyType": 2,
"enabled": false
},
{
"complexOptions": [
{
"dataType": 11,
"category": 2,
"nameResourceKey": "selectNetworkApp",
"descriptionResourceKey": "empty",
"childSettings": [
],
"options": [
],
"entityKey": "networkLogAppId",
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
],
"dataType": 5,
"category": 2,
"nameResourceKey": "networkLogsTitle",
"emptyValueResourceKey": "selectNetworkApp",
"childSettings": [
],
"options": [
],
"entityKey": "networkLogApp",
"booleanActions": 0,
"policyType": 2,
"enabled": false
} }
], ],
"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
}
]
}
@@ -154,8 +154,8 @@
{ {
"dataType": 16, "dataType": 16,
"category": 39, "category": 39,
"nameResourceKey": "safetyNetAttestationOptionsName", "nameResourceKey": "playIntegrityVerdictOptionsName",
"descriptionResourceKey": "safetyNetAttestationOptionsDescription", "descriptionResourceKey": "playIntegrityVerdictOptionsDescription",
"childSettings": [ "childSettings": [
], ],
@@ -166,17 +166,17 @@
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "androidSafetyNetbasicIntegrity", "nameResourceKey": "androidPlayIntegrityVerdictBasicIntegrity",
"value": "basicIntegrity", "value": "basicIntegrity",
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "androidSafetyNetBasicIntegrityAndCertified", "nameResourceKey": "androidPlayIntegrityVerdictBasicAndDeviceIntegrity",
"value": "basicIntegrityAndCertified", "value": "basicIntegrityAndCertified",
"enabled": true "enabled": true
} }
], ],
"entityKey": "androidSafetyNetAttestationOptions", "entityKey": "androidPlayIntegrityVerdictOptions",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured", "unconfiguredValue": "notConfigured",
@@ -52,8 +52,8 @@
{ {
"dataType": 16, "dataType": 16,
"category": 39, "category": 39,
"nameResourceKey": "safetyNetAttestationOptionsName", "nameResourceKey": "playIntegrityVerdictOptionsName",
"descriptionResourceKey": "safetyNetAttestationOptionsDescription", "descriptionResourceKey": "playIntegrityVerdictOptionsDescription",
"childSettings": [ "childSettings": [
], ],
@@ -64,17 +64,17 @@
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "androidSafetyNetbasicIntegrity", "nameResourceKey": "androidPlayIntegrityVerdictBasicIntegrity",
"value": "basicIntegrity", "value": "basicIntegrity",
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "androidSafetyNetBasicIntegrityAndCertified", "nameResourceKey": "androidPlayIntegrityVerdictBasicAndDeviceIntegrity",
"value": "basicIntegrityAndCertified", "value": "basicIntegrityAndCertified",
"enabled": true "enabled": true
} }
], ],
"entityKey": "androidSafetyNetAttestationOptions", "entityKey": "androidPlayIntegrityVerdictOptions",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured", "unconfiguredValue": "notConfigured",
@@ -103,8 +103,8 @@
{ {
"dataType": 16, "dataType": 16,
"category": 39, "category": 39,
"nameResourceKey": "safetyNetAttestationOptionsName", "nameResourceKey": "playIntegrityVerdictOptionsName",
"descriptionResourceKey": "safetyNetAttestationOptionsDescription", "descriptionResourceKey": "playIntegrityVerdictOptionsDescription",
"childSettings": [ "childSettings": [
], ],
@@ -115,25 +115,25 @@
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "androidSafetyNetbasicIntegrity", "nameResourceKey": "androidPlayIntegrityVerdictBasicIntegrity",
"value": "basicIntegrity", "value": "basicIntegrity",
"children": [ "children": [
{ {
"dataType": 16, "dataType": 16,
"category": 39, "category": 39,
"nameResourceKey": "requiredAndroidSafetyNetEvaluationTypeName", "nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeName",
"descriptionResourceKey": "requiredAndroidSafetyNetEvaluationTypeDescription", "descriptionResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeDescription",
"childSettings": [ "childSettings": [
], ],
"options": [ "options": [
{ {
"nameResourceKey": "requiredAndroidSafetyNetEvaluationTypeBasic", "nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeBasic",
"value": "basic", "value": "basic",
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "requiredAndroidSafetyNetEvaluationTypeHardwareBacked", "nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeHardwareBacked",
"value": "hardwareBacked", "value": "hardwareBacked",
"enabled": true "enabled": true
} }
@@ -149,25 +149,25 @@
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "androidSafetyNetBasicIntegrityAndCertified", "nameResourceKey": "androidPlayIntegrityVerdictBasicAndDeviceIntegrity",
"value": "basicIntegrityAndCertified", "value": "basicIntegrityAndCertified",
"children": [ "children": [
{ {
"dataType": 16, "dataType": 16,
"category": 39, "category": 39,
"nameResourceKey": "requiredAndroidSafetyNetEvaluationTypeName", "nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeName",
"descriptionResourceKey": "requiredAndroidSafetyNetEvaluationTypeDescription", "descriptionResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeDescription",
"childSettings": [ "childSettings": [
], ],
"options": [ "options": [
{ {
"nameResourceKey": "requiredAndroidSafetyNetEvaluationTypeBasic", "nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeBasic",
"value": "basic", "value": "basic",
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "requiredAndroidSafetyNetEvaluationTypeHardwareBacked", "nameResourceKey": "requiredAndroidPlayIntegrityVerdictEvaluationTypeHardwareBacked",
"value": "hardwareBacked", "value": "hardwareBacked",
"enabled": true "enabled": true
} }
@@ -183,7 +183,7 @@
"enabled": true "enabled": true
} }
], ],
"entityKey": "androidSafetyNetAttestationOptions", "entityKey": "androidPlayIntegrityVerdictOptions",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "notConfigured", "defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured", "unconfiguredValue": "notConfigured",
@@ -1,68 +1,178 @@
{ {
"devicehealth_compliancewindows10": { "devicehealth_compliancewindows10": [
"isSettingDescription": false, {
"showAsSectionHeader": false, "isSettingDescription": false,
"dataType": 8, "showAsSectionHeader": false,
"category": 39, "dataType": 8,
"nameResourceKey": "complianceWindowsDeviceHealthAttestationHeader", "category": 39,
"childSettings": [ "nameResourceKey": "complianceWindowsDeviceHealthAttestationHeader",
{ "childSettings": [
"dataType": 0,
"category": 39,
"nameResourceKey": "bitLockerEnabledName",
"descriptionResourceKey": "bitLockerEnabledDescription",
"childSettings": [
], ],
"options": [ "options": [
], ],
"entityKey": "bitLockerEnabled", "booleanActions": 0,
"booleanActions": 1, "policyType": 35,
"defaultValue": false, "enabled": true
"policyType": 35, },
"enabled": true {
}, "isSettingDescription": false,
{ "showAsSectionHeader": false,
"dataType": 0, "dataType": 8,
"category": 39, "category": 39,
"nameResourceKey": "secureBootEnabledName", "nameResourceKey": "complianceWindows10DeviceHealthAttestationHeader",
"descriptionResourceKey": "secureBootEnabledDescription", "childSettings": [
"childSettings": [ {
"dataType": 0,
"category": 39,
"nameResourceKey": "bitLockerEnabledName",
"childSettings": [
], ],
"options": [ "options": [
], ],
"entityKey": "secureBootEnabled", "entityKey": "bitLockerEnabled",
"booleanActions": 1, "booleanActions": 1,
"defaultValue": false, "defaultValue": false,
"policyType": 35, "policyType": 35,
"enabled": true "enabled": true
}, },
{ {
"dataType": 0, "dataType": 0,
"category": 39, "category": 39,
"nameResourceKey": "codeIntegrityEnabledName", "nameResourceKey": "secureBootEnabledName",
"descriptionResourceKey": "codeIntegrityEnabledDescription", "childSettings": [
"childSettings": [
], ],
"options": [ "options": [
], ],
"entityKey": "codeIntegrityEnabled", "entityKey": "secureBootEnabled",
"booleanActions": 1, "booleanActions": 1,
"defaultValue": false, "defaultValue": false,
"policyType": 35, "policyType": 35,
"enabled": true "enabled": true
} },
], {
"options": [ "dataType": 0,
"category": 39,
"nameResourceKey": "codeIntegrityEnabledName",
"childSettings": [
], ],
"booleanActions": 0, "options": [
"policyType": 35,
"enabled": true ],
} "entityKey": "codeIntegrityEnabled",
"booleanActions": 1,
"defaultValue": false,
"policyType": 35,
"enabled": true
}
],
"options": [
],
"booleanActions": 0,
"policyType": 35,
"enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": false,
"dataType": 8,
"category": 39,
"nameResourceKey": "complianceWindows11DeviceHealthAttestationHeader",
"childSettings": [
{
"dataType": 0,
"category": 39,
"nameResourceKey": "earlyLaunchAntiMalwareDriverEnabledName",
"childSettings": [
],
"options": [
],
"entityKey": "earlyLaunchAntiMalwareDriverEnabled",
"booleanActions": 1,
"defaultValue": false,
"policyType": 35,
"enabled": false
},
{
"dataType": 0,
"category": 39,
"nameResourceKey": "firmwareProtectionEnabledName",
"childSettings": [
],
"options": [
],
"entityKey": "firmwareProtectionEnabled",
"booleanActions": 1,
"defaultValue": false,
"policyType": 35,
"enabled": false
},
{
"dataType": 0,
"category": 39,
"nameResourceKey": "hvciEnabledName",
"childSettings": [
],
"options": [
],
"entityKey": "memoryIntegrityEnabled",
"booleanActions": 1,
"defaultValue": false,
"policyType": 35,
"enabled": false
},
{
"dataType": 0,
"category": 39,
"nameResourceKey": "memoryAccessProtectionEnabledName",
"childSettings": [
],
"options": [
],
"entityKey": "kernelDmaProtectionEnabled",
"booleanActions": 1,
"defaultValue": false,
"policyType": 35,
"enabled": false
},
{
"dataType": 0,
"category": 39,
"nameResourceKey": "virtualizationBasedSecurityEnabledName",
"childSettings": [
],
"options": [
],
"entityKey": "virtualizationBasedSecurityEnabled",
"booleanActions": 1,
"defaultValue": false,
"policyType": 35,
"enabled": false
}
],
"options": [
],
"booleanActions": 0,
"policyType": 35,
"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
} }
] ]
} }
@@ -448,6 +448,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -418,6 +418,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -195,6 +195,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -418,6 +418,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -457,6 +457,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -457,6 +457,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -234,6 +234,12 @@
"displayText": "2048", "displayText": "2048",
"value": "size2048", "value": "size2048",
"enabled": true "enabled": true
},
{
"nameResourceKey": "",
"displayText": "4096",
"value": "size4096",
"enabled": false
} }
], ],
"entityKey": "keySize", "entityKey": "keySize",
@@ -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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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": true
}
},
{ {
"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,208 @@
"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
},
{
"dataType": 0,
"category": 127,
"nameResourceKey": "blockUnifiedPasswordForWorkProfileName",
"descriptionResourceKey": "blockUnifiedPasswordForWorkProfileDescription",
"childSettings": [
],
"options": [
],
"entityKey": "blockUnifiedPasswordForWorkProfile",
"booleanActions": 3,
"defaultValue": false,
"policyType": 13,
"enabled": false
},
{
"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 +848,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
} }
+3141 -1762
View File
File diff suppressed because it is too large Load Diff
+3141 -1762
View File
File diff suppressed because it is too large Load Diff
+3169 -1790
View File
File diff suppressed because it is too large Load Diff
+3142 -1763
View File
File diff suppressed because it is too large Load Diff
+3170 -1791
View File
File diff suppressed because it is too large Load Diff
+3143 -1764
View File
File diff suppressed because it is too large Load Diff
+3143 -1764
View File
File diff suppressed because it is too large Load Diff
+3156 -1777
View File
File diff suppressed because it is too large Load Diff
+3145 -1766
View File
File diff suppressed because it is too large Load Diff
+3144 -1765
View File
File diff suppressed because it is too large Load Diff
+3143 -1764
View File
File diff suppressed because it is too large Load Diff
+3169 -1790
View File
File diff suppressed because it is too large Load Diff
+3142 -1763
View File
File diff suppressed because it is too large Load Diff
+3143 -1764
View File
File diff suppressed because it is too large Load Diff
+3143 -1764
View File
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
+3169 -1790
View File
File diff suppressed because it is too large Load Diff
+8 -4
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,7 +422,7 @@ 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"
@@ -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
File diff suppressed because it is too large Load Diff
+657
View File
@@ -0,0 +1,657 @@
function Get-ModuleVersion
{
'1.0.1'
}
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.PSObject.Properties | Where Name -eq "FilterMode"))
{
$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
}
}
+305 -122
View File
@@ -1,34 +1,127 @@
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.0' '1.1.1'
} }
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")
} }
$script:mdContent.AppendLine("") $mdText = $script:cssStyle
$mdText = $script:mdContent.ToString()
$mdText += $script:mdStrings.ToString()
$fileName = Expand-FileName "%MyDocuments%\%Organization%-%Date%.md" $script:mdContent.AppendLine("")
$mdText += $script:mdContent.ToString()
if($script:outputType -eq "Full")
{
$mdText += $script:mdStrings.ToString()
}
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")
@@ -186,7 +331,7 @@ function Invoke-MDProcessItem
$isFilterAssignment = $false $isFilterAssignment = $false
foreach($assignment in $documentedObj.Assignments) foreach($assignment in $documentedObj.Assignments)
{ {
if(($assignment.target.PSObject.Properties | Where Name -eq "deviceAndAppManagementAssignmentFilterType")) if(($assignment.PSObject.Properties | Where Name -eq "FilterMode"))
{ {
$isFilterAssignment = $true $isFilterAssignment = $true
break break
@@ -197,16 +342,27 @@ 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
}
} }
function Add-MDTableItems function Add-MDTableItems
@@ -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)
} }
} }
$text = $text.Replace("|", '`|') if($CodeBlock -eq $false -or -not $textOut)
$text = $text.Replace("*", '`*') {
$text = $text.Replace("$", '`$') $text = $text.Replace("|", '`|')
$text = $text.Replace("`r`n", "<br />") $text = $text.Replace("*", '`*')
$text = $text.Replace("`n", "<br />") $text = $text.Replace("$", '`$')
$text = $text.Replace("`r`n", "<br />")
$textOut = $text.Replace("`n", "<br />")
}
$text if($txtSummary)
{
"<details class='description'><summary data-open='Minimize' data-close='$($txtSummary)...expand'></summary>$textOut</details>"
}
else
{
$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)). "
}
if($UseHTML -eq $true)
{
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 else
{ {
$sectionAnchor = "section-$(($script:sectionAnchors.Count + 1))" # Warnig: Not complete! Use HTML if not working...
} $text = "$prefix$text"
$sectionAnchor = $text.ToLower().Replace(" ","-").Replace("[","").Replace("]","")
$script:mdStrings.AppendLine("<h$level id=`"$prefix$($sectionAnchor)`">$text</h$level>") $mdHeader = [String]::new('#',$level)
$script:mdStrings.AppendLine("$mdHeader $text")
}
$FileName = $script:currentItemFileName
} }
else else
{ {
# Warnig: Not complete! Use HTML if not working... $sectionAnchor = $null
$text = "$prefix$text" $FileName = $null
$sectionAnchor = $text.ToLower().Replace(" ","-").Replace("[","").Replace("]","")
$mdHeader = [String]::new('#',$level)
$script:mdStrings.AppendLine("$mdHeader $text")
} }
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
} }
} }
@@ -416,67 +653,13 @@ 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.6.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,13 +593,14 @@ function Invoke-WordProcessItem
$settingProps += ("Settings." + $objProp) $settingProps += ("Settings." + $objProp)
} }
} }
$params.Add("AddCategories", $true)
} }
else else
{ {
$isFilterAssignment = $false $isFilterAssignment = $false
foreach($assignment in $documentedObj.Assignments) foreach($assignment in $documentedObj.Assignments)
{ {
if(($assignment.target.PSObject.Properties | Where Name -eq "deviceAndAppManagementAssignmentFilterType")) if(($assignment.PSObject.Properties | Where Name -eq "FilterMode"))
{ {
$isFilterAssignment = $true $isFilterAssignment = $true
break break
@@ -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
} }
} }
@@ -760,7 +752,7 @@ function Add-DocTableItems
$range = $script:doc.application.selection.range $range = $script:doc.application.selection.range
$script:docTable = $script:doc.Tables.Add($range, ($items.Count + 1), $properties.Count, [Microsoft.Office.Interop.Word.WdDefaultTableBehavior]::wdWord9TableBehavior, [Microsoft.Office.Interop.Word.WdAutoFitBehavior]::wdAutoFitWindow) $script:docTable = $script:doc.Tables.Add($range, (($items | measure).Count + 1), $properties.Count, [Microsoft.Office.Interop.Word.WdDefaultTableBehavior]::wdWord9TableBehavior, [Microsoft.Office.Interop.Word.WdAutoFitBehavior]::wdAutoFitWindow)
$script:docTable.ApplyStyleHeadingRows = $true $script:docTable.ApplyStyleHeadingRows = $true
Set-DocObjectStyle $script:docTable $global:txtWordTableStyle.Text | Out-null Set-DocObjectStyle $script:docTable $global:txtWordTableStyle.Text | Out-null
@@ -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)
{
$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)
{
$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
{ {
if(-not $objectScript.ScriptContent -or -not $objectScript.Caption) { continue }
Add-DocTableScript $objectScript.Caption $objectScript.Header $objectScript.ScriptContent
} }
} }
File diff suppressed because it is too large Load Diff
+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
@@ -108,3 +127,38 @@ 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
}
+210 -27
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.3'
} }
######################################################################################### #########################################################################################
@@ -94,14 +94,18 @@ function Copy-MSILOB
$tmpFile = [IO.Path]::GetTempFileName() $tmpFile = [IO.Path]::GetTempFileName()
$msiInfo = Get-MSIFileInformation $msiFile @("ProductName", "ProductCode", "ProductVersion", "ProductLanguage") $msiInfo = Get-MSIFileInformation $msiFile @("ProductName", "ProductCode", "ProductVersion", "ProductLanguage", "UpgradeCode", "ALLUSERS")
if(-not $msiInfo) { return } if(-not $msiInfo) { return }
$fileEncryptionInfo = New-IntuneEncryptedFile $msiFile $tmpFile $fileEncryptionInfo = New-IntuneEncryptedFile $msiFile $tmpFile
[xml]$manifestXML = '<MobileMsiData MsiExecutionContext="Any" MsiRequiresReboot="false" MsiUpgradeCode="" MsiIsMachineInstall="true" MsiIsUserInstall="false" MsiIncludesServices="false" MsiContainsSystemRegistryKeys="false" MsiContainsSystemFolders="false"></MobileMsiData>' [xml]$manifestXML = '<MobileMsiData MsiExecutionContext="Any" MsiRequiresReboot="false" MsiUpgradeCode="" MsiIsMachineInstall="true" MsiIsUserInstall="false" MsiIncludesServices="false" MsiContainsSystemRegistryKeys="false" MsiContainsSystemFolders="false"></MobileMsiData>'
$manifestXML.MobileMsiData.MsiUpgradeCode = $msiInfo["ProductCode"] $manifestXML.MobileMsiData.MsiUpgradeCode = $msiInfo["UpgradeCode"]
if($msiInfo["ALLUSERS"] -eq 1)
{
$manifestXML.MobileMsiData.MsiExecutionContext = "System"
}
$appFileBody = @{ $appFileBody = @{
"@odata.type" = "#microsoft.graph.mobileAppContentFile" "@odata.type" = "#microsoft.graph.mobileAppContentFile"
@@ -109,11 +113,14 @@ function Copy-MSILOB
size = (Get-Item $msiFile).Length size = (Get-Item $msiFile).Length
sizeEncrypted = (Get-Item $tmpFile).Length sizeEncrypted = (Get-Item $tmpFile).Length
manifest = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($manifestXML.OuterXml)) manifest = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($manifestXML.OuterXml))
isDependency = $false
} }
Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody
Remove-Item $tmpFile -Force Remove-Item $tmpFile -Force
$fileEncryptionInfo
} }
function Copy-iOSLOB function Copy-iOSLOB
@@ -149,6 +156,8 @@ function Copy-iOSLOB
Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody
Remove-Item $tmpFile -Force Remove-Item $tmpFile -Force
$fileEncryptionInfo
} }
function Copy-AndroidLOB function Copy-AndroidLOB
@@ -185,6 +194,8 @@ function Copy-AndroidLOB
Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody Add-FileToIntuneApp $appId $appType $tmpFile $appFileBody
Remove-Item $tmpFile -Force Remove-Item $tmpFile -Force
$fileEncryptionInfo
} }
function Copy-Win32LOBPackage function Copy-Win32LOBPackage
@@ -235,7 +246,7 @@ function Copy-Win32LOBPackage
$fileBody = @{ $fileBody = @{
"@odata.type" = "#microsoft.graph.mobileAppContentFile" "@odata.type" = "#microsoft.graph.mobileAppContentFile"
name = $DetectionXML.ApplicationInfo.FileName name = "IntunePackage.intunewin"
size = [int64]$DetectionXML.ApplicationInfo.UnencryptedContentSize size = [int64]$DetectionXML.ApplicationInfo.UnencryptedContentSize
sizeEncrypted = (Get-Item $tmpIntunewinFile).Length sizeEncrypted = (Get-Item $tmpIntunewinFile).Length
manifest = $null manifest = $null
@@ -246,45 +257,58 @@ function Copy-Win32LOBPackage
# Remove extracted inintunewin file # Remove extracted inintunewin file
Remove-Item $tmpIntunewinPath -Force -Recurse Remove-Item $tmpIntunewinPath -Force -Recurse
$fileEncryptionInfo
} }
function Add-FileToIntuneApp function Add-FileToIntuneApp
{ {
param($appId, $appType, $appFile, $fileBody) param($appId, $appType, $appFile, $fileBody)
$contentVersion = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions" -HttpMethod POST -Content "{}" $contentVersion = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions" -HttpMethod POST -Content "{}" -ODataMetadata "Minimal"
$contentVersionId = $contentVersion.id $contentVersionId = $contentVersion.id
$fileObj = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files" -HttpMethod POST -Content (ConvertTo-Json $fileBody -Depth 5) $fileObj = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files" -HttpMethod POST -Content (ConvertTo-Json $fileBody -Depth 5) -ODataMetadata "Minimal"
if(-not $fileObj) if(-not $fileObj)
{ {
return return
} }
Write-Log "File object created. ID: $($fileObj.id)"
# Wait for Azure storage URI # Wait for Azure storage URI
$fileObj = Wait-IntuneFileState "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" "AzureStorageUriRequest" $fileObj = Wait-IntuneFileState "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" "AzureStorageUriRequest"
if(-not $fileObj) if(-not $fileObj)
{ {
Write-Log "No File Object returned from commit. Upload failed" 3
return return
} }
# Upload file # Upload file
Send-IntuneFileToAzureStorage $fileObj.azureStorageUri $appFile "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" Send-IntuneFileToAzureStorage $fileObj.azureStorageUri $appFile "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" | Out-Null
# Commit the file # Commit the file
$reponse = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)/commit" -HttpMethod POST -Content (ConvertTo-Json $fileEncryptionInfo -Depth 5) Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)/commit" -HttpMethod POST -Content (ConvertTo-Json $fileEncryptionInfo -Depth 5) | Out-Null
Wait-IntuneFileState "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" "CommitFile" Wait-IntuneFileState "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" "CommitFile" | Out-Null
$fiUpload = [IO.FileInfo]$appFile
# Commit the content version # Commit the content version
$commitAppBody = @{ $commitAppBody = @{
"@odata.type" = "#$appType" "@odata.type" = "#$appType"
committedContentVersion = $contentVersionId committedContentVersion = $contentVersionId
fileName = $fiUpload.Name
} }
$reponse = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId" -HttpMethod PATCH -Content (ConvertTo-Json $commitAppBody -Depth 5) # if($fileBody.Name) {
# $fileUploadName = $fileBody.Name
# }
# else {
$fiUpload = [IO.FileInfo]$appFile
$fileUploadName = $fiUpload.Name
# }
$commitAppBody.Add("fileName",$fileUploadName)
Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId" -HttpMethod PATCH -Content (ConvertTo-Json $commitAppBody -Depth 5) | Out-Null
Write-Log "Upload finished for file $fileUploadName version $contentVersionId"
} }
function Wait-IntuneFileState function Wait-IntuneFileState
@@ -318,7 +342,7 @@ function Wait-IntuneFileState
return return
} }
Start-Sleep -s 5 Start-Sleep -Seconds 1
} }
if($succes -eq $false) if($succes -eq $false)
@@ -357,14 +381,18 @@ 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)
{ {
@@ -372,11 +400,18 @@ function Send-IntuneFileToAzureStorage
$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.
@@ -412,9 +447,17 @@ function Set-FinalizeAzureStorageUpload
} }
$xml += '</BlockList>' $xml += '</BlockList>'
$params = @{}
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$params.Add("proxy", $proxyURI)
$params.Add("UseBasicParsing", $true)
}
try try
{ {
Invoke-RestMethod $uri -Method Put -Body $xml Invoke-RestMethod $uri -Method Put -Body $xml @params
} }
catch catch
{ {
@@ -443,15 +486,45 @@ 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
} $params = @{}
catch $proxyURI = Get-ProxyURI
{ if($proxyURI)
Write-Log "Failed to upload file chunk. $($_.Exception.Message)" 3 {
} $params.Add("proxy", $proxyURI)
}
while($true)
{
try
{
$response = Invoke-WebRequest $uri -Method Put -Headers $headers -Body $encodedBody -UseBasicParsing @params
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
@@ -587,3 +660,113 @@ function New-IntuneEncryptedFile
$fileEncryptionInfo $fileEncryptionInfo
} }
function Start-DecryptFile
{
param($sourceFile, $targetFile, $encryptionKey, $initializationVector)
if([IO.File]::Exists($targetFile))
{
$fi = [IO.FileInfo]$targetFile
$newName = $fi.Name + "_$((Get-Date).ToString("yyyyMMdd_HHmm"))" + $fi.Extension
$targetFile = $fi.DirectoryName + "\$newName"
Write-Log "Target file exists. Changing target file to $targetFile" 2
}
$bufferBlockSize = 1024 * 4
try
{
$aes = [System.Security.Cryptography.Aes]::Create()
$buffer = New-Object byte[] $bufferBlockSize
$bytesRead = 0
$targetStream = [System.IO.File]::Open($targetFile, [System.IO.FileMode]::Create, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
try
{
$sourceStream = [System.IO.File]::Open($sourceFile, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::None)
$decryptor = $aes.CreateDecryptor([Convert]::FromBase64String($encryptionKey), [Convert]::FromBase64String($initializationVector))
$decryptoStream = New-Object System.Security.Cryptography.CryptoStream -ArgumentList @($targetStream, $decryptor, [System.Security.Cryptography.CryptoStreamMode]::Write)
$sourceStream.Seek(48L, [System.IO.SeekOrigin]::Begin)
while (($bytesRead = $sourceStream.Read($buffer, 0, $bufferBlockSize)) -gt 0)
{
$decryptoStream.Write($buffer, 0, $bytesRead)
$decryptoStream.Flush()
}
$decryptoStream.FlushFinalBlock()
}
finally
{
if ($null -ne $decryptoStream) { $decryptoStream.Dispose() }
if ($null -ne $targetStream) { $targetStream.Dispose() }
if ($null -ne $decryptor) { $decryptor.Dispose() }
if ($null -ne $sourceStream) { $sourceStream.Dispose() }
}
}
finally
{
if ($null -ne $sourceStream) { $sourceStream.Dispose() }
if ($null -ne $aes) { $aes.Dispose() }
}
}
function Start-DownloadAppContent
{
param($obj, $destinationFile, [switch]$GetContentFileInfoOnly)
# Not use but kept for reference. File can be download but it will be encrypted
if([IO.File]::Exists($destinationFile))
{
try { [IO.File]::Delete($encryptionFile) }
catch {}
}
$appId = $obj.Id
$appInfo = Invoke-GraphRequest -Url "$($global:graphURL)/deviceAppManagement/mobileApps/$appId"
$appType = $appInfo.'@odata.type'.Trim('#')
#$contentVersions = Invoke-GraphRequest -Url "$($global:graphURL)/deviceAppManagement/mobileApps/$appId/$appType/contentVersions"
#$contentVerId = $contentVersions.Value[0].id
$contentVerId = $appInfo.committedContentVersion
$contentFiles = Invoke-GraphRequest "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVerId/files"
$contentFile = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVerId/files/$($contentFiles.value[-1].Id)" -NoError
if(-not $contentFile)
{
foreach($file in $contentFiles.value)
{
if($contentFiles.value[-1].Id -eq $file.id) { continune }
# NOT happy about this. file objects are not always returned in the order of upload.
$contentFile = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVerId/files/$($file.Id)" -NoError
if($contentFile)
{
break
}
}
}
if($contentFile.azureStorageUri)
{
if($GetContentFileInfoOnly -ne $true)
{
Start-DownloadFile $contentFile.azureStorageUri $destinationFile
}
return $contentFile
}
else
{
Write-Log "Could not find file object for app $($obj.displayName) ($($appId))" 2
}
}
+422
View File
@@ -0,0 +1,422 @@
<#
.SYNOPSIS
Module for listing Intune assignment filter usage
.DESCRIPTION
.NOTES
Author: Mikael Karlsson
#>
function Get-ModuleVersion
{
'1.1.1'
}
function Invoke-InitializeModule
{
Add-EMToolsViewItem (New-Object PSObject -Property @{
Title = "Intune Filter Usage"
Id = "IntuneFilterUsage"
ViewID = "EMTools"
Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
Icon="DeviceConfiguration"
ShowViewItem = { Show-IntuneToolsFilterUsage }
})
}
function Show-IntuneToolsFilterUsage
{
if(-not $script:frmIntuneFilterUsage)
{
$script:frmIntuneFilterUsage = Get-XamlObject ($global:AppRootFolder + "\Xaml\IntuneToolsFiterUsage.xaml") #-AddVariables
if(-not $script:frmIntuneFilterUsage) { return }
Add-XamlEvent $script:frmIntuneFilterUsage "btnGetIntuneFilterUsage" "add_click" ({
Write-Status "Get Intune Filter Usage"
Get-EMIntuneFilterUsage
Write-Status ""
})
Add-XamlEvent $script:frmIntuneFilterUsage "btnIntuneFilterUsageCopy" "add_click" ({
$dgValues = Get-DataGridValues ($script:frmIntuneFilterUsage.FindName("dgIntuneFilterUsage"))
$dgValues | ConvertTo-Csv -NoTypeInformation | Set-Clipboard
})
Add-XamlEvent $script:frmIntuneFilterUsage "btnIntuneFilterUsagesSave" "add_click" ({
$dlgSave = New-Object -Typename System.Windows.Forms.SaveFileDialog
$dlgSave.FileName = $obj.FileName
$dlgSave.DefaultExt = "*.csv"
$dlgSave.Filter = "CSV (*.csv)|*.csv|All files (*.*)| *.*"
if($dlgSave.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK -and $dlgSave.Filename)
{
$dgValues = Get-DataGridValues ($script:frmIntuneFilterUsage.FindName("dgIntuneFilterUsage"))
$dgValues | ConvertTo-Csv -NoTypeInformation | Out-File -LiteralPath $dlgSave.Filename -Encoding UTF8 -Force
}
})
}
$global:grdToolsMain.Children.Clear()
$global:grdToolsMain.Children.Add($frmIntuneFilterUsage)
}
function Get-DataGridValues_old
{
param($dataGrid)
$dgColumns = $dataGrid.Columns
#$dgColumns = Get-XamlProperty $script:frmIntuneFilterUsage "dgIntuneFilterUsage" "Columns"
$properties = @()
foreach($tmpCol in $dgColumns)
{
$propName = $tmpCol.Binding.Path.Path
$properties += @{n=$tmpCol.Header;e=([Scriptblock]::Create("`$_.$propName"))}
}
($script:objFilterUsage | Select -Property $properties)
}
function Get-EMIntuneFilterUsage
{
param($rootDir)
Write-Status "Gather Intune Filter Information"
Set-XamlProperty $script:frmIntuneFilterUsage "dgIntuneFilterUsage" "ItemsSource" $null
$objectType = Get-GraphObjectType "AssignmentFilters"
$loadedGroups = @{}
$loadedGroups.Add("adadadad-808e-44e2-905a-0b7873a8a531","All Devices")
$loadedGroups.Add("acacacac-9df4-4c7d-9d50-4ef0226f57a9","All Users")
$script:objFilters = (Invoke-GraphRequest -Url $objectType.API).Value
$script:objFilterUsage = @()
$groupIDs = @()
foreach($filter in $script:objFilters)
{
Write-Status "Get payloads for filter $($filter.displayName)"
$payloadsManual = @()
$payloads = (Invoke-GraphRequest -Url "$($objectType.API)/$($filter.ID)/payloads").value
$batchObjs = @()
foreach($payload in $payloads)
{
$guid = [Guid]::NewGuid().Guid
$payloadsObj = @{
Payload = $payload
ID = $guid
Requests = @()
}
if($groupIDs -notcontains $payload.groupId)
{
$groupIDs += $payload.groupId
}
$batchObjs += $payloadsObj
if($payload.payloadType -eq "win32app")
{
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_deviceHealthScripts"
method = "GET"
url = "/deviceManagement/deviceHealthScripts/$($payload.payloadId)/?`$select=displayName,isGlobalScript"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
}
elseif($payload.payloadType -eq "application")
{
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_mobileApps"
method = "GET"
url = "/deviceAppManagement/mobileApps/$($payload.payloadId)/?`$select=displayName"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
}
elseif($payload.payloadType -eq "deviceManagmentConfigurationAndCompliancePolicy")
{
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_configurationPolicies"
method = "GET"
url = "/deviceManagement/configurationPolicies/$($payload.payloadId)/?`$select=name,platforms,technologies,templateReference"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
}
elseif($payload.payloadType -eq "groupPolicyConfiguration")
{
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_groupPolicyConfigurations"
method = "GET"
url = "/deviceManagement/groupPolicyConfigurations/$($payload.payloadId)/?`$select=displayName"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
}
elseif($payload.payloadType -eq "enrollmentConfiguration")
{
if(-not $script:enrolmentConfigurations)
{
$script:enrolmentConfigurations = @()
$script:enrolmentConfigurations += (Invoke-GraphRequest -Url "/deviceManagement/deviceEnrollmentConfigurations?`$select=displayName,id,deviceEnrollmentConfigurationType").value
$script:enrolmentConfigurations += (Invoke-GraphRequest -Url "/deviceManagement/deviceEnrollmentConfigurations?`$select=displayName,id,deviceEnrollmentConfigurationType&`$filter=deviceEnrollmentConfigurationType eq 'EnrollmentNotificationsConfiguration'").value
}
$payloadsManual += $payload
<#
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_enrollmentConfiguration"
method = "GET"
url = "/deviceManagement/deviceEnrollmentConfigurations/$($enrolmentConfig.Id)/?`$select=displayName"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
#>
}
else
{
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_deviceCompliancePolicies"
method = "GET"
url = "/deviceManagement/deviceCompliancePolicies/$($payload.payloadId)/?`$select=displayName"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_deviceConfigurations"
method = "GET"
url = "/deviceManagement/deviceConfigurations/$($payload.payloadId)/?`$select=displayName"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
$payloadsObj.Requests += [ordered]@{
id = "$($guid)_mobileAppConfigurations"
method = "GET"
url = "/deviceAppManagement/mobileAppConfigurations/$($payload.payloadId)/?`$select=displayName"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadNames_BatchItem"}
}
}
}
if($batchObjs.Count -gt 0)
{
$objName = Get-GraphObjectName $filter $objectType
$responses = Invoke-GraphBatchRequest @($batchObjs.Requests) $objName -SkipWarnings
foreach($response in ($responses | Where Status -lt 300))
{
$payload = ($batchObjs | Where { $response.id -like "$($_.ID)*"}).Payload
if($payload.assignmentFilterType -eq "Include")
{
$filterType = "Include"
}
else
{
$filterType = "Exclude"
}
$typeStr = $null
if($payload.payloadType -eq "application")
{
$typeStr = Get-LanguageString "AppType.windowsClassicApp"
}
elseif($payload.payloadType -eq "win32app")
{
$typeStr = "Proactive Remediations"
}
elseif($payload.payloadType -eq "groupPolicyConfiguration")
{
$typeStr = "Settings Catalog"
}
elseif($payload.payloadType -eq "deviceManagmentConfigurationAndCompliancePolicy")
{
$typeStr = "Administrative Templates"
}
else
{
$typeStr = (Get-PolicyTypeName $response.body.'@odata.type' $payload.payloadType)
}
if(-not $typeStr) { $typeStr = $payload.payloadType}
$script:objFilterUsage += [PSCustomObject]@{
FiterObject = $filter
PayloadObject = $payload
FilterName = $filter.displayName
PolicyName = ?? $response.body.Name $response.body.displayName
Type = $response.body.'@odata.type'
PayloadType = $typeStr
Mode = $filterType
GroupID = $payload.groupId
GroupName = $payload.groupId
}
}
foreach($response in ($responses | Where Status -ge 300))
{
$payload = ($batchObjs | Where { $response.id -like "$($_.ID)*"}).Payload
Write-Log "Failed to get info for payload with id $($payload.payloadId) of type $($payload.payloadType). Might be deleted or not supported." 2
}
}
foreach($payload in $payloadsManual)
{
$payloadPolicy = $script:enrolmentConfigurations | Where Id -like "$($payload.payloadId)*" | Select -First 1
if($payloadPolicy)
{
if($payloadPolicy.deviceEnrollmentConfigurationType -eq "enrollmentNotificationsConfiguration")
{
$typeStr = "Enrollment notifications"
}
elseif($payloadPolicy.deviceEnrollmentConfigurationType -eq "windows10EnrollmentCompletionPageConfiguration")
{
$typeStr = "Enrollment Status Page"
}
else
{
$typeStr = (Get-PolicyTypeName $payloadPolicy.body.'@odata.type' $payload.payloadType)
}
if($payload.assignmentFilterType -eq "Include")
{
$filterType = "Include"
}
else
{
$filterType = "Exclude"
}
$script:objFilterUsage += [PSCustomObject]@{
FiterObject = $filter
PayloadObject = $payload
FilterName = $filter.displayName
PolicyName = ?? $payloadPolicy.Name $payloadPolicy.displayName
Type = $payloadPolicy.'@odata.type'
PayloadType = $typeStr
Mode = $filterType
GroupID = $payload.groupId
GroupName = $payload.groupId
}
}
}
}
if($groupIDs.Count -gt 0)
{
$guid = [Guid]::NewGuid().Guid
$groupObjs = @()
$x = 1
foreach($groupID in $groupIDs)
{
if($loadedGroups.ContainsKey($groupID)) { continue }
$groupObjs += [ordered]@{
id= "$($guid)_$x"
method="GET"
url="/groups/$($groupID)/?`$select=displayName,id"
headers = @{"x-ms-command-name"="AssignmentFilterPayloadProxy_resolvePayloadGroupAssignments_BatchItem"}
}
$x++
}
if($groupObjs.Count -gt 0)
{
$responses = Invoke-GraphBatchRequest $groupObjs "Groups"
$batchObj = [ordered]@{
requests = @($groupObjs)
}
$responses = (Invoke-GraphRequest -Url "`$batch" -Body ($batchObj | ConvertTo-Json -Depth 50 -Compress) -Method "POST").responses
foreach($response in ($responses | Where Status -eq 200))
{
if($response.body.displayName -and $response.body.id -and $loadedGroups.ContainsKey($response.body.id) -eq $false)
{
$loadedGroups.Add($response.body.id, $response.body.displayName)
}
}
}
foreach($groupID in $loadedGroups.Keys)
{
$filterObjs = $script:objFilterUsage | WHere GroupID -eq $groupID
if($filterObjs -and $loadedGroups[$groupID])
{
foreach($filterObj in $filterObjs) {
$filterObj.GroupName = $loadedGroups[$groupID]
}
}
}
$script:enrolmentConfigurations = $null
}
Add-XamlEvent $script:frmIntuneFilterUsage "txtIntuneFilterUsageFilter" "Add_LostFocus" ({
Invoke-IntueFilterUsageBoxChanged $this
})
Add-XamlEvent $script:frmIntuneFilterUsage "txtIntuneFilterUsageFilter" "Add_GotFocus" ({
if($this.Tag -eq "1" -and $this.Text -eq "Filter") { $this.Text = "" }
Invoke-IntueFilterUsageBoxChanged $this ($script:frmIntuneFilterUsage.FindName("dgIntuneFilterUsage"))
})
Add-XamlEvent $script:frmIntuneFilterUsage "txtIntuneFilterUsageFilter" "Add_TextChanged" ({
Invoke-IntueFilterUsageBoxChanged $this ($script:frmIntuneFilterUsage.FindName("dgIntuneFilterUsage"))
})
Invoke-IntueFilterUsageBoxChanged ($script:frmIntuneFilterUsage.FindName("txtIntuneFilterUsageFilter")) ($script:frmIntuneFilterUsage.FindName("dgIntuneFilterUsage"))
$ocList = [System.Collections.ObjectModel.ObservableCollection[object]]::new(@($script:objFilterUsage))
Set-XamlProperty $script:frmIntuneFilterUsage "dgIntuneFilterUsage" "ItemsSource" ([System.Windows.Data.CollectionViewSource]::GetDefaultView($ocList))
}
function Invoke-IntueFilterUsageBoxChanged
{
param($txtBox, $dgObject)
$filter = $null
if($txtBox.Text.Trim() -eq "" -and $txtBox.IsFocused -eq $false)
{
$txtBox.FontStyle = "Italic"
$txtBox.Tag = 1
$txtBox.Text = "Filter"
$txtBox.Foreground="Lightgray"
}
elseif($txtBox.Tag -eq "1" -and $txtBox.Text -eq "Filter" -and $txtBox.IsFocused -eq $false)
{
}
else
{
$txtBox.FontStyle = "Normal"
$txtBox.Tag = $null
$txtBox.Foreground="Black"
$txtBox.Background="White"
if($txtBox.Text)
{
$filter = {
param ($item)
return ($item.FilterName -match [regex]::Escape($txtBox.Text) -or $item.PolicyName -match [regex]::Escape($txtBox.Text) -or $item.GroupName -match [regex]::Escape($txtBox.Text) )
}
}
}
if($dgObject.ItemsSource -is [System.Windows.Data.ListCollectionView] -and $txtBox.IsFocused -eq $true)
{
# This causes odd behaviour with focus e.g. and item has to be clicked twice to be selected
$dgObject.ItemsSource.Filter = $filter
#$dgObject.ItemsSource.Refresh()
}
}
+2 -2
View File
@@ -22,7 +22,7 @@ $global:EMToolsViewObject = $null
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.3' '1.0.4'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -82,7 +82,7 @@ function Add-EMToolsViewItem
Activating = { Invoke-EMToolsActivatingView } Activating = { Invoke-EMToolsActivatingView }
Authentication = (Get-MSALAuthenticationObject) Authentication = (Get-MSALAuthenticationObject)
Authenticate = { Invoke-EMToolsAuthenticateToMSAL } Authenticate = { Invoke-EMToolsAuthenticateToMSAL }
AppInfo = (Get-GraphAppInfo "EM" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547") AppInfo = (Get-GraphAppInfo "EMAzureApp" "d1ddf0e4-d672-4dae-b554-9d5bdfd93547")
SaveSettings = { Invoke-EMSaveSettings } SaveSettings = { Invoke-EMSaveSettings }
Permissions = @() Permissions = @()
}) })
+305 -137
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.9.3'
} }
$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"
} }
) )
@@ -158,6 +158,10 @@ function Clear-MSALCurentUserVaiables
{ {
$global:MSALTenantId = $null $global:MSALTenantId = $null
$global:MSALGraphEnvironment = $null $global:MSALGraphEnvironment = $null
$script:jwtAccessToken = $null
$script:jwtIdToken = $null
} }
function Get-MSALCurrentApp function Get-MSALCurrentApp
@@ -209,29 +213,37 @@ 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)
{ {
Write-Log "Get current user" Write-Log "Get current user"
$tmpMe = MSGraph\Invoke-GraphRequest -Url "ME" -SkipAuthentication -ODataMetadata "Skip"
if($null -ne $tmpMe -and $tmpMe.creationType -ne "Invitation") if($script:jwtAccessToken.Payload.idtyp -ne "app")
{ {
### Only get user info from home tenant $tmpMe = MSGraph\Invoke-GraphRequest -Url "ME" -SkipAuthentication -ODataMetadata "Skip"
$global:Me = $tmpMe if($null -ne $tmpMe -and $tmpMe.creationType -ne "Invitation")
Write-Log "Get profile picture" {
$global:profilePhoto = "$($env:LOCALAPPDATA)\CloudAPIPowerShellManagement\$($global:Me.Id).jpeg" ### Only get user info from home tenant
MSGraph\Invoke-GraphRequest "me/photos/48x48/`$value" -OutFile $global:profilePhoto -SkipAuthentication | Out-Null $global:Me = $tmpMe
Write-Log "Get profile picture"
$global:profilePhoto = "$($env:LOCALAPPDATA)\CloudAPIPowerShellManagement\$($global:Me.Id).jpeg"
MSGraph\Invoke-GraphRequest "me/photos/48x48/`$value" -OutFile $global:profilePhoto -SkipAuthentication -NoError | Out-Null
}
}
else
{
$global:profilePhoto = $null
$global:me = $script:jwtAccessToken.Payload.app_displayname
} }
Write-Log "Get organization info" Write-Log "Get organization info"
@@ -536,12 +548,14 @@ function Add-MSALPrereq
Write-Log "Some MSAL features might not work!" 3 Write-Log "Some MSAL features might not work!" 3
Write-Log "This could happen if another version of MSAL.DLL was loaded beforethe script tried to load it" 3 Write-Log "This could happen if another version of MSAL.DLL was loaded beforethe script tried to load it" 3
$RequiredAssemblies.Add($fiLoaded.FullName) $RequiredAssemblies.Add($fiLoaded.FullName)
$script:msalFile = $fiLoaded.FullName
} }
else else
{ {
Write-Log "Using MSAL file $msalPath. Version: $($fi.VersionInfo.FileVersion)" Write-Log "Using MSAL file $msalPath. Version: $($fi.VersionInfo.FileVersion)"
[void][System.Reflection.Assembly]::LoadFile($msalPath) [void][System.Reflection.Assembly]::LoadFile($msalPath)
$RequiredAssemblies.Add($msalPath) $RequiredAssemblies.Add($msalPath)
$script:msalFile = $msalPath
} }
$RequiredAssemblies.Add('System.Security.dll') $RequiredAssemblies.Add('System.Security.dll')
@@ -599,6 +613,7 @@ function Connect-MSALClientApp
{ {
return return
} }
Add-MSALProxy $ClientApplicationBuilder
$script:MSALApp = $ClientApplicationBuilder.Build() $script:MSALApp = $ClientApplicationBuilder.Build()
} }
@@ -678,6 +693,43 @@ function Get-MsalAuthenticationToken
$authResult $authResult
} }
function Add-MSALProxy
{
param($appBuilder)
$proxy = Get-SettingValue "ProxyURI"
if($proxy)
{
Write-Log "Use proxy $proxy"
if(-not ("HttpFactoryWithProxy" -as [type]))
{
try
{
Write-Log "Add type HttpFactoryWithProxy"
[System.Collections.Generic.List[string]] $RequiredAssemblies = New-Object System.Collections.Generic.List[string]
$RequiredAssemblies.Add($script:msalFile)
$RequiredAssemblies.Add('System.Net.Http.dll')
$RequiredAssemblies.Add('System.Net.Primitives.dll')
Add-Type -Path ($global:AppRootFolder + "\CS\HttpFactoryWithProxy.cs") -ReferencedAssemblies $RequiredAssemblies
}
catch
{
Write-LogError "Failed to compile HttpFactoryWithProxy" $_.Exception
}
}
try
{
$hcf = [HttpFactoryWithProxy]::new($proxy)
[void] $appBuilder.WithHttpClientFactory($hcf)
}
catch
{
Write-LogError "Failed to set proxy for MSAL" $_.Exception
}
}
}
function Get-MSALLoginEnvironment function Get-MSALLoginEnvironment
{ {
$loginEnv = $script:lstAADEnvironments | Where value -eq (Get-Setting "" "MSALCloudType" "public") $loginEnv = $script:lstAADEnvironments | Where value -eq (Get-Setting "" "MSALCloudType" "public")
@@ -718,6 +770,8 @@ function Get-MSALApp
[void] $appBuilder.WithClientName("CloudAPIPowerShellManagement") [void] $appBuilder.WithClientName("CloudAPIPowerShellManagement")
[void] $appBuilder.WithClientVersion($PSVersionTable.PSVersion) [void] $appBuilder.WithClientVersion($PSVersionTable.PSVersion)
Add-MSALProxy $appBuilder
# Ceck if correct version... # Ceck if correct version...
#$appBuilder.WithMultiCloudSupport($true) #$appBuilder.WithMultiCloudSupport($true)
@@ -793,6 +847,42 @@ function Connect-MSALUser
Write-LogDebug "Authenticate" Write-LogDebug "Authenticate"
if($global:MainAppStarted -eq $false)
{
$script:AppLogin = (Get-SettingValue "GraphAzureAppLogin") -or ($global:TenantId -and $global:AzureAppId -and ($global:ClientSecret -or $global:ClientCert))
}
if($script:AppLogin)
{
if($global:MSALToken -and $global:MSALToken.ExpiresOn.LocalDateTime.Ticks -gt ((Get-Date).AddMinutes(-5)).Ticks)
{
return
}
# Get login info for silent job from settings
if(-not $global:AzureAppId) { $global:AzureAppId = Get-SettingValue "GraphAzureAppId" -TenantID $global:TenantId }
if(-not $global:ClientSecret -and -not $global:ClientCert) { $global:ClientSecret = Get-SettingValue "GraphAzureAppSecret" -TenantID $global:TenantId }
if(-not $global:ClientSecret -and -not $global:ClientCert) { $global:ClientCert = Get-SettingValue "GraphAzureAppCert" -TenantID $global:TenantId }
if($global:AzureAppId -and $global:ClientSecret -and $global:TenantId)
{
Connect-MSALClientApp $global:AzureAppId $global:TenantId -secret $global:ClientSecret
}
elseif($global:AzureAppId -and $global:ClientCert -and $global:TenantId)
{
Connect-MSALClientApp $global:AzureAppId $global:TenantId -certificate $global:ClientCert
}
else
{
Write-Log "Azure AppId, Tenant Id and Sercret/Cert must be specified for App logins" 3
}
Invoke-MSALAuthenticationUpdated $global:MSALToken
return
}
if($ShowMenu -eq $true -and ((Get-SettingValue "AzureADLoginMenu") -eq $true)) if($ShowMenu -eq $true -and ((Get-SettingValue "AzureADLoginMenu") -eq $true))
{ {
if((Show-MSALLoginMenu) -eq $false) { return } if((Show-MSALLoginMenu) -eq $false) { return }
@@ -1058,7 +1148,7 @@ function Connect-MSALUser
######################################################################################################### #########################################################################################################
try try
{ {
Write-Log "Get tennant list" Write-Log "Get tenant list"
# Can we reuse the app used for login? # Can we reuse the app used for login?
$appBuilder = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create($global:appObj.ClientID) $appBuilder = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create($global:appObj.ClientID)
@@ -1066,6 +1156,8 @@ function Connect-MSALUser
else { [void]$appBuilder.WithAuthority($global:MSALApp.Authority) } else { [void]$appBuilder.WithAuthority($global:MSALApp.Authority) }
if($global:appObj.RedirectUri) { [void]$appBuilder.WithRedirectUri($global:appObj.RedirectUri) } if($global:appObj.RedirectUri) { [void]$appBuilder.WithRedirectUri($global:appObj.RedirectUri) }
Add-MSALProxy $appBuilder
$app = $appBuilder.Build() $app = $appBuilder.Build()
if((Get-SettingValue "CacheMSALToken")) if((Get-SettingValue "CacheMSALToken"))
@@ -1092,9 +1184,17 @@ function Connect-MSALUser
'Content-Type' = 'application/json' 'Content-Type' = 'application/json'
'Authorization' = "Bearer " + $tmpResults.AccessToken 'Authorization' = "Bearer " + $tmpResults.AccessToken
'ExpiresOn' = $tmpResults.ExpiresOn 'ExpiresOn' = $tmpResults.ExpiresOn
} }
$ret = Invoke-RestMethod "https://management.azure.com/tenants?api-version=2020-01-01" -Headers $Headers $params = @{}
$proxyURI = Get-ProxyURI
if($proxyURI)
{
$params.Add("proxy", $proxyURI)
$params.Add("UseBasicParsing", $true)
}
$ret = Invoke-RestMethod "https://management.azure.com/tenants?api-version=2020-01-01" -Headers $Headers @params
if($ret) if($ret)
{ {
$script:AccessableTenants = $ret.Value $script:AccessableTenants = $ret.Value
@@ -1116,7 +1216,8 @@ function Connect-MSALUser
Save-Setting "" "LastLoggedOnUser" $authResult.Account.UserName Save-Setting "" "LastLoggedOnUser" $authResult.Account.UserName
Save-Setting "" "LastLoggedOnUserId" $authResult.Account.HomeAccountId.ObjectId Save-Setting "" "LastLoggedOnUserId" $authResult.Account.HomeAccountId.ObjectId
} }
Invoke-MSALAuthenticationUpdated $authResult
<#
Write-LogDebug "User, tenant or app has changed" Write-LogDebug "User, tenant or app has changed"
Get-MSALUserInfo Get-MSALUserInfo
if($authResult) if($authResult)
@@ -1124,9 +1225,26 @@ function Connect-MSALUser
Invoke-MSALCheckObjectViewAccess $authResult Invoke-MSALCheckObjectViewAccess $authResult
} }
Invoke-ModuleFunction "Invoke-GraphAuthenticationUpdated" Invoke-ModuleFunction "Invoke-GraphAuthenticationUpdated"
#>
} }
} }
function local:Invoke-MSALAuthenticationUpdated
{
param($authResult)
Write-LogDebug "User, tenant or app has changed"
$script:jwtAccessToken = Get-JWTtoken $global:MSALToken.AccessToken
$script:jwtIdToken = Get-JWTtoken $global:MSALToken.IdToken
Get-MSALUserInfo
if($authResult)
{
Invoke-MSALCheckObjectViewAccess $authResult
}
Invoke-ModuleFunction "Invoke-GraphAuthenticationUpdated"
}
function Start-MSALConsentPrompt function Start-MSALConsentPrompt
{ {
param([switch]$PassThru, $authToken) param([switch]$PassThru, $authToken)
@@ -1203,6 +1321,22 @@ function Invoke-MSALCheckObjectViewAccess
Set-XamlProperty $script:userEllipsGrid "lnkRequestConsent" "Visibility" "Visible" Set-XamlProperty $script:userEllipsGrid "lnkRequestConsent" "Visibility" "Visible"
} }
$accessToken = $null
if($authToken)
{
$accessToken = Get-JWTtoken $authToken.AccessToken
}
$curPermissions = $null
if($accessToken.Payload.idtyp -eq "app")
{
$curPermissions = $accessToken.Payload.roles
}
elseif($accessToken.Payload.scp)
{
$curPermissions = $accessToken.Payload.scp.Split(" ")
}
foreach($viewObjInfo in ($global:viewObjects | Where { $_.ViewInfo.AuthenticationID -eq "MSAL" })) foreach($viewObjInfo in ($global:viewObjects | Where { $_.ViewInfo.AuthenticationID -eq "MSAL" }))
{ {
$viewObjInfo = $global:viewObjects | Where { $_.ViewInfo.Id -eq $global:EMViewObject.Id } $viewObjInfo = $global:viewObjects | Where { $_.ViewInfo.Id -eq $global:EMViewObject.Id }
@@ -1211,10 +1345,8 @@ function Invoke-MSALCheckObjectViewAccess
{ {
if($authToken) if($authToken)
{ {
$accessToken = Get-JWTtoken $authToken.AccessToken if($curPermissions)
if($accessToken.Payload.scp)
{ {
$curPermissions = $accessToken.Payload.scp.Split(" ")
foreach($viewItem in $viewObjInfo.ViewItems) foreach($viewItem in $viewObjInfo.ViewItems)
{ {
$full = 0 $full = 0
@@ -1512,6 +1644,10 @@ function Get-MSALProfileEllipse
{ {
$initials = "$($global:me.userPrincipalName[0])".ToUpper() $initials = "$($global:me.userPrincipalName[0])".ToUpper()
} }
elseif($script:jwtAccessToken.Payload.idtyp -eq "app")
{
$initials = "APP"
}
$grd = Get-MSALUserPhotoEllips -size $size -fontSize $fontSize -Color $Color $grd = Get-MSALUserPhotoEllips -size $size -fontSize $fontSize -Color $Color
@@ -1535,8 +1671,15 @@ function Get-MSALProfileEllipse
$global:grdProfileInfo.Tag = $grd $global:grdProfileInfo.Tag = $grd
$grd.Tag = $global:grdProfileInfo $grd.Tag = $global:grdProfileInfo
Set-XamlProperty $global:grdProfileInfo "txtOrganization" "Text" $global:Organization.displayName Set-XamlProperty $global:grdProfileInfo "txtOrganization" "Text" $global:Organization.displayName
Set-XamlProperty $global:grdProfileInfo "txtUsername" "Text" $global:me.displayName if($script:jwtAccessToken.Payload.idtyp -eq "app")
Set-XamlProperty $global:grdProfileInfo "txtLogonName" "Text" $global:me.userPrincipalName {
Set-XamlProperty $global:grdProfileInfo "txtUsername" "Text" "App Login"
}
else
{
Set-XamlProperty $global:grdProfileInfo "txtUsername" "Text" $global:me.displayName
Set-XamlProperty $global:grdProfileInfo "txtLogonName" "Text" $global:me.userPrincipalName
}
$global:tokenInfo = Get-JWTtoken $global:MSALToken.AccessToken $global:tokenInfo = Get-JWTtoken $global:MSALToken.AccessToken
if($global:tokenInfo) if($global:tokenInfo)
@@ -1561,140 +1704,148 @@ function Get-MSALProfileEllipse
$profileGrid.Children.Add($tmpObj) | Out-Null $profileGrid.Children.Add($tmpObj) | Out-Null
} }
if($script:jwtAccessToken.Payload.idtyp -eq "app")
{
$tmpObj.Visibility = "Collapsed"
}
$global:grdProfileInfo.Add_Loaded({param($obj, $e) $global:grdProfileInfo.Add_Loaded({param($obj, $e)
$point = $obj.Tag.TransformToAncestor($window).Transform([System.Windows.Point]::new(0,0)); $point = $obj.Tag.TransformToAncestor($window).Transform([System.Windows.Point]::new(0,0));
[System.Windows.Controls.Canvas]::SetLeft($obj,($point.X - $obj.ActualWidth + $obj.Tag.ActualWidth)) [System.Windows.Controls.Canvas]::SetLeft($obj,($point.X - $obj.ActualWidth + $obj.Tag.ActualWidth))
[System.Windows.Controls.Canvas]::SetTop($obj,($point.Y + $obj.Tag.ActualHeight)) [System.Windows.Controls.Canvas]::SetTop($obj,($point.Y + $obj.Tag.ActualHeight))
}) })
######################################################################################################### if($script:jwtAccessToken.Payload.idtyp -ne "app")
### Show / Hide consent button
#########################################################################################################
$script:userEllipsGrid = $tmpObj
if(($script:missingPermissions | measure).Count -eq 0)
{ {
Set-XamlProperty $script:userEllipsGrid "lnkRequestConsent" "Visibility" "Collapsed" #########################################################################################################
} ### Show / Hide consent button
Add-XamlEvent $script:userEllipsGrid "lnkRequestConsent" "add_Click" { #########################################################################################################
Start-MSALConsentPrompt $script:userEllipsGrid = $tmpObj
} if(($script:missingPermissions | measure).Count -eq 0)
$otherLogins = $global:grdProfileInfo.FindName("grdCachedAccounts")
#########################################################################################################
### Add cached users
#########################################################################################################
if((Get-SettingValue "SortAccountList") -eq $true)
{
$accounts = $global:MSALAccounts | Sort -Property Username
}
else
{
$accounts = $global:MSALAccounts
}
foreach($account in $accounts)
{
# Skip current logged on user
if($global:MSALToken.Account.Username -eq $Account.Username -or
$global:MSALToken.Account.HomeAccountId.ObjectId -eq $Account.HomeAccountId.ObjectId) { continue }
Add-CachedUser $account $otherLogins
}
#########################################################################################################
### Add login with another user
#########################################################################################################
$grdAccount = [System.Windows.Controls.Grid]::new()
$cd = [System.Windows.Controls.ColumnDefinition]::new()
$grdAccount.ColumnDefinitions.Add($cd)
$cd = [System.Windows.Controls.ColumnDefinition]::new()
$cd.Width = [double]::NaN
$grdAccount.ColumnDefinitions.Add($cd)
$icon = Get-XamlObject ($global:AppRootFolder + "\Xaml\Icons\Logon.xaml")
$icon.Width = 24
$icon.Height = 24
$icon.Margin = "0,0,5,0"
$grdAccount.Children.Add($icon) | Out-Null
$lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS>Sign in with a different account</TextBlock>")
$lbObj.SetValue([System.Windows.Controls.Grid]::ColumnProperty,1)
#$lbObj.Style = $window.TryFindResource("HoverUnderlineStyle")
$grdAccount.Children.Add($lbObj) | Out-Null
$lnkButton = [System.Windows.Controls.Button]::new()
$lnkButton.Content = $grdAccount
$lnkButton.Style = $window.TryFindResource("LinkButton")
$lnkButton.Margin = "0,5,0,0"
$lnkButton.Cursor = "Hand"
$lnkButton.Tag = $account
$lnkButton.add_Click({
Write-Status "Logging in..."
Hide-Popup
Connect-MSALUser -Interactive -ShowMenu
if($global:curObjectType)
{ {
Show-GraphObjects Set-XamlProperty $script:userEllipsGrid "lnkRequestConsent" "Visibility" "Collapsed"
}
Add-XamlEvent $script:userEllipsGrid "lnkRequestConsent" "add_Click" {
Start-MSALConsentPrompt
} }
Write-Status ""
})
$otherLogins = $global:grdProfileInfo.FindName("grdLoginAccount") $otherLogins = $global:grdProfileInfo.FindName("grdCachedAccounts")
Add-GridObject $otherLogins $lnkButton
$otherLogins = $global:grdProfileInfo.FindName("grdTenantAccounts")
if(($script:AccessableTenants | measure).Count -gt 1)
{
######################################################################################################### #########################################################################################################
### Add switch to another tenant ### Add cached users
######################################################################################################### #########################################################################################################
$lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS><Bold>Tenants:</Bold></TextBlock>") if((Get-SettingValue "SortAccountList") -eq $true)
$lbObj.Margin = "0,5,0,0"
Add-GridObject $otherLogins $lbObj
foreach($tenant in $script:AccessableTenants)
{ {
try $accounts = $global:MSALAccounts | Sort -Property Username
}
else
{
$accounts = $global:MSALAccounts
}
foreach($account in $accounts)
{
# Skip current logged on user
if($global:MSALToken.Account.Username -eq $Account.Username -or
$global:MSALToken.Account.HomeAccountId.ObjectId -eq $Account.HomeAccountId.ObjectId) { continue }
Add-CachedUser $account $otherLogins
}
#########################################################################################################
### Add login with another user
#########################################################################################################
$grdAccount = [System.Windows.Controls.Grid]::new()
$cd = [System.Windows.Controls.ColumnDefinition]::new()
$grdAccount.ColumnDefinitions.Add($cd)
$cd = [System.Windows.Controls.ColumnDefinition]::new()
$cd.Width = [double]::NaN
$grdAccount.ColumnDefinitions.Add($cd)
$icon = Get-XamlObject ($global:AppRootFolder + "\Xaml\Icons\Logon.xaml")
$icon.Width = 24
$icon.Height = 24
$icon.Margin = "0,0,5,0"
$grdAccount.Children.Add($icon) | Out-Null
$lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS>Sign in with a different account</TextBlock>")
$lbObj.SetValue([System.Windows.Controls.Grid]::ColumnProperty,1)
#$lbObj.Style = $window.TryFindResource("HoverUnderlineStyle")
$grdAccount.Children.Add($lbObj) | Out-Null
$lnkButton = [System.Windows.Controls.Button]::new()
$lnkButton.Content = $grdAccount
$lnkButton.Style = $window.TryFindResource("LinkButton")
$lnkButton.Margin = "0,5,0,0"
$lnkButton.Cursor = "Hand"
$lnkButton.Tag = $account
$lnkButton.add_Click({
Write-Status "Logging in..."
Hide-Popup
Connect-MSALUser -Interactive -ShowMenu
if($global:curObjectType)
{ {
$lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS HorizontalAlignment=`"Stretch`"><Bold>$($tenant.DisplayName)</Bold><LineBreak/>$($tenant.defaultDomain)<LineBreak/>$($tenant.tenantId)</TextBlock>") Show-GraphObjects
}
Write-Status ""
})
if($tenant.tenantId -ne $global:MSALToken.TenantId) $otherLogins = $global:grdProfileInfo.FindName("grdLoginAccount")
Add-GridObject $otherLogins $lnkButton
$otherLogins = $global:grdProfileInfo.FindName("grdTenantAccounts")
if(($script:AccessableTenants | measure).Count -gt 1)
{
#########################################################################################################
### Add switch to another tenant
#########################################################################################################
$lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS><Bold>Tenants:</Bold></TextBlock>")
$lbObj.Margin = "0,5,0,0"
Add-GridObject $otherLogins $lbObj
foreach($tenant in $script:AccessableTenants)
{
try
{ {
$lbObj.Style = $window.TryFindResource("HoverUnderlineStyleWithBackground") $lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS HorizontalAlignment=`"Stretch`"><Bold>$($tenant.DisplayName)</Bold><LineBreak/>$($tenant.defaultDomain)<LineBreak/>$($tenant.tenantId)</TextBlock>")
$lbObj.HorizontalAlignment = "Stretch"
$lnkButton = [System.Windows.Controls.Button]::new()
$lnkButton.Content = $lbObj
$lnkButton.HorizontalAlignment = "Stretch"
$lnkButton.Style = $window.TryFindResource("ContentButton")
$lnkButton.Margin = "0,5,0,0"
$lnkButton.Cursor = "Hand"
$lnkButton.Tag = $tenant
$lnkButton.add_Click({
Write-Status "Logging in to $($this.Tag.DisplayName)"
# Set authority to selected tenant
$global:MSALTenantId = $this.Tag.tenantId
Hide-Popup
Connect-MSALUser -Account ($global:MSALAccounts | Where UserName -eq $global:MSALToken.Account.Username)
if($global:curObjectType) if($tenant.tenantId -ne $global:MSALToken.TenantId)
{ {
Show-GraphObjects $lbObj.Style = $window.TryFindResource("HoverUnderlineStyleWithBackground")
} $lbObj.HorizontalAlignment = "Stretch"
Write-Status "" $lnkButton = [System.Windows.Controls.Button]::new()
}) $lnkButton.Content = $lbObj
Add-GridObject $otherLogins $lnkButton $lnkButton.HorizontalAlignment = "Stretch"
} $lnkButton.Style = $window.TryFindResource("ContentButton")
else $lnkButton.Margin = "0,5,0,0"
{ $lnkButton.Cursor = "Hand"
$lbObj.Background = $window.TryFindResource("SelectedRowBackgroundColor") $lnkButton.Tag = $tenant
$lbObj.Margin = "0,5,0,0" $lnkButton.add_Click({
Add-GridObject $otherLogins $lbObj Write-Status "Logging in to $($this.Tag.DisplayName)"
# Set authority to selected tenant
$global:MSALTenantId = $this.Tag.tenantId
Hide-Popup
Connect-MSALUser -Account ($global:MSALAccounts | Where UserName -eq $global:MSALToken.Account.Username)
if($global:curObjectType)
{
Show-GraphObjects
}
Write-Status ""
})
Add-GridObject $otherLogins $lnkButton
}
else
{
$lbObj.Background = $window.TryFindResource("SelectedRowBackgroundColor")
$lbObj.Margin = "0,5,0,0"
Add-GridObject $otherLogins $lbObj
}
} }
catch {}
} }
catch {}
} }
} }
@@ -1757,6 +1908,11 @@ function Get-MSALProfileEllipse
Show-GraphObjects Show-GraphObjects
} }
} }
if($script:jwtAccessToken.Payload.idtyp -eq "app")
{
Set-XamlProperty $tmpObj "lnkLogout" "Visibility" "Collapsed"
}
} }
catch { catch {
Write-LogError "Failed to create profile information object. Error: " $_.Exception Write-LogError "Failed to create profile information object. Error: " $_.Exception
@@ -1932,12 +2088,21 @@ function Get-MSALMissingScopes
$script:missingPermissions = @() $script:missingPermissions = @()
if($script:jwtAccessToken.Payload.idtyp -eq "app")
{
$curScopes = $script:jwtAccessToken.Payload.roles
}
else
{
$curScopes = $authToken.Scopes
}
foreach($scope in $reqScopes) foreach($scope in $reqScopes)
{ {
$tmpScope = $scope.Split('/')[-1] $tmpScope = $scope.Split('/')[-1]
if($tmpScope -eq ".default") { continue } if($tmpScope -eq ".default") { continue }
if($authToken.Scopes -contains $tmpScope) { continue } if($curScopes -contains $tmpScope) { continue }
if(($authToken.Scopes -like "*/$tmpScope")) { continue } if(($curScopes -like "*/$tmpScope")) { continue }
$arrTemp = $tmpScope.Split(".") $arrTemp = $tmpScope.Split(".")
if($arrTemp[1] -eq "Read") if($arrTemp[1] -eq "Read")
{ {
@@ -1961,6 +2126,9 @@ function Show-MSALDecodedToken {
$tokenData, $tokenData,
$title $title
) )
if(-not $tokenData.Header) { return }
$tokenArr = @() $tokenArr = @()
foreach($prop in ($tokenData.Header | GM | Where MemberType -eq NoteProperty)) foreach($prop in ($tokenData.Header | GM | Where MemberType -eq NoteProperty))
{ {
+520 -155
View File
File diff suppressed because it is too large Load Diff
+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.
+344
View File
@@ -1,4 +1,348 @@
# Release Notes # Release Notes
## 3.9.5 - 2024-01-20
**Fixes**
- **Import/Export**<br />
- Assignments were not exported for some policies with trailing . in the name<br />
Based on [Issue 184](https://github.com/Micke-K/IntuneManagement/issues/184)<br />
**NOTE:** Policy will not export if full path is over 260 characters<br />
- Fixed issue with policies not being exported when Batch was enabled in Settings<br />
and there was only one policy for the specified object type<br />
- Failed to get App Protection policies when Proxy was configured<br />
- Fixed issue with importing policies with dependency in tenants with 100+ policies for a single policy type<br />
Dependency only imported first page. All pages will be imported now to resolve dependencies<br />
Based on [Issue 183](https://github.com/Micke-K/IntuneManagement/issues/183)<br />
- Fixed issue with multiple export folders when using %DateTime% in path<br />
Based on [Issue 189](https://github.com/Micke-K/IntuneManagement/issues/189)<br />
- **Get Assignment Filter usage**<br />
- Filters not returned if only assigned to one policy<br />
Based on [Issue 141](https://github.com/Micke-K/IntuneManagement/issues/141)<br />
**NOTE:** Start the tool from: Views -> Intune Tools -> Intune Filter Usage<br />
- **Compare**<br />
- Comparing Settings Catalog objects with exported objects failed<br />
Issue cause by offline documentation was not working<br />
Based on [Issue 183](https://github.com/Micke-K/IntuneManagement/issues/183)<br />
- **Documentation**<br />
- Offline documentation of Settings Catalog was not working.<br />
Values were always documented from online object<br />
- Conditional Access documentation updates for Android and iOS<br />
- App Protection documentation updates for Android and iOS<br />
- Language files re-generated. Azure shou now be Entra for some documentations.<br />
<br />
## 3.9.4 - 2023-12-18
**Fixes**
- **Get Assignment Filter usage**<br />
- All policies that supports filter should now be collected<br />
Please create an issue if not all expected filters are listed<br />
Based on [Issue 141](https://github.com/Micke-K/IntuneManagement/issues/141)<br />
**NOTE:** Start the tool from: Views -> Intune Tools -> Intune Filter Usage<br />
- **Documentation**<br />
- Added support for documenting Conditional Access policies based on Workloads<br />
Not 100% tested. Please report if not documented correctly<br />
<br />
## 3.9.3 - 2023-12-11
**New features**
- **New tool - Get Assignment Filter usage**<br />
- List all policies and assignments with a Filter defined<br />
Based on [Issue 141](https://github.com/Micke-K/IntuneManagement/issues/141)<br />
**NOTE:** Start the tool from: Views -> Intune Tools -> Intune Filter Usage<br />
- **Batch Export of App Content Encryption Key from Intunewin files**<br />
This script can export encryption keys from existing intunewin files<br />
Example:<br />
Export-EncrytionKeys -RootFolder C:\Intune\Packages -ExportFolder C:\Intune\Download<br />
This will export the encryption key information for each .intunewinfiles under C:\Intune\Packages<br />
One json file will be created (for each .intunwinfile) in the C:\Intune\Download folder<br />
File name will be **<*IntunewinFileBaseName*>_<*UnencryptedFileSize*>.json**<br />
Do **NOT** rename this file since the script will search for that file when downloading or exporting App content<br />
The script will not require authentication and it will have no knowledge of apps in Intune<br />
Filename and unencrypted file size is used as the identifier to match app content in Intune with encryption file<br />
**Important notes:**<br />
Exported and decrypted .intunewin files are not supported to use for import at the moment.<br />
These files are just the "zip" version of the source and can be unzipped with any zip extraction tool<br />
The .intunewin file used for import has the "zip" version of the file and an xml with the encryption information +<br />
additional file information eg. msi properties, file size etc.<br />
Use the exported unencrypted "zip" version to restore the original files. Re-run the packaging tool if it should be re-used as applications content<br />
<br />
Please report any issues or create a discussion if there are any questions<br />
Script is located: **<*RootFolder*>\Scripts\Export-EncrytionKeys.ps1**<br />
<br />
**Fixes**
- **Export**<br />
- Fixed issue where Assignments were included in export even if 'Export Assignments' was unchecked<br />
Based on [Issue 171](https://github.com/Micke-K/IntuneManagement/issues/171)<br />
- **Documentation**<br />
- Fixed issue where filter was not documented on some policies<br />
- Fixed issue with Word Output provider if a policy only had one settings<br />
- **Custom ADMX Files**<br />
- Fixed bug with migrating custom policies between environments. Cache was not cleared when swapping tenants or imported additional ADMX files<br />
- Fixed documentention issue with Administrative template policies in GCC environment. Name and Category was missing<br />
Based on [Issue 174](https://github.com/Micke-K/IntuneManagement/issues/174)<br />
- Custom ADMX based policies was missing properties when swapping tenant<br />
Based on [Issue 124](https://github.com/Micke-K/IntuneManagement/issues/124)<br />
- **Generic**<br />
- Fixed logging issues when processing objects with a group that was deleted. ID was not reported<br />
- Generic Batch request function created to support other batch requests eg Groups<br />
<br />
## 3.9.2 - 2023-10-17
**New features**
- **Application Content Export - Experimental**<br />
- Added support for Exporting Appliction with decrypted content<br />
App file can be downloaded during export or from the detail view of the Application<br />
Enable "Save Encryption File" and specify "App download folder" in Settings<br />
"App download folder" is used for encryption file and manual download<br />
File content will be downloaded to the export foler during export<br />
Files will be downloaded with .encrypted extension and then decrypted to original file name<br />
Please report any issue or any suggestions<br />
**NOTE:** This will ONLY work if the encryption file is exported and available<br />
- **Authentication**<br />
- Login with application<br />
This will login with specified Azure App ID and Secret/Certificate that is used for Batch processes<br />
NOTE: This will require a restart of the app<br />
Start with app **must** use -TenantID on command line. AppID and Secret/Certificate can be specified in Settings or command line<br />
Example: Start-IntuneManagement.ps1 -tenantId \"&lt;TenantID&gt;\" -appid \"&lt;AppID&gt;\" -secret \"&lt;Secret&gt;\"<br />
See *Start-WithApp.cmd* for samle file<br />
Based on [Issue 122](https://github.com/Micke-K/IntuneManagement/issues/122) and [Issue 134](https://github.com/Micke-K/IntuneManagement/issues/134)<br />
- **Support for new Settings**<br />
- Save encryption file - Saves a json file with encryption data when an application file is uploaded eg created or uploaded in details view<br />
- App download folder - Folder where application files should be downloaded and decrypted<br />
- Login with App in UI (Preview) - Use app batch login in UI<br />
- Use Graph 1.0 (Not Recommended) - Use Graph v1.0 instead of Beta. **Note:** Some features will NOT work in v1.0<br />
Based on [Issue 170](https://github.com/Micke-K/IntuneManagement/issues/170)<br />
**Fixes**
- **Documentation**<br />
- Language files re-generated eg Supersedence (preview) -> Supersedence<br />
- Added support for documenting "Filter for devices" info for Conditional Access policies<br />
Based on [Issue 168](https://github.com/Micke-K/IntuneManagement/issues/168)<br />
- **Custom ADMX Files**<br />
- Fixed issues with migrating custom policies between environments (3rd time)<br />
Based on [Issue 124](https://github.com/Micke-K/IntuneManagement/issues/124)<br />
- Fixed issue when importing ADMX files - Encoding issue eg ADMX/ADML file was UTF8<br />
Based on [Issue 169](https://github.com/Micke-K/IntuneManagement/issues/169)<br />
- **Importing Windows LoB Apps**<br />
- Fixed issue when importing LoB Apps that was only targeted to System context<br />
Available Assignment option was missing after import<br />
Based on [Discussion 164](https://github.com/Micke-K/IntuneManagement/discussions/164)<br />
- Added support for Depnedency and Supersedence reations at import<br />
Application will need to be re-exported since additinal data is added to the export file<br />
Based on [Discussion 159](https://github.com/Micke-K/IntuneManagement/discussions/159)<br />
- **Generic**<br />
- Fixed issue when compiling Procxy CS file<br />
- Tls 1.2 is now enforced.<br />
Based on [Discussion 166](https://github.com/Micke-K/IntuneManagement/discussions/166)<br />
<br />
## 3.9.1 - 2023-08-30
**New features**
- **Added support for Windows Update Driver Policies**<br />
- **Support for new Settings**<br />
- Proxy configuration - If configured, Proxy will be used for authentication, APIs and upload<br />
- Disable Write-Error output - Skip PowerShell errors in output<br />
**Default Settings Value Changes**
- Conditional Access policies will now be imported as Disabled by default<br />
- New import option added: As Exported - Change On to Report-only<br />
- This is to avoid being locked out from the tenant when importing Conditional Access policies<br />
- Based on [Discussion 139](https://github.com/Micke-K/IntuneManagement/discussions/139)<br />
**Fixes**
- **Documentation**<br />
- Fixed issues with some Feature Updates properties<br />
- Added missing strings on Windows Update polices<br />
- Regenerated Language files and Translation tables for Template policies<br />
Note: Conditional Access string has changed file in background. Please report if there is anything missing<br />
- **Custom ADMX Files**<br />
- Fixed issues with migrating custom policies between environments<br />
- Case reopened due to something broke the initial functionality<br />
- Only custom ADMX policies with #Definition properties can be imported into a new environment<br />
- Based on [Issue 124](https://github.com/Micke-K/IntuneManagement/issues/124)<br />
- **Scope Tags**<br />
- Fixed issues with importing policies with Scope Tags but they were not set<br />
- Based on [Issue 133](https://github.com/Micke-K/IntuneManagement/issues/133)<br />
**Generic**<br />
- Remove invalid characters from path.<br />
- Based on [Issue 150](https://github.com/Micke-K/IntuneManagement/issues/150)<br />
<br />
## 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
**Fixes**
- **Import**<br />
- Fixed a bug where it failed to import Endpoint Security policies<br />
- Fixed an issue where it failed to import Assignment Filters. A new property was added that is not supported during the import<br />
<br />
<br />
## 3.7.2 - 2022-10-08 ## 3.7.2 - 2022-10-08
**New features** **New features**
+159
View File
@@ -0,0 +1,159 @@
<#
Export encryption keys from .intunewin files.
This can be used when downloading intunewin files from Intune.
This is a prt of the IntuneManage GitHub Repository
https://github.com/Micke-K/IntuneManagement/
(c) Mikael Karlsson MIT License - https://github.com/Micke-K/IntuneManagement/blob/master/LICENSE
Exprot file name will be <IntunewinFileBaseName>_<UnencryptedFileSize>.json
Do NOT rename the exported file. The script will try to find excryption file based on the generated name.
Encryption information is file specific. If the same .intunewin file is imported in multiple tenants,
the same ecryption file can be used to decrypt it when downloading or exporting the app content.
.Sample
Export-EncrytionKeys -RootFolder C:\Intune\Packages -ExportFolder C:\Intune\Download
This will search C:\Intune\Packages and all subfolder for .intunewin files and export
the encryption keys to the C:\Intune\Download.
#>
param(
[Alias("RF")]
# Root folder where intunewin files are located.
$RootFolder,
[Alias("EF")]
# Folder where encryption files should be exported to
# If this is empty, the encryption file will be saved to the same folder as the intunewin file
$ExportFolder)
function Export-IntunewinFileObject
{
param($file, $objectName, $toFile)
try
{
Add-Type -Assembly System.IO.Compression.FileSystem
$zip = [IO.Compression.ZipFile]::OpenRead($file)
$zip.Entries | where { $_.Name -like $objectName } | foreach {
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $toFile, $true)
}
$zip.Dispose()
return $true
}
catch
{
Write-Warning "Failed to get info from $file. Error: $($_.Exception.Message)"
return $false
}
}
function Export-EncryptionKeys
{
param(
[Parameter(ValueFromPipeline=$true)]
$fileInfo,
$exportFolder = $fileInfo.DirectoryName
)
begin
{
}
process
{
if($fileInfo -isnot [IO.FileInfo]) { return }
if(-not $exportFolder) { $exportFolder = $fileInfo.DirectoryName }
$tmpFile = [IO.Path]::GetTempFileName()
if((Export-IntunewinFileObject $fileInfo.FullName "detection.xml" $tmpFile) -ne $true)
{
return
}
$tmpFI = [IO.FileInfo]$tmpFile
try
{
if($tmpFI.Length -eq 0)
{
throw "Detection.xml not exported"
}
[xml]$DetectionXML = Get-Content $tmpFile
}
catch
{
Write-Warning "Failed to export detection.xml file. Error: $($_.Exception.Message)"
return
}
finally
{
Remove-Item -Path $tmpFile -Force | Out-Null
}
# Get encryption info from detection.xml and build encryptionInfo object
$encryptionInfo = @{}
$encryptionInfo.encryptionKey = $DetectionXML.ApplicationInfo.EncryptionInfo.EncryptionKey
$encryptionInfo.macKey = $DetectionXML.ApplicationInfo.EncryptionInfo.macKey
$encryptionInfo.initializationVector = $DetectionXML.ApplicationInfo.EncryptionInfo.initializationVector
$encryptionInfo.mac = $DetectionXML.ApplicationInfo.EncryptionInfo.mac
$encryptionInfo.profileIdentifier = "ProfileVersion1"
$encryptionInfo.fileDigest = $DetectionXML.ApplicationInfo.EncryptionInfo.fileDigest
$encryptionInfo.fileDigestAlgorithm = $DetectionXML.ApplicationInfo.EncryptionInfo.fileDigestAlgorithm
$fileData = @{}
$fileData.Name = $DetectionXML.ApplicationInfo.Name
$fileData.UnencryptedContentSize = $DetectionXML.ApplicationInfo.UnencryptedContentSize
$fileData.SetupFile = $DetectionXML.ApplicationInfo.SetupFile
$msiInfo = @{}
if($DetectionXML.ApplicationInfo.MsiInfo)
{
$msiInfo.MsiPublisher = $DetectionXML.ApplicationInfo.MsiInfo.MsiPublisher
$msiInfo.MsiProductCode = $DetectionXML.ApplicationInfo.MsiInfo.Publisher
$msiInfo.MsiProductVersion = $DetectionXML.ApplicationInfo.MsiInfo.MsiProductVersion
$msiInfo.MsiPackageCode = $DetectionXML.ApplicationInfo.MsiInfo.MsiPackageCode
$msiInfo.MsiUpgradeCode = $DetectionXML.ApplicationInfo.MsiInfo.MsiUpgradeCode
$msiInfo.MsiIsMachineInstall = $DetectionXML.ApplicationInfo.MsiInfo.MsiIsMachineInstall
$msiInfo.MsiIsUserInstall = $DetectionXML.ApplicationInfo.MsiInfo.MsiIsUserInstall
$msiInfo.MsiIncludesServices = $DetectionXML.ApplicationInfo.MsiInfo.MsiIncludesServices
$msiInfo.MsiIncludesODBCDataSource = $DetectionXML.ApplicationInfo.MsiInfo.MsiIncludesODBCDataSource
$msiInfo.MsiContainsSystemRegistryKeys = $DetectionXML.ApplicationInfo.MsiInfo.MsiContainsSystemRegistryKeys
$msiInfo.MsiContainsSystemFolders = $DetectionXML.ApplicationInfo.MsiInfo.MsiContainsSystemFolders
}
# Create mobileAppContentFile object for the file
$fileEncryptionInfo = @{}
$fileEncryptionInfo.fileEncryptionInfo = $encryptionInfo
$fileEncryptionInfo.fileData = $fileData
if($msiInfo.Count -gt 0)
{
$fileEncryptionInfo.MsiInfo = $msiInfo
}
$json = $fileEncryptionInfo | ConvertTo-Json -Depth 10
if([IO.Directory]::Exists($exportFolder) -eq $false)
{
md $exportFolder | Out-Null
}
$fileName = $exportFolder + "\$($fileInfo.BaseName)_$($DetectionXML.ApplicationInfo.UnencryptedContentSize).json"
Write-Host "Save encryption for $($fileInfo.BaseName) file $fileName"
$json | Out-File -FilePath $fileName -Force -Encoding utf8
}
end
{
}
}
Get-ChildItem -Path $RootFolder -Filter "*.intunewin" -Recurse | Export-EncryptionKeys -exportFolder $ExportFolder
+1
View File
@@ -0,0 +1 @@
cmd /c powershell -version 5 -ex bypass -File "%~DP0Start-IntuneManagement.ps1" -tenantId "<TenantID>" -appid "<AppID>" -secret "<Secret>"
+56 -28
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>
@@ -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>
@@ -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" />
@@ -41,22 +41,13 @@
<Button Grid.Column="4" Name="btnGetIntuneAssignments" Padding="5,2,5,2" Content="Get Assignments" ToolTip="Get assignments from the selected exported folder" /> <Button Grid.Column="4" Name="btnGetIntuneAssignments" Padding="5,2,5,2" Content="Get Assignments" ToolTip="Get assignments from the selected exported folder" />
</Grid> </Grid>
<StackPanel Grid.Row='1' Orientation="Horizontal" Margin="0,0,5,5" > <StackPanel Grid.Row='1' Orientation="Horizontal" Margin="0,0,5,0" >
<Label Content="Filter" /> <Label Content="Filter" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Filter rows" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Filter rows" />
</StackPanel> </StackPanel>
<Grid Grid.Column='1' Grid.Row='1'> <TextBox Text="" Grid.Column='1' Grid.Row='1' Margin="0,2,0,2" Name="txtIntuneAssignmentsFilter" ToolTip="Filter items" />
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="" Name="txtIntuneAssignmentsFilter" ToolTip="Filter items" />
</Grid>
</Grid> </Grid>
<DataGrid Name="dgIntuneAssignments" Margin="0,5,0,0" Grid.Row="1" <DataGrid Name="dgIntuneAssignments" Margin="0,5,0,0" Grid.Row="1"
+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>
+54
View File
@@ -0,0 +1,54 @@
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Grid.IsSharedSizeScope='True'>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="5"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="TitleColumn" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Name="btnGetIntuneFilterUsage" Grid.Column='1' Grid.Row='0' Width="150" Padding="5,2,5,2" Content="Get Filter Usage" ToolTip="Get all Intune Filter assignment usage" />
<StackPanel Grid.Row='2' Orientation="Horizontal" Margin="5,0,0,4" >
<Label Content="Filter" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Filter rows" />
</StackPanel>
<TextBox Grid.Column='1' Grid.Row='2' Text="" Margin="5,3,0,5" Name="txtIntuneFilterUsageFilter" ToolTip="Filter items" />
</Grid>
<DataGrid Name="dgIntuneFilterUsage" Margin="0,5,0,0" Grid.Row="1"
AutoGenerateColumns="False"
SelectionMode="Single"
SelectionUnit="FullRow"
CanUserAddRows="False"
ItemsSource="">
<DataGrid.Columns>
<DataGridTextColumn Header="Filter Name" Binding="{Binding FilterName}" IsReadOnly="True" />
<DataGridTextColumn Header="Policy Name" Binding="{Binding PolicyName}" IsReadOnly="True" />
<DataGridTextColumn Header="Type" Binding="{Binding PayloadType, Mode=OneWay}" IsReadOnly="True" />
<DataGridTextColumn Header="Mode" Binding="{Binding Mode}" IsReadOnly="True" />
<DataGridTextColumn Header="Group" Binding="{Binding GroupName}" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0" >
<Button Name="btnIntuneFilterUsageCopy" Content="Copy" MinWidth="100" Margin="0,0,5,0" ToolTip="Copy the Filter usage as a CSV to the clipboard" />
<Button Name="btnIntuneFilterUsagesSave" Content="Save" MinWidth="100" />
</StackPanel>
</Grid>
+1 -1
View File
@@ -135,7 +135,7 @@
<Label Content="Current settings:" /> <Label Content="Current settings:" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Current property settings. Only updated when saved" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Current property settings. Only updated when saved" />
</StackPanel> </StackPanel>
<Label Name="lblObjectColumnsConfig" Content="" Margin="0,0,5,0" Grid.Row="3" /> <Label Name="lblObjectColumnsConfig" Content="" Margin="0,0,5,0" Grid.Row="3" Grid.ColumnSpan="2" />
<StackPanel Orientation="Horizontal" Grid.Column="1" Margin="5,5,5,0" Grid.Row="4" Grid.ColumnSpan="2" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" Grid.Column="1" Margin="5,5,5,0" Grid.Row="4" Grid.ColumnSpan="2" HorizontalAlignment="Right">
<Button Name="btnObjectColumnsReset" Content="Reset" Margin="0,0,5,0" Width="100" ToolTip="Revert all changes" /> <Button Name="btnObjectColumnsReset" Content="Reset" Margin="0,0,5,0" Width="100" ToolTip="Revert all changes" />