Public/Update-CPCAzureNetworkConnection.ps1
|
function Update-CPCAzureNetworkConnection { <# .SYNOPSIS Updates an existing Azure Network Connection .DESCRIPTION Updates an existing Azure Network Connection (cloudPcOnPremisesConnection) in the Cloud PC service via the Microsoft Graph v1.0 API. Only the properties you supply are changed; omitted properties retain their current values. Target the connection by its display name (looked up via Get-CPCAzureNetworkConnection) or by its object ID directly via -ConnectionId. .PARAMETER Name Display name of the Azure Network Connection to update. Mutually exclusive with -ConnectionId. .PARAMETER ConnectionId Object ID (GUID) of the Azure Network Connection to update. Mutually exclusive with -Name. .PARAMETER DisplayName New display name for the Azure Network Connection. .PARAMETER SubscriptionId New Azure subscription ID to associate with the connection. .PARAMETER ResourceGroupId New resource group resource ID. Required format: /subscriptions/{subscription-id}/resourceGroups/{resourceGroupName} .PARAMETER VirtualNetworkId New virtual network resource ID. Required format: /subscriptions/{subscription-id}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName} .PARAMETER SubnetId New subnet resource ID. Required format: /subscriptions/{subscription-id}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName} .PARAMETER AdDomainName New Active Directory domain FQDN. Applicable to Hybrid Azure AD Join connections only. .PARAMETER AdDomainUserName New AD domain join account UPN (e.g. admin@contoso.com). Hybrid Azure AD Join only. .PARAMETER AdDomainPassword New password for the AD domain join account as a SecureString. Hybrid Azure AD Join only. .PARAMETER OrganizationalUnit New OU distinguished name for computer accounts (e.g. OU=CloudPCs,DC=contoso,DC=com). Hybrid Azure AD Join only. .EXAMPLE Update-CPCAzureNetworkConnection -Name "Contoso Network" -SubnetId "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RG01/providers/Microsoft.Network/virtualNetworks/VNet01/subnets/NewSubnet01" .EXAMPLE Update-CPCAzureNetworkConnection -ConnectionId "00000000-0000-0000-0000-000000000000" -DisplayName "Contoso Network Updated" .EXAMPLE Update-CPCAzureNetworkConnection -Name "Contoso Hybrid Network" -AdDomainUserName "newadmin@contoso.com" -AdDomainPassword (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -WhatIf .NOTES Requires CloudPC.ReadWrite.All permission (delegated or application). API reference: https://learn.microsoft.com/en-us/graph/api/cloudpconpremisesconnection-update #> [CmdletBinding(DefaultParameterSetName = 'Name', SupportsShouldProcess = $true)] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Name')] [ValidateNotNullOrEmpty()] [string]$Name, [Parameter(Mandatory = $true, ParameterSetName = 'Id')] [ValidateNotNullOrEmpty()] [string]$ConnectionId, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [string]$DisplayName, [Parameter(Mandatory = $false)] [string]$SubscriptionId, [Parameter(Mandatory = $false)] [string]$ResourceGroupId, [Parameter(Mandatory = $false)] [string]$VirtualNetworkId, [Parameter(Mandatory = $false)] [string]$SubnetId, [Parameter(Mandatory = $false)] [string]$AdDomainName, [Parameter(Mandatory = $false)] [string]$AdDomainUserName, [Parameter(Mandatory = $false)] [securestring]$AdDomainPassword, [Parameter(Mandatory = $false)] [string]$OrganizationalUnit ) Begin { Get-TokenValidity if ($PSCmdlet.ParameterSetName -eq 'Name') { $connection = Get-CPCAzureNetworkConnection -Name $Name if ($null -eq $connection) { Throw "No Azure Network Connection found with name '$Name'. Use Get-CPCAzureNetworkConnection to verify the display name." } $targetId = $connection.id $targetName = $connection.displayName } else { $targetId = $ConnectionId $targetName = $ConnectionId } $url = "https://graph.microsoft.com/$script:MSGraphVersion/deviceManagement/virtualEndpoint/onPremisesConnections/$targetId" Write-Verbose "Update url: $url" } Process { $params = @{} if ($PSBoundParameters.ContainsKey('DisplayName')) { $params['displayName'] = $DisplayName } if ($PSBoundParameters.ContainsKey('SubscriptionId')) { $params['subscriptionId'] = $SubscriptionId } if ($PSBoundParameters.ContainsKey('ResourceGroupId')) { $params['resourceGroupId'] = $ResourceGroupId } if ($PSBoundParameters.ContainsKey('VirtualNetworkId')) { $params['virtualNetworkId'] = $VirtualNetworkId } if ($PSBoundParameters.ContainsKey('SubnetId')) { $params['subnetId'] = $SubnetId } if ($PSBoundParameters.ContainsKey('AdDomainName')) { $params['adDomainName'] = $AdDomainName } if ($PSBoundParameters.ContainsKey('AdDomainUserName')) { $params['adDomainUsername'] = $AdDomainUserName } if ($PSBoundParameters.ContainsKey('AdDomainPassword')) { $params['adDomainPassword'] = $($AdDomainPassword | ConvertFrom-SecureString -AsPlainText) } if ($PSBoundParameters.ContainsKey('OrganizationalUnit')) { $params['organizationalUnit'] = $OrganizationalUnit } if ($params.Count -eq 0) { Write-Warning "No update properties were specified. Provide at least one parameter to update." return } $body = $params | ConvertTo-Json -Depth 10 if ($PSCmdlet.ShouldProcess($targetName, 'Update Azure Network Connection')) { try { Write-Verbose "Updating Azure Network Connection '$targetName'" $result = Invoke-WebRequest -Uri $url -Method PATCH -Headers $script:authHeader -Body $body -ContentType "application/json" Write-Verbose "Result: $($result.Content)" return $result } catch { Throw (Get-GraphErrorMessage $_) } } } } |