New features and fixes
This commit is contained in:
Mikael Karlsson
2022-03-01 17:54:14 +11:00
parent 5534eb368e
commit 46435b5717
70 changed files with 43671 additions and 5340 deletions

Binary file not shown.

View File

@@ -73,7 +73,19 @@ function Initialize-CloudAPIManagement
[switch] [switch]
$JSonSettings, $JSonSettings,
[string] [string]
$JSonFile $JSonFile,
[switch]
$Silent,
[string]
$SilentBatchFile,
[string]
$tenantId,
[string]
$appId,
[string]
$secret,
[string]
$certificate
) )
$global:wpfNS = "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'" $global:wpfNS = "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'"
@@ -81,6 +93,12 @@ 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
$global:hideUI = ($Silent -eq $true)
$global:SilentBatchFile = $SilentBatchFile
if($global:hideUI -ne $true)
{
# Run with UI
try try
{ {
[xml]$xaml = Get-Content ([IO.Path]::GetDirectoryName($PSCommandPath) + "\Xaml\SplashScreen.xaml") [xml]$xaml = Get-Content ([IO.Path]::GetDirectoryName($PSCommandPath) + "\Xaml\SplashScreen.xaml")
@@ -97,6 +115,22 @@ function Initialize-CloudAPIManagement
{ {
} }
}
else
{
# Run silent
if(-not $tenantId)
{
# Core module not loaded yet so can't use log function
Write-Error "Tenant Id is missing. Use -TenantId <Tenant-guid> on the command line to run silent batch jobs"
return
}
$global:TenantId = $tenantId
$global:AzureAppId = $appId
$global:ClientSecret = $secret
$global:ClientCert = $certificate
}
if($ShowConsoleWindow -ne $true) if($ShowConsoleWindow -ne $true)
{ {
@@ -113,11 +147,17 @@ function Initialize-CloudAPIManagement
$global:UseJSonSettings = $false $global:UseJSonSettings = $false
} }
if($global:hideUI -ne $true)
{
$global:txtSplashText.Text = "Unblock files" $global:txtSplashText.Text = "Unblock files"
}
[System.Windows.Forms.Application]::DoEvents() [System.Windows.Forms.Application]::DoEvents()
Unblock-AllFiles $PSScriptRoot Unblock-AllFiles $PSScriptRoot
if($global:hideUI -ne $true)
{
$global:txtSplashText.Text = "Load core module" $global:txtSplashText.Text = "Load core module"
}
[System.Windows.Forms.Application]::DoEvents() [System.Windows.Forms.Application]::DoEvents()
Import-Module ($PSScriptRoot + "\Core.psm1") -Force -Global Import-Module ($PSScriptRoot + "\Core.psm1") -Force -Global

180
Core.psm1
View File

@@ -11,7 +11,7 @@ This module handles the WPF UI
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.3.2' '3.4.0'
} }
function Start-CoreApp function Start-CoreApp
@@ -66,11 +66,13 @@ function Start-CoreApp
$global:FirstTimeRunning = ((Get-Setting "" "FirstTimeRunning" "true") -eq "true") $global:FirstTimeRunning = ((Get-Setting "" "FirstTimeRunning" "true") -eq "true")
$global:MainAppStarted = $false $global:MainAppStarted = $false
$global:txtSplashText.Text = "Initialize views" Set-SplashWindowText "Initialize views"
[System.Windows.Forms.Application]::DoEvents() [System.Windows.Forms.Application]::DoEvents()
Invoke-ModuleFunction "Invoke-InitializeModule" Invoke-ModuleFunction "Invoke-InitializeModule"
if($global:hideUI -ne $true)
{
#Add menu group and items #Add menu group and items
$script:LogViewObject = (New-Object PSObject -Property @{ $script:LogViewObject = (New-Object PSObject -Property @{
Title = "Log" Title = "Log"
@@ -103,6 +105,40 @@ function Start-CoreApp
$global:window.ShowDialog() | Out-Null $global:window.ShowDialog() | Out-Null
} }
} }
else
{
if(-not $global:SilentBatchFile)
{
Write-Log "SilentBatchFile must be specified" 3
return
}
$silentFI = [IO.FileInfo]$global:SilentBatchFile
if($silentFI.Exists -eq $false)
{
Write-Log "SilentBatchFile $($global:SilentBatchFile) not found" 3
return
}
Invoke-ModuleFunction "Invoke-ShowMainWindow"
Invoke-ModuleFunction "Invoke-InitSilentBatchJob"
Start-RunSilentBatchJob
}
}
function Start-RunSilentBatchJob
{
try
{
$settingObj = (ConvertFrom-Json (Get-Content -Path $global:SilentBatchFile -Raw -ErrorAction Stop))
Invoke-ModuleFunction "Invoke-SilentBatchJob" $settingObj
}
catch
{
Write-LogError "Failed to trigger silent batch job." $_.Exception
}
}
function Import-AllModules function Import-AllModules
{ {
@@ -111,7 +147,7 @@ function Import-AllModules
$fileName = [IO.Path]::GetFileName($file) $fileName = [IO.Path]::GetFileName($file)
if($skipModules -contains $fileName) { Write-Warning "Module $fileName excluded"; continue; } if($skipModules -contains $fileName) { Write-Warning "Module $fileName excluded"; continue; }
$global:txtSplashText.Text = "Import module $fileName" Set-SplashWindowText "Import module $fileName"
[System.Windows.Forms.Application]::DoEvents() [System.Windows.Forms.Application]::DoEvents()
$module = Import-Module $file -PassThru -Force -Global -ErrorAction SilentlyContinue $module = Import-Module $file -PassThru -Force -Global -ErrorAction SilentlyContinue
@@ -127,6 +163,15 @@ function Import-AllModules
} }
} }
function Set-SplashWindowText
{
param($text)
if($global:hideUI -eq $true) { return }
$global:txtSplashText.Text = $text
}
#region Log functions #region Log functions
function Write-Log function Write-Log
{ {
@@ -243,6 +288,12 @@ function Write-Status
{ {
param($Text, [switch]$SkipLog, [switch]$Block, [switch]$Force) param($Text, [switch]$SkipLog, [switch]$Block, [switch]$Force)
if($global:hideUI -eq $true)
{
if($SkipLog -ne $true) { Write-Log $text }
return
}
if(-not $text) { $global:BlockStatusUpdates = $false } if(-not $text) { $global:BlockStatusUpdates = $false }
elseif($global:BlockStatusUpdates -eq $true -and $Force -ne $true) { return } elseif($global:BlockStatusUpdates -eq $true -and $Force -ne $true) { return }
elseif($Block -eq $true) { $global:BlockStatusUpdates = $true } elseif($Block -eq $true) { $global:BlockStatusUpdates = $true }
@@ -415,6 +466,64 @@ function Invoke-RegisterName
#endregion #endregion
#region Silent Functions
function Set-BatchProperties
{
param($settingsObj, $form)
if(-not $settingsObj -or -not $form)
{
return
}
foreach($prop in $settingsObj) #($settingsObj | GM | Where MemberType -eq NoteProperty))
{
if($prop.Type -eq "Custom") { continue }
$obj = $form.FindName($prop.Name)
if(-not $obj)
{
Write-Log "No setting for $($prop.Name) found" 2
continue
}
if(-not $prop.Value)
{
continue
}
try
{
if($obj -is [System.Windows.Controls.CheckBox])
{
$obj.IsChecked = $prop.Value -eq $true
}
elseif($obj -is [System.Windows.Controls.TextBox])
{
$obj.Text = $prop.Value
}
elseif($obj -is [System.Windows.Controls.ComboBox])
{
$obj.SelectedValue = $prop.Value
}
else
{
try
{
Write-Log "Unsupported object type for silent batch job: $($obj.GetType().FullName)" 3
}
catch
{}
}
}
catch
{
Write-LogError "Failed to set batch job property for $($prop.Name)" $_.Exception
}
}
}
#endregion
#region Dialogs #region Dialogs
function Show-AboutDialog function Show-AboutDialog
@@ -671,7 +780,7 @@ function Set-ObjectGrid
if($obj) if($obj)
{ {
$global:grdObject.Children.Add($obj) $global:grdObject.Children.Add($obj) | Out-Null
$global:grdObject.Visibility = "Visible" $global:grdObject.Visibility = "Visible"
} }
else else
@@ -920,6 +1029,8 @@ function Save-Setting
{ {
param($SubPath = "", $Key = "", $Value, $Type = "String") param($SubPath = "", $Key = "", $Value, $Type = "String")
if($global:hideUI -eq $true) { return }
if($global:JsonSettingsObj -and $global:JSonSettingFile) if($global:JsonSettingsObj -and $global:JSonSettingFile)
{ {
if($SubPath) if($SubPath)
@@ -997,6 +1108,58 @@ function Save-Setting
} }
} }
function Remove-Setting
{
param($SubPath = "", $Key = "")
if($global:JsonSettingsObj)
{
if($SubPath)
{
$arrParts = $SubPath.TrimEnd(@('/','\')).Split(@('/','\'))
}
else
{
$arrParts = @()
}
$parentSetting = $global:JsonSettingsObj
foreach($part in $arrParts)
{
if(($parentSetting.PSObject.Properties | Where Name -eq $part))
{
$parentSetting = $parentSetting.$part
}
else
{
return
}
}
if(($parentSetting.PSObject.Properties | Where Name -eq $Key))
{
$parentSetting.PSObject.Properties.Remove($Key)
}
}
else
{
$regPath = Get-RegPath $subPath
try
{
$temp = Get-Item -LiteralPath $regPath -ErrorAction SilentlyContinue
if(($temp.Property -contains $Key))
{
Remove-ItemProperty -Path $regPath -Name $Key -Force -ErrorAction Stop
}
}
catch
{
Write-LogError "Failed to remove reg value: $($Key) in key $($regPath)" $_.Exception
}
}
}
function Get-Setting function Get-Setting
{ {
param($SubPath = "", $Key = "", $defautValue) param($SubPath = "", $Key = "", $defautValue)
@@ -2031,10 +2194,15 @@ function Get-MainWindow
#region Module functions #region Module functions
function Invoke-ModuleFunction function Invoke-ModuleFunction
{ {
param($function) param($function, $arguments = $null)
Write-Log "Trigger function $function" Write-Log "Trigger function $function"
$params = @{}
if($arguments)
{
$params.Add("ArgumentList",$arguments)
}
foreach($module in $global:loadedModules) foreach($module in $global:loadedModules)
{ {
# Get command with ExportedFunctions instead of Get-Command # Get command with ExportedFunctions instead of Get-Command
@@ -2042,7 +2210,7 @@ function Invoke-ModuleFunction
if($cmd) if($cmd)
{ {
Write-Log "Trigger $function in $($module.Name)" Write-Log "Trigger $function in $($module.Name)"
Invoke-Command -ScriptBlock $cmd.ScriptBlock Invoke-Command -ScriptBlock $cmd.ScriptBlock @params
} }
else else
{ {

View File

@@ -66,7 +66,7 @@ The documentation is based on a two step process
This will collection all the information about the object and add it to a PowerShell object in the code This will collection all the information about the object and add it to a PowerShell object in the code
* Send the information to the selected output type * Send the information to the selected output provider
This will send all the information gathered about the object to the selected output provider This will send all the information gathered about the object to the selected output provider

View File

@@ -14,5 +14,66 @@
"dataType": 20, "dataType": 20,
"booleanActions": 0, "booleanActions": 0,
"category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle" "category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle"
},
{
"nameResourceKey": "WindowsFeatureUpdateProfile.Details.RolloutOptions.label",
"descriptionResourceKey": "",
"entityKey": "featureUpdateRolloutOption",
"dataType": 16,
"booleanActions": 0,
"category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle",
"options": [
{
"nameResourceKey": "WindowsUpdateRolloutOptions.immediateStart",
"descriptionResourceKey": "",
"value": "immediateStart"
},
{
"nameResourceKey": "WindowsUpdateRolloutOptions.gradualRollout",
"descriptionResourceKey": "",
"value": "gradualRollout",
"ChildSettings": [
{
"nameResourceKey": "WindowsFeatureUpdateProfile.Details.GradualRolloutStartDate.label",
"descriptionResourceKey": "",
"dataType": 20,
"category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle",
"entityKey": "featureUpdateRolloutStartDate",
"booleanActions": 0
},
{
"nameResourceKey": "WindowsFeatureUpdateProfile.Details.GradualRolloutEndDate.label",
"descriptionResourceKey": "",
"dataType": 20,
"category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle",
"entityKey": "featureUpdateRolloutEndDate",
"booleanActions": 0
},
{
"nameResourceKey": "WindowsFeatureUpdateProfile.Details.GradualRolloutInterval.label",
"descriptionResourceKey": "",
"dataType": 20,
"category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle",
"entityKey": "featureUpdateRolloutInterval",
"booleanActions": 0
}
]
},
{
"nameResourceKey": "WindowsUpdateRolloutOptions.startDateOnly",
"descriptionResourceKey": "",
"value": "startDateOnly",
"ChildSettings": [
{
"nameResourceKey": "WindowsFeatureUpdateProfile.Details.GradualRolloutStartDate.label",
"descriptionResourceKey": "",
"dataType": 20,
"category": "WindowsFeatureUpdateProfile.Details.deploymentSettingsTitle",
"entityKey": "featureUpdateRolloutStartDate",
"booleanActions": 0
}
]
}
]
} }
] ]

View File

@@ -89,11 +89,24 @@
"category": 2, "category": 2,
"nameResourceKey": "publicPlayStoreEnabledName", "nameResourceKey": "publicPlayStoreEnabledName",
"descriptionResourceKey": "publicPlayStoreEnabledDescription", "descriptionResourceKey": "publicPlayStoreEnabledDescription",
"childSettings": [
{
"dataType": 10,
"category": 2,
"nameResourceKey": "publicPlayStoreEnabledWarning",
"childSettings": [ "childSettings": [
], ],
"options": [ "options": [
],
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
],
"options": [
], ],
"entityKey": "publicPlayStoreEnabled", "entityKey": "publicPlayStoreEnabled",
"booleanActions": 0, "booleanActions": 0,

View File

@@ -72,6 +72,23 @@
"defaultValue": false, "defaultValue": false,
"policyType": 46, "policyType": 46,
"enabled": true "enabled": true
},
{
"dataType": 0,
"category": 7,
"nameResourceKey": "managedPasteboardRequiredName",
"descriptionResourceKey": "managedPasteboardRequiredDescription",
"childSettings": [
],
"options": [
],
"entityKey": "managedPasteboardRequired",
"booleanActions": 9,
"defaultValue": false,
"policyType": 46,
"enabled": true
} }
], ],
"options": [ "options": [
@@ -1883,23 +1900,6 @@
"defaultValue": false, "defaultValue": false,
"policyType": 46, "policyType": 46,
"enabled": true "enabled": true
},
{
"dataType": 0,
"category": 7,
"nameResourceKey": "managedPasteboardRequiredName",
"descriptionResourceKey": "managedPasteboardRequiredDescription",
"childSettings": [
],
"options": [
],
"entityKey": "managedPasteboardRequired",
"booleanActions": 9,
"defaultValue": false,
"policyType": 46,
"enabled": true
} }
], ],
"options": [ "options": [

View File

@@ -224,6 +224,23 @@
"defaultValue": false, "defaultValue": false,
"policyType": 46, "policyType": 46,
"enabled": true "enabled": true
},
{
"dataType": 0,
"category": 18,
"nameResourceKey": "blockIosICloudPrivateRelayName",
"descriptionResourceKey": "blockIosICloudPrivateRelayDescription",
"childSettings": [
],
"options": [
],
"entityKey": "iCloudPrivateRelayBlocked",
"booleanActions": 9,
"defaultValue": false,
"policyType": 46,
"enabled": true
} }
], ],
"options": [ "options": [

View File

@@ -1,5 +1,6 @@
{ {
"cloudandstorage_macgeneral": { "cloudandstorage_macgeneral": [
{
"isSettingDescription": false, "isSettingDescription": false,
"showAsSectionHeader": true, "showAsSectionHeader": true,
"dataType": 8, "dataType": 8,
@@ -24,6 +25,23 @@
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 18,
"nameResourceKey": "blockICloudDesktopAndDocumentsName",
"descriptionResourceKey": "blockICloudDesktopAndDocumentsDescription",
"childSettings": [
],
"options": [
],
"entityKey": "iCloudDesktopAndDocumentsBlocked",
"booleanActions": 9,
"defaultValue": false,
"policyType": 61,
"enabled": true
},
{ {
"dataType": 0, "dataType": 0,
"category": 18, "category": 18,
@@ -184,5 +202,39 @@
"booleanActions": 0, "booleanActions": 0,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
},
{
"isSettingDescription": false,
"showAsSectionHeader": true,
"dataType": 8,
"category": 18,
"nameResourceKey": "userApprovedAndAutomatedDeviceEnrollmentHeaderNameMac",
"descriptionResourceKey": "userApprovedAndAutomatedDeviceEnrollmentHeaderDescriptionMac",
"childSettings": [
{
"dataType": 0,
"category": 18,
"nameResourceKey": "blockMacICloudPrivateRelayName",
"descriptionResourceKey": "blockMacICloudPrivateRelayDescription",
"childSettings": [
],
"options": [
],
"entityKey": "iCloudPrivateRelayBlocked",
"booleanActions": 9,
"defaultValue": false,
"policyType": 61,
"enabled": true
} }
],
"options": [
],
"booleanActions": 0,
"policyType": 61,
"enabled": true
}
]
} }

View File

@@ -45,7 +45,7 @@
"enabled": true "enabled": true
}, },
{ {
"dataType": 14, "dataType": 15,
"category": 22, "category": 22,
"nameResourceKey": "contentCachingMaxSizeBytesName", "nameResourceKey": "contentCachingMaxSizeBytesName",
"descriptionResourceKey": "contentCachingMaxSizeBytesDescription", "descriptionResourceKey": "contentCachingMaxSizeBytesDescription",

View File

@@ -383,13 +383,13 @@
], ],
"options": [ "options": [
{ {
"nameResourceKey": "localSecurityOptionsSmartCardRemovalBehaviorLockWorkstation", "nameResourceKey": "localSecurityOptionsSmartCardRemovalBehaviorNoAction",
"value": "lockWorkstation", "value": "noAction",
"enabled": true "enabled": true
}, },
{ {
"nameResourceKey": "localSecurityOptionsSmartCardRemovalBehaviorNoAction", "nameResourceKey": "localSecurityOptionsSmartCardRemovalBehaviorLockWorkstation",
"value": "noAction", "value": "lockWorkstation",
"enabled": true "enabled": true
}, },
{ {
@@ -405,8 +405,8 @@
], ],
"entityKey": "localSecurityOptionsSmartCardRemovalBehavior", "entityKey": "localSecurityOptionsSmartCardRemovalBehavior",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "lockWorkstation", "defaultValue": "noAction",
"unconfiguredValue": "lockWorkstation", "unconfiguredValue": "noAction",
"policyType": 77, "policyType": 77,
"enabled": true "enabled": true
}, },

View File

@@ -219,6 +219,102 @@
"policyType": 108, "policyType": 108,
"enabled": true "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": "frontCameras",
"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": "rearCameras",
"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": "infraredCameras",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{ {
"dataType": 16, "dataType": 16,
"category": 136, "category": 136,
@@ -251,6 +347,38 @@
"policyType": 108, "policyType": 108,
"enabled": true "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": "microphones",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 108,
"enabled": false
},
{ {
"dataType": 16, "dataType": 16,
"category": 136, "category": 136,
@@ -299,6 +427,134 @@
"policyType": 108, "policyType": 108,
"enabled": true "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": "wwan",
"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": "nfc",
"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, "isSettingDescription": false,
"showAsSectionHeader": false, "showAsSectionHeader": false,
@@ -378,6 +634,182 @@
"unconfiguredValue": "notConfigured", "unconfiguredValue": "notConfigured",
"policyType": 108, "policyType": 108,
"enabled": true "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
} }
] ]
} }

View File

@@ -113,23 +113,6 @@
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 41,
"nameResourceKey": "safeBootDisabledName",
"descriptionResourceKey": "safeBootDisabledDescription",
"childSettings": [
],
"options": [
],
"entityKey": "safeBootBlocked",
"booleanActions": 3,
"defaultValue": false,
"policyType": 2,
"enabled": true
},
{ {
"dataType": 0, "dataType": 0,
"category": 41, "category": 41,
@@ -249,23 +232,6 @@
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 41,
"nameResourceKey": "debuggingFeaturesAllowedName",
"descriptionResourceKey": "debuggingFeaturesAllowedDescription",
"childSettings": [
],
"options": [
],
"entityKey": "securityAllowDebuggingFeatures",
"booleanActions": 0,
"defaultValue": false,
"policyType": 2,
"enabled": true
},
{ {
"dataType": 0, "dataType": 0,
"category": 41, "category": 41,
@@ -895,6 +861,62 @@
"unconfiguredValue": "deviceDefault", "unconfiguredValue": "deviceDefault",
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 41,
"nameResourceKey": "systemUpdateFreezePeriodStartDateColumnName",
"descriptionResourceKey": "systemUpdateFreezePeriodStartDateColumnDescription",
"emptyValueResourceKey": "systemUpdateFreezePeriodStartDateEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "startDate",
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
},
{
"metadata": {
"dataType": 20,
"category": 41,
"nameResourceKey": "systemUpdateFreezePeriodEndDateColumnName",
"descriptionResourceKey": "systemUpdateFreezePeriodEndDateColumnDescription",
"emptyValueResourceKey": "systemUpdateFreezePeriodEndDateEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "endDate",
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
}
],
"dataType": 21,
"category": 41,
"nameResourceKey": "systemUpdateFreezePeriodsTableName",
"descriptionResourceKey": "systemUpdateFreezePeriodsTableDescription",
"childSettings": [
],
"options": [
],
"entityKey": "systemUpdateFreezePeriodsList",
"booleanActions": 0,
"policyType": 2,
"enabled": true
} }
], ],
"options": [ "options": [
@@ -1211,6 +1233,87 @@
"defaultValue": false, "defaultValue": false,
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
},
{
"dataType": 19,
"category": 41,
"nameResourceKey": "showWorkContactsInPersonalProfileName",
"descriptionResourceKey": "showWorkContactsInPersonalProfileDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "blockOption",
"value": false,
"enabled": true
},
{
"nameResourceKey": "notConfigured",
"value": true,
"enabled": true
}
],
"entityKey": "crossProfilePoliciesShowWorkContactsInPersonalProfile",
"booleanActions": 0,
"defaultValue": true,
"unconfiguredValue": true,
"policyType": 2,
"enabled": true
},
{
"dataType": 0,
"category": 41,
"nameResourceKey": "copyPasteBetweenWorkAndPersonalProfilesName",
"descriptionResourceKey": "copyPasteBetweenWorkAndPersonalProfilesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "crossProfilePoliciesAllowCopyPaste",
"booleanActions": 0,
"defaultValue": false,
"policyType": 2,
"enabled": true
},
{
"dataType": 16,
"category": 41,
"nameResourceKey": "dataSharingBetweenWorkAndPersonalProfilesName",
"descriptionResourceKey": "dataSharingBetweenWorkAndPersonalProfilesDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "DeviceDefaultDataSharingBetweenWorkAndPersonalProfilesOption",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "BlockAllDataSharingBetweenWorkAndPersonalProfilesOption",
"value": "crossProfileDataSharingBlocked",
"enabled": true
},
{
"nameResourceKey": "BlockWorkToPersonalDataSharingBetweenWorkAndPersonalProfilesOption",
"value": "dataSharingFromWorkToPersonalBlocked",
"enabled": true
},
{
"nameResourceKey": "NoRestrictionsDataSharingBetweenWorkAndPersonalProfilesOption",
"value": "crossProfileDataSharingAllowed",
"enabled": true
}
],
"entityKey": "crossProfilePoliciesAllowDataSharing",
"booleanActions": 0,
"defaultValue": "notConfigured",
"unconfiguredValue": "notConfigured",
"policyType": 2,
"enabled": true
} }
], ],
"options": [ "options": [

View File

@@ -258,6 +258,43 @@
"policyType": 9, "policyType": 9,
"enabled": true "enabled": true
}, },
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 41,
"nameResourceKey": "empty",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "trustedServerCertificateNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNamesName",
"booleanActions": 0,
"policyType": 9,
"enabled": true
}
}
],
"dataType": 21,
"category": 41,
"nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNames",
"booleanActions": 0,
"policyType": 9,
"enabled": true
},
{ {
"complexOptions": [ "complexOptions": [
{ {
@@ -491,6 +528,43 @@
"policyType": 9, "policyType": 9,
"enabled": true "enabled": true
}, },
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 41,
"nameResourceKey": "empty",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "trustedServerCertificateNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNamesName",
"booleanActions": 0,
"policyType": 9,
"enabled": true
}
}
],
"dataType": 21,
"category": 41,
"nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNames",
"booleanActions": 0,
"policyType": 9,
"enabled": true
},
{ {
"complexOptions": [ "complexOptions": [
{ {
@@ -782,6 +856,43 @@
"policyType": 9, "policyType": 9,
"enabled": true "enabled": true
}, },
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 41,
"nameResourceKey": "empty",
"descriptionResourceKey": "empty",
"emptyValueResourceKey": "trustedServerCertificateNameExample",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNamesName",
"booleanActions": 0,
"policyType": 9,
"enabled": true
}
}
],
"dataType": 21,
"category": 41,
"nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "trustedServerCertificateNames",
"booleanActions": 0,
"policyType": 9,
"enabled": true
},
{ {
"complexOptions": [ "complexOptions": [
{ {

View File

@@ -85,23 +85,6 @@
"policyType": 28, "policyType": 28,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 41,
"nameResourceKey": "blockBackupServiceName",
"descriptionResourceKey": "blockBackupServiceDescription",
"childSettings": [
],
"options": [
],
"entityKey": "backupBlocked",
"booleanActions": 9,
"defaultValue": false,
"policyType": 28,
"enabled": false
},
{ {
"dataType": 0, "dataType": 0,
"category": 41, "category": 41,
@@ -153,23 +136,6 @@
"policyType": 28, "policyType": 28,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 41,
"nameResourceKey": "blockCellularWiFiTetheringName",
"descriptionResourceKey": "blockCellularWiFiTetheringDescription",
"childSettings": [
],
"options": [
],
"entityKey": "cellularBlockWiFiTethering",
"booleanActions": 9,
"defaultValue": false,
"policyType": 28,
"enabled": false
},
{ {
"dataType": 0, "dataType": 0,
"category": 41, "category": 41,
@@ -186,6 +152,23 @@
"defaultValue": false, "defaultValue": false,
"policyType": 28, "policyType": 28,
"enabled": true "enabled": true
},
{
"dataType": 0,
"category": 41,
"nameResourceKey": "blockAppsInstallFromUnknownSourcesName",
"descriptionResourceKey": "blockAppsInstallFromUnknownSourcesDescription",
"childSettings": [
],
"options": [
],
"entityKey": "appsBlockInstallFromUnknownSources",
"booleanActions": 9,
"defaultValue": false,
"policyType": 28,
"enabled": true
} }
] ]
} }

View File

@@ -505,6 +505,7 @@
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "EnforcedSoftwareUpdateDelayNamePlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -513,7 +514,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 46, "policyType": 46,
"enabled": true "enabled": true
} }

