@@ -154,49 +154,127 @@ param(
154154 # Use the default credentials for the proxy
155155 ${ProxyUseDefaultCredentials}
156156)
157-
158157
159158 process {
160159 try {
160+ if ($PSBoundParameters.ContainsKey (' EnableSystemAssignedIdentity' ) -or $PSBoundParameters.ContainsKey (' UserAssignedIdentity' ) ) {
161+
162+ $EnvPSBoundParameters = @ {}
163+ if ($PSBoundParameters.ContainsKey (' Debug' )) {
164+ $EnvPSBoundParameters [' Debug' ] = $Debug
165+ }
166+ if ($PSBoundParameters.ContainsKey (' HttpPipelineAppend' )) {
167+ $EnvPSBoundParameters [' HttpPipelineAppend' ] = $HttpPipelineAppend
168+ }
169+ if ($PSBoundParameters.ContainsKey (' HttpPipelinePrepend' )) {
170+ $EnvPSBoundParameters [' HttpPipelinePrepend' ] = $HttpPipelinePrepend
171+ }
172+ if ($PSBoundParameters.ContainsKey (' Proxy' )) {
173+ $EnvPSBoundParameters [' Proxy' ] = $Proxy
174+ }
175+ if ($PSBoundParameters.ContainsKey (' ProxyCredential' )) {
176+ $EnvPSBoundParameters [' ProxyCredential' ] = $ProxyCredential
177+ }
178+ if ($PSBoundParameters.ContainsKey (' ProxyUseDefaultCredentials' )) {
179+ $EnvPSBoundParameters [' ProxyUseDefaultCredentials' ] = $ProxyUseDefaultCredentials
180+ }
181+ if ($PSBoundParameters.ContainsKey (' DefaultProfile' )) {
182+ $EnvPSBoundParameters [' DefaultProfile' ] = $DefaultProfile
183+ }
184+
185+ # Get LoadTesting DataObj
186+ $loadTestingObject = Az.LoadTesting.private\Get-AzLoad_Get - Name $Name - ResourceGroupName $ResourceGroupName - SubscriptionId $SubscriptionId @EnvPSBoundParameters
187+
188+ if ($null -eq $loadTestingObject ) {
189+ throw " $Name doesn't exist"
190+ }
191+
192+ # If user input UserAssignedIdentity
193+ if ($PSBoundParameters.ContainsKey (' UserAssignedIdentity' )) {
194+ $userIdentityObject = [Microsoft.Azure.PowerShell.Cmdlets.LoadTesting.Models.UserAssignedIdentity ]::New()
195+ $PSBoundParameters.IdentityUserAssignedIdentity = @ {}
196+ foreach ($item in $PSBoundParameters.UserAssignedIdentity ) {
197+ $PSBoundParameters.IdentityUserAssignedIdentity.Add ($item , $userIdentityObject )
198+ }
199+
200+ if ($loadTestingObject.IdentityUserAssignedIdentity.Count -gt 0 ) {
201+ $loadTestingObject.IdentityUserAssignedIdentity.Keys | ForEach-Object {
202+ if (-NOT ($_ -in $UserAssignedIdentity )) {
203+ $PSBoundParameters.IdentityUserAssignedIdentity.Add ($_ , $null )
204+ }
205+ }
206+ }
207+ }
208+
209+ # calculate IdentityType
210+ $supportsSystemAssignedIdentity = $EnableSystemAssignedIdentity -or (($null -eq $EnableSystemAssignedIdentity ) -and ($loadTestingObject.IdentityType.Contains (' SystemAssigned' )))
211+ $supportsUserAssignedIdentity = ($PSBoundParameters.ContainsKey (' UserAssignedIdentity' ) -and $UserAssignedIdentity.Length -gt 0 ) -or ((-not $PSBoundParameters.ContainsKey (' UserAssignedIdentity' )) -and ($loadTestingObject.IdentityType.Contains (' UserAssigned' )));
212+ if (($supportsSystemAssignedIdentity -and $supportsUserAssignedIdentity )) {
213+ $PSBoundParameters.Add (" IdentityType" , " SystemAssigned,UserAssigned" )
214+ }
215+ elseif ($supportsUserAssignedIdentity -and (-not $supportsSystemAssignedIdentity )) {
216+ $PSBoundParameters.Add (" IdentityType" , " UserAssigned" )
217+ }
218+ elseif ((-not $supportsUserAssignedIdentity ) -and $supportsSystemAssignedIdentity ) {
219+ $PSBoundParameters.Add (" IdentityType" , " SystemAssigned" )
220+ }
221+ else {
222+ $PSBoundParameters.Add (" IdentityType" , " None" )
223+ }
224+
225+ # remove EnableSystemAssignedIdentity
226+ if ($PSBoundParameters.ContainsKey (' EnableSystemAssignedIdentity' )) {
227+ $null = $PSBoundParameters.Remove (" EnableSystemAssignedIdentity" )
228+ }
229+ # remove UserAssignedIdentity
230+ if ($PSBoundParameters.ContainsKey (' UserAssignedIdentity' )) {
231+ $null = $PSBoundParameters.Remove (' UserAssignedIdentity' )
232+ }
233+ }
234+
161235 # if encryption identity has a value, populate the encryption identity type and encryption identity resource id
162236 # if encryption identity has value SystemAssigned, populate the encryption identity type as SystemAssigned and encryption identity resource id as null
163237 # else populate the encryption identity type as UserAssigned and encryption identity resource id as the value of encryption identity
164238 if ($PSBoundParameters.ContainsKey (' EncryptionIdentity' )) {
165239 if ($PSBoundParameters [' EncryptionIdentity' ].ToLower() -eq ' systemassigned' ) {
166240 $null = $PSBoundParameters.Add (" EncryptionIdentityType" , ' SystemAssigned' )
167-
168- # For SystemAssigned encryption identity, we should NOT include EncryptionIdentityResourceId
169- # Remove it if it exists in the parameters
170241 if ($PSBoundParameters.ContainsKey (' EncryptionIdentityResourceId' )) {
171- $null = $ PSBoundParameters.Remove ( ' EncryptionIdentityResourceId' )
242+ $PSBoundParameters [ ' EncryptionIdentityResourceId' ] = $null
172243 }
173-
174- # CRITICAL: Explicitly set to empty string to prevent AutoRest from inferring from UserAssignedIdentity
175- # This ensures the AfterToJson method will completely remove the resourceId field
176- $null = $PSBoundParameters.Add (' EncryptionIdentityResourceId' , ' ' )
177-
244+ else {
245+ $PSBoundParameters.Add (' EncryptionIdentityResourceId' , $null )
246+ }
247+
178248 # Update the identity type only if the input does not contain the encryption identity type
179- # Update EnableSystemAssignedIdentity to enable system assigned identity
180- # For user assigned identity, it will pass the value automatically if exist
181- $PSBoundParameters [' EnableSystemAssignedIdentity' ] = $true
249+ if ($PSBoundParameters.ContainsKey (' IdentityType' )) {
250+ if ($PSBoundParameters [' IdentityType' ].ToString().ToLower() -eq ' none' ) {
251+ $PSBoundParameters [' IdentityType' ] = ' SystemAssigned'
252+ }
253+ elseif ($PSBoundParameters [' IdentityType' ].ToString().ToLower() -eq ' userassigned' ) {
254+ $PSBoundParameters [' IdentityType' ] = ' SystemAssigned,UserAssigned'
255+ }
256+ }
182257 }
183258 else {
184259 $null = $PSBoundParameters.Add (" EncryptionIdentityResourceId" , $PSBoundParameters [' EncryptionIdentity' ])
185260 $null = $PSBoundParameters.Add (" EncryptionIdentityType" , ' UserAssigned' )
186261
187262 # Update the identity type only if the input does not contain the encryption identity type
188- $encryptionIdentityResourceId = $PSBoundParameters [' EncryptionIdentity' ]
189- if ($PSBoundParameters.ContainsKey (' UserAssignedIdentity' )) {
190- if ($null -eq $PSBoundParameters [' UserAssignedIdentity' ]){
191- $PSBoundParameters [' UserAssignedIdentity' ] = @ ()
263+ if ($PSBoundParameters.ContainsKey (' IdentityType' )) {
264+ if ($PSBoundParameters [' IdentityType' ].ToString().ToLower() -eq ' none' ) {
265+ $PSBoundParameters [' IdentityType' ] = ' UserAssigned'
192266 }
193-
194- $currentIdentities = $PSBoundParameters [' UserAssignedIdentity' ]
195- if ($encryptionIdentityResourceId -notin $currentIdentities ) {
196- $PSBoundParameters [' UserAssignedIdentity' ] = $currentIdentities + @ ($encryptionIdentityResourceId )
267+ if ($PSBoundParameters [' IdentityType' ].ToString().ToLower() -eq ' systemassigned' ) {
268+ $PSBoundParameters [' IdentityType' ] = ' SystemAssigned,UserAssigned'
197269 }
198- } else {
199- $null = $PSBoundParameters.Add (' UserAssignedIdentity' , @ ($encryptionIdentityResourceId ))
270+ }
271+
272+ $userIdentityObject = [Microsoft.Azure.PowerShell.Cmdlets.LoadTesting.Models.UserAssignedIdentity ]::New()
273+ if ($PSBoundParameters.ContainsKey (' IdentityUserAssignedIdentity' )) {
274+ $PSBoundParameters [' IdentityUserAssignedIdentity' ][$PSBoundParameters [' EncryptionIdentityResourceId' ]] = $userIdentityObject
275+ }
276+ else {
277+ $null = $PSBoundParameters.Add (" IdentityUserAssignedIdentity" , @ { $PSBoundParameters [' EncryptionIdentityResourceId' ] = $userIdentityObject })
200278 }
201279 }
202280 $null = $PSBoundParameters.Remove (' EncryptionIdentity' )
@@ -208,4 +286,3 @@ param(
208286 }
209287 }
210288}
211-
0 commit comments