@@ -10,7 +10,6 @@ Function Invoke-AddOfficeApp {
1010 [CmdletBinding ()]
1111 param ($Request , $TriggerMetadata )
1212
13- $APIName = $Request.Params.CIPPEndpoint
1413 # Input bindings are passed in via param block.
1514 $Tenants = $Request.body.selectedTenants.defaultDomainName
1615 if (' AllTenants' -in $Tenants ) { $Tenants = (Get-Tenants ).defaultDomainName }
@@ -20,51 +19,74 @@ Function Invoke-AddOfficeApp {
2019 try {
2120 $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' }
2221 if (! $ExistingO365 ) {
23- $Arch = if ( $request .body.arch ) { ' x64 ' } else { ' x86 ' }
24- $products = @ ( ' o365ProPlusRetail ' )
25- $ExcludedApps = [ pscustomobject ] @ {
26- infoPath = $true
27- sharePointDesigner = $true
28- excel = $false
29- lync = $false
30- oneNote = $false
31- outlook = $false
32- powerPoint = $false
33- publisher = $false
34- teams = $false
35- word = $false
36- access = $false
37- bing = $false
38- }
39- foreach ( $ExcludedApp in $request .body.excludedApps.value ) {
40- $ExcludedApps . $excludedapp = $true
22+ # Check if custom XML is provided
23+ if ( $request .body.useCustomXml -and $request .body.customXml ) {
24+ # Use custom XML configuration
25+ $ObjBody = [ pscustomobject ] @ {
26+ ' @odata.type ' = ' #microsoft.graph.officeSuiteApp '
27+ ' displayName ' = ' Microsoft 365 Apps for Windows 10 and later '
28+ ' description ' = ' Microsoft 365 Apps for Windows 10 and later '
29+ ' informationUrl ' = ' https://products.office.com/en-us/explore-office-for-home '
30+ ' isFeatured ' = $true
31+ ' publisher ' = ' Microsoft '
32+ ' notes ' = ' '
33+ ' owner ' = ' Microsoft '
34+ ' officeConfigurationXml ' = [ System.Convert ]::ToBase64String([ System.Text.Encoding ]::UTF8.GetBytes( $request .body.customXml ))
35+ ' largeIcon ' = @ {
36+ ' type ' = ' image/png '
37+ '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'
38+ }
39+ }
4140 }
42- $ObjBody = [pscustomobject ]@ {
43- ' @odata.type' = ' #microsoft.graph.officeSuiteApp'
44- ' displayName' = ' Microsoft 365 Apps for Windows 10 and later'
45- ' description' = ' Microsoft 365 Apps for Windows 10 and later'
46- ' informationUrl' = ' https://products.office.com/en-us/explore-office-for-home'
47- ' isFeatured' = $true
48- ' publisher' = ' Microsoft'
49- ' notes' = ' '
50- ' owner' = ' Microsoft'
51- ' autoAcceptEula' = [bool ]$request.body.AcceptLicense
52- ' excludedApps' = $ExcludedApps
53- ' officePlatformArchitecture' = $Arch
54- ' officeSuiteAppDefaultFileFormat' = ' OfficeOpenXMLFormat'
55- ' localesToInstall' = @ ($request.body.languages.value )
56- ' shouldUninstallOlderVersionsOfOffice' = [bool ]$request.body.RemoveVersions
57- ' updateChannel' = $request.body.updateChannel.value
58- ' useSharedComputerActivation' = [bool ]$request.body.SharedComputerActivation
59- ' productIds' = $products
60- ' largeIcon' = @ {
61- ' type' = ' image/png'
62- '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+ else {
42+ # Use standard configuration
43+ $Arch = if ($request.body.arch ) { ' x64' } else { ' x86' }
44+ $products = @ (' o365ProPlusRetail' )
45+ $ExcludedApps = [pscustomobject ]@ {
46+ infoPath = $true
47+ sharePointDesigner = $true
48+ excel = $false
49+ lync = $false
50+ oneNote = $false
51+ outlook = $false
52+ powerPoint = $false
53+ publisher = $false
54+ teams = $false
55+ word = $false
56+ access = $false
57+ bing = $false
58+ }
59+ foreach ($ExcludedApp in $request.body.excludedApps.value ) {
60+ $ExcludedApps .$excludedapp = $true
61+ }
62+ $ObjBody = [pscustomobject ]@ {
63+ ' @odata.type' = ' #microsoft.graph.officeSuiteApp'
64+ ' displayName' = ' Microsoft 365 Apps for Windows 10 and later'
65+ ' description' = ' Microsoft 365 Apps for Windows 10 and later'
66+ ' informationUrl' = ' https://products.office.com/en-us/explore-office-for-home'
67+ ' isFeatured' = $true
68+ ' publisher' = ' Microsoft'
69+ ' notes' = ' '
70+ ' owner' = ' Microsoft'
71+ ' autoAcceptEula' = [bool ]$request.body.AcceptLicense
72+ ' excludedApps' = $ExcludedApps
73+ ' officePlatformArchitecture' = $Arch
74+ ' officeSuiteAppDefaultFileFormat' = ' OfficeOpenXMLFormat'
75+ ' localesToInstall' = @ ($request.body.languages.value )
76+ ' shouldUninstallOlderVersionsOfOffice' = [bool ]$request.body.RemoveVersions
77+ ' updateChannel' = $request.body.updateChannel.value
78+ ' useSharedComputerActivation' = [bool ]$request.body.SharedComputerActivation
79+ ' productIds' = $products
80+ ' largeIcon' = @ {
81+ ' type' = ' image/png'
82+ '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='
83+ }
6384 }
6485 }
6586 Write-Host ($ObjBody | ConvertTo-Json - Compress)
6687 $OfficeAppID = New-graphPostRequest - Uri ' https://graph.microsoft.com/beta/deviceAppManagement/mobileApps' - tenantid $tenant - Body (ConvertTo-Json - InputObject $ObjBody - Depth 10 ) - type POST
67- } else {
88+ }
89+ else {
6890 " Office deployment already exists for $ ( $Tenant ) "
6991 Continue
7092 }
@@ -75,7 +97,8 @@ Function Invoke-AddOfficeApp {
7597 Write-LogMessage - headers $Request.Headers - API $APIName - tenant $ ($tenant ) - message " Assigned Office to $AssignTo " - Sev ' Info'
7698 }
7799 " Successfully added Office App for $ ( $Tenant ) "
78- } catch {
100+ }
101+ catch {
79102 " Failed to add Office App for $ ( $Tenant ) : $ ( $_.Exception.Message ) "
80103 Write-LogMessage - headers $Request.Headers - API $APIName - tenant $ ($tenant ) - message " Failed to add Office App. Error: $ ( $_.Exception.Message ) " - Sev ' Error'
81104 continue
@@ -89,7 +112,4 @@ Function Invoke-AddOfficeApp {
89112 StatusCode = [HttpStatusCode ]::OK
90113 Body = $body
91114 })
92-
93-
94-
95115}
0 commit comments