View File

@@ -113,6 +113,7 @@
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -121,7 +122,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -130,6 +130,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -138,7 +139,6 @@
], ],
"entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }
@@ -154,6 +154,7 @@
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -162,7 +163,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -171,6 +171,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -179,7 +180,6 @@
], ],
"entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }
@@ -195,6 +195,7 @@
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -203,7 +204,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -212,6 +212,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -220,7 +221,6 @@
], ],
"entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }
@@ -229,13 +229,14 @@
}, },
{ {
"nameResourceKey": "delayMajorAndMinorOSUpdateVisibilityOption", "nameResourceKey": "delayMajorAndMinorOSUpdateVisibilityOption",
"value": "delayMajorOsUpdateVisibility,delayOSUpdateVisibility", "value": "delayOSUpdateVisibility,delayMajorOsUpdateVisibility",
"children": [ "children": [
{ {
"dataType": 14, "dataType": 14,
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -244,7 +245,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -253,6 +253,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -261,7 +262,6 @@
], ],
"entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -270,6 +270,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -278,7 +279,6 @@
], ],
"entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }
@@ -287,13 +287,14 @@
}, },
{ {
"nameResourceKey": "delayMajorAndNonOsUpdateVisibilityOption", "nameResourceKey": "delayMajorAndNonOsUpdateVisibilityOption",
"value": "delayMajorOsUpdateVisibility,delayAppUpdateVisibility", "value": "delayAppUpdateVisibility,delayMajorOsUpdateVisibility",
"children": [ "children": [
{ {
"dataType": 14, "dataType": 14,
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -302,7 +303,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -311,6 +311,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -319,7 +320,6 @@
], ],
"entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -328,6 +328,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -336,7 +337,6 @@
], ],
"entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }
@@ -352,6 +352,7 @@
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -360,7 +361,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -369,6 +369,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -377,7 +378,6 @@
], ],
"entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -386,6 +386,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -394,7 +395,6 @@
], ],
"entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }
@@ -403,13 +403,14 @@
}, },
{ {
"nameResourceKey": "delayAllUpdateVisibilityOption", "nameResourceKey": "delayAllUpdateVisibilityOption",
"value": "delayMajorOsUpdateVisibility,delayOSUpdateVisibility,delayAppUpdateVisibility", "value": "delayOSUpdateVisibility,delayAppUpdateVisibility,delayMajorOsUpdateVisibility",
"children": [ "children": [
{ {
"dataType": 14, "dataType": 14,
"category": 41, "category": 41,
"nameResourceKey": "enforcedSoftwareUpdateDelayName", "nameResourceKey": "enforcedSoftwareUpdateDelayName",
"descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription", "descriptionResourceKey": "enforcedSoftwareUpdateDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -418,7 +419,6 @@
], ],
"entityKey": "softwareUpdatesEnforcedDelayInDays", "entityKey": "softwareUpdatesEnforcedDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -427,6 +427,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMajorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMajorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -435,7 +436,6 @@
], ],
"entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMajorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -444,6 +444,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateMinorOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateMinorOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -452,7 +453,6 @@
], ],
"entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateMinorOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
@@ -461,6 +461,7 @@
"category": 41, "category": 41,
"nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName", "nameResourceKey": "softwareUpdateNonOSDeferredInstallDelayName",
"descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription", "descriptionResourceKey": "softwareUpdateNonOSDeferredInstallDelayDescription",
"emptyValueResourceKey": "enforcedSoftwareUpdateDelayEmptyValue",
"childSettings": [ "childSettings": [
], ],
@@ -469,7 +470,6 @@
], ],
"entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays", "entityKey": "softwareUpdateNonOSDeferredInstallDelayInDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 30,
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
} }

