@@ -13,8 +13,6 @@ Function Invoke-AddOfficeApp {
1313 $APIName = $Request.Params.CIPPEndpoint
1414 $Headers = $Request.Headers
1515
16-
17-
1816 # Input bindings are passed in via param block.
1917 $Tenants = $Request.body.selectedTenants.defaultDomainName
2018 if (' AllTenants' -in $Tenants ) { $Tenants = (Get-Tenants ).defaultDomainName }
@@ -24,51 +22,74 @@ Function Invoke-AddOfficeApp {
2422 try {
2523 $ExistingO365 = New-graphGetRequest - Uri ' https://graph.microsoft.com/beta/deviceAppManagement/mobileApps' - tenantid $tenant | Where-Object { $_.displayname -eq ' Microsoft 365 Apps for Windows 10 and later' }
2624 if (! $ExistingO365 ) {
27- $Arch = if ( $request .body.arch ) { ' x64 ' } else { ' x86 ' }
28- $products = @ ( ' o365ProPlusRetail ' )
29- $ExcludedApps = [ pscustomobject ] @ {
30- infoPath = $true
31- sharePointDesigner = $true
32- excel = $false
33- lync = $false
34- oneNote = $false
35- outlook = $false
36- powerPoint = $false
37- publisher = $false
38- teams = $false
39- word = $false
40- access = $false
41- bing = $false
42- }
43- foreach ( $ExcludedApp in $request .body.excludedApps.value ) {
44- $ExcludedApps . $excludedapp = $true
25+ # Check if custom XML is provided
26+ if ( $request .body.useCustomXml -and $request .body.customXml ) {
27+ # Use custom XML configuration
28+ $ObjBody = [ pscustomobject ] @ {
29+ ' @odata.type ' = ' #microsoft.graph.officeSuiteApp '
30+ ' displayName ' = ' Microsoft 365 Apps for Windows 10 and later '
31+ ' description ' = ' Microsoft 365 Apps for Windows 10 and later '
32+ ' informationUrl ' = ' https://products.office.com/en-us/explore-office-for-home '
33+ ' isFeatured ' = $true
34+ ' publisher ' = ' Microsoft '
35+ ' notes ' = ' '
36+ ' owner ' = ' Microsoft '
37+ ' officeConfigurationXml ' = [ System.Convert ]::ToBase64String([ System.Text.Encoding ]::UTF8.GetBytes( $request .body.customXml ))
38+ ' largeIcon ' = @ {
39+ ' type ' = ' image/png '
40+ 'value' = 'iVBORw0KGgoAAAANSUhEUgAAAF0AAAAeCAMAAAEOZNKlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJhUExURf////7z7/i9qfF1S/KCW/i+qv3q5P/9/PrQwfOMae1RG+s8AOxGDfBtQPWhhPvUx/759/zg1vWgg+9fLu5WIvKFX/rSxP728/nCr/FyR+tBBvOMaO1UH+1RHOs+AvSScP3u6f/+/v3s5vzg1+xFDO9kNPOOa/i7pvzj2/vWyes9Af76+Pzh2PrTxf/6+f7y7vOGYexHDv3t5+1SHfi8qPOIZPvb0O1NFuxDCe9hMPSVdPnFs/3q4/vaz/STcu5VIe5YJPWcfv718v/9/e1MFfF4T/F4TvF2TP3o4exECvF0SexIEPONavzn3/vZze1QGvF3Te5dK+5cKvrPwPrQwvKAWe1OGPexmexKEveulfezm/BxRfamiuxLE/apj/zf1e5YJfSXd/OHYv3r5feznPakiPze1P7x7f739f3w6+xJEfnEsvWdf/Wfge1LFPe1nu9iMvnDsfBqPOs/BPOIY/WZevJ/V/zl3fnIt/vTxuxHD+xEC+9mN+5ZJv749vBpO/KBWvBwRP/8+/SUc/etlPjArP/7+vOLZ/F7UvWae/708e1OF/aihvSWdvi8p+tABfSZefvVyPWihfSVde9lNvami+9jM/zi2fKEXvBuQvOKZvalifF5UPJ/WPSPbe9eLfrKuvvd0uxBB/7w7Pzj2vrRw/rOv+1PGfi/q/eymu5bKf3n4PnJuPBrPf3t6PWfgvWegOxCCO9nOO9oOfaskvSYePi5pPi2oPnGtO5eLPevlvKDXfrNvv739Pzd0/708O9gL+9lNfJ9VfrLu/OPbPnDsPBrPus+A/nArfarkQAAAGr5HKgAAADLdFJOU/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AvuakogAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAz5JREFUOE+tVTtu4zAQHQjppmWzwIJbEVCzpTpjbxD3grQHSOXKRXgCAT6EC7UBVAmp3KwBnmvfzNCyZTmxgeTZJsXx43B+HBHRE34ZkXgkerXFTheeiCkRrbB4UXmp4wSWz5raaQEMTM5TZwuiXoaKgV+6FsmkZQcSy0kA71yMTMGHanX+AzMMGLAQCxU1F/ZwjULPugazl82GM0NEKm/U8EqFwEkO3/EAT4grgl0nucwlk9pcpTTJ4VPA4g/Rb3yIRhhp507e9nTQmZ1OS5RO4sS7nIRPEeHXCHdkw9ZEW2yVE5oIS7peD58Avs7CN+PVCmHh21oOqBdjDzIs+FldPJ74TFESUSJEfVzy9U/dhu+AuOT6eBp6gGKyXEx8euO450ZE4CMfstMFT44broWw/itkYErWXRx+fFArt9Ca9os78TFed0LVIUsmIHrwbwaw3BEOnOk94qVpQ6Ka2HjxewJnfyd6jUtGDQLdWlzmYNYLeKbbGOucJsNabCq1Yub0o92rtR+i30V2dapxYVEePXcOjeCKPnYyit7BtKeNlZqHbr+gt7i+AChWA9RsRs03pxTQc67ouWpxyESvjK5Vs3DVSy3IpkxPm5X+wZoBi+MFHWW69/w8FRhc7VBe6HAhMB2b8Q0XqDzTNZtXUMnKMjwKVaCrB/CSUL7WSx/HsdJC86lFGXwnioTeOMPjV+szlFvrZLA5VMVK4y+41l4e1xfx7Z88o4hkilRUH/qKqwNVlgDgpvYCpH3XwAy5eMCRnezIUxffVXoDql2rTHFDO+pjWnTWzAfrYXn6BFECblUpWGrvPZvBipETjS5ydM7tdXpH41ZCEbBNy/+wFZu71QO2t9pgT+iZEf657Q1vpN94PQNDxUHeKR103LV9nPVOtDikcNKO+2naCw7yKBhOe9Hm79pe8C4/CfC2wDjXnqC94kEeBU3WwN7dt/2UScXas7zDl5GpkY+M8WKv2J7fd4Ib2rGTk+jsC2cleEM7jI9veF7B0MBJrsZqfKd/81q9pR2NZfwJK2JzsmIT1Ns8jUH0UusQBpU8d2JzsHiXg1zXGLqxfitUNTDT/nUUeqDBp2HZVr+Ocqi/Ty3Rf4Jn82xxfSNtAAAAAElFTkSuQmCC'
41+ }
42+ }
4543 }
46- $ObjBody = [pscustomobject ]@ {
47- ' @odata.type' = ' #microsoft.graph.officeSuiteApp'
48- ' displayName' = ' Microsoft 365 Apps for Windows 10 and later'
49- ' description' = ' Microsoft 365 Apps for Windows 10 and later'
50- ' informationUrl' = ' https://products.office.com/en-us/explore-office-for-home'
51- ' isFeatured' = $true
52- ' publisher' = ' Microsoft'
53- ' notes' = ' '
54- ' owner' = ' Microsoft'
55- ' autoAcceptEula' = [bool ]$request.body.AcceptLicense
56- ' excludedApps' = $ExcludedApps
57- ' officePlatformArchitecture' = $Arch
58- ' officeSuiteAppDefaultFileFormat' = ' OfficeOpenXMLFormat'
59- ' localesToInstall' = @ ($request.body.languages.value )
60- ' shouldUninstallOlderVersionsOfOffice' = [bool ]$request.body.RemoveVersions
61- ' updateChannel' = $request.body.updateChannel.value
62- ' useSharedComputerActivation' = [bool ]$request.body.SharedComputerActivation
63- ' productIds' = $products
64- ' largeIcon' = @ {
65- ' type' = ' image/png'
66- 'value' = 'iVBORw0KGgoAAAANSUhEUgAAAF0AAAAeCAMAAAEOZNKlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJhUExURf////7z7/i9qfF1S/KCW/i+qv3q5P/9/PrQwfOMae1RG+s8AOxGDfBtQPWhhPvUx/759/zg1vWgg+9fLu5WIvKFX/rSxP728/nCr/FyR+tBBvOMaO1UH+1RHOs+AvSScP3u6f/+/v3s5vzg1+xFDO9kNPOOa/i7pvzj2/vWyes9Af76+Pzh2PrTxf/6+f7y7vOGYexHDv3t5+1SHfi8qPOIZPvb0O1NFuxDCe9hMPSVdPnFs/3q4/vaz/STcu5VIe5YJPWcfv718v/9/e1MFfF4T/F4TvF2TP3o4exECvF0SexIEPONavzn3/vZze1QGvF3Te5dK+5cKvrPwPrQwvKAWe1OGPexmexKEveulfezm/BxRfamiuxLE/apj/zf1e5YJfSXd/OHYv3r5feznPakiPze1P7x7f739f3w6+xJEfnEsvWdf/Wfge1LFPe1nu9iMvnDsfBqPOs/BPOIY/WZevJ/V/zl3fnIt/vTxuxHD+xEC+9mN+5ZJv749vBpO/KBWvBwRP/8+/SUc/etlPjArP/7+vOLZ/F7UvWae/708e1OF/aihvSWdvi8p+tABfSZefvVyPWihfSVde9lNvami+9jM/zi2fKEXvBuQvOKZvalifF5UPJ/WPSPbe9eLfrKuvvd0uxBB/7w7Pzj2vrRw/rOv+1PGfi/q/eymu5bKf3n4PnJuPBrPf3t6PWfgvWegOxCCO9nOO9oOfaskvSYePi5pPi2oPnGtO5eLPevlvKDXfrNvv739Pzd0/708O9gL+9lNfJ9VfrLu/OPbPnDsPBrPus+A/nArfarkQAAAGr5HKgAAADLdFJOU/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AvuakogAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAz5JREFUOE+tVTtu4zAQHQjppmWzwIJbEVCzpTpjbxD3grQHSOXKRXgCAT6EC7UBVAmp3KwBnmvfzNCyZTmxgeTZJsXx43B+HBHRE34ZkXgkerXFTheeiCkRrbB4UXmp4wSWz5raaQEMTM5TZwuiXoaKgV+6FsmkZQcSy0kA71yMTMGHanX+AzMMGLAQCxU1F/ZwjULPugazl82GM0NEKm/U8EqFwEkO3/EAT4grgl0nucwlk9pcpTTJ4VPA4g/Rb3yIRhhp507e9nTQmZ1OS5RO4sS7nIRPEeHXCHdkw9ZEW2yVE5oIS7peD58Avs7CN+PVCmHh21oOqBdjDzIs+FldPJ74TFESUSJEfVzy9U/dhu+AuOT6eBp6gGKyXEx8euO450ZE4CMfstMFT44broWw/itkYErWXRx+fFArt9Ca9os78TFed0LVIUsmIHrwbwaw3BEOnOk94qVpQ6Ka2HjxewJnfyd6jUtGDQLdWlzmYNYLeKbbGOucJsNabCq1Yub0o92rtR+i30V2dapxYVEePXcOjeCKPnYyit7BtKeNlZqHbr+gt7i+AChWA9RsRs03pxTQc67ouWpxyESvjK5Vs3DVSy3IpkxPm5X+wZoBi+MFHWW69/w8FRhc7VBe6HAhMB2b8Q0XqDzTNZtXUMnKMjwKVaCrB/CSUL7WSx/HsdJC86lFGXwnioTeOMPjV+szlFvrZLA5VMVK4y+41l4e1xfx7Z88o4hkilRUH/qKqwNVlgDgpvYCpH3XwAy5eMCRnezIUxffVXoDql2rTHFDO+pjWnTWzAfrYXn6BFECblUpWGrvPZvBipETjS5ydM7tdXpH41ZCEbBNy/+wFZu71QO2t9pgT+iZEf657Q1vpN94PQNDxUHeKR103LV9nPVOtDikcNKO+2naCw7yKBhOe9Hm79pe8C4/CfC2wDjXnqC94kEeBU3WwN7dt/2UScXas7zDl5GpkY+M8WKv2J7fd4Ib2rGTk+jsC2cleEM7jI9veF7B0MBJrsZqfKd/81q9pR2NZfwJK2JzsmIT1Ns8jUH0UusQBpU8d2JzsHiXg1zXGLqxfitUNTDT/nUUeqDBp2HZVr+Ocqi/Ty3Rf4Jn82xxfSNtAAAAAElFTkSuQmCC'
44+ else {
45+ # Use standard configuration
46+ $Arch = if ($request.body.arch ) { ' x64' } else { ' x86' }
47+ $products = @ (' o365ProPlusRetail' )
48+ $ExcludedApps = [pscustomobject ]@ {
49+ infoPath = $true
50+ sharePointDesigner = $true
51+ excel = $false
52+ lync = $false
53+ oneNote = $false
54+ outlook = $false
55+ powerPoint = $false
56+ publisher = $false
57+ teams = $false
58+ word = $false
59+ access = $false
60+ bing = $false
61+ }
62+ foreach ($ExcludedApp in $request.body.excludedApps.value ) {
63+ $ExcludedApps .$excludedapp = $true
64+ }
65+ $ObjBody = [pscustomobject ]@ {
66+ ' @odata.type' = ' #microsoft.graph.officeSuiteApp'
67+ ' displayName' = ' Microsoft 365 Apps for Windows 10 and later'
68+ ' description' = ' Microsoft 365 Apps for Windows 10 and later'
69+ ' informationUrl' = ' https://products.office.com/en-us/explore-office-for-home'
70+ ' isFeatured' = $true
71+ ' publisher' = ' Microsoft'
72+ ' notes' = ' '
73+ ' owner' = ' Microsoft'
74+ ' autoAcceptEula' = [bool ]$request.body.AcceptLicense
75+ ' excludedApps' = $ExcludedApps
76+ ' officePlatformArchitecture' = $Arch
77+ ' officeSuiteAppDefaultFileFormat' = ' OfficeOpenXMLFormat'
78+ ' localesToInstall' = @ ($request.body.languages.value )
79+ ' shouldUninstallOlderVersionsOfOffice' = [bool ]$request.body.RemoveVersions
80+ ' updateChannel' = $request.body.updateChannel.value
81+ ' useSharedComputerActivation' = [bool ]$request.body.SharedComputerActivation
82+ ' productIds' = $products
83+ ' largeIcon' = @ {
84+ ' type' = ' image/png'
85+ 'value' = 'iVBORw0KGgoAAAANSUhEUgAAAF0AAAAeCAMAAAEOZNKlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJhUExURf////7z7/i9qfF1S/KCW/i+qv3q5P/9/PrQwfOMae1RG+s8AOxGDfBtQPWhhPvUx/759/zg1vWgg+9fLu5WIvKFX/rSxP728/nCr/FyR+tBBvOMaO1UH+1RHOs+AvSScP3u6f/+/v3s5vzg1+xFDO9kNPOOa/i7pvzj2/vWyes9Af76+Pzh2PrTxf/6+f7y7vOGYexHDv3t5+1SHfi8qPOIZPvb0O1NFuxDCe9hMPSVdPnFs/3q4/vaz/STcu5VIe5YJPWcfv718v/9/e1MFfF4T/F4TvF2TP3o4exECvF0SexIEPONavzn3/vZze1QGvF3Te5dK+5cKvrPwPrQwvKAWe1OGPexmexKEveulfezm/BxRfamiuxLE/apj/zf1e5YJfSXd/OHYv3r5feznPakiPze1P7x7f739f3w6+xJEfnEsvWdf/Wfge1LFPe1nu9iMvnDsfBqPOs/BPOIY/WZevJ/V/zl3fnIt/vTxuxHD+xEC+9mN+5ZJv749vBpO/KBWvBwRP/8+/SUc/etlPjArP/7+vOLZ/F7UvWae/708e1OF/aihvSWdvi8p+tABfSZefvVyPWihfSVde9lNvami+9jM/zi2fKEXvBuQvOKZvalifF5UPJ/WPSPbe9eLfrKuvvd0uxBB/7w7Pzj2vrRw/rOv+1PGfi/q/eymu5bKf3n4PnJuPBrPf3t6PWfgvWegOxCCO9nOO9oOfaskvSYePi5pPi2oPnGtO5eLPevlvKDXfrNvv739Pzd0/708O9gL+9lNfJ9VfrLu/OPbPnDsPBrPus+A/nArfarkQAAAGr5HKgAAADLdFJOU/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AvuakogAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAz5JREFUOE+tVTtu4zAQHQjppmWzwIJbEVCzpTpjbxD3grQHSOXKRXgCAT6EC7UBVAmp3KwBnmvfzNCyZTmxgeTZJsXx43B+HBHRE34ZkXgkerXFTheeiCkRrbB4UXmp4wSWz5raaQEMTM5TZwuiXoaKgV+6FsmkZQcSy0kA71yMTMGHanX+AzMMGLAQCxU1F/ZwjULPugazl82GM0NEKm/U8EqFwEkO3/EAT4grgl0nucwlk9pcpTTJ4VPA4g/Rb3yIRhhp507e9nTQmZ1OS5RO4sS7nIRPEeHXCHdkw9ZEW2yVE5oIS7peD58Avs7CN+PVCmHh21oOqBdjDzIs+FldPJ74TFESUSJEfVzy9U/dhu+AuOT6eBp6gGKyXEx8euO450ZE4CMfstMFT44broWw/itkYErWXRx+fFArt9Ca9os78TFed0LVIUsmIHrwbwaw3BEOnOk94qVpQ6Ka2HjxewJnfyd6jUtGDQLdWlzmYNYLeKbbGOucJsNabCq1Yub0o92rtR+i30V2dapxYVEePXcOjeCKPnYyit7BtKeNlZqHbr+gt7i+AChWA9RsRs03pxTQc67ouWpxyESvjK5Vs3DVSy3IpkxPm5X+wZoBi+MFHWW69/w8FRhc7VBe6HAhMB2b8Q0XqDzTNZtXUMnKMjwKVaCrB/CSUL7WSx/HsdJC86lFGXwnioTeOMPjV+szlFvrZLA5VMVK4y+41l4e1xfx7Z88oXLhMo/hbYyqDV3FGjfD+Atbk7YjJAy9h/F4fWNbC6lwKUrhVUBPnPCDDsL0A/mLWxujCLvx4hE/VhOTf8j/C3kf3PWRqJKUAAAAASUVORK5CYII='
86+ }
6787 }
6888 }
6989 Write-Host ($ObjBody | ConvertTo-Json - Compress)
7090 $OfficeAppID = New-graphPostRequest - Uri ' https://graph.microsoft.com/beta/deviceAppManagement/mobileApps' - tenantid $tenant - Body (ConvertTo-Json - InputObject $ObjBody - Depth 10 ) - type POST
71- } else {
91+ }
92+ else {
7293 " Office deployment already exists for $ ( $Tenant ) "
7394 Continue
7495 }
@@ -79,7 +100,8 @@ Function Invoke-AddOfficeApp {
79100 Write-LogMessage - headers $Request.Headers - API $APIName - tenant $ ($tenant ) - message " Assigned Office to $AssignTo " - Sev ' Info'
80101 }
81102 " Successfully added Office App for $ ( $Tenant ) "
82- } catch {
103+ }
104+ catch {
83105 " Failed to add Office App for $ ( $Tenant ) : $ ( $_.Exception.Message ) "
84106 Write-LogMessage - headers $Request.Headers - API $APIName - tenant $ ($tenant ) - message " Failed to add Office App. Error: $ ( $_.Exception.Message ) " - Sev ' Error'
85107 continue
@@ -94,7 +116,4 @@ Function Invoke-AddOfficeApp {
94116 StatusCode = [HttpStatusCode ]::OK
95117 Body = $body
96118 })
97-
98-
99-
100119}
0 commit comments