Scripts/Set-AzIntegrationAccountPartners.ps1
param( [Parameter(Mandatory = $true)][string] $ResourceGroupName = $(throw "Resource group name is required"), [Parameter(Mandatory = $true)][string] $Name = $(throw "Name of the Integration Account is required"), [parameter(Mandatory = $false)][string] $PartnerFilePath = $(if ($PartnersFolder -eq '') { throw "Either the file path of a specific partner or the file path of a folder containing multiple partners is required, e.g.: -PartnerFilePath 'C:\Partners\partner.json' or -PartnersFolder 'C:\Partners'" }), [parameter(Mandatory = $false)][string] $PartnersFolder = $(if ($PartnerFilePath -eq '') { throw "Either the file path of a specific partner or the file path of a folder containing multiple partners is required, e.g.: -PartnerFilePath 'C:\Partners\partner.json' or -PartnersFolder 'C:\Partners'" }), [Parameter(Mandatory = $false)][string] $ArtifactsPrefix = '' ) if ($PartnerFilePath -ne '' -and $PartnersFolder -ne '') { throw "Either the file path of a specific partner or the file path of a folder containing multiple partners is required, e.g.: -PartnerFilePath 'C:\Partners\partner.json' or -PartnersFolder 'C:\Partners'" } function UploadPartner { param( [Parameter(Mandatory = $true)][System.IO.FileInfo] $Partner ) $partnerData = Get-Content -Raw -Path $Partner.FullName | ConvertFrom-Json $partnerName = $partnerData.name if ($partnerName -eq $null -or $partnerName -eq '') { throw "Cannot upload Partner to Azure Integration Account '$Name' because the partner name is empty" } if ($ArtifactsPrefix -ne '') { $partnerName = $ArtifactsPrefix + $partnerName } Write-Verbose "Uploading partner '$partnerName' into the Azure Integration Account '$Name'..." $businessIdentities = $null foreach ($businessIdentity in $partnerData.properties.content.b2b.businessIdentities) { $qualifier = $businessIdentity.qualifier $value = $businessIdentity.value $businessIdentities += , @("$qualifier", "$value") } if ($businessIdentities.Count -eq 0) { throw "Cannot upload Partner to Azure Integration Account '$Name' because at least one business identity must be supplied" } $existingPartner = $null try { Write-Verbose "Checking if the partner '$partnerName' already exists in the Azure Integration Account '$Name'..." $existingPartner = Get-AzIntegrationAccountPartner -ResourceGroupName $ResourceGroupName -IntegrationAccount $Name -PartnerName $partnerName -ErrorAction Stop } catch { if ($_.Exception.Message.Contains('could not be found')) { Write-Warning "No partner '$partnerName' could not be found in Azure Integration Account '$Name'" } else { throw $_.Exception } } try { if ($existingPartner -eq $null) { Write-Verbose "Creating partner '$partnerName' in Azure Integration Account '$Name'..." $createdPartner = New-AzIntegrationAccountPartner -ResourceGroupName $ResourceGroupName -IntegrationAccount $Name -PartnerName $partnerName -BusinessIdentities $businessIdentities -ErrorAction Stop Write-Debug ($createdPartner | Format-List -Force | Out-String) } else { Write-Verbose "Updating partner '$partnerName' in Azure Integration Account '$Name'..." $updatedPartner = Set-AzIntegrationAccountPartner -ResourceGroupName $ResourceGroupName -IntegrationAccount $Name -PartnerName $partnerName -BusinessIdentities $businessIdentities -Force -ErrorAction Stop Write-Debug ($updatedPartner | Format-List -Force | Out-String) } Write-Host "Partner '$partnerName' has been uploaded into the Azure Integration Account '$Name'" -ForegroundColor Green } catch { Write-Error "Failed to upload partner '$partnerName' in Azure Integration Account '$Name'. Details: '$($_.Exception.Message)'" } } $integrationAccount = Get-AzIntegrationAccount -ResourceGroupName $ResourceGroupName -Name $Name -ErrorAction SilentlyContinue if ($integrationAccount -eq $null) { Write-Error "Unable to find the Azure Integration Account with name '$Name' in resource group '$ResourceGroupName'" } else { if ($PartnersFolder -ne '' -and $PartnerFilePath -eq '') { foreach ($partner in Get-ChildItem($PartnersFolder) -File) { UploadPartner -Partner $partner } } elseif ($PartnersFolder -eq '' -and $PartnerFilePath -ne '') { [System.IO.FileInfo]$partner = New-Object System.IO.FileInfo($PartnerFilePath) UploadPartner -Partner $partner } } |