View File

@@ -672,6 +672,23 @@
"policyType": 42, "policyType": 42,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 56,
"nameResourceKey": "singleSignOnExtensionManagedAppsInBundleIdACLIncludedName",
"descriptionResourceKey": "singleSignOnExtensionManagedAppsInBundleIdACLIncludedDescription",
"childSettings": [
],
"options": [
],
"entityKey": "managedAppsInBundleIdACLIncluded",
"booleanActions": 9,
"defaultValue": false,
"policyType": 42,
"enabled": true
},
{ {
"dataType": 20, "dataType": 20,
"category": 56, "category": 56,
@@ -722,6 +739,22 @@
"policyType": 42, "policyType": 42,
"enabled": true "enabled": true
}, },
{
"dataType": 20,
"category": 56,
"nameResourceKey": "singleSignOnExtensionSignInHelpTextName",
"descriptionResourceKey": "singleSignOnExtensionSignInHelpTextDescription",
"childSettings": [
],
"options": [
],
"entityKey": "signInHelpText",
"booleanActions": 0,
"policyType": 42,
"enabled": true
},
{ {
"columns": [ "columns": [
{ {

View File

@@ -640,6 +640,23 @@
"policyType": 58, "policyType": 58,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 56,
"nameResourceKey": "singleSignOnExtensionManagedAppsInBundleIdACLIncludedName",
"descriptionResourceKey": "singleSignOnExtensionManagedAppsInBundleIdACLIncludedDescription",
"childSettings": [
],
"options": [
],
"entityKey": "managedAppsInBundleIdACLIncluded",
"booleanActions": 9,
"defaultValue": false,
"policyType": 58,
"enabled": true
},
{ {
"dataType": 0, "dataType": 0,
"category": 56, "category": 56,
@@ -674,6 +691,74 @@
"policyType": 58, "policyType": 58,
"enabled": true "enabled": true
}, },
{
"dataType": 0,
"category": 56,
"nameResourceKey": "singleSignOnExtensionUserSetupDelayedName",
"descriptionResourceKey": "singleSignOnExtensionUserSetupDelayedDescription",
"childSettings": [
],
"options": [
],
"entityKey": "userSetupDelayed",
"booleanActions": 9,
"defaultValue": false,
"policyType": 58,
"enabled": true
},
{
"dataType": 0,
"category": 56,
"nameResourceKey": "singleSignOnExtensionKerberosAppsInBundleIdACLIncludedName",
"descriptionResourceKey": "singleSignOnExtensionKerberosAppsInBundleIdACLIncludedDescription",
"childSettings": [
],
"options": [
],
"entityKey": "kerberosAppsInBundleIdACLIncluded",
"booleanActions": 9,
"defaultValue": false,
"policyType": 58,
"enabled": true
},
{
"dataType": 0,
"category": 56,
"nameResourceKey": "singleSignOnExtensionCredentialsCacheMonitoredName",
"descriptionResourceKey": "singleSignOnExtensionCredentialsCacheMonitoredDescription",
"childSettings": [
],
"options": [
],
"entityKey": "credentialsCacheMonitored",
"booleanActions": 9,
"defaultValue": false,
"policyType": 58,
"enabled": true
},
{
"dataType": 0,
"category": 56,
"nameResourceKey": "singleSignOnExtensionTLSForLDAPRequiredName",
"descriptionResourceKey": "singleSignOnExtensionTLSForLDAPRequiredDescription",
"childSettings": [
],
"options": [
],
"entityKey": "tlsForLDAPRequired",
"booleanActions": 9,
"defaultValue": false,
"policyType": 58,
"enabled": true
},
{ {
"dataType": 0, "dataType": 0,
"category": 56, "category": 56,
@@ -788,6 +873,54 @@
"policyType": 58, "policyType": 58,
"enabled": true "enabled": true
}, },
{
"dataType": 20,
"category": 56,
"nameResourceKey": "singleSignOnExtensionUsernameLabelCustomName",
"descriptionResourceKey": "singleSignOnExtensionUsernameLabelCustomDescription",
"emptyValueResourceKey": "singleSignOnExtensionUsernameLabelCustomEmptyValue",
"childSettings": [
],
"options": [
],
"entityKey": "usernameLabelCustom",
"booleanActions": 0,
"policyType": 58,
"enabled": true
},
{
"dataType": 16,
"category": 56,
"nameResourceKey": "singleSignOnExtensionModeCredentialUsedName",
"descriptionResourceKey": "singleSignOnExtensionModeCredentialUsedDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "singleSignOnExtensionModeCredentialUsedAlwaysName",
"value": "always",
"enabled": true
},
{
"nameResourceKey": "singleSignOnExtensionModeCredentialUsedWhenNotSpecifiedName",
"value": "whenNotSpecified",
"enabled": true
},
{
"nameResourceKey": "singleSignOnExtensionModeCredentialUsedKerberosDefaultName",
"value": "kerberosDefault",
"enabled": true
}
],
"entityKey": "modeCredentialUsed",
"booleanActions": 0,
"defaultValue": "kerberosDefault",
"policyType": 58,
"enabled": true
},
{ {
"dataType": 20, "dataType": 20,
"category": 56, "category": 56,
@@ -838,6 +971,22 @@
"policyType": 58, "policyType": 58,
"enabled": true "enabled": true
}, },
{
"dataType": 20,
"category": 56,
"nameResourceKey": "singleSignOnExtensionSignInHelpTextName",
"descriptionResourceKey": "singleSignOnExtensionSignInHelpTextDescription",
"childSettings": [
],
"options": [
],
"entityKey": "signInHelpText",
"booleanActions": 0,
"policyType": 58,
"enabled": true
},
{ {
"dataType": 20, "dataType": 20,
"category": 56, "category": 56,
@@ -960,6 +1109,42 @@
"booleanActions": 0, "booleanActions": 0,
"policyType": 58, "policyType": 58,
"enabled": true "enabled": true
},
{
"columns": [
{
"metadata": {
"dataType": 20,
"category": 56,
"nameResourceKey": "singleSignOnExtensionPreferredKDCsColumnName",
"emptyValueResourceKey": "singleSignOnExtensionPreferredKDCsColumnEmptyValue",
"childSettings": [
],
"options": [
],
"entityKey": "preferredKDCsColumn",
"booleanActions": 0,
"policyType": 58,
"enabled": true
}
}
],
"dataType": 21,
"category": 56,
"nameResourceKey": "singleSignOnExtensionPreferredKDCsName",
"descriptionResourceKey": "singleSignOnExtensionPreferredKDCsDescription",
"childSettings": [
],
"options": [
],
"entityKey": "preferredKDCs",
"booleanActions": 0,
"policyType": 58,
"enabled": true
} }
], ],
"enabled": true "enabled": true

View File

@@ -344,6 +344,24 @@
"policyType": 61, "policyType": 61,
"enabled": true "enabled": true
}, },
{
"dataType": 14,
"category": 85,
"nameResourceKey": "macTouchIdTimeoutInHoursName",
"descriptionResourceKey": "macTouchIdTimeoutInHoursDescription",
"emptyValueResourceKey": "macTouchIdTimeoutInHoursEmptyValueKey",
"childSettings": [
],
"options": [
],
"entityKey": "touchIdTimeoutInHours",
"booleanActions": 0,
"defaultValue": 48,
"policyType": 61,
"enabled": true
},
{ {
"dataType": 0, "dataType": 0,
"category": 85, "category": 85,

View File

@@ -57,6 +57,67 @@
"defaultValue": false, "defaultValue": false,
"policyType": 2, "policyType": 2,
"enabled": true "enabled": true
},
{
"dataType": 16,
"category": 87,
"nameResourceKey": "personalProfilePersonalApplicationsListTypeName",
"descriptionResourceKey": "personalProfilePersonalApplicationsListTypeDescription",
"childSettings": [
],
"options": [
{
"nameResourceKey": "notConfigured",
"value": "notConfigured",
"enabled": true
},
{
"nameResourceKey": "blockedList",
"value": "blockedApps",
"children": [
{
"dataType": 25,
"category": 87,
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
],
"enabled": true
},
{
"nameResourceKey": "allowedList",
"value": "allowedApps",
"children": [
{
"dataType": 25,
"category": 87,
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 2,
"enabled": true
}
],
"enabled": true
}
],
"entityKey": "personalProfilePlayStoreMode",
"booleanActions": 0,
"defaultValue": "notConfigured",
"policyType": 2,
"enabled": true
} }
], ],
"options": [ "options": [

View File

@@ -747,6 +747,8 @@
], ],
"entityKey": "passwordRequiredType", "entityKey": "passwordRequiredType",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "deviceDefault",
"unconfiguredValue": "deviceDefault",
"policyType": 29, "policyType": 29,
"enabled": true "enabled": true
} }

View File

@@ -364,6 +364,8 @@
], ],
"entityKey": "passwordRequiredType", "entityKey": "passwordRequiredType",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": "deviceDefault",
"unconfiguredValue": "deviceDefault",
"policyType": 30, "policyType": 30,
"enabled": true "enabled": true
} }

View File

@@ -35,6 +35,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceMinimumPasswordLengthName", "nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "complianceMinimumPasswordLengthDescription", "descriptionResourceKey": "complianceMinimumPasswordLengthDescription",
"emptyValueResourceKey": "ComplianceMinimumPasswordLengthPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -43,7 +44,6 @@
], ],
"entityKey": "passwordMinimumLength", "entityKey": "passwordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 4,
"policyType": 34, "policyType": 34,
"enabled": true "enabled": true
}, },
@@ -172,7 +172,7 @@
"category": 106, "category": 106,
"nameResourceKey": "compliancePasswordExpirationName", "nameResourceKey": "compliancePasswordExpirationName",
"descriptionResourceKey": "compliancePasswordExpirationDescription", "descriptionResourceKey": "compliancePasswordExpirationDescription",
"emptyValueResourceKey": "IOSMacPasswordExpirationInDaysEmptyValueKey", "emptyValueResourceKey": "CompliancePasswordExpirationPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -181,7 +181,6 @@
], ],
"entityKey": "passwordExpirationDays", "entityKey": "passwordExpirationDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 41,
"policyType": 34, "policyType": 34,
"enabled": true "enabled": true
}, },
@@ -190,6 +189,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName", "nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription", "descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "ComplianceNumberOfPreviousPasswordsToBlockPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -198,7 +198,6 @@
], ],
"entityKey": "passwordPreviousPasswordBlockCount", "entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 5,
"policyType": 34, "policyType": 34,
"enabled": true "enabled": true
} }

View File

@@ -100,6 +100,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceMinimumPasswordLengthName", "nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "complianceMinimumPasswordLengthDescription", "descriptionResourceKey": "complianceMinimumPasswordLengthDescription",
"emptyValueResourceKey": "ComplianceMinimumPasswordLengthPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -108,7 +109,6 @@
], ],
"entityKey": "passwordMinimumLength", "entityKey": "passwordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 4,
"policyType": 35, "policyType": 35,
"enabled": true "enabled": true
}, },
@@ -166,7 +166,7 @@
"category": 106, "category": 106,
"nameResourceKey": "compliancePasswordExpirationName", "nameResourceKey": "compliancePasswordExpirationName",
"descriptionResourceKey": "compliancePasswordExpirationDescription", "descriptionResourceKey": "compliancePasswordExpirationDescription",
"emptyValueResourceKey": "passwordExpirationInDaysEmptyValueTwoYearsKey", "emptyValueResourceKey": "CompliancePasswordExpirationPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -175,7 +175,6 @@
], ],
"entityKey": "passwordExpirationDays", "entityKey": "passwordExpirationDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 41,
"policyType": 35, "policyType": 35,
"enabled": true "enabled": true
}, },
@@ -184,6 +183,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName", "nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription", "descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "ComplianceNumberOfPreviousPasswordsToBlockPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -192,7 +192,6 @@
], ],
"entityKey": "passwordPreviousPasswordBlockCount", "entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 5,
"policyType": 35, "policyType": 35,
"enabled": true "enabled": true
}, },

View File

@@ -35,6 +35,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceMinimumPasswordLengthName", "nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "complianceMinimumPasswordLengthDescription", "descriptionResourceKey": "complianceMinimumPasswordLengthDescription",
"emptyValueResourceKey": "ComplianceMinimumPasswordLengthPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -43,7 +44,6 @@
], ],
"entityKey": "passwordMinimumLength", "entityKey": "passwordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 4,
"policyType": 37, "policyType": 37,
"enabled": true "enabled": true
}, },
@@ -176,7 +176,7 @@
"category": 106, "category": 106,
"nameResourceKey": "compliancePasswordExpirationName", "nameResourceKey": "compliancePasswordExpirationName",
"descriptionResourceKey": "compliancePasswordExpirationDescription", "descriptionResourceKey": "compliancePasswordExpirationDescription",
"emptyValueResourceKey": "IOSMacPasswordExpirationInDaysEmptyValueKey", "emptyValueResourceKey": "CompliancePasswordExpirationPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -185,7 +185,6 @@
], ],
"entityKey": "passwordExpirationDays", "entityKey": "passwordExpirationDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 41,
"policyType": 37, "policyType": 37,
"enabled": true "enabled": true
}, },
@@ -194,6 +193,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName", "nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription", "descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "ComplianceNumberOfPreviousPasswordsToBlockPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -202,7 +202,6 @@
], ],
"entityKey": "passwordPreviousPasswordBlockCount", "entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 5,
"policyType": 37, "policyType": 37,
"enabled": true "enabled": true
} }

View File

@@ -35,6 +35,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceMinimumPasswordLengthName", "nameResourceKey": "complianceMinimumPasswordLengthName",
"descriptionResourceKey": "complianceMinimumPasswordLengthDescription", "descriptionResourceKey": "complianceMinimumPasswordLengthDescription",
"emptyValueResourceKey": "ComplianceMinimumPasswordLengthPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -43,7 +44,6 @@
], ],
"entityKey": "passwordMinimumLength", "entityKey": "passwordMinimumLength",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 4,
"policyType": 38, "policyType": 38,
"enabled": true "enabled": true
}, },
@@ -176,7 +176,7 @@
"category": 106, "category": 106,
"nameResourceKey": "compliancePasswordExpirationName", "nameResourceKey": "compliancePasswordExpirationName",
"descriptionResourceKey": "compliancePasswordExpirationDescription", "descriptionResourceKey": "compliancePasswordExpirationDescription",
"emptyValueResourceKey": "IOSMacPasswordExpirationInDaysEmptyValueKey", "emptyValueResourceKey": "CompliancePasswordExpirationPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -185,7 +185,6 @@
], ],
"entityKey": "passwordExpirationDays", "entityKey": "passwordExpirationDays",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 41,
"policyType": 38, "policyType": 38,
"enabled": true "enabled": true
}, },
@@ -194,6 +193,7 @@
"category": 106, "category": 106,
"nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName", "nameResourceKey": "complianceNumberOfPreviousPasswordsToBlockName",
"descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription", "descriptionResourceKey": "complianceNumberOfPreviousPasswordsToBlockDescription",
"emptyValueResourceKey": "ComplianceNumberOfPreviousPasswordsToBlockPlaceholder",
"childSettings": [ "childSettings": [
], ],
@@ -202,7 +202,6 @@
], ],
"entityKey": "passwordPreviousPasswordBlockCount", "entityKey": "passwordPreviousPasswordBlockCount",
"booleanActions": 0, "booleanActions": 0,
"defaultValue": 5,
"policyType": 38, "policyType": 38,
"enabled": true "enabled": true
} }

