3.9.8
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
RootModule = 'CloudAPIPowerShellManagement.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '3.9.7'
|
||||
ModuleVersion = '3.9.8'
|
||||
|
||||
# Supported PSEditions
|
||||
# CompatiblePSEditions = @()
|
||||
|
||||
@@ -470,7 +470,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"ObjectType": "#microsoft.graph.hardwareConfiguration",
|
||||
"ObjectType": "#microsoft.graph.hardwareConfigurations",
|
||||
"PolicyType": "HardwareConfigurations",
|
||||
"PolicyTypeLanguageId": "hardwareConfigurations",
|
||||
"PlatformLanguageId": "Windows10",
|
||||
|
||||
+31
-15
@@ -85,32 +85,48 @@
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"dataType": 0,
|
||||
"dataType": 16,
|
||||
"category": 2,
|
||||
"nameResourceKey": "publicPlayStoreEnabledName",
|
||||
"descriptionResourceKey": "publicPlayStoreEnabledDescription",
|
||||
"childSettings": [
|
||||
{
|
||||
"dataType": 10,
|
||||
"category": 2,
|
||||
"nameResourceKey": "publicPlayStoreEnabledWarning",
|
||||
"childSettings": [
|
||||
|
||||
],
|
||||
"options": [
|
||||
],
|
||||
"options": [
|
||||
{
|
||||
"nameResourceKey": "publicPlayStoreSelectionNotConfigured",
|
||||
"value": "notConfigured",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"nameResourceKey": "publicPlayStoreSelectionAllowList",
|
||||
"value": "allowList",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"nameResourceKey": "publicPlayStoreSelectionBlockList",
|
||||
"value": "blockList",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"entityKey": "playStoreMode",
|
||||
"booleanActions": 0,
|
||||
"defaultValue": "notConfigured",
|
||||
"unconfiguredValue": "notConfigured",
|
||||
"policyType": 2,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"dataType": 10,
|
||||
"category": 2,
|
||||
"nameResourceKey": "publicPlayStoreEnabledWarning",
|
||||
"childSettings": [
|
||||
|
||||
],
|
||||
"booleanActions": 0,
|
||||
"policyType": 2,
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"options": [
|
||||
|
||||
],
|
||||
"entityKey": "publicPlayStoreEnabled",
|
||||
"booleanActions": 0,
|
||||
"defaultValue": false,
|
||||
"policyType": 2,
|
||||
"enabled": true
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1150,8 +1150,8 @@
|
||||
"showAsSectionHeader": true,
|
||||
"dataType": 8,
|
||||
"category": 44,
|
||||
"nameResourceKey": "dedicatedAndroidEnrollmentTypesHeaderName",
|
||||
"descriptionResourceKey": "dedicatedAndroidEnrollmentTypesHeaderDescription",
|
||||
"nameResourceKey": "fullyManagedAndDedicatedAndroidEnrollmentTypesWithKioskHeaderName",
|
||||
"descriptionResourceKey": "fullyManagedAndDedicatedAndroidEnrollmentTypesWithKioskHeaderDescription",
|
||||
"childSettings": [
|
||||
{
|
||||
"dataType": 0,
|
||||
@@ -1267,7 +1267,23 @@
|
||||
"defaultValue": false,
|
||||
"policyType": 2,
|
||||
"enabled": false
|
||||
},
|
||||
}
|
||||
],
|
||||
"options": [
|
||||
|
||||
],
|
||||
"booleanActions": 0,
|
||||
"policyType": 2,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"isSettingDescription": false,
|
||||
"showAsSectionHeader": true,
|
||||
"dataType": 8,
|
||||
"category": 44,
|
||||
"nameResourceKey": "dedicatedAndroidEnrollmentTypesHeaderName",
|
||||
"descriptionResourceKey": "dedicatedAndroidEnrollmentTypesHeaderDescription",
|
||||
"childSettings": [
|
||||
{
|
||||
"dataType": 0,
|
||||
"category": 44,
|
||||
|
||||
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4741
-4689
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4571
-4519
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4741
-4689
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4741
-4689
File diff suppressed because it is too large
Load Diff
+4741
-4689
File diff suppressed because it is too large
Load Diff
+4572
-4520
File diff suppressed because it is too large
Load Diff
+4573
-4521
File diff suppressed because it is too large
Load Diff
+4741
-4689
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@ Objects can be compared based on Properties or Documentatation info.
|
||||
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'1.1.0'
|
||||
'1.2.0'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -640,6 +640,7 @@ function Start-BulkCompareExportObjects
|
||||
{
|
||||
$sourceObj = Get-GraphObject $curObject.Object $curObject.ObjectType
|
||||
$fileObj.Object | Add-Member Noteproperty -Name "@ObjectFromFile" -Value $true -Force
|
||||
$fileObj.Object | Add-Member Noteproperty -Name "@ObjectFileName" -Value $fileObj.FileInfo.FullName -Force
|
||||
$compareProperties = Compare-Objects $sourceObj.Object $fileObj.Object $item.ObjectType
|
||||
}
|
||||
|
||||
@@ -826,6 +827,7 @@ function Start-BulkCompareExportIntuneToNamedExportedObjects
|
||||
{
|
||||
$sourceObj = Get-GraphObject $graphObject.Object $graphObject.ObjectType
|
||||
$fileObj.Object | Add-Member Noteproperty -Name "@ObjectFromFile" -Value $true -Force
|
||||
$fileObj.Object | Add-Member Noteproperty -Name "@ObjectFileName" -Value $fileObj.FileInfo.FullName -Force
|
||||
$compareProperties = Compare-Objects $sourceObj.Object $fileObj.Object $item.ObjectType
|
||||
}
|
||||
|
||||
@@ -1009,7 +1011,9 @@ function Start-BulkCompareExportFolders
|
||||
else
|
||||
{
|
||||
$fileSourceObj.Object | Add-Member Noteproperty -Name "@ObjectFromFile" -Value $true -Force
|
||||
$fileSourceObj.Object | Add-Member Noteproperty -Name "@ObjectFileName" -Value $fileSourceObj.FileInfo.FullName -Force
|
||||
$compareObject.Object | Add-Member Noteproperty -Name "@ObjectFromFile" -Value $true -Force
|
||||
$compareObject.Object | Add-Member Noteproperty -Name "@ObjectFileName" -Value $compareObject.FileInfo.FullName -Force
|
||||
$compareProperties = Compare-Objects $compareObject.Object $fileSourceObj.Object $item.ObjectType
|
||||
}
|
||||
|
||||
@@ -1297,6 +1301,7 @@ function Start-CompareExportObject
|
||||
}
|
||||
}
|
||||
|
||||
$compareObj | Add-Member Noteproperty -Name "@ObjectFileName" -Value $global:txtCompareFile.Text -Force
|
||||
$compareObj | Add-Member Noteproperty -Name "@ObjectFromFile" -Value $true -Force
|
||||
|
||||
$compareResult = Compare-Objects $obj.Object $compareObj $obj.ObjectType
|
||||
@@ -1381,7 +1386,7 @@ function Compare-ObjectsBasedonProperty
|
||||
|
||||
$coreProps = @((?? $objectType.NameProperty "displayName"), "Description", "Id", "createdDateTime", "lastModifiedDateTime", "version")
|
||||
$postProps = @("Advertisements")
|
||||
$skipProps = @("@ObjectFromFile")
|
||||
$skipProps = @("@ObjectFromFile","@ObjectFileName")
|
||||
$skipPropertiesToCompare = @()
|
||||
if($skipBasicProperties) {
|
||||
$skipPropertiesToCompare += "roleScopeTagIds"
|
||||
|
||||
@@ -20,7 +20,7 @@ $global:documentationProviders = @()
|
||||
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'2.2.1'
|
||||
'2.3.0'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -228,6 +228,7 @@ function Get-ObjectDocumentation
|
||||
$script:applicabilityRules = @()
|
||||
$script:objectAssignments = @()
|
||||
$script:objectScripts = @()
|
||||
$script:customTables = @()
|
||||
$script:admxCategories = $null
|
||||
|
||||
$script:ObjectTypeFullTable = @{} # Hash table with objects that should be documented in a single table eg ScopeTags
|
||||
@@ -351,6 +352,7 @@ function Get-ObjectDocumentation
|
||||
Settings = $script:objectSettingsData
|
||||
ComplianceActions = $script:objectComplianceActionData
|
||||
ApplicabilityRules = $script:applicabilityRules
|
||||
CustomTables = $script:customTables
|
||||
Assignments = $script:objectAssignments
|
||||
Scripts = $script:objectScripts
|
||||
DisplayProperties = $properties
|
||||
@@ -386,11 +388,40 @@ function Invoke-ObjectDocumentation
|
||||
$global:intentCategoryDefs = $null
|
||||
$global:cfgCategories = $null
|
||||
$script:admxCategories = $null
|
||||
$script:migTable = $null
|
||||
|
||||
$script:DocumentationLanguage = "en"
|
||||
$script:objectSeparator = [System.Environment]::NewLine
|
||||
$script:propertySeparator = ","
|
||||
|
||||
$loadExportedInfo = $false
|
||||
|
||||
if($documentationObj.Object."@ObjectFileName") {
|
||||
$path = [IO.Path]::GetDirectoryName($documentationObj.Object."@ObjectFileName")
|
||||
for($i = 0;$i -lt 2;$i++)
|
||||
{
|
||||
if($i -gt 0)
|
||||
{
|
||||
# Get parent directory
|
||||
$path = [io.path]::GetDirectoryName($path)
|
||||
}
|
||||
|
||||
$migFileName = Join-Path $path "MigrationTable.json"
|
||||
try
|
||||
{
|
||||
if([IO.File]::Exists($migFileName))
|
||||
{
|
||||
Write-Log "Load Migration table from $migFileName"
|
||||
$script:migTable = ConvertFrom-Json (Get-Content $migFileName -Raw)
|
||||
}
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
if(-not $script:migTable) {
|
||||
Write-Log "Migration table not found" 2
|
||||
}
|
||||
}
|
||||
|
||||
Get-ObjectDocumentation $documentationObj
|
||||
}
|
||||
|
||||
@@ -636,6 +667,19 @@ function Add-BasicDefaultValues
|
||||
}
|
||||
}
|
||||
|
||||
function Add-CustomTable
|
||||
{
|
||||
param($TableId, $Columns = @("Name", "Value"), $Values, [int]$Order = 100, $LanguageId = "")
|
||||
|
||||
$script:customTables += [PSCustomObject]@{
|
||||
Id = $TableId
|
||||
Columns = $Columns
|
||||
Values = $Values
|
||||
LanguageId = $LanguageId
|
||||
Order = $Order
|
||||
}
|
||||
}
|
||||
|
||||
function Add-BasicAdditionalValues
|
||||
{
|
||||
param($obj, $objectType)
|
||||
@@ -4929,6 +4973,10 @@ function Invoke-CSVProcessItem
|
||||
{
|
||||
$properties = @("GroupMode","Group","Category","SubCategory")
|
||||
}
|
||||
elseif($documentedObj.Assignments[0].Group)
|
||||
{
|
||||
$properties = @("GroupMode","Group","Category")
|
||||
}
|
||||
else
|
||||
{
|
||||
$properties = @("GroupMode","Groups","Category")
|
||||
|
||||
@@ -10,7 +10,7 @@ This module will also document some objects based on PowerShell functions
|
||||
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'1.6.5'
|
||||
'1.6.6'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -76,7 +76,8 @@ function Invoke-CDDocumentObject
|
||||
Properties = @("Name","Value")
|
||||
}
|
||||
}
|
||||
elseif($type -eq '#microsoft.graph.androidManagedStoreAppConfiguration') {
|
||||
elseif($type -eq '#microsoft.graph.androidForWorkMobileAppConfiguration' -or
|
||||
$type -eq '#microsoft.graph.androidManagedStoreAppConfiguration') {
|
||||
|
||||
Invoke-CDDocumentAndroidManagedStoreAppConfiguration $documentationObj
|
||||
|
||||
@@ -84,8 +85,7 @@ function Invoke-CDDocumentObject
|
||||
Properties = @("Name","Value","Category","SubCategory")
|
||||
}
|
||||
}
|
||||
elseif($type -eq '#microsoft.graph.androidForWorkMobileAppConfiguration' -or
|
||||
$type -eq '#microsoft.graph.iosMobileAppConfiguration')
|
||||
elseif($type -eq '#microsoft.graph.iosMobileAppConfiguration')
|
||||
{
|
||||
Invoke-CDDocumentMobileAppConfiguration $documentationObj
|
||||
return [PSCustomObject]@{
|
||||
@@ -186,7 +186,7 @@ function Get-CDAllCloudApps
|
||||
{
|
||||
if(-not $script:allCloudApps)
|
||||
{
|
||||
$script:allCloudApps = (Invoke-GraphRequest -url "/servicePrincipals?`$select=displayName,appId&top=999" -ODataMetadata "minimal").value
|
||||
$script:allCloudApps = (Invoke-GraphRequest -url "/servicePrincipals?`$select=displayName,appId&top=999" -ODataMetadata "minimal" -AllPages).value
|
||||
}
|
||||
$script:allCloudApps
|
||||
}
|
||||
@@ -198,7 +198,7 @@ function Get-CDAllTenantApps
|
||||
$script:allTenantApps = Get-DocOfflineObjects "Applications"
|
||||
if(-not $script:allTenantApps)
|
||||
{
|
||||
$script:allTenantApps =(Invoke-GraphRequest -url "/deviceAppManagement/mobileApps?`$select=displayName,id&top=999" -ODataMetadata "minimal").value
|
||||
$script:allTenantApps =(Invoke-GraphRequest -url "/deviceAppManagement/mobileApps?`$select=displayName,id&top=999" -ODataMetadata "minimal" -AllPages).value
|
||||
}
|
||||
}
|
||||
$script:allTenantApps
|
||||
@@ -1885,26 +1885,20 @@ function Invoke-CDDocumentAndroidManagedStoreAppConfiguration
|
||||
}
|
||||
|
||||
# Not the best way. BundleId should be used but then full app info is required
|
||||
if($obj.packageId -eq "com.microsoft.office.outlook*")
|
||||
if($obj.packageId -eq "com.microsoft.office.outlook")
|
||||
{
|
||||
if([IO.File]::Exists(($global:AppRootFolder + "\Documentation\ObjectInfo\#AppConfigOutlookDevice.json")))
|
||||
{
|
||||
$tmp = $obj.settings | Where { $_.appConfigKey -eq "com.microsoft.outlook.EmailProfile.AccountType" }
|
||||
$tmp = $payloadData.managedProperty | Where { $_.key -eq "com.microsoft.outlook.EmailProfile.AccountType" }
|
||||
if($tmp){ $configEmail=$true }else{ $configEmail=$false }
|
||||
$outlookSettings = [PSCustomObject]@{
|
||||
configureEmail = $configEmail
|
||||
}
|
||||
foreach($setting in $obj.settings)
|
||||
|
||||
foreach($managedProperty in $payloadData.managedProperty)
|
||||
{
|
||||
if($setting.appConfigKeyType -eq "booleanType")
|
||||
{
|
||||
$value = $setting.appConfigKeyValue -eq "true"
|
||||
}
|
||||
else
|
||||
{
|
||||
$value = $setting.appConfigKeyValue
|
||||
}
|
||||
$outlookSettings | Add-Member Noteproperty -Name $setting.appConfigKey -Value $value -Force
|
||||
$valueProperty = $managedProperty.PSObject.Properties | Where-Object Name -like "value*"
|
||||
$outlookSettings | Add-Member Noteproperty -Name $managedProperty.key -Value $valueProperty.Value -Force
|
||||
}
|
||||
|
||||
$jsonObj = Get-Content ($global:AppRootFolder + "\Documentation\ObjectInfo\#AppConfigOutlookDevice.json") | ConvertFrom-Json
|
||||
@@ -1914,6 +1908,8 @@ function Invoke-CDDocumentAndroidManagedStoreAppConfiguration
|
||||
|
||||
$addedSettings = Get-DocumentedSettings
|
||||
|
||||
$additionalSettings = @()
|
||||
|
||||
foreach($managedProperty in $payloadData.managedProperty)
|
||||
{
|
||||
if(($addedSettings | Where EntityKey -eq $managedProperty.key)) { continue }
|
||||
@@ -1926,14 +1922,44 @@ function Invoke-CDDocumentAndroidManagedStoreAppConfiguration
|
||||
$value = $value -join ","
|
||||
}
|
||||
|
||||
Add-CustomSettingObject ([PSCustomObject]@{
|
||||
$additionalSettings += ([PSCustomObject]@{
|
||||
Name = $managedProperty.key
|
||||
ValueType = $valueProperty.Name.SubString(5)
|
||||
Value = $value
|
||||
EntityKey = $managedProperty.key
|
||||
Category = Get-LanguageString "TACSettings.generalSettings"
|
||||
SubCategory = Get-LanguageString "SettingDetails.additionalConfiguration"
|
||||
})
|
||||
}
|
||||
|
||||
if($additionalSettings.Count -gt 0) {
|
||||
Add-CustomTable "AdditionalSettings" @("Name","ValueType","Value") $additionalSettings -Order 110
|
||||
}
|
||||
|
||||
$permissions = @()
|
||||
|
||||
foreach($permission in $obj.permissionActions)
|
||||
{
|
||||
$permissionTemp = $permission.permission.Split('.')[-1]
|
||||
if($permissionTemp) {
|
||||
$permissionLngId = $permissionTemp -replace "_", ""
|
||||
|
||||
$permissionStr = ?? (Get-LanguageString "AndroidForWorkAppPermissions.Permissions.$($permissionLngId)") $permissionTemp
|
||||
}
|
||||
else {
|
||||
$permissionStr = $permission.permission
|
||||
}
|
||||
|
||||
$permissions += ([PSCustomObject]@{
|
||||
Permission = $permissionStr
|
||||
Action = ?? (Get-LanguageString "AndroidForWorkAppPermissions.Action.$($permission.action)") $permission.action
|
||||
EntityKey = $permission.permission
|
||||
})
|
||||
}
|
||||
|
||||
if($permissions.Count -gt 0) {
|
||||
Add-CustomTable "Permissions" @("Permission","Action") $permissions -Order 115 -LanguageId "AndroidForWorkAppPermissions.permissionsTitle"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2002,8 +2028,18 @@ function Invoke-CDDocumentMobileAppConfiguration
|
||||
}
|
||||
else
|
||||
{
|
||||
$isOutlook = $false
|
||||
|
||||
foreach($targetedAppId in $obj.targetedMobileApps) {
|
||||
$app = $allApps | Where Id -eq $targetedAppId
|
||||
if($app.displayName -eq "Microsoft Outlook") {
|
||||
$isOutlook = $true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
# Not the best way. BundleId should be used but then full app info is required
|
||||
if(($obj.packageId | Where { $_.appConfigKey -like "com.microsoft.outlook*" }))
|
||||
if($isOutlook -or ($obj.packageId | Where { $_.appConfigKey -like "com.microsoft.outlook*" }))
|
||||
{
|
||||
if([IO.File]::Exists(($global:AppRootFolder + "\Documentation\ObjectInfo\#AppConfigOutlookDevice.json")))
|
||||
{
|
||||
@@ -3139,7 +3175,7 @@ function Invoke-CDDocumentConditionalAccess
|
||||
|
||||
Add-CustomSettingObject ([PSCustomObject]@{
|
||||
Name = Get-LanguageString "AzureCA.WhatIfBlade.authenticationStrength"
|
||||
Value = $termsOfUse -join $script:objectSeparator
|
||||
Value = $authenticationStrngth -join $script:objectSeparator
|
||||
Category = $category
|
||||
SubCategory = ""
|
||||
EntityKey = "authenticationStrength"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'1.0.1'
|
||||
'1.1.0'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -332,7 +332,9 @@ function Invoke-HTMLProcessItem
|
||||
|
||||
$lngId = ?: ($tableType -eq "BasicInfo") "SettingDetails.basics" "TableHeaders.settings" -AddCategories
|
||||
|
||||
Add-HTMLTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId -AddCategories -AddSubcategories
|
||||
if(($documentedObj.$tableType).Count -gt 0) {
|
||||
Add-HTMLTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId -AddCategories -AddSubcategories
|
||||
}
|
||||
}
|
||||
|
||||
if(($documentedObj.ComplianceActions | measure).Count -gt 0)
|
||||
@@ -351,6 +353,11 @@ function Invoke-HTMLProcessItem
|
||||
|
||||
Add-HTMLObjectSettings $obj $objectType $documentedObj
|
||||
|
||||
foreach($customTable in ($documentedObj.CustomTables | Sort-Object -Property Order))
|
||||
{
|
||||
Add-HTMLTableItems $obj $objectType $customTable.Values $customTable.Columns $customTable.LanguageId -AddCategories -AddSubcategories
|
||||
}
|
||||
|
||||
if(($documentedObj.Assignments | measure).Count -gt 0)
|
||||
{
|
||||
if($documentedObj.Assignments[0].RawIntent)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'1.1.1'
|
||||
'1.2.0'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -285,7 +285,9 @@ function Invoke-MDProcessItem
|
||||
|
||||
$lngId = ?: ($tableType -eq "BasicInfo") "SettingDetails.basics" "TableHeaders.settings" -AddCategories
|
||||
|
||||
Add-MDTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId -AddCategories -AddSubcategories
|
||||
if(($documentedObj.$tableType).Count -gt 0) {
|
||||
Add-MDTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId -AddCategories -AddSubcategories
|
||||
}
|
||||
|
||||
#Add-MDTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId `
|
||||
# -AddCategories:($global:chkMDAddCategories.IsChecked -eq $true) `
|
||||
@@ -308,6 +310,11 @@ function Invoke-MDProcessItem
|
||||
|
||||
Add-MDObjectSettings $obj $objectType $documentedObj
|
||||
|
||||
foreach($customTable in ($documentedObj.CustomTables | Sort-Object -Property Order))
|
||||
{
|
||||
Add-MDTableItems $obj $objectType $documentedObj $customTable.Values $customTable.Columns $customTable.LanguageId -AddCategories -AddSubcategories
|
||||
}
|
||||
|
||||
if(($documentedObj.Assignments | measure).Count -gt 0)
|
||||
{
|
||||
if($documentedObj.Assignments[0].RawIntent)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#https://docs.microsoft.com/en-us/office/vba/api/overview/word
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'1.6.0'
|
||||
'1.7.0'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -208,7 +208,7 @@ function Invoke-WordPreProcessItems
|
||||
{
|
||||
try
|
||||
{
|
||||
$script:doc = $wordApp.Documents.Add($global:txtWordDocumentTemplate.Text)
|
||||
$script:doc = $script:wordApp.Documents.Add($global:txtWordDocumentTemplate.Text)
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -217,7 +217,7 @@ function Invoke-WordPreProcessItems
|
||||
}
|
||||
else
|
||||
{
|
||||
$script:doc = $wordApp.Documents.Add()
|
||||
$script:doc = $script:wordApp.Documents.Add()
|
||||
}
|
||||
|
||||
#Get BuiltIn properties
|
||||
@@ -547,10 +547,12 @@ function Invoke-WordProcessItem
|
||||
|
||||
$lngId = ?: ($tableType -eq "BasicInfo") "SettingDetails.basics" "TableHeaders.settings" -AddCategories
|
||||
|
||||
Add-DocTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId `
|
||||
if(($documentedObj.$tableType).Count -gt 0) {
|
||||
Add-DocTableItems $obj $objectType ($documentedObj.$tableType) $properties $lngId `
|
||||
-AddCategories:($global:chkWordAddCategories.IsChecked -eq $true) `
|
||||
-AddSubcategories:($global:chkWordAddSubCategories.IsChecked -eq $true) `
|
||||
-ForceFullValue:($tableType -eq "BasicInfo")
|
||||
}
|
||||
}
|
||||
|
||||
if($global:cbWordDocumentationLevel.SelectedValue -ne "basic")
|
||||
@@ -570,6 +572,11 @@ function Invoke-WordProcessItem
|
||||
}
|
||||
|
||||
Add-DocObjectSettings $obj $objectType $documentedObj
|
||||
|
||||
foreach($customTable in ($documentedObj.CustomTables | Sort-Object -Property Order))
|
||||
{
|
||||
Add-DocTableItems $obj $objectType $documentedObj $customTable.Values $customTable.Columns $customTable.LanguageId -AddCategories -AddSubcategories
|
||||
}
|
||||
}
|
||||
|
||||
if(($documentedObj.Assignments | measure).Count -gt 0)
|
||||
|
||||
@@ -10,7 +10,7 @@ This module is for the Endpoint Manager/Intune View. It manages Export/Import/Co
|
||||
#>
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'3.9.7'
|
||||
'3.9.8'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
@@ -472,8 +472,9 @@ function Invoke-InitializeModule
|
||||
ViewID = "IntuneGraphAPI"
|
||||
Permissons=@("DeviceManagementApps.ReadWrite.All")
|
||||
Dependencies = @("Applications")
|
||||
PreFilesImportCommand = { Start-PreFilesImportAppConfiguration @args }
|
||||
PreImportAssignmentsCommand = { Start-PreImportAssignmentsAppConfiguration @args }
|
||||
#PostExportCommand = { Start-PostExportAppConfiguration @args }
|
||||
PostExportCommand = { Start-PostExportAppConfiguration @args }
|
||||
Icon = "AppConfiguration"
|
||||
GroupId = "AppConfiguration"
|
||||
})
|
||||
@@ -674,6 +675,8 @@ function Invoke-InitializeModule
|
||||
QUERYLIST = "`$filter=microsoft.graph.androidManagedStoreAppConfiguration/appSupportsOemConfig%20eq%20true"
|
||||
API = "/deviceAppManagement/mobileAppConfigurations"
|
||||
PreImportAssignmentsCommand = { Start-PreImportAssignmentsAppConfiguration @args }
|
||||
PreFilesImportCommand = { Start-PreFilesImportAppConfiguration @args }
|
||||
PostExportCommand = { Start-PostExportAppConfiguration @args }
|
||||
Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
|
||||
Icon="DeviceConfiguration"
|
||||
Dependencies = @("Applications")
|
||||
@@ -1961,7 +1964,134 @@ function Start-PostExportAppConfiguration
|
||||
{
|
||||
param($obj, $objectType, $path)
|
||||
|
||||
Add-EMAssignmentsToExportFile $obj $objectType $path
|
||||
#Add-EMAssignmentsToExportFile $obj $objectType $path
|
||||
|
||||
Write-Log "Export app config for $($objectType.Id) with OData.Type: $($obj.'@OData.Type')"
|
||||
|
||||
if($obj.'@OData.Type' -eq "#microsoft.graph.androidManagedAppProtection" -or
|
||||
$obj.'@OData.Type' -eq "#microsoft.graph.androidForWorkMobileAppConfiguration" -or
|
||||
$obj.'@OData.Type' -eq "#microsoft.graph.androidManagedStoreAppConfiguration" -or
|
||||
$obj.'@OData.Type' -eq "#microsoft.graph.iosMobileAppConfiguration")
|
||||
{
|
||||
$fileName = (Get-GraphObjectName $obj $objectType).Trim('.')
|
||||
if((Get-SettingValue "AddIDToExportFile") -eq $true -and $obj.Id)
|
||||
{
|
||||
$fileName = ($fileName + "_" + $obj.Id)
|
||||
}
|
||||
$tmpObj = $null
|
||||
$fileName = "$path\$((Remove-InvalidFileNameChars $fileName)).json"
|
||||
if([IO.File]::Exists($fileName))
|
||||
{
|
||||
$tmpObj = Get-GraphObjectFromFile $fileName
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Log "File not found: $fileName. Could not add App names." 3
|
||||
}
|
||||
|
||||
if(($tmpObj.targetedMobileApps | measure).Count -gt 0)
|
||||
{
|
||||
Write-Log "Add target apps info"
|
||||
$targetedApps = @()
|
||||
foreach($appId in $tmpObj.targetedMobileApps)
|
||||
{
|
||||
$appObj = Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps/$($appId)" #?`select=id,displayName" -ODataMetadata "Minimal"
|
||||
if($appObj)
|
||||
{
|
||||
Write-Log "Add target app info $($appObj.displayName) ($($appObj.Id)) of type $($appObj.'@OData.Type')"
|
||||
$targetedApps += $appObj.displayName + '|!|' + $appObj.Id + '|!|' + $appObj.'@OData.Type'
|
||||
}
|
||||
}
|
||||
|
||||
if($targetedApps.Count -gt 0)
|
||||
{
|
||||
Write-Log "Add CustomRefTargetedApps property"
|
||||
$tmpObj | Add-Member -MemberType NoteProperty -Name "#CustomRefTargetedApps" -Value ($targetedApps -join "|*|")
|
||||
Write-Log "Save file $fileName"
|
||||
Save-GraphObjectToFile $tmpObj $fileName
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Log "No target apps found" 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Start-PreFilesImportAppConfiguration
|
||||
{
|
||||
param($objectType, $filesToImport)
|
||||
|
||||
$targetedAppsObjects = $filesToImport | Where { $null -ne $_.Object."#CustomRefTargetedApps" }
|
||||
|
||||
if(($targetedAppsObjects | measure).Count -gt 0)
|
||||
{
|
||||
Write-Log "Policies with Targeted Apps detected"
|
||||
foreach($fileObject in $targetedAppsObjects)
|
||||
{
|
||||
Add-AppConfigurationTargets $objectType $fileObject
|
||||
}
|
||||
}
|
||||
$filesToImport
|
||||
}
|
||||
|
||||
function local:Add-AppConfigurationTargets
|
||||
{
|
||||
param($obj, $fileObj)
|
||||
|
||||
if($fileObj.Object."#CustomRefTargetedApps" -and $fileObj.Object.targetedMobileApps)
|
||||
{
|
||||
Write-Log "Adding app target for $($fileObj.Object.displayName)"
|
||||
|
||||
$targetedAppsInfo = $fileObj.Object."#CustomRefTargetedApps"
|
||||
|
||||
$translatedTargetedApps = @()
|
||||
|
||||
if($targetedAppsInfo)
|
||||
{
|
||||
foreach($targetedApp in ($targetedAppsInfo -split "[|][*][|]"))
|
||||
{
|
||||
$appName, $appId, $appType = $targetedApp -split "[|][!][|]"
|
||||
if(-not $appName -or -not $appId)
|
||||
{
|
||||
Write-Log "App Name and Id is missing in string: $appApp" 2
|
||||
continue
|
||||
}
|
||||
$tmpApps = (Invoke-GraphRequest -Url "/deviceAppManagement/mobileApps?`$filter=displayName eq '$appName'").value
|
||||
if(-not $tmpApps)
|
||||
{
|
||||
Write-Log "No application found with name $appName. $appId will not be translated and added to target list" 2
|
||||
continue
|
||||
}
|
||||
|
||||
Write-Log "Found $(($tmpApps | measure).Count) applications" 2
|
||||
foreach ($tmpApp in $tmpApps) {
|
||||
Write-Log "Found '$($tmpApp.displayName)' ($($tmpApp.id)) of type $($($tmpApp.'@OData.Type'))"
|
||||
}
|
||||
|
||||
$tmpApp = $tmpApps | Where-Object '@OData.Type' -eq $appType
|
||||
if(-not $tmpApp)
|
||||
{
|
||||
Write-Log "No $appName application found of type $appType. $appId will not be translated and added to target list" 2
|
||||
}
|
||||
elseif(($tmpApp | measure).Count -gt 1) {
|
||||
Write-Log "$(($tmpApp | measure).Count) applications found with name '$appName' of type $appType. $appId will not be translated and added to target list" 2
|
||||
}
|
||||
else {
|
||||
Write-Log "Found '$appName' with id $($tmpApp.Id) ($appType)"
|
||||
$translatedTargetedApps += $tmpApp.Id
|
||||
}
|
||||
}
|
||||
|
||||
if($translatedTargetedApps.Count -gt 0) {
|
||||
Write-Log "Updating translated targeted apps"
|
||||
$fileObj.Object.targetedMobileApps = $translatedTargetedApps
|
||||
}
|
||||
else {
|
||||
Write-Log "Could not find targeted apps in the evnironment. Verify that they are added. Policy import might fail" 3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Start-PreImportAssignmentsAppConfiguration
|
||||
@@ -2479,7 +2609,7 @@ function Start-PostFilesImportApplications
|
||||
|
||||
if(($refObjects | measure).Count -gt 0)
|
||||
{
|
||||
Write-Log "Applicetions with Depnedency or Supersedence detected"
|
||||
Write-Log "Applicetions with Dependency or Supersedence detected"
|
||||
foreach($file in $refObjects)
|
||||
{
|
||||
Add-ApplicationReferences $file.ImportedObject $file.Object
|
||||
|
||||
@@ -35,7 +35,7 @@ function Invoke-InitializeModule
|
||||
Add-ViewObject $global:EMInfoViewObject
|
||||
|
||||
Add-ViewItem (New-Object PSObject -Property @{
|
||||
Title = "Baseline Templates"
|
||||
Title = "Baseline Templates - Intent"
|
||||
Id = "BaselineTemplates"
|
||||
ViewID = "EMInfoGraphAPI"
|
||||
API = "/deviceManagement/templates"
|
||||
@@ -45,6 +45,19 @@ function Invoke-InitializeModule
|
||||
ExpandAssignmentsList = $false
|
||||
})
|
||||
|
||||
Add-ViewItem (New-Object PSObject -Property @{
|
||||
Title = "Baseline Templates - Settings Catalog"
|
||||
Id = "BaselineTemplatesSettingsCatalog"
|
||||
ViewID = "EMInfoGraphAPI"
|
||||
API = "/deviceManagement/configurationPolicyTemplates"
|
||||
QUERYLIST = "`$filter=(templateFamily eq 'Baseline')"
|
||||
ShowButtons = @("Export","View")
|
||||
DefaultColumns = "0,displayName=Template Name,displayVersion=Version,lifecycleState=State,baseId=Template Id,id"
|
||||
Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
|
||||
Icon="EndpointSecurity"
|
||||
ExpandAssignmentsList = $false
|
||||
})
|
||||
|
||||
Add-ViewItem (New-Object PSObject -Property @{
|
||||
Title = "Android Google Play"
|
||||
Id = "AndroidGooglePlay"
|
||||
|
||||
@@ -10,7 +10,7 @@ This module manages Authentication for the application with MSAL. It is also res
|
||||
#>
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'3.9.7'
|
||||
'3.9.8a'
|
||||
}
|
||||
|
||||
$global:msalAuthenticator = $null
|
||||
@@ -121,6 +121,14 @@ function Invoke-InitializeModule
|
||||
Description = "Sort the list of cached accounts based on user name. Updated at restart or account change"
|
||||
}) "MSAL"
|
||||
|
||||
Add-SettingsObject (New-Object PSObject -Property @{
|
||||
Title = "Sort Tenant List"
|
||||
Key = "SortTenantList"
|
||||
Type = "Boolean"
|
||||
DefaultValue = $false
|
||||
Description = "Sort the list of available tenants based on Tenant name. Updated at restart or account change"
|
||||
}) "MSAL"
|
||||
|
||||
Add-MSALPrereq
|
||||
}
|
||||
|
||||
@@ -1804,8 +1812,18 @@ function Get-MSALProfileEllipse
|
||||
$lbObj = [Windows.Markup.XamlReader]::Parse("<TextBlock $wpfNS><Bold>Tenants:</Bold></TextBlock>")
|
||||
$lbObj.Margin = "0,5,0,0"
|
||||
|
||||
if((Get-SettingValue "SortTenantList") -eq $true)
|
||||
{
|
||||
$tenants = $script:AccessableTenants | Sort -Property DisplayName
|
||||
}
|
||||
else
|
||||
{
|
||||
$tenants = $script:AccessableTenants
|
||||
}
|
||||
|
||||
|
||||
Add-GridObject $otherLogins $lbObj
|
||||
foreach($tenant in $script:AccessableTenants)
|
||||
foreach($tenant in $tenants)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ This module manages Microsoft Grap fuctions like calling APIs, managing graph ob
|
||||
#>
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'3.9.6'
|
||||
'3.9.8a'
|
||||
}
|
||||
|
||||
$global:MSGraphGlobalApps = @(
|
||||
@@ -804,7 +804,7 @@ function Show-GraphObjects
|
||||
$tableColumns = @()
|
||||
|
||||
$additionalColumns = @()
|
||||
$additionalColsStr = Get-Setting "EndpointManager\ObjectColumns" "$($global:curObjectType.Id)"
|
||||
$additionalColsStr = ?? (Get-Setting "EndpointManager\ObjectColumns" "$($global:curObjectType.Id)") $global:curObjectType.DefaultColumns
|
||||
if($additionalColsStr)
|
||||
{
|
||||
$additionalColumns += $additionalColsStr.Split(',')
|
||||
@@ -2635,7 +2635,8 @@ function Add-GraphMigrationInfo
|
||||
$objType = $objInfo."@odata.type"
|
||||
|
||||
if($objType -eq "#microsoft.graph.groupAssignmentTarget" -or
|
||||
$objType -eq "#microsoft.graph.exclusionGroupAssignmentTarget")
|
||||
$objType -eq "#microsoft.graph.exclusionGroupAssignmentTarget" -or
|
||||
$objType -eq "#microsoft.graph.cloudPcManagementGroupAssignmentTarget")
|
||||
{
|
||||
Add-GraphMigrationObject $objInfo.groupid "/groups" "Group"
|
||||
}
|
||||
@@ -4169,7 +4170,7 @@ function local:Add-ObjectColumnInfoClass
|
||||
|
||||
function Local:Show-ObjectDefaultColumnsSettings
|
||||
{
|
||||
$strColSettings = Get-Setting "EndpointManager\ObjectColumns" "$($global:curObjectType.Id)"
|
||||
$strColSettings = ?? (Get-Setting "EndpointManager\ObjectColumns" "$($global:curObjectType.Id)") $global:curObjectType.DefaultColumns
|
||||
$script:colObjectProperties.Clear()
|
||||
$defaultColumns = (?? $global:curObjectType.ViewProperties (@("displayName","description","id")))
|
||||
if($strColSettings)
|
||||
|
||||
+48
-1
@@ -1,4 +1,51 @@
|
||||
# Release Notes
|
||||
## 3.9.8 - 2024-09-10
|
||||
|
||||
**New features**
|
||||
|
||||
- **Intune Info**<br />
|
||||
- Added 'Baseline Templates - Settings Catalog'<br />
|
||||
This list templates for Settings Catalog policies eg. Security Baseline for Windows 10 and later<br />
|
||||
|
||||
**Fixes**
|
||||
|
||||
- **Import/Export**<br />
|
||||
- Fixed support for export/import App Configurations (Device) - Android between environments<br />
|
||||
Based on [Issue 255](https://github.com/Micke-K/IntuneManagement/issues/255)<br />
|
||||
Thank you @jimmywinberg for all the testing!<br />
|
||||
- Fixed support for export/import App Configurations (Device) - iOS (VPP) between environments<br />
|
||||
Based on [Issue 260](https://github.com/Micke-K/IntuneManagement/issues/260)<br />
|
||||
Thank you @Arne-RFA for all the testing!<br />
|
||||
- Added support for exporting Groups targeted in W365 assignments<br />
|
||||
Based on [Issue 261](https://github.com/Micke-K/IntuneManagement/issues/261)<br />
|
||||
- Added tooltip that variables are supported in the Export folder path<br />
|
||||
Based on [Discussions 269](https://github.com/Micke-K/IntuneManagement/discussions/269)<br />
|
||||
|
||||
- **Documentation**<br />
|
||||
- App Configuration (Device) documentation updated<br />
|
||||
Added support for value type for Android policies<br />
|
||||
Please continue discussion on the Issue below if this is still not working<br />
|
||||
Based on [Issue 231](https://github.com/Micke-K/IntuneManagement/issues/231)<br />
|
||||
This required some rewriting of the core documentation and an update to all output providers<br />
|
||||
This will make it easier to add additional tables to the documentation in the future<br />
|
||||
- Fixed issue with missing group name when exporting CSV<br />
|
||||
Based on [Issue 274](https://github.com/Micke-K/IntuneManagement/issues/274)<br />
|
||||
- Fixed issue with Authentication Strength when documenting Conditional Access policies<br />
|
||||
- Language files re-generated<br />
|
||||
- ObjectInfo files re-generated. Some Android updates<br />
|
||||
- ObjectCategory file re-generated<br />
|
||||
|
||||
- **Compare**<br />
|
||||
- Fixed issue with assignments on exported files when doing a Documentation compare<br />
|
||||
The group name was not resolved from migration table file<br />
|
||||
Based on [Issue 274](https://github.com/Micke-K/IntuneManagement/issues/274)<br />
|
||||
|
||||
- **Authentication**<br />
|
||||
- Added setting to allow Sort Tenant List<br />
|
||||
Based on [Issue 265](https://github.com/Micke-K/IntuneManagement/issues/265)<br />
|
||||
|
||||
<br />
|
||||
|
||||
## 3.9.7 - 2024-06-27
|
||||
|
||||
**New features**
|
||||
@@ -29,7 +76,7 @@
|
||||
|
||||
- **Documentation**<br />
|
||||
- App Configuration (Device) documentation updated<br />
|
||||
Hopfully add support for Android. Not verified since I don't have one in my test environment<br />
|
||||
Initial support for Android<br />
|
||||
Please continue discussion on the Issue below if this is still not working<br />
|
||||
Based on [Issue 231](https://github.com/Micke-K/IntuneManagement/issues/231)<br />
|
||||
- Added support for documenting MacOS Custom attribute<br />
|
||||
|
||||
@@ -21,7 +21,17 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="0,0,5,0" >
|
||||
<Label Content="Export root" />
|
||||
<Rectangle Style="{DynamicResource InfoIcon}" ToolTip="The root folder where exported files will be stored" />
|
||||
<Rectangle Style="{DynamicResource InfoIcon}">
|
||||
<Rectangle.ToolTip>
|
||||
<TextBlock>
|
||||
The root folder where exported files will be stored. Supported variables:<LineBreak />
|
||||
<Bold>%Date%</Bold> Will be replaced by date in format: yyyy-MM-dd<LineBreak />
|
||||
<Bold>%DateTime%</Bold> Will be replaced by date and time in format: yyyyMMdd-HHmm<LineBreak />
|
||||
<Bold>%Organization%</Bold> Will be replaced with the Tenant name<LineBreak />
|
||||
<Bold>Any environment variable</Bold> Replace with the value of the environment variable
|
||||
</TextBlock>
|
||||
</Rectangle.ToolTip>
|
||||
</Rectangle>
|
||||
</StackPanel>
|
||||
|
||||
<Grid Grid.Column='1' Grid.Row='0'>
|
||||
|
||||
Reference in New Issue
Block a user