--- title: "Office 365 Adapter Actions DRAFT" slug: "office-365-adapter-actions" description: "RapidIdentity Connect Office 365 Adapter reference guide." tags: ["Developer", "Administrator", "O365", "Microsoft Graph", "API syntax", "Office"] updated: 2023-04-03T17:51:27Z published: 2023-04-03T17:51:27Z canonical: "help.rapididentity.com/office-365-adapter-actions" --- > ## Documentation Index > Fetch the complete documentation index at: https://help.rapididentity.com/llms.txt > Use this file to discover all available pages before exploring further. # Office 365 Adapter Actions ## Office 365 Adapter Actions > *These actions use the Microsoft Graph API* For reference, a complete list of filterable attributes can be found [here](https://technet.microsoft.com/enus/library/bb738155(v=exchg.150).aspx). **Prerequisites:** - RapidIdentity Cloud version 2023.01.0-hotfix2 or higher - RapidIdentity LTS version 2023.0.0-hotfix1 or or higher - RapidIdentity Exchange Agent version 2023.03.27 or higher ### addOffice365DistributionGroupMember Add a member to an Office 365 DistributionGroup | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | groupIdentity* | text, expression, variable | the identity of the DistributionGroup | | memberIdentity* | text, expression, variable | the identity of the object to add to the DistributionGroup | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` added = addOffice365DistributionGroupMember(session, "testgroup", "johndoe@example.com") ``` ### addOffice365MsolGroupMember Add a member to an Office 365 MsolGroup | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | groupIdentity* | text, expression, variable | the identity of the MsolGroup | | memberIdentity* | text, expression, variable | the identity of the object to add to the MsolGroup | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` added = addOffice365MsolGroupMember(session, "testgroup@example.com", "johndoe@example.com") ``` - *For details regarding the New-MgGroupMember API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/new-mggroupmember?view=graph-powershell-1.0&preserve-view=true)* ### addOffice365MsolRoleMember Add a member to an Office 365 MsolRole | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | groupIdentity* | text, expression, variable | the identity of the MsolRole | | memberIdentity* | text, expression, variable | the identity of the object to add to the MsolRole | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "RoleName" "User Account Administrator") roles = getOffice365MsolRoles(session, filter, 1) added = addOffice365MsolGroupMember(session, roles[0].ObjectId, "johndoe@example.com") ``` - *For details regarding the New-MgDirectoryRoleMemberByRef API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.directorymanagement/new-mgdirectoryrolememberbyref?view=graph-powershell-1.0&preserve-view=true)* ### addOffice365SPOSiteGroupMember Add a member to an Office 365 SharePoint Online Site Group | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | site* | text, expression, variable | the url of the SharePoint Online Site | | groupIdentity* | text, expression, variable | the name of the SPOSiteGroup | | memberIdentity* | text, expression, variable | the login name of the object to add to the SPOSiteGroup | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` added = addOffice365SPOSiteGroupMember(session, "https://example.sharepoint.com/", "MySiteGroup", "JohnDoe@example.com") ``` ### deleteOffice365DistributionGroup Delete an Office 365 DistributionGroup record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 DistributionGroup to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365DistributionGroup(session, "testgroup") ``` ### deleteOffice365DistributionGroupMember Delete a member from an Office 365 DistributionGroup. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | groupIdentity* | text, expression, variable | the identity of the DistributionGroup | | memberIdentity* | text, expression, variable | the identity of the object to delete from the DistributionGroup | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` removed = deleteOffice365DistributionGroupMember(session, "testgroup@example.com", "jdoe@example.com") ``` ### deleteOffice365Mailbox Delete an Office 365 Mailbox record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 Mailbox to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365Mailbox(session, "jdoe@example.com") ``` ### deleteOffice365MailContact Delete an Office 365 MailContact record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MailContact to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365MailContact(session, "testContact") ``` ### deleteOffice365MailUser Delete an Office 365 MailUser record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MailUser to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365MailUser(session, "testMailUser@example.com") ``` ### deleteOffice365MsolGroup Delete an Office 365 MsolGroup record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MsolGroup to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365MsolGroup(session, "testgroup@example.com") ``` - *For details regarding the Remove-MgGroup API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/remove-mggroup?view=graph-powershell-1.0)* ### deleteOffice365MsolGroupMember Delete a member from an Office 365 MsolGroup. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | groupIdentity* | text, expression, variable | the identity of the MsolGroup | | memberIdentity* | text, expression, variable | the identity of the object to delete from the MsolGroup | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365MsolGroupMember(session, "testgroup@example.com", "jdoe@example.com") ``` - *For details regarding the Remove-MgGroupMemberByRef API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/remove-mggroupmemberbyref?view=graph-powershell-1.0&preserve-view=true)* ### deleteOffice365MsolRoleMember Delete a member from an Office 365 MsolRole. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | groupIdentity* | text, expression, variable | the identity of the MsolRole | | memberIdentity* | text, expression, variable | the identity of the object to delete from the MsolRole | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "RoleName" "User Account Administrator") roles = getOffice365MsolRoles(session, filter, 1) deleted = deleteOffice365MsolGroupMember(session, roles[0].ObjectId, "jdoe@example.com") ``` - *For details regarding the Remove-MgDirectoryRoleMemberByRef API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/remove-mggroupmemberbyref?view=graph-powershell-1.0&preserve-view=true)* ### deleteOffice365MsolUser Delete an Office 365 MsolUser record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MsolUser to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365MsolUser(session, "jdoe@example.com") ``` *For details regarding the Remove-MgUser API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/remove-mguser?view=graph-powershell-1.0&preserve-view=true)* ### deleteOffice365SPOSiteGroup Delete an Office 365 SharePoint Online Site Group record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | site* | text, expression, variable | the url of the SharePoint Online Site | | identity* | text, expression, variable | the name of the Office 365 SharePoint Online Site Group to delete | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365SPOSiteGroup(session, "https://example.sharepoint.com/", "MySiteGroup") ``` ### deleteOffice365SPOSiteGroupMember Delete a member from an Office 365 SharePoint Online Site Group. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | site* | text, expression, variable | the url of the SharePoint Online Site | | groupIdentity* | text, expression, variable | the name of the SPOSiteGroup | | memberIdentity* | text, expression, variable | the login name of the object to delete from the SPOSiteGroup | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` deleted = deleteOffice365SPOSiteGroupMember(session, "https://example.sharepoint.com/", "MySiteGroup", "jdoe@example.com") ``` ### getOffice365DistributionGroup Get an Office 365 DistributionGroup record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 DistributionGroup to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` distGroup = getOffice365DistributionGroup(session, "testgroup") ``` ### getOffice365DistributionGroups Get Office 365 DistributionGroup records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an OPath filter or an example Record | | maxResults | expression, variable | maximum number of Records to return (default: 1000) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "GroupType", "SecurityEnabled") mailboxes = getOffice365DistributionGroups(session, filter, 50) ``` ### getOffice365Mailbox Get an Office 365 Mailbox record by Identity. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 Mailbox to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` mailbox = getOffice365Mailbox(session, "jdoe@example.com") ``` ### getOffice365Mailboxes Get Office 365 Mailbox records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an OPath filter or an example Record | | maxResults | expression, variable | maximum number of Records to return (default: 1000) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "LastName", "Doe") setRecordFieldValue(filter, "FirstName", "John") ``` ### mailboxes = getOffice365Mailboxes(session, filter, 2) getOffice365MailContact Get an Office 365 MailContact record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MailContact to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` contact = getOffice365MailContact(session, "testContact") ``` ### getOffice365MailContacts Get Office 365 MailContact records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an OPath filter or an example Record | | maxResults | expression, variable | maximum number of Records to return (default: 1000) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "LastName", "Doe") setRecordFieldValue(filter, "FirstName", "John") mailboxes = getOffice365MailContacts(session, filter, 2) ``` ### getOffice365MailUser Get an Office 365 MailUser record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MailUser to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` mailUser = getOffice365MailUser(session, "testMailUser") ``` ### getOffice365MailUsers Get Office 365 MailUser records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an OPath filter or an example Record | | maxResults | expression, variable | maximum number of Records to return (default: 1000) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "LastName", "Doe") setRecordFieldValue(filter, "FirstName", "John") mailboxes = getOffice365MailUsers(session, filter, 2) ``` ### getOffice365MsolGroup Get an Office 365 MsolGroup record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MsolGroup to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "GroupType", "Security") mailboxes = getOffice365MsolGroups(session, filter, 50) ``` *For details regarding the Get-MgGroup API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/get-mggroup?view=graph-powershell-1.0&preserve-view=true)* #### Recent Changes: - The “Identity”/”DisplayName” field was used as the unique identifier for Microsoft Online, but the “Id” field is used by Microsoft Graph. The Exchange Agent will automatically handle this change when retrieving a specific group (i.e. A group can be found by providing either “DisplayName” or “Id”). - The “Identity” field will no longer be returned on the group objects. If the value is needed in Connect logic, utilize “DisplayName” or “Id” instead. - The “Id” field is now returned by group objects and should be used to reference groups ### getOffice365MsolGroups Get Office 365 MsolGroup records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an example Record | | maxResults | expression, variable | maximum number of Records to return (default: 1000) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "GroupType", "Security") mailboxes = getOffice365MsolGroups(session, filter, 50) ``` *For details regarding the Get-MgGroup API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/get-mggroup?view=graph-powershell-1.0&preserve-view=true)* #### Recent Changes: - The “Identity” field will no longer be returned on the group objects. If the value is needed in Connect logic, utilize “DisplayName” or “Id” instead. - The “Id” field is now returned by group objects and should be used to reference groups **Filter Changes** - Careful consideration should be taken when updating Connect action sets utilizing the optional filter parameter. Microsoft provides documentation for using filters ### getOffice365MsolRole Get an Office 365 MsolRole record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MsolRole to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` role = getOffice365MsolRole(session, "fe930be7-5e62-47db-91af-98c3a49a38b1") ``` *​For details regarding the Get-MgDirectoryRole API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.directorymanagement/get-mgdirectoryrole?view=graph-powershell-1.0&preserve-view=true)* #### Notes: - You may find that not all roles returned from Get-MsolRole are returned by Get-MgDirectoryRole. If this is the case, look at the “Import MsolRoles to MgDirectoryRoles” section for reference. ### getOffice365MsolRoles Get Office 365 MsolRole records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an example Record | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, "RoleName" "User Account Administrator") roles = getOffice365MsolRoles(session, filter, 1) ``` *For details regarding the Get-MgDirectoryRole API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.directorymanagement/get-mgdirectoryrole?view=graph-powershell-1.0&preserve-view=true)* ### getOffice365MsolUser Get an Office 365 MsolUser record by Identity. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | identity* | text, expression, variable | the identity of the Office 365 MsolUser to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` user = getOffice365MsolUser(session, "jdoe@example.com") ``` *For details regarding the Get-MgUser API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/get-mguser?view=graph-powershell-1.0&preserve-view=true)* ### getOffice365MsolUsers Get Office 365 MsolUser records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | filter | text, expression, variable | an example Record | | maxResults | expression, variable | maximum number of Records to return (default: 1000) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` filter = createRecord() setRecordFieldValue(filter, 'Filter', 'startsWith(DisplayName, "Mi")') users = getOffice365MsolUsers(session, filter, 200) ``` *For details regarding the Get-MgUser API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/get-mguser?view=graph-powershell-1.0&preserve-view=true)* #### Notes: - Careful consideration should be taken when updating Connect action sets utilizing the optional filter parameter. Microsoft provides [documentation](https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=powershell) for using filters. ### getOffice365SPOSiteGroup Get an Office 365 SharePoint Online Site Group record by Id. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | site* | text, expression, variable | the url of the SharePoint Online Site | | identity* | text, expression, variable | the name of the Office 365 SharePoint Online Site Group to get | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` siteGroup = getOffice365SPOSiteGroup(session, "https://example.sharepoint.com/", "MySiteGroup") ``` ### getOffice365SPOSiteGroups Get Office 365 SharePoint Online Site Group records. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | site* | text, expression, variable | the url of the SharePoint Online Site | | maxResults | expression, variable | maximum number of Records to return (default: 200) | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` siteGroups = getOffice365SPOSiteGroups(session, "https://example.sharepoint.com/", 50) ``` ### openOffice365Connection Open a connection to Office 365. | Property | Value | Description | | --- | --- | --- | | office365AgentURL* | text, expression, variable | the URL of the Exchange Administrative Web Service agent (e.g. https://hostname:port/idautoExchangeAdminWS) | | noExchange | boolean, expression, variable | set to true for domains that don't support Exchange Online (default: false) | | spoAdminURL | text, expression, variable | the URL of the SharePoint Online Administration Center (e.g. https://mycompany-admin.sharepoint.com) | | username* | text, expression, variable | username for authentication to Office 365 | | password* | password, string, expression, variable | password for authentication to Office 365 | | options | expression, variable | A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout. | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` Global.office365URL = "https://10.10.10.10/idautoExchangeAdminWS" Global.office365User = "office365admin@example.net" Global.office365Pwd = session = openOffice365Connection(Global.office365URL,Global.office365User, Global.office365Pwd) ``` ### purgeOffice365UserRecycleBin Purge deleted users from Office 365 Recycle Bin. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` purgeOffice365UserRecycleBin(session) ``` ### saveOffice365DistributionGroup Create/Update an Office 365 DistributionGroup record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` groupTemplate = createRecord(, ) setRecordFieldValue(groupTemplate, "Name", "testgroup") saveOffice365DistributionGroup(session, groupTemplate) ``` ### saveOffice365Mailbox Create/Update an Office 365 Mailbox record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` mailboxTemplate = createRecord() setRecordFieldValue(mailboxTemplate, "Name", "JDoe") setRecordFieldValue(mailboxTemplate, "Password",Password>) setRecordFieldValue(mailboxTemplate, "MicrosoftOnlineServicesID", johndoe@example.com") mailbox = saveOffice365Mailbox(session, mailboxTemplate) ``` ### saveOffice365MailContact Create/Update an Office 365 MailContact record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` contactTemplate = createRecord() setRecordFieldValue(contactTemplate, "Name", "testContact") setRecordFieldValue(contactTemplate, "ExternalEmailAddress", "testContact@example.com") contact = saveOffice365MailContact(session, contactTemplate) ``` ### saveOffice365MailUser Create/Update an Office 365 MailUser record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` mailUserTemplate = createRecord() setRecordFieldValue(mailUserTemplate, "EmailAddresses", "testMailUser@example.org") mailUser = saveOffice365MailUser(session, mailUserTemplate) ``` ### saveOffice365MsolGroup Create/Update an Office 365 MsolGroup record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` groupTemplate = createRecord() setRecordFieldValue(groupTemplate, "DisplayName", "testGroup") group = saveOffice365MsolGroup(session, groupTemplate) ``` - *For details regarding the New-MgGroup API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/new-mggroup?view=graph-powershell-1.0&preserve-view=true)* - *For details regarding the Update-MgGroup API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.groups/update-mggroup?view=graph-powershell-1.0&preserve-view=true)* #### Recent Changes **New Group Fields** - DisplayName - It’s unlikely that groups were being created without the “DisplayName” field, but it was not required with Microsoft Online and is required by Microsoft Graph - MailNickname - This is a new field in Microsoft Graph. The Exchange Agent will set the “MailNickname” field to the “DisplayName” value if it is not specified. - MailEnabled - This is a new field in Microsoft Graph. The Exchange Agent will set the “MailEnabled” field to “false” if not specified. - SecurityEnabled - This is a new field in Microsoft Graph. The Exchange Agent will set the “MailEnabled” field to “true” if not specified. #### Notes: - Special consideration should be taken when updating the “DisplayName” for a group (i.e. may also want to consider updating “MailNickname”). - See bullet point above regarding “MailNickname” not being specified on group create ### saveOffice365MsolUser Create/Update an Office 365 MsolUser record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ``` userTemplate = createRecord() setRecordFieldValue(userTemplate, "GivenName","Homer" setRecordFieldValue(userTemplate, "Surname", "Simpson" setRecordFieldValue(userTemplate, "DisplayName", "Homey") setRecordFieldValue(userTemplate, "Password",) setRecordFieldValue(userTemplate, "FaxNumber", "555-call-homr") setRecordFieldValue(userTemplate, "OfficeLocation", "Power Plant") setRecordFieldValue(userTemplate, "UserPrincipleName", "Homey@" + testDomain) setRecordFieldValue(userTemplate, "UsageLocation", "US") setRecordFieldValue(userTemplate, "LicenseAssignment", "mydomain:ENTERPRISEPACK") msolUser = saveOffice365MsolUser(session, userTemplate) ``` *For details regarding the New-MgUser API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/new-mguser?view=graph-powershell-1.0&preserve-view=true)* *For details regarding the Update-MgUser API syntax and field reference, click [here](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/update-mguser?view=graph-powershell-1.0&preserve-view=true)* #### Recent Changes: **New User Fields** - AccountEnabled - This is a new field in Microsoft Graph. The Exchange Agent will set the “AccountEnabled” field to “true” if not specified. - MailNickname - This is a new field in Microsoft Graph. The Exchange Agent will set the “MailNickname” field to the “DisplayName” value if it is not specified. - Password - If you create users without a password, you will need to update your Connect logic to supply a random password. Microsoft Online would automatically generate a random password when creating users without “Password” specified, but this is not the case with Microsoft Graph. **User Field Changes** - “FirstName” will be “GivenName” - “LastName” is now “Surname” - “Fax” is now “FaxNumber" - “Office” is now “OfficeLocation” #### Notes: - Special consideration should be taken when updating the “DisplayName” for a user (i.e. may also want to consider updating “MailNickname”). - See bullet point above regarding “MailNickname” not being specified on user create - The “LicenseOptions” field will no longer accept an “AccountSkuId” in its JSON objects. Instead, it will accept “SkuId” or “SkuPartNumber”. - “LicenseOptions” are used for disabling specific plans within a license (e.g. “[{“SkuId”:”SkuId1”,”DisabledPlans”:[“YAMMER_ENTERPRISE”]}]”) ### saveOffice365SPOSiteGroup Create/Update an Office 365 SharePoint Online Site Group record. | Property | Value | Description | | --- | --- | --- | | connection* | expression, variable | the Office 365 connection | | record* | expression, variable | the record to save | | returnVariable | expression, variable | name of the variable to be assigned to the return value | ### Import MsolRoles to MgDirectoryRoles The following PowerShell script provides an example of how to import MSOL roles into Microsoft Graph. Run this in an Administrator PowerShell on the Windows machine where the Exchange Agent is installed with the appropriate credentials. ``` > $user = "admin_user@domain.onmicrosoft.com" > $password = ConvertTo-SecureString 'password123' -AsPlainText -Force > $basicCred = New-Object System.Management.Automation.PsCredential($user,$password) > Connect-MsolService -Credential $basicCred > $appId = "" > $tenantId = "" > $certThumbprint = "" > $certPath = 'Cert:\LocalMachine\My\' + $certThumbprint > $cert = Get-ChildItem -Path $certPath > Connect-MgGraph -ClientId $appId -TenantId $tenantId -Certificate $cert > Get-MsolRole | ForEach-Object { $template = (Get-MgDirectoryRoleTemplate -DirectoryRoleTemplateId $_.ObjectId) if ($template -ne $null) { $filter = "RoleTemplateId eq '" + $template.Id + "'" $role = Get-MgDirectoryRole -Filter $filter if ($role -eq $null) { New-MgDirectoryRole -RoleTemplateId $role.Id } } ``` ### Important Notes - Office 365 supports a new higher-level management object, MsolUser, that should be preferred to managing users via the Mailbox object. - While a Mailbox can still be created directly, the corresponding MsolUser must be assigned a license or the Mailbox will be disabled after a grace period. - The corresponding MsolUser is not available immediately (probably due to AD replication latency) so immediately trying to add a license after creating a Mailbox directly will usually fail. - Creating a Mailbox directly requires the field MicrosoftOnlineServicesID as opposed to WindowsLiveID (Live@EDU) or UserPrincipalName (Exchange). - After a MsolUser is created and assigned an appropriate license, a Mailbox will be automatically created after some delay. - While an initial password can still be set when creating a Mailbox, subsequent password changes can only be made to the MsolUser. - Setting the initial password on a MsolUser uses the Password field, but subsequent password changes can use either the Password or NewPassword field. - Licenses can be added on the initial creation of MsolUser using the LicenseAssignment field. Subsequent addition or removal of licenses use the AddLicenses or RemoveLicense field. In either case, assigning a license will fail if the UsageLocation field has not been set. - The licenses available for assignment for a particular domain can be determined by going to the server hosting the Exchange agent and opening the “Microsoft Online Services Module for Windows PowerShell” from the desktop. Then run the following commands: ``` Connect-MsolService -Credential ( Get-Credential ) (Get-MsolAccountSku).AccountSkuid ``` - You can disable specific applications that would normally be enabled by a license using the LicenseOptions field. The LicenseOptions field is a record that has two fields: AccountSkuID, which is the name of the license; and DisabledPlans, which is an array of the names of specific modules to be disabled for the user. The names of the modules that are available within a given license can be determined by going to the server hosting the Exchange agent and opening the “Microsoft Online Services Module for Windows PowerShell” from the desktop. Then run the following commands: ``` Connect-MsolService -Credential ( Get-Credential ) forEach ( $sku in Get-MsolAccountSku) { echo $sku; forEach ( $service in $sku.ServiceStatus) { echo $service.ServicePlan.ServiceName} } ``` - Creating a MsolGroup will create a security group (as opposed to a distribution group), after initial creation, MsolGroup can be used for listing or adding/removing members from both security and distribution groups. - There is a timing issue with user creation on the Office 365 backend. We are recommending that you not set Location, Time Zone, or Language at user creation time. If you wish to set these attributes you should update them in a later action. ## Related - [Exchange Agent 2023.03.27 - What's Changed](/exchange-agent-20230327-whats-changed.md) - [How do I know what my RapidIdentity Exchange Agent is connecting to](/how-do-i-know-what-my-rapididentity-exchange-agent-is-connecting-to.md) - [Connect Reference](/working-with-connect.md)