View File

@@ -178,6 +178,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -383,6 +426,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -588,6 +674,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -793,6 +922,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -998,6 +1170,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 8,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],

View File

@@ -178,6 +178,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -399,6 +442,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -604,6 +690,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -809,6 +938,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -1014,6 +1186,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],
@@ -1219,6 +1434,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 12,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],

View File

@@ -160,6 +160,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 25,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 25,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 25,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],

File diff suppressed because it is too large Load Diff

View File

@@ -95,6 +95,49 @@
{ {
"nameResourceKey": "derivedCredentialsOption", "nameResourceKey": "derivedCredentialsOption",
"value": "derivedCredential", "value": "derivedCredential",
"children": [
{
"dataType": 9,
"category": 120,
"childSettings": [
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsSearchingForTenantLevel",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 105,
"enabled": true
},
{
"dataType": 10,
"category": 120,
"nameResourceKey": "derivedCredentialsTenantLevelNotConfigured",
"childSettings": [
],
"options": [
],
"booleanActions": 0,
"policyType": 105,
"enabled": true
}
],
"options": [
],
"entityKey": "derivedCredentialSettings@odata.bind",
"booleanActions": 0,
"policyType": 105,
"enabled": true
}
],
"enabled": false "enabled": false
} }
], ],

View File

@@ -3304,8 +3304,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -3515,8 +3515,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -3795,8 +3795,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -4187,8 +4187,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -4398,8 +4398,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -4678,8 +4678,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],

View File

