msgraph-sdk-powershell icon indicating copy to clipboard operation
msgraph-sdk-powershell copied to clipboard

Update-MgBetaServicePrincipalSynchronizationJobSchema fails due to invalid medthod specified in OpenAPI file

Open salbeck-sit opened this issue 1 year ago • 0 comments

Describe the bug

A clear and concise description of what the bug is. Update-MgBetaServicePrincipalSynchronizationJobSchema fails when attempting to update cross-tenant sync attribute-mapping, likely because OpenAPI specifies PATCH but documentation for the API specifies PUT NB; See #1134 that was closed just over 2 years ago without resolution

To Reproduce Steps to reproduce the behavior:

  1. $syncJob = Get-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId
  2. $JobId = $syncJob.Id
  3. $SynchronizationSchema = Get-MgServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
  4. $newSyncRules = $SynchronizationSchema.SynchronizationRules
  5. (update attribute-mapping for User to User)
  6. $newSyncRules.ObjectMappings[$n].AttributeMappings = $attributeMappings
  7. Update-MgBetaServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId -Directories $SynchronizationSchema.Directories -Id $SynchronizationSchema.Id -SynchronizationRules $newSyncRules -Version $SynchronizationSchema.Version -Debug

Expected behavior

A clear and concise description of what you expected to happen. The schema should be updated with the modified attribute-mappings

Debug Output (shortened) Describe the bug

A clear and concise description of what the bug is. Update-MgBetaServicePrincipalSynchronizationJobSchema fails when attempting to update cross-tenant sync attribute-mapping, likely because OpenAPI specifies PATCH but documentation for the API specifies PUT

To Reproduce Steps to reproduce the behavior:

  1. $syncJob = Get-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId
  2. $JobId = $syncJob.Id
  3. $SynchronizationSchema = Get-MgServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
  4. $newSyncRules = $SynchronizationSchema.SynchronizationRules
  5. (update attribute-mapping for User to User)
  6. $newSyncRules.ObjectMappings[$n].AttributeMappings = $attributeMappings
  7. Update-MgBetaServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId -Directories $SynchronizationSchema.Directories -Id $SynchronizationSchema.Id -SynchronizationRules $newSyncRules -Version $SynchronizationSchema.Version -Debug

Expected behavior

A clear and concise description of what you expected to happen. The schema should be updated with the modified attribute-mappings

Debug Output (shortened) PS> Update-MgBetaServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId -Directories $SynchronizationSchema.Directories -Id $SynchronizationSchema.Id -SynchronizationRules $newSyncRules -Version $SynchronizationSchema.Version -Debug DEBUG: [CmdletBeginProcessing]: - Update-MgBetaServicePrincipalSynchronizationJobSchema begin processing with parameterSet 'UpdateExpanded'. DEBUG: [Authentication]: - AuthType: 'Delegated', TokenCredentialType: 'InteractiveBrowser', ContextScope: 'CurrentUser', AppName: 'Microsoft Graph Command Line Tools'. DEBUG: [Authentication]: - Scopes: [Application.ReadWrite.All, AuditLog.Read.All, Directory.Read.All, Directory.ReadWrite.All, Group.Read.All, openid, Policy.Read.All, Policy.ReadWrite.CrossTenantAccess, profile, email, Synchronization.ReadWrite.All]. Performing the operation "Update-MgBetaServicePrincipalSynchronizationJobSchema_UpdateExpanded" on target "Call remote 'PATCH /servicePrincipals/{servicePrincipal-id}/synchronization/jobs/{synchronizationJob-id}/schema' operation". DEBUG: ============================ HTTP REQUEST ============================

HTTP Method: PATCH

Absolute Uri: https://graph.microsoft.com/beta/servicePrincipals/804c4acb-c652-4f81-81aa-1d647c270326/synchronization/jobs/Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715/schema

Headers: FeatureFlag : 00000043 Cache-Control : no-store, no-cache User-Agent : Mozilla/5.0,(Windows NT 10.0; Microsoft Windows 10.0.17763; da-DK),PowerShell/5.1.17763.5576 Accept-Encoding : gzip SdkVersion : graph-powershell-beta/2.15.0 client-request-id : 0d5abf56-b198-42c7-bf49-ece62bfaac00

