@@ -189,9 +189,27 @@ def restore_AzureFileShare(cmd, client, resource_group_name, vault_name, rp_name
189189
190190 afs_restore_request .copy_options = resolve_conflict
191191 afs_restore_request .recovery_type = restore_mode
192- afs_restore_request .source_resource_id = _get_storage_account_id (cmd .cli_ctx ,
193- item .properties .container_name .split (';' )[- 1 ],
194- item .properties .container_name .split (';' )[- 2 ])
192+
193+ # Try to get source resource ID from storage account first, fallback to item's source resource ID
194+ try :
195+ afs_restore_request .source_resource_id = _get_storage_account_id (cmd .cli_ctx ,
196+ item .properties .container_name .split (';' )[- 1 ],
197+ item .properties .container_name .split (';' )[- 2 ])
198+ # Check if source_resource_id is null or empty after assignment
199+ if not afs_restore_request .source_resource_id :
200+ raise CLIError ("Source resource ID is null or empty after retrieval from storage account." )
201+ except (CLIError ) as e :
202+ logger .warning (
203+ "Failed to get storage account ID: %s. Falling back to source resource ID from protected item." ,
204+ str (e ))
205+ source_resource_id = _get_source_resource_id_from_item (item )
206+ if source_resource_id :
207+ afs_restore_request .source_resource_id = source_resource_id
208+ else :
209+ raise CLIError (
210+ "Unable to retrieve source resource ID. The storage account might have been deleted "
211+ "and no fallback source resource ID is available." ) from e
212+
195213 afs_restore_request .restore_request_type = restore_request_type
196214
197215 restore_file_specs = None
@@ -420,6 +438,16 @@ def _get_storage_account_id(cli_ctx, storage_account_name, storage_account_rg):
420438 return storage_account .id
421439
422440
441+ def _get_source_resource_id_from_item (item ):
442+ """
443+ Helper function to retrieve source resource ID from a protected item.
444+ This is used as a fallback when the storage account is deleted.
445+ """
446+ if item and hasattr (item , 'properties' ) and hasattr (item .properties , 'source_resource_id' ):
447+ return item .properties .source_resource_id
448+ return None
449+
450+
423451def set_policy (cmd , client , resource_group_name , vault_name , policy , policy_name , tenant_id = None ,
424452 is_critical_operation = False , yes = False ):
425453 if policy_name is None :
0 commit comments