@@ -167,8 +167,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -378,8 +378,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],
@@ -663,8 +663,8 @@
], ],
"dataType": 21, "dataType": 21,
"category": 112, "category": 112,
"nameResourceKey": "trustedServerCertificateNamesName", "nameResourceKey": "androidTrustedServerCertificateNamesName",
"descriptionResourceKey": "trustedServerCertificateNamesDescription", "descriptionResourceKey": "androidTrustedServerCertificateNamesDescription",
"childSettings": [ "childSettings": [
], ],

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -20,7 +20,7 @@ $global:documentationProviders = @()
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.8' '1.1.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -629,11 +629,20 @@ function Add-ScopeTagStrings
{ {
foreach($scopeTagId in $obj.roleScopeTagIds) foreach($scopeTagId in $obj.roleScopeTagIds)
{ {
$scopeTagObj = $script:scopeTags | Where Id -eq $scopeTagId $scopeTagName = $scopeTagId
if($scopeTagObj) if($scopeTagId -eq "0")
{ {
$objScopeTags += $scopeTagObj.displayName $scopeTagName = (Get-LanguageString "SettingDetails.default")
} }
elseif($script:scopeTags)
{
$scopeTagObj = $script:scopeTags | Where Id -eq $scopeTagId
if($scopeTagObj.displayName)
{
$scopeTagName = $scopeTagObj.displayName
}
}
$objScopeTags += $scopeTagName
} }
} }
if($objScopeTags.Count -gt 0) if($objScopeTags.Count -gt 0)
@@ -1794,6 +1803,10 @@ function Invoke-TranslateSection
{ {
$propValue = $prop.defaultValue $propValue = $prop.defaultValue
} }
elseif($rawValue -eq $null -and ![String]::IsNullOrEmpty($prop.emptyValueResourceKey) -and $global:chkSetDefaultValue.IsChecked)
{
$propValue = Get-LanguageString $prop.emptyValueResourceKey
}
else else
{ {
$propValue = $rawValue $propValue = $rawValue
@@ -1834,6 +1847,11 @@ function Invoke-TranslateSection
} }
$rawValue = $value $rawValue = $value
} }
elseif($script:currentObject.'@ObjectFromFile' -eq $true)
{
$value = "##TBD - Linked Certificate"
$rawValue = $value
}
} }
elseif($prop.dataType -eq 200) # Multi option based on boolean value elseif($prop.dataType -eq 200) # Multi option based on boolean value
{ {
@@ -2064,6 +2082,8 @@ function Add-PropertyInfo
} }
$script:objectSettingsData += Get-PropertyInfo $prop $value $originalValue $jsonValue $script:objectSettingsData += Get-PropertyInfo $prop $value $originalValue $jsonValue
Invoke-CustomPostAddValue $prop
} }
function Add-PropertyInfoObject function Add-PropertyInfoObject
@@ -2110,6 +2130,15 @@ function Get-PropertyInfo
$jsonValue = $rawValue | ConvertTo-Json -Depth 10 -Compress $jsonValue = $rawValue | ConvertTo-Json -Depth 10 -Compress
} }
if($prop.emptyValueResourceKey)
{
$defValue = Get-LanguageString $prop.emptyValueResourceKey
}
else
{
$defValue = $prop.defaultValue
}
return New-Object PSObject -Property @{ return New-Object PSObject -Property @{
Name=$name Name=$name
Description=$description Description=$description
@@ -2121,7 +2150,7 @@ function Get-PropertyInfo
DataType=$prop.dataType DataType=$prop.dataType
RawValue=$originalValue RawValue=$originalValue
RawJsonValue=$jsonValue RawJsonValue=$jsonValue
DefaultValue=$prop.defaultValue DefaultValue=$defValue
UnconfiguredValue=$prop.unconfiguredValue UnconfiguredValue=$prop.unconfiguredValue
Enabled=$prop.Enabled Enabled=$prop.Enabled
EntityKey=$prop.EntityKey EntityKey=$prop.EntityKey
@@ -2156,6 +2185,23 @@ function Get-CustomProfileValue
} }
} }
function Invoke-CustomPostAddValue
{
param($prop)
foreach($docProvider in ($global:documentationProviders | Sort -Property Priority))
{
if($docProvider.PostAddValue)
{
$retObj = & $docProvider.PostAddValue $script:currentObject $prop $script:propertySeparator $script:objectSeparator
if($retObj -ne $null)
{
return $retObj
}
}
}
}
function Get-CustomPropertyObject function Get-CustomPropertyObject
{ {
param($obj, $prop) param($obj, $prop)
@@ -2852,6 +2898,8 @@ function Invoke-TranslateAssignments
} }
} }
$groupInfo = $null
if($groupIds.Count -gt 0) if($groupIds.Count -gt 0)
{ {
$ht = @{} $ht = @{}
@@ -2862,6 +2910,12 @@ function Invoke-TranslateAssignments
$groupInfo = (Invoke-GraphRequest -Url "/directoryObjects/getByIds?`$select=displayName,id" -Content $body -Method "Post").Value $groupInfo = (Invoke-GraphRequest -Url "/directoryObjects/getByIds?`$select=displayName,id" -Content $body -Method "Post").Value
} }
if(($null -eq $groupInfo -or ($groupInfo | measure).Count -eq 0) -and $obj."@ObjectFromFile" -eq $true -and $script:migTable)
{
### Get group info from mig table when documenting from file if there's no access to the environment
$groupInfo = $script:migTable.Objects | Where Type -eq "Group"
}
if($filterIds.Count -gt 0) if($filterIds.Count -gt 0)
{ {
$batchInfo = @{} $batchInfo = @{}
@@ -3152,7 +3206,10 @@ function Show-DocumentationForm
$objectTypes, $objectTypes,
[Switch] [Switch]
[Parameter(Mandatory=$false,ParameterSetName = "Objects")] [Parameter(Mandatory=$false,ParameterSetName = "Objects")]
$SelectedDocuments) $SelectedDocuments,
[Switch]
$ShowFolderSource
)
$objectList = @() $objectList = @()
@@ -3226,6 +3283,22 @@ function Show-DocumentationForm
$global:btnAddToDocumentationList.Visibility = "Collapsed" $global:btnAddToDocumentationList.Visibility = "Collapsed"
} }
if($ShowFolderSource -ne $true)
{
$global:grdDocumentFromFolder.Visibility = "Collapsed"
$global:spDocumentFromFolder.Visibility = "Collapsed"
}
else
{
Add-XamlEvent $script:docForm "browseDocumentFromFolder" "add_click" {
$folder = Get-Folder (Get-XamlProperty $script:docForm "txtDocumentFromFolder" "Text") "Select root folder for export files"
if($folder)
{
Set-XamlProperty $script:docForm "txtDocumentFromFolder" "Text" $folder
}
}
}
$column = Get-GridCheckboxColumn "IsSelected" $column = Get-GridCheckboxColumn "IsSelected"
$global:grdDocumentObjects.Columns.Add($column) $global:grdDocumentObjects.Columns.Add($column)
@@ -3316,6 +3389,11 @@ function Show-DocumentationForm
$txtDocumentationRawData.Text = "" $txtDocumentationRawData.Text = ""
$loadExportedInfo = $true
$script:migTable = $null
$script:scopeTags = $null
$diSource = $nul
$global:intentCategories = $null $global:intentCategories = $null
$global:catRecommendedSettings = $null $global:catRecommendedSettings = $null
$global:intentCategoryDefs = $null $global:intentCategoryDefs = $null
@@ -3374,6 +3452,19 @@ function Show-DocumentationForm
} }
elseif($global:grdDocumentObjects.Tag -eq "ObjectTypes") elseif($global:grdDocumentObjects.Tag -eq "ObjectTypes")
{ {
$fromExportFolder = $false
if($global:txtDocumentFromFolder.Text)
{
$diSource = [IO.DirectoryInfo]$global:txtDocumentFromFolder.Text
if($diSource.Exists -eq $false)
{
[System.Windows.MessageBox]::Show("Source folder not found:`n`n$($diSource.FullName)", "Documentation", "OK", "Error")
Write-Status ""
return
}
$fromExportFolder = $true
}
$sourceList = @() $sourceList = @()
foreach($objGroup in ($global:grdDocumentObjects.ItemsSource | Where IsSelected -eq $true)) foreach($objGroup in ($global:grdDocumentObjects.ItemsSource | Where IsSelected -eq $true))
{ {
@@ -3382,12 +3473,26 @@ function Show-DocumentationForm
{ {
Write-Status "Get $($objectType.Title) objects" Write-Status "Get $($objectType.Title) objects"
if($fromExportFolder -eq $false)
{
$graphObjects = @(Get-GraphObjects -property $objectType.ViewProperties -objectType $objectType) $graphObjects = @(Get-GraphObjects -property $objectType.ViewProperties -objectType $objectType)
if($objectType.PostListCommand) if($objectType.PostListCommand)
{ {
$graphObjects = & $objectType.PostListCommand $graphObjects $objectType $graphObjects = & $objectType.PostListCommand $graphObjects $objectType
} }
}
else
{
$objectPath = [IO.Path]::Combine($diSource.FullName,$objectType.ID)
if([IO.Directory]::Exists($objectPath) -eq $false)
{
Write-Log "Object path for $($objectType.Title) ($($objectType.ID)) not found. Skipping object type" 2
continue
}
$graphObjects = Get-GraphFileObjects $objectPath -ObjectType $objectType
$graphObjects | ForEach-Object { $_.Object | Add-Member Noteproperty -Name "@ObjectFromFile" -Value $true -Force }
}
$groupSourceList += $graphObjects $groupSourceList += $graphObjects
} }
@@ -3412,6 +3517,39 @@ function Show-DocumentationForm
return return
} }
if($fromExportFolder -eq $true -and $diSource -and $loadExportedInfo -eq $true)
{
$loadExportedInfo = $false
$migFileName = [IO.Path]::Combine($diSource.FullName,"MigrationTable.json")
if([IO.File]::Exists($migFileName) -eq $false)
{
Write-Log "MigrationTable not found. Groups will be documented with GroupId" 2
}
else
{
Write-Log "Load Migration table from $migFileName"
$script:migTable = ConvertFrom-Json (Get-Content $migFileName -Raw)
}
$scopeTagObjectType = $global:currentViewObject.ViewItems | Where Id -eq "ScopeTags"
if($scopeTagObjectType)
{
$scopePath = [IO.Path]::Combine($diSource.FullName,$scopeTagObjectType.Id)
if([IO.Directory]::Exists($scopePath) -eq $false)
{
Write-Log "Object path for Scope (Tags) ($($scopePath)) not found" 2
}
else
{
$scopeTagObjects = Get-GraphFileObjects $scopePath -ObjectType $scopeTagObjectType
$script:scopeTags = @(($scopeTagObjects | Select Object))
}
}
}
if($global:cbDocumentationType.SelectedItem.PreProcess) if($global:cbDocumentationType.SelectedItem.PreProcess)
{ {
Write-Status "Run PreProcess for $($global:cbDocumentationType.SelectedItem.Name)" Write-Status "Run PreProcess for $($global:cbDocumentationType.SelectedItem.Name)"
@@ -3436,7 +3574,14 @@ function Show-DocumentationForm
} }
} }
if($tmpObj.Object."@ObjectFromFile" -eq $true)
{
$obj = $tmpObj
}
else
{
$obj = Get-GraphObject $tmpObj.Object $tmpObj.ObjectType $obj = Get-GraphObject $tmpObj.Object $tmpObj.ObjectType
}
if($obj) if($obj)
{ {
@@ -3669,7 +3814,7 @@ function Set-OutputOptionsTabStatus
function Invoke-DocumentObjectTypes function Invoke-DocumentObjectTypes
{ {
Show-DocumentationForm -objectTypes $global:currentViewObject.ViewItems Show-DocumentationForm -objectTypes $global:currentViewObject.ViewItems -ShowFolderSource
} }
function Invoke-DocumentSelectedObjects function Invoke-DocumentSelectedObjects

View File

@@ -10,7 +10,7 @@ This module will also document some objects based on PowerShell functions
function Get-ModuleVersion function Get-ModuleVersion
{ {
'1.0.6' '1.1.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -23,6 +23,7 @@ function Invoke-InitializeModule
GetCustomChildObject = { Get-CDDocumentCustomChildObjet @args } GetCustomChildObject = { Get-CDDocumentCustomChildObjet @args }
GetCustomPropertyObject = { Get-CDDocumentCustomPropertyObject @args } GetCustomPropertyObject = { Get-CDDocumentCustomPropertyObject @args }
AddCustomProfileProperty = { Add-CDDocumentCustomProfileProperty @args } AddCustomProfileProperty = { Add-CDDocumentCustomProfileProperty @args }
PostAddValue = { Invoke-CDDocumentCustomPostAdd @args }
}) })
} }
@@ -93,6 +94,13 @@ function Invoke-CDDocumentObject
Properties = @("Name","Value","Category","SubCategory") Properties = @("Name","Value","Category","SubCategory")
} }
} }
elseif($type -eq '#microsoft.graph.deviceAndAppManagementAssignmentFilter')
{
Invoke-CDDocumentAssignmentFilter $documentationObj
return [PSCustomObject]@{
Properties = @("Name","Value")
}
}
} }
function Get-CDAllManagedApps function Get-CDAllManagedApps
@@ -169,6 +177,73 @@ Property separator character
Object separator character Object separator character
#> #>
function Invoke-CDDocumentCustomPostAdd
{
param($obj, $prop, $propSeparator, $objSeparator)
if($obj.'@OData.Type' -eq "#microsoft.graph.windowsUpdateForBusinessConfiguration")
{
if($prop.EntityKey -eq "featureUpdatesDeferralPeriodInDays")
{
# Inject Windows 11 update setting. Not included in the file
$tmpProp = [PSCustomObject]@{
nameResourceKey = "allowWindows11UpgradeName"
descriptionResourceKey = "allowWindows11UpgradeDescription"
entityKey = "allowWindows11Upgrade"
dataType = 0
booleanActions = 109
category = $prop.Category
}
$propValue = Invoke-TranslateBoolean $obj $tmpProp
$script:UpdateCategory = $prop.Category
Add-PropertyInfo $tmpProp $propValue -originalValue $obj.allowWindows11Upgrade
}
if($prop.EntityKey -eq "featureUpdatesRollbackWindowInDays")
{
if($obj.businessReadyUpdatesOnly -eq "businessReadyOnly")
{
$propValue = Get-LanguageString "BooleanActions.notConfigured"
}
else
{
$propValue = Get-LanguageString "BooleanActions.enable"
}
# Inject Pre-release setting. Not included in the file
$tmpProp = [PSCustomObject]@{
nameResourceKey = "preReleaseBuilds"
descriptionResourceKey = "preReleaseBuildsDescription"
entityKey = "preReleaseEnabled" # Not a class property!
dataType = 0
booleanActions = 2
category = $prop.Category
}
Add-PropertyInfo $tmpProp $propValue -originalValue $obj.businessReadyUpdatesOnly
if($obj.businessReadyUpdatesOnly -ne "businessReadyOnly")
{
# Pre-release channel selected. Inject info
$propValue = Get-LanguageString "SettingDetails.$($obj.businessReadyUpdatesOnly)Option"
$tmpProp = [PSCustomObject]@{
nameResourceKey = "preReleaseChannel"
descriptionResourceKey = "preReleaseBuildsDescription"
entityKey = "businessReadyUpdatesOnly"
dataType = 0
booleanActions = 2
category = $prop.Category
}
Add-PropertyInfo $tmpProp $propValue -originalValue $obj.businessReadyUpdatesOnly
}
}
}
}
function Add-CDDocumentCustomProfileValue function Add-CDDocumentCustomProfileValue
{ {
param($obj, $prop, $topObj, $propSeparator, $objSeparator) param($obj, $prop, $topObj, $propSeparator, $objSeparator)
@@ -320,6 +395,18 @@ function Add-CDDocumentCustomProfileValue
return $false return $false
} }
} }
elseif($obj.'@OData.Type' -eq "#microsoft.graph.windowsUpdateForBusinessConfiguration")
{
if($prop.EntityKey -eq "businessReadyUpdatesOnly" -or
$prop.EntityKey -eq "autoRestartNotificationDismissal" -or
$prop.EntityKey -eq "scheduleRestartWarningInHours" -or
$prop.EntityKey -eq "scheduleImminentRestartWarningInMinutes" -or
$prop.EntityKey -eq "deliveryOptimizationMode")
{
# Not used anymore
return $false
}
}
} }
<# <#
@@ -695,6 +782,11 @@ function Add-CDDocumentCustomProfileProperty
} }
$obj | Add-Member Noteproperty -Name "syntheticWipOrApps" -Value $syntheticWipOrApps -Force $obj | Add-Member Noteproperty -Name "syntheticWipOrApps" -Value $syntheticWipOrApps -Force
if($null -eq $obj.profileTarget)
{
$obj.profileTarget = "user"
}
$retValue = $true $retValue = $true
} }
elseif($obj.'@OData.Type' -like "#microsoft.graph.iosDeviceFeaturesConfiguration") elseif($obj.'@OData.Type' -like "#microsoft.graph.iosDeviceFeaturesConfiguration")
@@ -872,6 +964,29 @@ function Add-CDDocumentCustomProfileProperty
$obj | Add-Member Noteproperty -Name "featureUpdateDisplayName" -Value $verInfoTxt $obj | Add-Member Noteproperty -Name "featureUpdateDisplayName" -Value $verInfoTxt
if($obj.rolloutSettings.offerStartDateTimeInUTC -and
$obj.rolloutSettings.offerEndDateTimeInUTC)
{
$featureUpdateRolloutOption = "gradualRollout"
$obj | Add-Member Noteproperty -Name "featureUpdateRolloutStartDate" -Value ((Get-Date $obj.rolloutSettings.offerStartDateTimeInUTC).ToLongDateString())
$obj | Add-Member Noteproperty -Name "featureUpdateRolloutEndDate" -Value ((Get-Date $obj.rolloutSettings.offerEndDateTimeInUTC).ToLongDateString())
if($null -ne $obj.rolloutSettings.offerIntervalInDays)
{
$obj | Add-Member Noteproperty -Name "featureUpdateRolloutInterval" -Value ($obj.rolloutSettings.offerIntervalInDays)
}
}
elseif($obj.rolloutSettings.offerStartDateTimeInUTC)
{
$featureUpdateRolloutOption = "startDateOnly"
$obj | Add-Member Noteproperty -Name "featureUpdateRolloutStartDate" -Value ((Get-Date $obj.rolloutSettings.offerStartDateTimeInUTC).ToLongDateString())
}
else
{
$featureUpdateRolloutOption = "immediateStart"
}
$obj | Add-Member Noteproperty -Name "featureUpdateRolloutOption" -Value $featureUpdateRolloutOption
$retValue = $true $retValue = $true
} }
elseif($obj.'@OData.Type' -eq "#microsoft.graph.iosUpdateConfiguration") elseif($obj.'@OData.Type' -eq "#microsoft.graph.iosUpdateConfiguration")
@@ -2501,3 +2616,43 @@ function Invoke-CDDocumentNotification
} }
} }
#endregion #endregion
#region
function Invoke-CDDocumentAssignmentFilter
{
param($documentationObj)
$obj = $documentationObj.Object
$objectType = $documentationObj.ObjectType
$script:objectSeparator = ?? $global:cbDocumentationObjectSeparator.SelectedValue ([System.Environment]::NewLine)
$script:propertySeparator = ?? $global:cbDocumentationPropertySeparator.SelectedValue ","
###################################################
# Basic info
###################################################
Add-BasicDefaultValues $obj $objectType
# "Filters" is not in the translation file
Add-BasicPropertyValue (Get-LanguageString "TableHeaders.configurationType") "Filters"
Add-BasicPropertyValue (Get-LanguageString "Inputs.platformLabel") (Get-LanguageString "Platform.$($obj.platform)")
###################################################
# Settings
###################################################
$label = Get-LanguageString "ApplicabilityRules.GridLabel.rule"
# "Rules" is not in the translation file
$category = "Rules"
Add-CustomSettingObject ([PSCustomObject]@{
Name = $label
Value = $obj.rule
EntityKey = "rule"
Category = $category
SubCategory = $null
})
}
#endregion

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.0.7' '1.1.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -70,6 +70,14 @@ function Add-WordOptionsControl
$global:spWordCustomProperties.Visibility = (?: ($global:cbWordDocumentationProperties.SelectedValue -ne "custom") "Collapsed" "Visible") $global:spWordCustomProperties.Visibility = (?: ($global:cbWordDocumentationProperties.SelectedValue -ne "custom") "Collapsed" "Visible")
$global:txtWordCustomProperties.Visibility = (?: ($global:cbWordDocumentationProperties.SelectedValue -ne "custom") "Collapsed" "Visible") $global:txtWordCustomProperties.Visibility = (?: ($global:cbWordDocumentationProperties.SelectedValue -ne "custom") "Collapsed" "Visible")
$global:cbWordDocumentationLevel.ItemsSource = ("[ { Name: `"Full`",Value: `"full`" }, { Name: `"Limited`",Value: `"limited`" }, { Name: `"Basic`",Value: `"basic`" }]" | ConvertFrom-Json)
$global:cbWordDocumentationLevel.SelectedValue = (Get-Setting "Documentation" "WordDocumentationLevel" "full")
$global:gdWordDocumentationLimitOptions.Visibility = (?: ($global:cbWordDocumentationLevel.SelectedValue -ne "limited") "Collapsed" "Visible")
$global:txtWordDocumentationLimitMaxLength.Text = Get-Setting "Documentation" "WordDocumentationLimitMaxLength" ""
$global:txtWordDocumentationLimitTruncateLength.Text = Get-Setting "Documentation" "WordDocumentationLimitTruncateLength" ""
$global:chkWordDocumentationLimitAttatch.IsChecked = ((Get-Setting "Documentation" "WordDocumentationLimitAttatch" "true") -ne "false")
$global:txtWordDocumentTemplate.Text = Get-Setting "Documentation" "WordDocumentTemplate" "" $global:txtWordDocumentTemplate.Text = Get-Setting "Documentation" "WordDocumentTemplate" ""
$global:txtWordDocumentName.Text = (Get-Setting "Documentation" "WordDocumentName" "%MyDocuments%\%Organization%-%Date%.docx") $global:txtWordDocumentName.Text = (Get-Setting "Documentation" "WordDocumentName" "%MyDocuments%\%Organization%-%Date%.docx")
@@ -88,6 +96,8 @@ function Add-WordOptionsControl
$global:chkWordIncludeScripts.IsChecked = ((Get-Setting "Documentation" "WordIncludeScripts" "true") -ne "false") $global:chkWordIncludeScripts.IsChecked = ((Get-Setting "Documentation" "WordIncludeScripts" "true") -ne "false")
$global:chkWordExcludeScriptSignature.IsChecked = ((Get-Setting "Documentation" "WordExcludeScriptSignature" "false") -ne "false") $global:chkWordExcludeScriptSignature.IsChecked = ((Get-Setting "Documentation" "WordExcludeScriptSignature" "false") -ne "false")
$global:chkWordAttatchJsonFile.IsChecked = ((Get-Setting "Documentation" "WordAttatchJsonFile" "false") -ne "false")
$global:txtWordScriptTableStyle.Text = Get-Setting "Documentation" "WordScriptTableStyle" "" $global:txtWordScriptTableStyle.Text = Get-Setting "Documentation" "WordScriptTableStyle" ""
$global:txtWordScriptStyle.Text = Get-Setting "Documentation" "WordScriptStyle" $global:txtWordScriptStyle.Text = Get-Setting "Documentation" "WordScriptStyle"
@@ -109,6 +119,10 @@ function Add-WordOptionsControl
$global:txtWordCustomProperties.Visibility = (?: ($this.SelectedValue -ne "custom") "Collapsed" "Visible") $global:txtWordCustomProperties.Visibility = (?: ($this.SelectedValue -ne "custom") "Collapsed" "Visible")
} }
Add-XamlEvent $script:wordForm "cbWordDocumentationLevel" "add_selectionChanged" {
$global:gdWordDocumentationLimitOptions.Visibility = (?: ($this.SelectedValue -ne "limited") "Collapsed" "Visible")
}
$script:wordForm $script:wordForm
} }
function Invoke-WordActivate function Invoke-WordActivate
@@ -123,6 +137,11 @@ function Invoke-WordPreProcessItems
Save-Setting "Documentation" "WordDocumentTemplate" $global:txtWordDocumentTemplate.Text Save-Setting "Documentation" "WordDocumentTemplate" $global:txtWordDocumentTemplate.Text
Save-Setting "Documentation" "WordDocumentName" $global:txtWordDocumentName.Text Save-Setting "Documentation" "WordDocumentName" $global:txtWordDocumentName.Text
Save-Setting "Documentation" "WordDocumentationLevel" $global:cbWordDocumentationLevel.SelectedValue
Save-Setting "Documentation" "WordDocumentationLimitMaxLength" $global:txtWordDocumentationLimitMaxLength.Text
Save-Setting "Documentation" "WordDocumentationLimitTruncateLength" $global:txtWordDocumentationLimitTruncateLength.Text
Save-Setting "Documentation" "WordDocumentationLimitAttatch" $global:chkWordDocumentationLimitAttatch.IsChecked
Save-Setting "Documentation" "WordAddCategories" $global:chkWordAddCategories.IsChecked Save-Setting "Documentation" "WordAddCategories" $global:chkWordAddCategories.IsChecked
Save-Setting "Documentation" "WordAddSubCategories" $global:chkWordAddSubCategories.IsChecked Save-Setting "Documentation" "WordAddSubCategories" $global:chkWordAddSubCategories.IsChecked
Save-Setting "Documentation" "WordOpenDocument" $global:chkWordOpenDocument.IsChecked Save-Setting "Documentation" "WordOpenDocument" $global:chkWordOpenDocument.IsChecked
@@ -139,9 +158,58 @@ function Invoke-WordPreProcessItems
Save-Setting "Documentation" "WordIncludeScripts" $global:chkWordIncludeScripts.IsChecked Save-Setting "Documentation" "WordIncludeScripts" $global:chkWordIncludeScripts.IsChecked
Save-Setting "Documentation" "WordExcludeScriptSignature" $global:chkWordExcludeScriptSignature.IsChecked Save-Setting "Documentation" "WordExcludeScriptSignature" $global:chkWordExcludeScriptSignature.IsChecked
Save-Setting "Documentation" "WordAttatchJsonFile" $global:chkWordAttatchJsonFile.IsChecked
Save-Setting "Documentation" "WordScriptTableStyle" $global:txtWordScriptTableStyle.Text Save-Setting "Documentation" "WordScriptTableStyle" $global:txtWordScriptTableStyle.Text
Save-Setting "Documentation" "WordScriptStyle" $global:txtWordScriptStyle.Text Save-Setting "Documentation" "WordScriptStyle" $global:txtWordScriptStyle.Text
$script:limitMaxValue = 100
$script:truncateValueLength = $script:limitMaxValue
if($global:cbWordDocumentationLevel.SelectedValue -eq "limited")
{
if($global:txtWordDocumentationLimitMaxLength.Text)
{
try
{
$script:limitMaxValue = [int]::Parse($global:txtWordDocumentationLimitMaxLength.Text)
}
catch
{
Write-LogError "Failed to parse $($global:txtWordDocumentationLimitMaxLength.Text) to int. Max value length will be set to 100." $_.Exception
}
}
if($global:txtWordDocumentationLimitTruncateLength.Text)
{
try
{
$script:truncateValueLength = [int]::Parse($global:txtWordDocumentationLimitTruncateLength.Text)
}
catch
{
Write-LogError "Failed to parse $($global:txtWordDocumentationLimitTruncateLength.Text) to int. Truncat length will be set to $script:limitMaxValue." $_.Exception
}
}
if($script:limitMaxValue -lt 20)
{
Write-Log "Max value length must be 20 or more. Changed to 20" 2
$script:limitMaxValue = 0
}
if($script:truncateValueLength -lt 0)
{
Write-Log "Truncate length must be 0 or more. Changed to 0" 2
$script:truncateValueLength = 0
}
elseif($script:truncateValueLength -gt $script:limitMaxValue)
{
Write-Log "Truncate length cannot be larger than Max value length. Canged to: $($script:limitMaxValue)" 2
$script:truncateValueLength = $script:limitMaxValue
}
}
try try
{ {
$script:wordApp = New-Object -ComObject Word.Application $script:wordApp = New-Object -ComObject Word.Application
@@ -284,6 +352,17 @@ function Invoke-WordPreProcessItems
} }
} }
} }
else
{
if(($script:doc.TablesOfContents | measure).Count -eq 0)
{
# Where should it be added?
# $script:doc.TablesOfContents.Add($script:wordApp.Selection.Range) | out-null
}
Invoke-DocGoToEnd
$script:wordApp.Selection.InsertNewPage()
}
} }
function Invoke-WordPostProcessItems function Invoke-WordPostProcessItems
@@ -460,13 +539,21 @@ function Invoke-WordProcessItem
$properties = (?? $documentedObj.DefaultDocumentationProperties (@("Name","Value"))) $properties = (?? $documentedObj.DefaultDocumentationProperties (@("Name","Value")))
} }
if($global:cbWordDocumentationLevel.SelectedValue -eq "basic" -and $tableType -ne "BasicInfo")
{
continue
}
$lngId = ?: ($tableType -eq "BasicInfo") "SettingDetails.basics" "TableHeaders.settings" -AddCategories $lngId = ?: ($tableType -eq "BasicInfo") "SettingDetails.basics" "TableHeaders.settings" -AddCategories
Add-DocTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId ` Add-DocTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId `
-AddCategories:($global:chkWordAddCategories.IsChecked -eq $true) ` -AddCategories:($global:chkWordAddCategories.IsChecked -eq $true) `
-AddSubcategories:($global:chkWordAddSubCategories.IsChecked -eq $true) -AddSubcategories:($global:chkWordAddSubCategories.IsChecked -eq $true) `
-ForceFullValue:($tableType -eq "BasicInfo")
} }
if($global:cbWordDocumentationLevel.SelectedValue -ne "basic")
{
if(($documentedObj.ComplianceActions | measure).Count -gt 0) if(($documentedObj.ComplianceActions | measure).Count -gt 0)
{ {
$properties = @("Action","Schedule","MessageTemplate","EmailCC") $properties = @("Action","Schedule","MessageTemplate","EmailCC")
@@ -482,6 +569,7 @@ function Invoke-WordProcessItem
} }
Add-DocObjectSettings $obj $objectType $documentedObj Add-DocObjectSettings $obj $objectType $documentedObj
}
if(($documentedObj.Assignments | measure).Count -gt 0) if(($documentedObj.Assignments | measure).Count -gt 0)
{ {
@@ -523,6 +611,20 @@ function Invoke-WordProcessItem
Add-DocTableItems $obj $objectType $documentedObj.Assignments $properties "TableHeaders.assignments" @params Add-DocTableItems $obj $objectType $documentedObj.Assignments $properties "TableHeaders.assignments" @params
} }
if($global:chkWordAttatchJsonFile.IsChecked -eq $true)
{
$fileName = Export-GraphObject $obj $objectType ([IO.Path]::GetTempPath()) -IsFullObject -PassThru -SkipAddID
if($fileName)
{
$fi = [IO.FileInfo]$fileName
if($fi.Exists)
{
$script:doc.Application.Selection.InlineShapes.AddOLEObject("",$fi.FullName,$false,$true,"$($env:WinDir)\System32\Notepad.exe",0,$fi.Name)
try { $fi.Delete() } catch {} # Cleanup
}
}
}
} }
catch catch
{ {
@@ -606,7 +708,7 @@ function Set-WordColumnHeaderLanguageId
function Add-DocTableItems function Add-DocTableItems
{ {
param($obj, $objectType, $items, $properties, $lngId, [switch]$AddCategories, [switch]$AddSubcategories, $captionOverride) param($obj, $objectType, $items, $properties, $lngId, [switch]$AddCategories, [switch]$AddSubcategories, $captionOverride, [switch]$forceFullValue)
$tblHeaderStyle = $global:txtWordTableHeaderStyle.Text $tblHeaderStyle = $global:txtWordTableHeaderStyle.Text
$tblCategoryStyle = $global:txtWordCategoryHeaderStyle.Text $tblCategoryStyle = $global:txtWordCategoryHeaderStyle.Text
@@ -665,7 +767,48 @@ function Add-DocTableItems
{ {
$tmpObj = $tmpObj."$($propArr[$x])" $tmpObj = $tmpObj."$($propArr[$x])"
} }
$script:docTable.Cell($row, $i).Range.Text = "$($tmpObj.$propName)" $propValue = "$($tmpObj.$propName)"
$propValueFull = $null
if($forceFullValue -ne $true -and $global:cbWordDocumentationLevel.SelectedValue -eq "limited" -and $propValue.Length -gt $script:limitMaxValue)
{
$propValueFull = $propValue
if($script:truncateValueLength -gt 0)
{
$propValue = ($propValue.Substring(0, $script:truncateValueLength) + "...")
if($global:chkWordDocumentationLimitAttatch.IsChecked -eq $true)
{
$propValue = ("`r`n" + $propValue)
}
}
else
{
$propValue = $null
}
}
if($null -ne $propValue)
{
$script:docTable.Cell($row, $i).Range.Text = $propValue
}
if($propValueFull -and $global:chkWordDocumentationLimitAttatch.IsChecked -eq $true)
{
if($null -ne $propValue)
{
#$script:doc.Application.Selection.TypeParagraph()
}
$tmpName = "$((Get-GraphObjectName $obj $objectType))-$propName"
$tmpFile = [System.IO.Path]::Combine([System.IO.Path]::GetTempPath(), "$($tmpName).txt")
$tmpFile = Remove-InvalidFileNameChars $tmpFile
$propValueFull | Out-File -LiteralPath $tmpFile -Force
$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")
#$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 {}
}
} }
catch catch
{ {

View File

@@ -11,7 +11,7 @@ This module is for the Endpoint Manager/Intune View. It manages Export/Import/Co
#> #>
function Get-ModuleVersion function Get-ModuleVersion
{ {
'3.1.14' '3.4.0'
} }
function Invoke-InitializeModule function Invoke-InitializeModule
@@ -239,8 +239,9 @@ function Invoke-InitializeModule
PreReplaceCommand = { Start-PreReplaceEnrollmentRestrictions @args } # Note: Uses same PreReplaceCommand as restrictions PreReplaceCommand = { Start-PreReplaceEnrollmentRestrictions @args } # Note: Uses same PreReplaceCommand as restrictions
PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args } # Note: Uses same PostReplaceCommand as restrictions PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args } # Note: Uses same PostReplaceCommand as restrictions
PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args } # Note: Uses same PreFilesImportCommand as restrictions PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args } # Note: Uses same PreFilesImportCommand as restrictions
PostListCommand = { Start-PostListESP @args }
#PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args } # Note: Uses same PreUpdateCommand as restrictions #PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args } # Note: Uses same PreUpdateCommand as restrictions
QUERYLIST = "`$filter=endsWith(id,'Windows10EnrollmentCompletionPageConfiguration')" #QUERYLIST = "`$filter=endsWith(id,'Windows10EnrollmentCompletionPageConfiguration')"
Permissons=@("DeviceManagementServiceConfig.ReadWrite.All") Permissons=@("DeviceManagementServiceConfig.ReadWrite.All")
SkipRemoveProperties = @('Id') SkipRemoveProperties = @('Id')
AssignmentsType = "enrollmentConfigurationAssignments" AssignmentsType = "enrollmentConfigurationAssignments"
@@ -253,19 +254,21 @@ function Invoke-InitializeModule
Id = "EnrollmentRestrictions" Id = "EnrollmentRestrictions"
API = "/deviceManagement/deviceEnrollmentConfigurations" API = "/deviceManagement/deviceEnrollmentConfigurations"
ViewID = "IntuneGraphAPI" ViewID = "IntuneGraphAPI"
QUERYLIST = "`$filter=not endsWith(id,'Windows10EnrollmentCompletionPageConfiguration')" #QUERYLIST = "`$filter=not endsWith(id,'Windows10EnrollmentCompletionPageConfiguration')"
PostExportCommand = { Start-PostExportEnrollmentRestrictions @args } PostExportCommand = { Start-PostExportEnrollmentRestrictions @args }
PreImportCommand = { Start-PreImportEnrollmentRestrictions @args } PreImportCommand = { Start-PreImportEnrollmentRestrictions @args }
PreDeleteCommand = { Start-PreDeleteEnrollmentRestrictions @args } PreDeleteCommand = { Start-PreDeleteEnrollmentRestrictions @args }
PreReplaceCommand = { Start-PreReplaceEnrollmentRestrictions @args } PreReplaceCommand = { Start-PreReplaceEnrollmentRestrictions @args }
PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args } PostReplaceCommand = { Start-PostReplaceEnrollmentRestrictions @args }
PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args } PreFilesImportCommand = { Start-PreFilesImportEnrollmentRestrictions @args }
PostListCommand = { Start-PostListEnrollmentRestrictions @args }
#PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args } #PreUpdateCommand = { Start-PreUpdateEnrollmentRestrictions @args }
PropertiesToRemoveForUpdate = @('priority') PropertiesToRemoveForUpdate = @('priority')
Permissons=@("DeviceManagementServiceConfig.ReadWrite.All") Permissons=@("DeviceManagementServiceConfig.ReadWrite.All")
SkipRemoveProperties = @('Id') SkipRemoveProperties = @('Id')
AssignmentsType = "enrollmentConfigurationAssignments" AssignmentsType = "enrollmentConfigurationAssignments"
GroupId = "EnrollmentRestrictions" GroupId = "EnrollmentRestrictions"
ViewProperties = @("displayName","platformType","description","Id")
}) })
Add-ViewItem (New-Object PSObject -Property @{ Add-ViewItem (New-Object PSObject -Property @{
@@ -405,8 +408,10 @@ function Invoke-InitializeModule
Expand="categories,assignments" # ODataMetadata is set to minimal so assignments can't be autodetected Expand="categories,assignments" # ODataMetadata is set to minimal so assignments can't be autodetected
ODataMetadata="minimal" # categories property not supported with ODataMetadata full ODataMetadata="minimal" # categories property not supported with ODataMetadata full
PostFileImportCommand = { Start-PostFileImportApplications @args } PostFileImportCommand = { Start-PostFileImportApplications @args }
PostCopyCommand = { Start-PostCopyApplications @args }
PreUpdateCommand = { Start-PreUpdateApplication @args } PreUpdateCommand = { Start-PreUpdateApplication @args }
PreImportCommand = { Start-PreImportCommandApplication @args } PreImportCommand = { Start-PreImportCommandApplication @args }
DetailExtension = { Add-DetailExtensionApplications @args }
GroupId = "Apps" GroupId = "Apps"
}) })
@@ -1322,10 +1327,13 @@ function Add-ScriptExportExtensions
{ {
param($form, $buttonPanel, $index = 0) param($form, $buttonPanel, $index = 0)
$ctrl = $form.FindName("chkExportScript")
if(-not $ctrl)
{
$xaml = @" $xaml = @"
<StackPanel $($global:wpfNS) Orientation="Horizontal" Margin="0,0,5,0"> <StackPanel $($global:wpfNS) Orientation="Horizontal" Margin="0,0,5,0">
<Label Content="Export script" /> <Label Content="Export script" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Export the powershell script to a ps1 file" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Export the script associated with PowerShell or Shell profiles" />
</StackPanel> </StackPanel>
"@ "@
$label = [Windows.Markup.XamlReader]::Parse($xaml) $label = [Windows.Markup.XamlReader]::Parse($xaml)
@@ -1333,9 +1341,11 @@ function Add-ScriptExportExtensions
$global:chkExportScript = [System.Windows.Controls.CheckBox]::new() $global:chkExportScript = [System.Windows.Controls.CheckBox]::new()
$global:chkExportScript.IsChecked = $true $global:chkExportScript.IsChecked = $true
$global:chkExportScript.VerticalAlignment = "Center" $global:chkExportScript.VerticalAlignment = "Center"
$global:chkExportScript.Name = "chkExportScript"
@($label, $global:chkExportScript) @($label, $global:chkExportScript)
} }
}
function Start-PostExportScripts function Start-PostExportScripts
{ {
@@ -1672,14 +1682,38 @@ function Start-PreImportAssignmentsAppConfiguration
#endregon #endregon
#region Applications #region Applications
function Start-PostCopyApplications
{
param($objCopyFrom, $objNew, $objectType)
Start-ImportApp $objNew
Write-Status ""
}
function Start-PostFileImportApplications function Start-PostFileImportApplications
{ {
param($obj, $objectType, $file) param($obj, $objectType, $file)
$tmpObj = Get-Content -LiteralPath $file | ConvertFrom-Json $tmpObj = Get-Content -LiteralPath $file | ConvertFrom-Json
if(-not $tmpObj.'@odata.type') { return } if(-not ($obj.PSObject.Properties | Where Name -eq '@odata.type'))
{
# Add @odata.type property if it is missing. Required by app package import
$obj | Add-Member -MemberType NoteProperty -Name '@odata.type' -Value $objectType.'@odata.type'
}
Start-ImportApp $obj
}
function local:Start-ImportApp
{
param($obj, $packageFile = $null)
if(-not $obj.'@odata.type') { return }
if($null -eq $packageFile)
{
$pkgPath = Get-SettingValue "EMIntuneAppPackages" $pkgPath = Get-SettingValue "EMIntuneAppPackages"
if(-not $pkgPath -or [IO.Directory]::Exists($pkgPath) -eq $false) if(-not $pkgPath -or [IO.Directory]::Exists($pkgPath) -eq $false)
@@ -1689,23 +1723,19 @@ function Start-PostFileImportApplications
} }
$packageFile = "$($pkgPath)\$($obj.fileName)" $packageFile = "$($pkgPath)\$($obj.fileName)"
}
$fi = [IO.FileInfo]$packageFile
if([IO.File]::Exists($packageFile) -eq $false) if($fi.Exists -eq $false)
{ {
Write-LogDebug "Package source file $packageFile not found" 2 Write-LogDebug "Package source file $($fi.FullName) not found" 2
return return
} }
Write-Status "Import appliction package file $($obj.fileName)" Write-Status "Import appliction package file $($fi.FullName)"
Write-Log "Import application file '$($packageFile)' for $($obj.displayName)" Write-Log "Import application file '$($($fi.FullName))' for $($obj.displayName)"
if(-not ($obj.PSObject.Properties | Where Name -eq '@odata.type')) $appType = $obj.'@odata.type'.Trim('#')
{
# Add @odata.type property if it is missing. Required by app package import
$obj | Add-Member -MemberType NoteProperty -Name '@odata.type' -Value $tmpObj.'@odata.type'
}
$appType = $tmpObj.'@odata.type'.Trim('#')
if($appType -eq "microsoft.graph.win32LobApp") if($appType -eq "microsoft.graph.win32LobApp")
{ {
@@ -1760,6 +1790,55 @@ function Start-PreImportCommandApplication
} }
} }
function Add-DetailExtensionApplications
{
param($form, $buttonPanel, $index = 0)
$btnUpload = New-Object System.Windows.Controls.Button
$btnUpload.Content = 'Upload'
$btnUpload.Name = 'btnUploadAppfile'
$btnUpload.Margin = "0,0,5,0"
$btnUpload.Width = "100"
$btnUpload.Add_Click({
if($global:dgObjects.SelectedItem.Object.publishingState -ne "notPublished")
{
# Only allow upload of not published apps
# Use portal to replace app file...
if(([System.Windows.MessageBox]::Show("Are you sure you want to upload a new file for the app?`n`nApplication:`n$($global:dgObjects.SelectedItem.Object.displayName)", "Update app file?", "YesNo", "Warning")) -ne "Yes")
{
return
}
}
$pkgPath = Get-SettingValue "EMIntuneAppPackages"
$of = [System.Windows.Forms.OpenFileDialog]::new()
$of.FileName = $global:dgObjects.SelectedItem.Object.fileName
$of.DefaultExt = "*.intunewin"
$of.Filter = "Intune Win32 (*.intunewin)|*.*"
$of.Multiselect = $false
if($pkgPath -and [IO.Directory]::Exists($pkgPath))
{
$of.InitialDirectory = $pkgPath
}
if($of.ShowDialog() -eq "OK")
{
Write-Status "Import $($global:dgObjects.SelectedItem.Object.displayName) file"
Start-ImportApp $global:dgObjects.SelectedItem.Object $of.FileName
Write-Status ""
}
})
$tmp = $form.FindName($buttonPanel)
if($tmp)
{
$tmp.Children.Insert($index, $btnUpload)
}
}
#endregion #endregion
#region Group Policy/Administrative Templates functions #region Group Policy/Administrative Templates functions
@@ -2241,6 +2320,14 @@ function Start-PostExportESP
Save-EMDefaultPolicy $obj $objectType $path Save-EMDefaultPolicy $obj $objectType $path
} }
} }
function Start-PostListESP
{
param($objList, $objectType)
# endswith not working so filter them out
$objList | Where { $_.Object.'@OData.Type' -eq '#microsoft.graph.windows10EnrollmentCompletionPageConfiguration' }
}
#endregion #endregion
#region Enrollment Restriction functions #region Enrollment Restriction functions
@@ -2326,6 +2413,19 @@ function Start-PreUpdateEnrollmentRestrictions
Remove-Property $obj "priority" Remove-Property $obj "priority"
} }
function Start-PostListEnrollmentRestrictions
{
param($objList, $objectType)
# endswith not working so filter them out
$objList | Where {
($_.Object.'@OData.Type' -eq '#microsoft.graph.deviceEnrollmentPlatformRestrictionConfiguration' -or
$_.Object.'@OData.Type' -eq '#microsoft.graph.deviceEnrollmentLimitConfiguration' -or
$_.Object.'@OData.Type' -eq '#microsoft.graph.deviceEnrollmentPlatformRestrictionsConfiguration') -and
$_.Object.id -notlike "*_PlatformRestrictions" -and $_.Object.platformType -ne "WindowsPhone" -and $_.Object.platformType -ne "AndroidAosp"
}
}
#endregion #endregion
#region ScopeTags #region ScopeTags
@@ -2596,6 +2696,7 @@ function Add-ConditionalAccessImportExtensions
$global:cbImportCAState.Margin="0,5,0,0" $global:cbImportCAState.Margin="0,5,0,0"
$global:cbImportCAState.HorizontalAlignment="Left" $global:cbImportCAState.HorizontalAlignment="Left"
$global:cbImportCAState.Width=250 $global:cbImportCAState.Width=250
$global:cbImportCAState.Name = "cbImportCAState"
@($label, $global:cbImportCAState) @($label, $global:cbImportCAState)
} }

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.1.2' '3.4.0'
} }
######################################################################################### #########################################################################################
@@ -209,6 +209,8 @@ function Copy-Win32LOBPackage
Remove-Item -Path $tmpFile Remove-Item -Path $tmpFile
$fi = [IO.FileInfo]$intunewinFile
# Get encryption info from detection.xml and build encryptionInfo object # Get encryption info from detection.xml and build encryptionInfo object
$encryptionInfo = @{} $encryptionInfo = @{}
@@ -222,7 +224,7 @@ function Copy-Win32LOBPackage
$tmpIntunewinPath = ([IO.Path]::GetTempPath() + [Guid]::NewGuid().ToString("n")) $tmpIntunewinPath = ([IO.Path]::GetTempPath() + [Guid]::NewGuid().ToString("n"))
mkdir $tmpIntunewinPath | Out-Null mkdir $tmpIntunewinPath | Out-Null
$tmpIntunewinFile = $tmpIntunewinPath + "\" + $DetectionXML.ApplicationInfo.FileName $tmpIntunewinFile = $tmpIntunewinPath + "\" + $fi.Name
# Extract the encrypted file from the intunewin file # Extract the encrypted file from the intunewin file
Export-IntunewinFileObject $intunewinFile $DetectionXML.ApplicationInfo.FileName $tmpIntunewinFile Export-IntunewinFileObject $intunewinFile $DetectionXML.ApplicationInfo.FileName $tmpIntunewinFile
@@ -250,8 +252,8 @@ function Add-FileToIntuneApp
{ {
param($appId, $appType, $appFile, $fileBody) param($appId, $appType, $appFile, $fileBody)
$contentVersion = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions" $contentVersion = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions" -HttpMethod POST -Content "{}"
$contentVersionId = $contentVersion.value[0].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)
if(-not $fileObj) if(-not $fileObj)
@@ -274,10 +276,12 @@ function Add-FileToIntuneApp
Wait-IntuneFileState "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" "CommitFile" Wait-IntuneFileState "/deviceAppManagement/mobileApps/$appId/$appType/contentVersions/$contentVersionId/files/$($fileObj.Id)" "CommitFile"
$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) $reponse = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$appId" -HttpMethod PATCH -Content (ConvertTo-Json $commitAppBody -Depth 5)

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.3.2' '3.4.0'
} }
$global:msalAuthenticator = $null $global:msalAuthenticator = $null
@@ -234,7 +234,7 @@ function Get-MSALUserInfo
{ {
Write-Log "Get current user" Write-Log "Get current user"
$tmpMe = MSGraph\Invoke-GraphRequest -Url "ME" -SkipAuthentication -ODataMetadata "Skip" $tmpMe = MSGraph\Invoke-GraphRequest -Url "ME" -SkipAuthentication -ODataMetadata "Skip"
if($tmpMe.creationType -ne "Invitation") if($null -ne $tmpMe -and $tmpMe.creationType -ne "Invitation")
{ {
### Only get user info from home tenant ### Only get user info from home tenant
$global:Me = $tmpMe $global:Me = $tmpMe
@@ -342,6 +342,12 @@ function Install-MSALDependencyModule
{ {
param($moduleToInstall, $button) param($moduleToInstall, $button)
if($global:hideUI -eq $true)
{
Write-Log "Cannot install MSAL module in Silent mode"
return
}
$forceUserInstallation = $false $forceUserInstallation = $false
if($global:chkCurrentUser.IsChecked -eq $false -and (Get-IsAdmin) -eq $false) if($global:chkCurrentUser.IsChecked -eq $false -and (Get-IsAdmin) -eq $false)
@@ -541,6 +547,38 @@ function Add-MSALPrereq
} }
} }
function Connect-MSALClientApp
{
param($clientId, $tenantId, $secret, $Certificate)
$scopes = [String[]]".default"
if(-not $script:MSALApp)
{
$authority = "https://login.microsoftonline.com/$tenantId"
#$redirectUri = "http://localhost"
if($secret)
{
$ClientApplicationBuilder = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]::Create($clientId).WithClientSecret($ClientSecret).WithAuthority([URI]::new($authority)) #.WithRedirectUri($redirectUri)
}
elseif($Certificate)
{
$ClientApplicationBuilder = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]::Create($clientId).WithCertificate($ClientSecret).WithAuthority([URI]::new($authority)) #.WithRedirectUri($redirectUri)
}
else
{
return
}
$script:MSALApp = $ClientApplicationBuilder.Build()
}
if($script:MSALApp)
{
$accessTokenRequest = $script:MSALApp.AcquireTokenForClient($scopes)
$global:MSALToken = Get-MsalAuthenticationToken $accessTokenRequest
}
}
function Get-MsalAuthenticationToken function Get-MsalAuthenticationToken
{ {
param($aquireTokenObj) param($aquireTokenObj)
@@ -689,6 +727,9 @@ function Connect-MSALUser
[switch] [switch]
$Interactive, $Interactive,
[switch]
$ClientApp,
$Account, $Account,
$Tenant $Tenant
@@ -697,6 +738,24 @@ function Connect-MSALUser
# No login during first time the app is started # No login during first time the app is started
if($global:FirstTimeRunning -and $global:MainAppStarted -eq $false) { return } if($global:FirstTimeRunning -and $global:MainAppStarted -eq $false) { return }
if($global:hideUI -eq $true)
{
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 batch login" 3
}
return
}
Write-LogDebug "Authenticate" Write-LogDebug "Authenticate"
if(-not $global:appObj.ClientId) if(-not $global:appObj.ClientId)

File diff suppressed because it is too large Load Diff

View File

@@ -29,12 +29,48 @@ Before starting the app:
Before logging on: Before logging on:
* The app will use the Intune PowerShell Azure Enterprise Application by default but request all permissions required by the script. The will most likely cause a consent prompt since it uses more permission than the Intune module. Enable **Use Default Permissions** in Settings to only request the current permissions granted to the Enterprise App. * The app will use the Intune PowerShell Azure Enterprise Application by default and only use the permissions granted to that appliction. Disable **Use Default Permissions** in Settings to request additional permissions. The will cause a consent prompt if one or more permissions are missing for the app.
**Note:** Using default permission might reduce functionality e.g. permissions for one or more object types might be missing **Note:** If the app has not been approved for the organization, a consent prompt will be disablyed.
* Enable **Get Tenant List** in Settings if accessing multiple environments with the same account e.g. a guest account in other tenants. This might cause a Consent prompt * Enable **Get Tenant List** in Settings if accessing multiple environments with the same account e.g. a guest account in other tenants. This might cause a Consent prompt
Start the script by running **Start.cmd**, **Start-WithJson.cmd**, **Start-WithConsole.cmd** or **Start-IntuneManagement.ps1**. **Start-WithConsole.cmd** will leave the command prompt window open so you can see the log while running the app. Start the script by running **Start.cmd**, **Start-WithJson.cmd**, **Start-WithConsole.cmd** or **Start-IntuneManagement.ps1**. **Start-WithConsole.cmd** will leave the command prompt window open so you can see the log while running the app.
## Silent Batch Job (Beta)
The script can be executed without UI. This is to support DevOps environment.
Silent batch job is supported by the following features:
* Export
* Import
The Silent Batch Job feature requires an Azure App to be configured with a secret or a certificate. The app must also be delegated with the required permissions to Graph objects used by the tool.
The silent feature uses an exported json file with settings for the specified operation. This file can be generated in the Bulk Export/Import forms. Required settings for the silent job is configured in the form and then exported to a file. The path to the file is then passed on the command line. The file can be used for multiple environments if the **Add company name to the path** option is selected. Note that this requires that the appmust have at least read permission on the Organizations API.
The following variables can be used in the path and filename:
* %Date% - This will be translated to yyyy-MM-dd format (eg 2020-02-27)
* %DateTime% - This will be translated to yyyyMMdd-HHmm format (eg 20200227-1750)
* %Organization% - Name of the tenant
* Any environment variable
The tool will by default generate the files; `BulkExport.json` and `BulkImport.json`. These files can be merged into one file but that must be done manually. These files can also be edited manually. Each setting represents a control in the UI form. When the script is triggered silently, it will create the form in the background, populate it with the values from the file and then trigger the bulk function.
**Note** The Silent Batch feature use settings configured in the UI. If this is triggered in a DevOps envionment, it is recommended to generate a settings JSON file with the desired settings and then use that in the DevOps environment
The app authentication can either be passed on the command line or stored in the settings. Tennant Settings is required for multiple environments.
**Command line example:**
Start-IntuneManagement.ps1 -Silent -TenantId "<*TenantID*>" -SilentBatchFile <*PathToFile*> [-AppId <*AppId*>] [-Secret <*Secret*> | -Certificate <*CertThumb*>]
Start-IntuneManagement.ps1 -Silent -SilentBatchFile "C:\Temp\BatchImport.json" -TenantId "00000000-0000-0000-0000-000000000000" -AppId "00000000-0000-0000-0000-000000000001" -Secret "KJ76P~B9###9-.8I####-_MySecret"
**Setting example:**
Start-IntuneManagement.ps1 -Silent -SilentBatchFile "C:\Temp\BatchImport.json" -TenantId "00000000-0000-0000-0000-000000000000"
## Documentation ## Documentation
This script has an extension that can document profiles and policies in Intune. The output is using the same language strings as the Intune portal. This script has an extension that can document profiles and policies in Intune. The output is using the same language strings as the Intune portal.
@@ -275,7 +311,7 @@ When multi tenant settings is Enabled/Disabled, the Profile Info is not updated
The *List Applications* API might not list an imported app immediately after the import. Click *Refresh* to reload the application objects. The *List Applications* API might not list an imported app immediately after the import. Click *Refresh* to reload the application objects.
~~When using the filter box to search for items, the checkbox must be clicked twice to select an item.~~</br /> ~~When using the filter box to search for items, the checkbox must be clicked twice to select an item.~~<br />
Issue fixed in 3.3.2 Issue fixed in 3.3.2
Logout will only clear the token from cache and not from the browser e.g. if login is triggered after a logout, the user will still be listed in the 'Select user' dialog. Logout will only clear the token from cache and not from the browser e.g. if login is triggered after a logout, the user will still be listed in the 'Select user' dialog.

View File

@@ -1,5 +1,91 @@
# Release Notes # Release Notes
## 3.4.0 - 2022-03-01
**New features**
- **Silent batch job**
Export/Import can now be executed without UI<br />
See documentation for full requirements
**Note** Please report any issues to [Issue 39](https://github.com/Micke-K/IntuneManagement/issues/39)
This is based on [Issue 39](https://github.com/Micke-K/IntuneManagement/issues/39)
- **Documentation**
- Support for documenting an environment based on exported files<br />
Select the **Source files** folder in the Documentation Types (Bulk menu) dialog.
Note: Some values will NOT be included. These are referenced values and not a property on the object eg Certificate on a VPN profile, Root certificate on a SCEP profile etc. These values will be documented with ##TBD...<br />
This is based on [Issue 37](https://github.com/Micke-K/IntuneManagement/issues/37)
- Support for attaching the json file for the object in the word document
- Support for documentation output level (Word)<br />
Documenting the full environment can create a document with 1000+ pages depending on the amount of profiles and policies. The documentation output level can now be used to reduce the document size. The output level options are:
- Full - Document every single value
- Limited - Set max value and truncate size for documentation and as option, attach the original value as a text document to the value cell e.g. truncate all values over 500 characters to 10 characters and attach the full value as a text file in the document. This will reduce documentation size for profiles with large XML strings like ADMX ingestion
- Basic - Only include the Basic and Assignments tables in the documentation
- Added support for documenting Filters
- Added UI for configuring custom columns<br />
This can now be done in the Detail View<br />
This is based on [Issue 30](https://github.com/Micke-K/IntuneManagement/issues/30)<br />
- Added support for updating Name and Descriptions of the object in Detail View<br />
This is As-Is functionality. Not all object types have been tested.<br />
It is recommended to use the portal for this.<br />
This is based on a private request<br />
- Added support for copying an app
**Note** This requires that the **App packages folder** is specified in Settings and that the file for the app is available in that folder. If the app file is missing it can be uploaded manually in the Details view
This is based on [Issue 42](https://github.com/Micke-K/IntuneManagement/issues/42)
- Added support for manually upload an app file via the Details view
**Fixes**
- **Documentation**<br />
- Updated documentation files with support for new properties and removed unused values (Windows Updates, Windows Feature Updates etc.)
- Fixed an issue where VPN profiles in some cases was missing the Base VPN settings
- Fixed an issue when using a template<br />
A table of content will no longer be created. That should be included in the template
- **Application import**
- Minor change in the app Win32 upload functionality to align to portal APIs
- The File Name is now updated to be based on the actual uploaded file
**Important** Please create an issue if there are any problems
- Fixed an issue where ESP and Enrolment Restriction objects were not listed
The original filters stopped working
**Note** The Enrolment restrictions has changed in Graph. There is now one object for each OS type. So there will be multiple restriction objects exported. platformType column was added to identify each object
This is based on [Issue 41](https://github.com/Micke-K/IntuneManagement/issues/41)
- Minor fixes in Import/Export extensions - Required for silent batch job support
- Fixed an issue where PostListCommand was not triggered
- Additional Endpoint Security columns were not listed
- Azure Branding objects was missing the language column <br />
<br />
- Fixed issue where the Document button was not enabled when **Select All** was clicked (without selecting an object first)
This is based on [Issue 36](https://github.com/Micke-K/IntuneManagement/issues/36)
- Other minor bug fixes to support the new features
## 3.3.3 - 2021-12-15 ## 3.3.3 - 2021-12-15
**Fixes** **Fixes**
@@ -80,7 +166,7 @@ This is a **BETA** release. It contains core changes for Authentication and Sett
**Default Settings Value Changes** **Default Settings Value Changes**
* **Use Default Permissions** is now set to Disabled by default. With the Tenant Specific Settings feature, this can now be enabled globally or per tenant. Consultants accessing multiple environments might not have permissions to grant consent requests so this could be enabled on a global level and then disabled for tenants where the permissions can be added. * **Use Default Permissions** is now set to Enabled by default. With the Tenant Specific Settings feature, this can now be enabled globally or per tenant. Consultants accessing multiple environments might not have permissions to grant consent requests so this could be enabled on a global level and then disabled for tenants where the permissions can be added.
**Fixes** **Fixes**

View File

@@ -5,7 +5,20 @@ param(
[switch] [switch]
$JSonSettings, $JSonSettings,
[string] [string]
$JSonFile $JSonFile,
[switch]
$Silent,
[string]
$SilentBatchFile = "",
[string]
$TenantId,
[string]
$AppId,
[string]
$Secret,
[string]
$Certificate
) )
Import-Module ($PSScriptRoot + "\CloudAPIPowerShellManagement.psd1") -Force Import-Module ($PSScriptRoot + "\CloudAPIPowerShellManagement.psd1") -Force
Initialize-CloudAPIManagement -View "IntuneGraphAPI" -ShowConsoleWindow:($ShowConsoleWindow) -JSonSettings:($JSonSettings) -JSonFile $JSonFile $param = $PSBoundParameters
Initialize-CloudAPIManagement -View "IntuneGraphAPI" @param

View File

@@ -29,6 +29,65 @@
</Style.Triggers> </Style.Triggers>
</Style> </Style>
<Style x:Key='ErrorControl' TargetType='ContentControl'>
<Setter Property='Template'>
<Setter.Value>
<ControlTemplate TargetType='ContentControl'>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Width="16" Height="16" ToolTip="{Binding ToolTip}" Name="errorIcon" Visibility="Collapsed">
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M8,16C3.589,16 0,12.411 0,8 0,3.589 3.589,0 8,0 12.411,0 16,3.589 16,8 16,12.411 12.411,16 8,16" />
<GeometryDrawing Brush="#FFE41400" Geometry="F1M9,10L7,10 7,3 9,3z M9,13L7,13 7,11 9,11z M8,1C4.134,1 1,4.134 1,8 1,11.865 4.134,15 8,15 11.865,15 15,11.865 15,8 15,4.134 11.865,1 8,1" />
<GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M9,11L7,11 7,13 9,13z M9,10L7,10 7,3 9,3z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
<ContentPresenter Grid.Column="1" Name="errorControl" />
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource self},Path=Tag}" Value="True">
<Setter TargetName="errorIcon" Property="Visibility" Value="Visible" />
</DataTrigger>
</ControlTemplate.Triggers>
<ControlTemplate.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}" Value="True">
<Setter Property="Border.BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</ControlTemplate.Resources>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ErrorBorder" TargetType="Control">
<Style.Triggers>
<DataTrigger Binding="{Binding HasErrors}" Value="True">
<Setter Property="Border.BorderBrush" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="HoverUnderlineStyleWithBackground" TargetType="TextBlock"> <Style x:Key="HoverUnderlineStyleWithBackground" TargetType="TextBlock">
<Style.Triggers> <Style.Triggers>
<Trigger Property="IsMouseOver" Value="True"> <Trigger Property="IsMouseOver" Value="True">
@@ -131,4 +190,5 @@
</Setter.Value> </Setter.Value>
</Setter> </Setter>
</Style> </Style>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -108,9 +108,19 @@
--> -->
</Grid > </Grid >
<StackPanel Name="spExportSubMenu" Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row='2' Grid.ColumnSpan='2' > <Grid Grid.Row='2' Grid.ColumnSpan='2' >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" >
<Button Name="btnExportSettingsForSilentExport" Content="Save" Width='100' Margin="5,0,0,0" ToolTip="Save settings for batch job" />
</StackPanel>
<StackPanel Name="spExportSubMenu" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right" >
<Button Name="btnExport" Content="Export" Width='100' Margin="5,0,0,0" /> <Button Name="btnExport" Content="Export" Width='100' Margin="5,0,0,0" />
<Button Name="btnClose" Content="Close" Width='100' Margin="5,0,0,0" /> <Button Name="btnClose" Content="Close" Width='100' Margin="5,0,0,0" />
</StackPanel> </StackPanel>
</Grid >
</Grid > </Grid >

View File

@@ -118,9 +118,19 @@
</Grid> </Grid>
<StackPanel Name="spImportSubMenu" Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row='2' Grid.ColumnSpan='2' > <Grid Grid.Row='2' Grid.ColumnSpan='2' >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" >
<Button Name="btnExportSettingsForSilentImport" Content="Save" Width='100' Margin="5,0,0,0" ToolTip="Save settings for batch job" />
</StackPanel>
<StackPanel Name="spImportSubMenu" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right" >
<Button Name="btnImport" Content="Import" Width='100' Margin="5,0,0,0" /> <Button Name="btnImport" Content="Import" Width='100' Margin="5,0,0,0" />
<Button Name="btnClose" Content="Close" Width='100' Margin="5,0,0,0" /> <Button Name="btnClose" Content="Close" Width='100' Margin="5,0,0,0" />
</StackPanel> </StackPanel>
</Grid>
</Grid > </Grid >

View File

@@ -17,6 +17,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>
@@ -65,6 +67,24 @@
</StackPanel> </StackPanel>
<CheckBox Grid.Column='1' Grid.Row='5' Name='chkSetDefaultValue' VerticalAlignment="Center" IsChecked="true" /> <CheckBox Grid.Column='1' Grid.Row='5' Name='chkSetDefaultValue' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="6" Grid.ColumnSpan="2" Name="spDocumentFromFolder">
<Label Content="Source files" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Create documentation from exported files" />
</StackPanel>
<Grid Grid.Row='7' Margin="5,0,0,0" Grid.ColumnSpan="2" Name="grdDocumentFromFolder">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="" Name="txtDocumentFromFolder" />
<Button Grid.Column="2" Name="browseDocumentFromFolder" Padding="5,0,5,0" Width="50" ToolTip="Browse for export folder">...</Button>
</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">

View File

@@ -23,6 +23,7 @@
<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>
@@ -30,6 +31,17 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid Grid.ColumnSpan="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="TitleColumn" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="0"> <StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="0">
<Label Content="Output Properties" /> <Label Content="Output Properties" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the output type. Simple will only add Value and Name for Settings. Extended will output the same as Raw Output. Use Custom to select custom properties" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the output type. Simple will only add Value and Name for Settings. Extended will output the same as Raw Output. Use Custom to select custom properties" />
@@ -43,6 +55,58 @@
</StackPanel> </StackPanel>
<TextBox Text="" Name="txtWordCustomProperties" Margin="0,5,5,5" Grid.Row="1" Grid.Column="1"/> <TextBox Text="" Name="txtWordCustomProperties" Margin="0,5,5,5" Grid.Row="1" Grid.Column="1"/>
</Grid>
<Grid Grid.Row="1" Grid.ColumnSpan="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="TitleColumn" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="0">
<Label Content="Output Level" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the output level. Full will document full value of each setting, Limited will truncate the value if more than 100 characters and Basic will only include the basic information and assignments but no settings" />
</StackPanel>
<ComboBox Name="cbWordDocumentationLevel" Margin="0,5,0,0" MinWidth="250" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left"
DisplayMemberPath="Name" SelectedValuePath="Value" />
<Grid Grid.Row="1" Grid.ColumnSpan="2" Name="gdWordDocumentationLimitOptions">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="TitleColumn" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" >
<Label Content="Attach full value" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Attach value as a text file if exceeds the Max value length" />
</StackPanel>
<CheckBox Grid.Column='1' Name='chkWordDocumentationLimitAttatch' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="1">
<Label Content="Max value length" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the max sting length of the value. Value over this size will be truncated. Default is 100" />
</StackPanel>
<TextBox Text="" Name="txtWordDocumentationLimitMaxLength" Margin="0,5,5,5" Width="100" Grid.Row="1" HorizontalAlignment="Left" Grid.Column="1"/>
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="2">
<Label Content="Truncated value length" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the length for the truncate size. Default is same size as Max value length. Specify 0 to skip tuncated text and only include the attached value (must be enabled)" />
</StackPanel>
<TextBox Text="" Name="txtWordDocumentationLimitTruncateLength" Margin="0,5,5,5" Width="100" HorizontalAlignment="Left" Grid.Row="2" Grid.Column="1"/>
</Grid>
</Grid>
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row="2"> <StackPanel Orientation="Horizontal" Margin="0,0,5,0" Grid.Row="2">
<Label Content="Word document template" /> <Label Content="Word document template" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="The document template (*.dotx) file to use for the documentation. Normal.dotx will be used if this is empty" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="The document template (*.dotx) file to use for the documentation. Normal.dotx will be used if this is empty" />
@@ -167,6 +231,12 @@
</StackPanel> </StackPanel>
<CheckBox Grid.Column='1' Grid.Row='19' Name='chkWordExcludeScriptSignature' VerticalAlignment="Center" IsChecked="true" /> <CheckBox Grid.Column='1' Grid.Row='19' Name='chkWordExcludeScriptSignature' VerticalAlignment="Center" IsChecked="true" />
<StackPanel Orientation="Horizontal" Grid.Row='20' Margin="0,0,5,0">
<Label Content="Attatch Json file" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Attatch the Json file to the documentation" />
</StackPanel>
<CheckBox Grid.Column='1' Grid.Row='20' Name='chkWordAttatchJsonFile' VerticalAlignment="Center" IsChecked="false" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="21"> <StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="21">
<Label Content="Script table style" /> <Label Content="Script table style" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the table style to use for scripts. Ducument table style will be use as default" /> <Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Specify the table style to use for scripts. Ducument table style will be use as default" />

View File

@@ -1,4 +1,6 @@
<Grid Margin="0,5,0,5" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <TabControl SelectedIndex="0" Margin="0,5,0,5" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TabItem Header="Json">
<Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
@@ -22,3 +24,127 @@
<Button Name="btnCopy" MinWidth="100" Margin="0,0,0,0" ToolTip="Copy text to clipboard">Copy</Button> <Button Name="btnCopy" MinWidth="100" Margin="0,0,0,0" ToolTip="Copy text to clipboard">Copy</Button>
</WrapPanel> </WrapPanel>
</Grid> </Grid>
</TabItem>
<TabItem Header="Settings">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="0" HorizontalAlignment="Left">
<Label Content="Name" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Name of the object" />
</StackPanel>
<TextBox Name="txtObjectName" Margin="0,5,5,0" Grid.Row="0" Grid.Column="1" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="1" HorizontalAlignment="Left">
<Label Content="Description" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Name of the object" />
</StackPanel>
<TextBox Name="txtObjectDescription" Margin="0,5,5,0" Grid.Row="1" Grid.Column="1" AcceptsReturn="True" Height="100" />
<StackPanel Orientation="Horizontal" Grid.Column="1" Margin="5,5,5,0" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Right">
<Button Name="btnObjectSettingsSave" Content="Save" Margin="0,0,0,0" Width="100" />
</StackPanel>
</Grid>
</TabItem>
<TabItem Header="Columns">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" >
<Label Content="Properties" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Properties of the current object" />
</StackPanel>
<ListBox Name="lstObjectProperties" SelectionMode="Single" Grid.Row="1" Grid.RowSpan="99" MinWidth="100" DisplayMemberPath="Name">
</ListBox>
<StackPanel Grid.Row="1" Grid.Column="1" Margin="5,0,5,0">
<Button Content=">" Name="btnObjectColumnsAdd" Width="50" ToolTip="Add property" />
</StackPanel>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Grid.Row="1" Grid.Column="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListBox Name="lstObjectColumns" SelectionMode="Single" Grid.Row="0" MinWidth="150" DisplayMemberPath="Property" Height="200">
</ListBox>
<StackPanel Grid.Column="1" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center">
<Button Content="Up" Name="btnObjectColumnsMoveUp" Width="50" ToolTip="Move the selected column up" />
<Button Content="Down" Name="btnObjectColumnsMoveDown" Width="50" ToolTip="Move the selected column down" Margin="0,5,0,0"/>
<Button Content="Delete" Name="btnObjectColumnsDelete" Width="50" ToolTip="Delete the selected column" Margin="0,5,0,0"/>
<Button Content="Clear" Name="btnObjectColumnsClear" Width="50" ToolTip="Delete all custom columns" Margin="0,5,0,0"/>
</StackPanel>
<CheckBox Grid.Row='1' Name='chkObjectColumnOverride' Grid.ColumnSpan="2" Content="Override default columns" VerticalAlignment="Center" ToolTip="Do not add default columns first. If this is checked then only the properties in the list will be displayed" />
<Grid Grid.Row="3" Grid.ColumnSpan="2" Name="grdObjectColumns">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="0" HorizontalAlignment="Left">
<Label Content="Property" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Property to display. Sub properties and array values are supported eg files[0].displayName" />
</StackPanel>
<TextBox Name="txtObjectColumnsProperty" Text="{Binding Property}" Margin="0,5,5,0" Grid.Row="0" Grid.Column="1" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="1">
<Label Content="Header" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Header for the property. Name of property will be used if not specified" />
</StackPanel>
<TextBox Name="txtObjectColumnsHeader" Text="{Binding Header}" Margin="0,5,5,0" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" />
<StackPanel Orientation="Horizontal" Margin="0,5,5,0" Grid.Row="2" HorizontalAlignment="Left">
<Label Content="Current settings:" />
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="Current property settings. Only updated when saved" />
</StackPanel>
<Label Name="lblObjectColumnsConfig" Content="" Margin="0,0,5,0" Grid.Row="3" />
<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="btnObjectColumnsSave" Content="Save" Margin="0,0,0,0" Width="100" />
</StackPanel>
</Grid>
</Grid>
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>