Body: { "id": "Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715", "synchronizationRules": [ { "editable": true, "id": "01e28086-1453-4cb2-b95d-4fbc4564fcc0", "metadata": [ { "key": "defaultSourceObjectMappings", (...) "value": "[{"AttributeMappings": }, { "key": "supportsProvisionOnDemand", "value": "true" } ], "name": "USER_INBOUND_USER", "objectMappings": [ { "attributeMappings": [ { "defaultValue": "False", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "IsSoftDeleted", "source": { "expression": "[IsSoftDeleted]", "name": "IsSoftDeleted", "type": "Attribute" } }, { "defaultValue": "True", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "accountEnabled", "source": { "expression": "[accountEnabled]", "name": "accountEnabled", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "streetAddress", "source": { "expression": "[streetAddress]", "name": "streetAddress", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "city", "source": { "expression": "[city]", "name": "city", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "state", "source": { "expression": "[state]", "name": "state", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "postalCode", "source": { "expression": "[postalCode]", "name": "postalCode", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "country", "source": { "expression": "[country]", "name": "country", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "companyName", "source": { "expression": "[companyName]", "name": "companyName", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "department", "source": { "expression": "[department]", "name": "department", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "employeeId", "source": { "expression": "[employeeId]", "name": "employeeId", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "displayName", "source": { "expression": "[displayName]", "name": "displayName", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "extensionAttribute1", "source": { "expression": ""CrossTenantSynced"", "name": "CrossTenantSynced", "type": "Constant" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "extensionAttribute2", "source": { "expression": ""CU3711"", "name": "CU3711", "type": "Constant" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "givenName", "source": { "expression": "[givenName]", "name": "givenName", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "jobTitle", "source": { "expression": "[jobTitle]", "name": "jobTitle", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "mailNickname", "source": { "expression": "[mailNickname]", "name": "mailNickname", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "manager", "source": { "expression": "[manager]", "name": "manager", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "physicalDeliveryOfficeName", "source": { "expression": "[physicalDeliveryOfficeName]", "name": "physicalDeliveryOfficeName", "type": "Attribute" } }, { "defaultValue": "da-DK", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "preferredLanguage", "source": { "expression": "[preferredLanguage]", "name": "preferredLanguage", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "surname", "source": { "expression": "[surname]", "name": "surname", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "telephoneNumber", "source": { "expression": "[telephoneNumber]", "name": "telephoneNumber", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "usageLocation", "source": { "expression": "[usageLocation]", "name": "usageLocation", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "userPrincipalName", "source": { "expression": "[userPrincipalName]", "name": "userPrincipalName", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "ObjectAddOnly", "matchingPriority": 1, "targetAttributeName": "alternativeSecurityIds", "source": { "expression": "[alternativeSecurityIds]", "name": "alternativeSecurityIds", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "showInAddressList", "source": { "expression": "[showInAddressList]", "name": "showInAddressList", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "mail", "source": { "expression": "[mail]", "name": "mail", "type": "Attribute" } }, { "defaultValue": "", "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 0, "targetAttributeName": "userType", "source": { "expression": "[userType]", "name": "userType", "type": "Attribute" } } ], "enabled": true, "flowTypes": "Add,Update,Delete", "metadata": [ (...) ], "name": "Provision Microsoft Entra ID Users", "sourceObjectName": "User", "targetObjectName": "User", "scope": { "categoryFilterGroups": [], "groups": [], "inputFilterGroups": [ { (...) "name": "Filter external users" } ] } }, { "attributeMappings": [ { "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 1, "targetAttributeName": "objectId" } ], "enabled": false, (...) }, { "attributeMappings": [ { "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 1, "targetAttributeName": "appId" } ], "enabled": false, (...) }, { "attributeMappings": [ (...) ], "enabled": false, (...) }, { "attributeMappings": [ { "exportMissingReferences": false, "flowBehavior": "FlowWhenChanged", "flowType": "Always", "matchingPriority": 1, "targetAttributeName": "id" } ], "enabled": false, (...) }, { "attributeMappings": [ (...) ], "enabled": false, (...) } ], "priority": 1, "sourceDirectoryName": "Microsoft Entra ID", "targetDirectoryName": "Azure Active Directory (target tenant)" } ], "version": "Date:2024-03-11T11:07:48.7217138Z, ActivityId:22545759-9095-4a2a-96ec-ff63485ca7d8", "directories": [ { "id": "66e4a8cc-1b7b-435e-95f8-f06cea133828", "discoverabilities": "AttributeNames,AttributeDataTypes", "name": "Microsoft Entra ID", "objects": [ { "attributes": [ (...) ], "metadata": [ (...) ], "name": "User", "supportedApis": [ "User" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "Group", "supportedApis": [ "Group" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "Application", "supportedApis": [ "Application" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "AppRole", "supportedApis": [ "AppRole" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "AppRoleAssignment", "supportedApis": [ "AppRoleAssignment" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "ServicePrincipal", "supportedApis": [ "ServicePrincipal" ] } ], "readOnly": true, "version": "Date:2024-03-11T11:07:48.7217138Z, ActivityId:22545759-9095-4a2a-96ec-ff63485ca7d8" }, { "id": "69b25323-f16d-4d8f-99e9-2722c9582d30", "discoverabilities": "AttributeNames,AttributeDataTypes", "name": "Azure Active Directory (target tenant)", "objects": [ { "attributes": [ (...) ], "metadata": [ (...) ], "name": "User", "supportedApis": [ "User" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "Group", "supportedApis": [ "Group" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "Application", "supportedApis": [ "Application" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "AppRole", "supportedApis": [ "AppRole" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "AppRoleAssignment", "supportedApis": [ "AppRoleAssignment" ] }, { "attributes": [ (...) ], "metadata": [ (...) ], "name": "ServicePrincipal", "supportedApis": [ "ServicePrincipal" ] } ], "readOnly": true, "version": "Date:2024-03-11T11:07:48.7217138Z, ActivityId:22545759-9095-4a2a-96ec-ff63485ca7d8" } ] } DEBUG: ============================ HTTP RESPONSE ============================

Status Code: NotFound

Headers: Transfer-Encoding : chunked Vary : Accept-Encoding Strict-Transport-Security : max-age=31536000 request-id : 19c60366-244d-4c6e-9411-a146a29565cb client-request-id : 0d5abf56-b198-42c7-bf49-ece62bfaac00 x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"Norway East","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"OSL2EPF00000168"}} Date : Fri, 22 Mar 2024 14:10:06 GMT

Body: { "error": { "code": "UnknownError", "message": "{"Message":"No HTTP resource was found that matches the request URI 'https://syncfabric.windowsazure.com/api/servicePrincipals('804c4acb-c652-4f81-81aa-1d647c270326')/synchronization/jobs('Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715')/schema?api-version=2.0'."}", "innerError": { "date": "2024-03-22T14:10:06", "request-id": "19c60366-244d-4c6e-9411-a146a29565cb", "client-request-id": "0d5abf56-b198-42c7-bf49-ece62bfaac00" } } } Confirm {"Message":"No HTTP resource was found that matches the request URI 'https://syncfabric.windowsazure.com/api/servicePrincipals('804c4acb-c652-4f81-81aa-1d647c270326')/synchronization/jobs('Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715')/schema?api-version=2.0'."}

Status: 404 (NotFound) ErrorCode: UnknownError Date: 2024-03-22T14:10:06

Headers: Transfer-Encoding : chunked Vary : Accept-Encoding Strict-Transport-Security : max-age=31536000 request-id : 19c60366-244d-4c6e-9411-a146a29565cb client-request-id : 0d5abf56-b198-42c7-bf49-ece62bfaac00 x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"Norway East","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"OSL2EPF00000168"}} Date : Fri, 22 Mar 2024 14:10:06 GMT

Update-MgBetaServicePrincipalSynchronizationJobSchema : {"Message":"No HTTP resource was found that matches the request URI 'https://syncfabric.windowsazure.com/api/servicePrincipals('804c4acb-c652-4f81-81aa-1d647c270326')/synchronization/j obs('Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715')/schema?api-version=2.0'."}

Status: 404 (NotFound) ErrorCode: UnknownError Date: 2024-03-22T14:10:06

Headers: Transfer-Encoding : chunked Vary : Accept-Encoding Strict-Transport-Security : max-age=31536000 request-id : 19c60366-244d-4c6e-9411-a146a29565cb client-request-id : 0d5abf56-b198-42c7-bf49-ece62bfaac00 x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"Norway East","Slice":"E","Ring":"5","ScaleUnit":"001","Role Instance":"OSL2EPF00000168"}} Date : Fri, 22 Mar 2024 14:10:06 GMT

At line:1 char:1

  • Update-MgBetaServicePrincipalSynchronizationJobSchema -ServicePrincip ...
  •   + CategoryInfo          : InvalidOperation: ({ ServicePrinci...izationSchema }:<>f__AnonymousType115`4) [Update-MgBe
    

taSe..._UpdateExpanded], Exception + FullyQualifiedErrorId : UnknownError,Microsoft.Graph.Beta.PowerShell.Cmdlets.UpdateMgBetaServicePrincipalSynchroni zationJobSchema_UpdateExpanded

ParameterBinding(Out-Default): name="InputObject"; value="{"Message":"No HTTP resource was found that matches the request URI 'https://syncfabric.windowsazure.com/api/servicePrincipals('804c4acb-c652-4f81-81aa-1d647c270326')/synchronization/jobs('Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715')/schema?api-version=2.0'."}

Status: 404 (NotFound) ErrorCode: UnknownError Date: 2024-03-22T14:10:06

Headers: Transfer-Encoding : chunked Vary : Accept-Encoding Strict-Transport-Security : max-age=31536000 request-id : 19c60366-244d-4c6e-9411-a146a29565cb client-request-id : 0d5abf56-b198-42c7-bf49-ece62bfaac00 x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"Norway East","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"OSL2EPF00000168"}} Date : Fri, 22 Mar 2024 14:10:06 GMT

" Update-MgBetaServicePrincipalSynchronizationJobSchema : {"Message":"No HTTP resource was found that matches the request URI 'https://syncfabric.windowsazure.com/api/servicePrincipals('804c4 acb-c652-4f81-81aa-1d647c270326')/synchronization/jobs('Azure2Azure.17782bb83ab94615a992df7fa486dbc7.700ae644-ca21-49d6-938b-92c5dd0ed715')/schema?api-version=2.0'."}

Status: 404 (NotFound) ErrorCode: UnknownError Date: 2024-03-22T14:10:06

Headers: Transfer-Encoding : chunked Vary : Accept-Encoding Strict-Transport-Security : max-age=31536000 request-id : 19c60366-244d-4c6e-9411-a146a29565cb client-request-id : 0d5abf56-b198-42c7-bf49-ece62bfaac00 x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"Norway East","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"OSL2EPF00000168"}} Date : Fri, 22 Mar 2024 14:10:06 GMT

At line:1 char:1

  • Update-MgBetaServicePrincipalSynchronizationJobSchema -ServicePrincip ...
  •   + CategoryInfo          : InvalidOperation: ({ ServicePrinci...izationSchema }:<>f__AnonymousType115`4) [Update-MgBetaSe..._UpdateExpanded], Exception
      + FullyQualifiedErrorId : UnknownError,Microsoft.Graph.Beta.PowerShell.Cmdlets.UpdateMgBetaServicePrincipalSynchronizationJobSchema_UpdateExpanded
    

DEBUG: [CmdletEndProcessing]: - Update-MgBetaServicePrincipalSynchronizationJobSchema end processing.

Module Version 2.15.0 Environment Data Windows Popwershell 5.1

Screenshots

If applicable, add screenshots to help explain your problem.

Additional context

Add any other context about the problem here.

salbeck-sit avatar Mar 23 '24 07:03 salbeck-sit