Giter VIP home page Giter VIP logo

googleapps-managementagent's Introduction

The Lithnet Google Workspace Management Agent provides support for managing Google Workspace users, groups, shared contacts and other objects with MIM 2016.

Free features

  • Supports the import and export of domain shared contact objects
  • Supports the import and export of user objects, including attributes from your custom schema
  • Supports the import and export of group objects including group settings
  • Supports the import and export of resources (calendars, buildings, features)
  • Supports the import of domains and aliases (read only)
  • Supports the import and export of course objects (Google Classroom)
  • High performance import and export through the use of multi-threading and batch updates
  • Confirming (delta) import support for all object types

Note: as most Google APIs do not provide delta support, this MA only confirms what was exported in a delta import. Changes made in Google Workspace directly will not be seen until the next full import operation)

Add-on features

The following feature add-ons are available for purchase. Simply fill out the request form, let us know the number of users you are managing with your MIM implementation, and we'll put together a quote.

System Requirements

The Lithnet Google Workspace MA requires MIM 2016, and .NET Framework 4.7.2.

Getting started

Download the management agent from the releases page Read the getting started guide

Getting support

Please open an issue, and provide a detailed description of the issue or question you'd like to ask.

Enterprise support

Lithnet offer enterprise support plans for our open-source products. Deploy our tools with confidence that you have the backing of the dedicated Lithnet support team if you run into any issues, have questions, or need advice. Simply fill out the request form, let us know the number of users you are managing with your MIM implementation, and we'll put together a quote.

Keep up to date

googleapps-managementagent's People

Contributors

leoerlandsson avatar manjunath-hk1 avatar ryannewington avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

googleapps-managementagent's Issues

Cannot create MA, unable to retrieve schema error.

Since the last week I'm unable to create MA as it returns 'Unable to retrieve schema. Error: Exception from HRESULT: 0x80231343'
This is the error from EventLog:

The extensible extension returned an unsupported error.
The stack trace is:

"Google.Apis.Auth.OAuth2.Responses.TokenResponseException: Error:"unauthorized_client", Description:"Client is unauthorized to retrieve access tokens using this method.", Uri:""
at Google.Apis.Requests.ClientServiceRequest1.Execute() in C:\Apiary\v1.25\Src\Support\GoogleApis\Apis\Requests\ClientServiceRequest.cs:line 101 at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest1 request, Int32 retryAttempts)
at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest1 request) at Lithnet.GoogleApps.SchemaRequestFactory.HasSchema(String customerID, String schemaName) at Lithnet.GoogleApps.MA.SchemaBuilder.GetSchema(IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 31 at Lithnet.GoogleApps.MA.ManagementAgent.GetSchema(KeyedCollection2 configParameters) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 405
Forefront Identity Manager 4.4.1642.0"

I've tried with two different instances of GSuite and MIM with no luck. It used to work without issues earlier, please assist.

Addresses and Relations attribute types not available for Contacts

Using v2 of the MA and when adding Addresses and Relations fixed types to the Schema 1 tab they aren't available to use in attribute flows for Contacts. They show up in the Select Attributes tab and can be used for User attribute flows, just not Contacts. Any ideas why?

Added to the Schema 1 tab:
image

And selected on the Select Attributes tab:
image

image

But they don't show up in the Attribute flows for contacts:
image
image

Unable to enforce TLS1.2 protocol

Hi @ryannewington

Recently due to the security requirements we've configured the MIM server to use TLS 1.2 protocol. After applying the above, the MA is unable to connect to GSuite with the following error:

_The extensible extension returned an unsupported error.
The stack trace is:

"System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.ComponentModel.Win32Exception: The client and server cannot communicate, because they do not possess a common algorithm
at System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface SecModule, String package, CredentialUse intent, SecureCredential scc)
at System.Net.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage, SecureCredential& secureCredential)
at System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint)
at System.Net.Security.SecureChannel.GenerateToken(Byte[] input, Int32 offset, Int32 count, Byte[]& output)
at System.Net.Security.SecureChannel.NextMessage(Byte[] incoming, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.BeginWrite(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback asyncCallback, Object asyncState)
at System.Net.ConnectStream.WriteHeaders(Boolean async)_

I'm using the following MA build - #26
Appreciate if you could look into this issue and if possible add code to allow enforcement of security protocol use.

Kind regards,
Lukasz

Export users as externalMember

Hi @ryannewington,

during implementation of complex group members logic we faced a problem with sending users as externalMember to Google.

We get an error saying "The value [email protected] cannot be exported as externalMember as it is a known internal domain. It should be exported as Member". The error is completely clear, however we have multiple cases that we do not want to create user object in Google, but we want to include this user as externalMember to allow him to receive messages. From Google point of view it is doable since we are able to add such member through API using a script, so I suppose that there is a validation in MA which prevents such cases.

Is there any option to modify this behaviour and skip this check?

King regards,
Michal

Is this Google Apps MA supports custom schema attributes of Google?

Hi,
I want to use this Google Apps MA in my project for provisioning the data from FIM to Google. My Google instance have suctom schema defined with some set of custom attributes and i want to provision these attribute values of an user from FIM to Google.
Can i achieve this from this Google MA? Could you let me know the procedure.

Thanks
Prasanthi.
Email : [email protected]

Log output for floorNames contains code

28/02/2018 8:19:30 AM: Starting export Add for [email protected]
28/02/2018 8:19:30 AM: Updating buildingName -> FIM Building
28/02/2018 8:19:30 AM: Updating description -> Building Description
28/02/2018 8:19:30 AM: Updating floorNames -> System.Collections.Generic.List`1[System.String]
28/02/2018 8:19:30 AM: Updating coordinates_latitude -> REDACTED
28/02/2018 8:19:30 AM: Updating coordinates_longitude -> REDACTED

As you can see the floorNames is showing code instead of value.. the current value is being written as string to output

      <attribute-change>
        <name>floorNames</name>
        <modification-type>Add</modification-type>
        <data-type>String</data-type>
        <value-changes>
          <value-change>
            <modification-type>Add</modification-type>
            <value>G,1,2</value>
          </value-change>
        </value-changes>
      </attribute-change>

Help for external member

Hello,
I'm trying to sync to google groups and membership from an On-premises Active Directory.
Users are already created on Google and I need to provision new groups with fim and then add membership.

I'm able to create correctly new groups and add members that are already on Google but I'm not able to add external members (not of the domain defined on google tenant) defined on On-premises groups.
Could you suggest me how to distinguish membership type?

Adding manager who is an existing member fails

  1. Created a group with only a member
  2. Tried to add a manager who is the same member

Error


21/09/2016 9:21:21 AM: Opening export connection

21/09/2016 9:21:30 AM: Starting export Update for [email protected]
21/09/2016 9:21:30 AM: Performing FULL update operation for [email protected]


An exception has occurred in PutCSEntryChange
Type: Google.GoogleApiException
Message: Google.Apis.Requests.RequestError
Member already exists. [409]
Errors [
Message[Member already exists.] Location[ - ] Reason[duplicate] Domain[global]
]
Failed member add: [email protected]
Group: [email protected]
Source: Lithnet.GoogleApps
TargetSite: Void AddMembers(System.String, System.Collections.Generic.IList1[Google.Apis.Admin.Directory.directory_v1.Data.Member], Boolean) StackTrace: at Lithnet.GoogleApps.GroupMemberRequestFactory.AddMembers(String id, IList1 members, Boolean throwOnExistingMember)
at Lithnet.GoogleApps.MA.ApiInterfaceGroupMembership.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroupMembership.cs:line 78
at Lithnet.GoogleApps.MA.ApiInterfaceGroup.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroup.cs:line 120
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeUpdate(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 144
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 65
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 16



21/09/2016 9:21:32 AM: Closing export connection: Normal
21/09/2016 9:21:32 AM: Writing 0 delta entries to file


Error on Export - "Hash not valid for use in specified state."

Error while exporting a user on add.. Not always the case for all exports

at Google.Apis.Requests.ClientServiceRequest1.Execute() in C:\Users\mdril\Documents\GitHub\google-api-dotnet-client\Src\Support\GoogleApis\Apis\Requests\ClientServiceRequest.cs:line 102 at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest1 request, Int32 retryAttemps)
at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest`1 request)
at Lithnet.GoogleApps.UserRequestFactory.Add(User item)
at Lithnet.GoogleApps.MA.ApiInterfaceUser.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceUser.cs:line 95
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 107
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 64
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 21
at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass38_0.b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 149

Specified cast is not valid while creating group

Event viewer log

Also during this export nothing was written to ma-operations.log but export did happen and group got created

ECMA2 MA export run caused an error.

Error Name: Specified cast is not valid.
Error Detail: at Lithnet.GoogleApps.MA.SchemaBuilder.<>c.b__13_2(Object value) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 1307
at Lithnet.GoogleApps.MA.AdapterPropertyValue.UpdateField(CSEntryChange csentry, Object obj) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\AttributeAdapters\AdapterPropertyValue.cs:line 80
at Lithnet.GoogleApps.MA.ApiInterfaceGroupSettings.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroupSettings.cs:line 30
at Lithnet.GoogleApps.MA.ApiInterfaceGroup.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroup.cs:line 117
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 102
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 59
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 16
at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass33_0.b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 136

Google MA deleting the connectorspace object on import exception

Hi Ryan,

We found as issue with FI which had a successful run, but It deleted the contacts from connectorspace. There was an exception with Full import for contacts when this happened.

DLL Version : 2.0.6954

image

Exception : 

****************************************
****************************************
Inner exception details
Type: Google.GData.Client.GDataRequestException

Message: Execution of request failed: https://www.google.com/m8/feeds/contacts/ga-staff-staging.monash.edu/full?start-index=5001&max-results=1000
Source: Google.GData.Client
TargetSite: Void Execute()
StackTrace:
   at Google.GData.Client.GDataRequest.Execute()
   at Google.GData.Client.Service.Query(Uri queryUri, DateTime ifModifiedSince, String etag, Int64& contentLength)
   at Google.GData.Client.Service.Query(FeedQuery feedQuery)
   at Google.GData.Contacts.ContactsService.Query(ContactsQuery feedQuery)
   at Lithnet.GoogleApps.ContactRequestFactory.<>c__DisplayClass3_1.<GetContacts>b__0()
   at Lithnet.GoogleApps.ApiExtensions.InvokeWithRateLimit[T](Func`1 t, String bucketName, Int32 consumeTokens)
   at Lithnet.GoogleApps.ContactRequestFactory.<GetContacts>d__3.MoveNext()
   at Lithnet.GoogleApps.MA.ApiInterfaceContact.<>c__DisplayClass21_0.<GetObjectImportTask>b__0() in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceContact.cs:line 200
   at System.Threading.Tasks.Task.Execute()
****************************************
****************************************
Inner exception details
Type: System.Net.WebException
Status: ProtocolError

Message: The remote server returned an error: (500) Internal Server Error.
Source: System
TargetSite: System.Net.WebResponse GetResponse()
StackTrace:
   at System.Net.HttpWebRequest.GetResponse()
   at Google.GData.Client.GDataRequest.Execute()
****************************************

Thanks,
Manju

Exported-change-not-reimported error after deleting the last alias

Not sure if this is a MA bug.

Scenario

  1. Make the aliase of a group primary mail address and then delete the old primary mail address in same operation
  2. MIM will try to export a rename (due to our rules) and delete the alias
  3. Export completes successfully
  4. Checking google GUI the alias is also deleted and primary mail address has changed

But on Delta Import we get "exported-change-not-reimported" as it thinks we still need to delete mail alias

delta XML

<?xml version="1.0" encoding="utf-8"?>
<cs-entry-changes>
  <object-change>
    <modification-type>Update</modification-type>
    <dn>[email protected]</dn>
    <object-class>group</object-class>
    <anchor-attributes>
      <anchor-attribute>
        <name>id</name>
        <value>03o7alnk0xktbdz</value>
      </anchor-attribute>
    </anchor-attributes>
    <attribute-changes>
      <attribute-change>
        <name>description</name>
        <modification-type>Replace</modification-type>
        <data-type>String</data-type>
        <value-changes>
          <value-change>
            <modification-type>Add</modification-type>
            <value>distgroup</value>
          </value-change>
        </value-changes>
      </attribute-change>
      <attribute-change>
        <name>primaryEmail</name>
        <modification-type>Replace</modification-type>
        <data-type>String</data-type>
        <value-changes>
          <value-change>
            <modification-type>Add</modification-type>
            <value>[email protected]</value>
          </value-change>
        </value-changes>
      </attribute-change>
      <attribute-change>
        <name>name</name>
        <modification-type>Replace</modification-type>
        <data-type>String</data-type>
        <value-changes>
          <value-change>
            <modification-type>Add</modification-type>
            <value>distgroup</value>
          </value-change>
        </value-changes>
      </attribute-change>
      <attribute-change>
        <name>aliases</name>
        <modification-type>Update</modification-type>
        <data-type>String</data-type>
        <value-changes>
          <value-change>
            <modification-type>Delete</modification-type>
            <value>[email protected]</value>
          </value-change>
        </value-changes>
      </attribute-change>
    </attribute-changes>
  </object-change>
</cs-entry-changes>

On subsequent export it fails again as it is trying to delete an already deleted alias. Only Full Import Delta Sync clears the error as it confirms the delete

Deprecated API question

Hi @ryannewington

Trusting you're fine.

I would like to double check with you that it is ok to remove following deprecated API - https://apps-apis.google.com/a/feeds/emailsettings/2.0/ (as per this article: https://gsuiteupdates.googleblog.com/2018/10/email-settings-api-shutdown.html) from Client Access API's. It appears that GoogleApps MA works just fine without it but wanted to check with you before implementing that change in the production environment. Can you think of any functionalities that may not be working properly without this API please?

Kind regards,
Lukasz

photo

Hello, do you know if is it possible to export photos to Gsuite? I saw that from the google schema I can get attributes thumbnailphotoetag and thumbnailphotourl but are string type and the photo attribute of the person is binary type.
Thank you.

Error on export - "Safe handle has been closed"

Error when exporting a user for add

at Google.Apis.Requests.ClientServiceRequest1.Execute() in C:\Users\mdril\Documents\GitHub\google-api-dotnet-client\Src\Support\GoogleApis\Apis\Requests\ClientServiceRequest.cs:line 102 at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest1 request, Int32 retryAttemps)
at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest`1 request)
at Lithnet.GoogleApps.UserRequestFactory.Add(User item)
at Lithnet.GoogleApps.MA.ApiInterfaceUser.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceUser.cs:line 95
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 107
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 64
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 21
at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass38_0.b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 149

Delta Import run profile

Hello,
as per subject, seems that the run profile "Delta Import" doesn't work.
It starts, it lasts 1 second and no change are imported (even if change are made on Google side).
Are you aware about this issue? I got this behavior in two different environment, test and prod.

Thanks.

The RateLimit configuration item does not seem to be used

The RateLimit configuration item ("rate-limit") does not seem to be used in v2.0.6954 when creating the buckets.
(E.g. DirectoryApiElement.RateLimit)

This leads to default rate limits being used, and not configurable.

Could you please check?

(Another) Unable to retrieve schema error

Don't want to bother you with another one of these errors but your help on others' issues like this have been helpful to me. So maybe this will also help others.

I've got this working on our dev and production servers but on our test server I can't get past the Schema 1 screen when creating the MA.
image

It seems to be an SSL/TLS issue but I can't figure out, or find, an answer. The registry settings for SCHANNEL Ciphers and Protocols are the same on all three servers.

So I thought I'd ask you here after much gnashing of teeth and running out of other ideas. Just to see if you have any thoughts on where to look next for a solution. Thanks for any help.

The event log error is this:

The extensible extension returned an unsupported error.
The stack trace is:
"System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at Google.Apis.Http.ConfigurableMessageHandler.d__59.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Auth.OAuth2.Requests.TokenRequestExtenstions.d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Auth.OAuth2.ServiceAccountCredential.d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Auth.OAuth2.ServiceCredential.d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Auth.OAuth2.ServiceAccountCredential.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Auth.OAuth2.ServiceCredential.d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Http.ConfigurableMessageHandler.d__59.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Apis.Requests.ClientServiceRequest1.<ExecuteUnparsedAsync>d__33.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Google.Apis.Requests.ClientServiceRequest1.Execute()
at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest1 request, Int32 retryAttempts) at Lithnet.GoogleApps.ApiExtensions.ExecuteWithBackoff[T](ClientServiceRequest1 request)
at Lithnet.GoogleApps.SchemaRequestFactory.ListSchemas(String customerID)
at Lithnet.GoogleApps.MA.SchemaBuilder.AddUserCustomSchema(MASchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 2474
at Lithnet.GoogleApps.MA.SchemaBuilder.GetUserSchema(IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 1293
at Lithnet.GoogleApps.MA.SchemaBuilder.GetSchema(String type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 51
at Lithnet.GoogleApps.MA.SchemaBuilder.GetSchema(IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 27
at Lithnet.GoogleApps.MA.ManagementAgent.GetSchema(KeyedCollection`2 configParameters) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 405
Forefront Identity Manager 4.1.3766.0"

v2 release notes

  • Scopes need to change
  • key must be removed from app.config file if present
  • Need to confirm default rate limits for ClassroomsApi

All Object Types must be selected

I only had Users selected in the object type window and was not able to do a full sync. I then selected all of the object types except for domain and still a full sync would fail. Once I selected all of the object types, the full sync worked fine.

-Todd F.

domain shared contact object

Hello,
could you help me to understand why domain shared contacts are not provisioned on google as expected?

I'm only able to create it as below:

http://www.google.com/m8/feeds/contacts/test.fcagroup.com/base/5d4adfc70b7f3c80 2020-02-05T09:01:33.666Z <title type='text'>antani</title>

As you can see I can't get email address element.
Even if I try to mapping attributes, I can only see "gd:extendedProperty" and "title".
Could you suggest me what is the correct mapping on GoogleMA?

Thanks

Adding members during group creation can fail with message 'Resource Not Found: groupKey [404]'

If we create a group with an explicit member in it during creation, it fails to export to google. The group itself is created and on the next sync it joins up and exports the member fine.

If we create the same group without any member it exports fine. Adding the same explicit member after initial export to the group also works.

Error: The group member update operation failed.

*******************************************************************************
5/09/2016 7:37:08 AM: Opening export connection
-------------------------------------------------------------------------------
5/09/2016 7:37:18 AM: Starting export Add for user XXXXXXXXXXXXXXXXXXXXXXXX
5/09/2016 7:37:18 AM: Updating description -> distgroup
5/09/2016 7:37:18 AM: Updating name -> distgroup
5/09/2016 7:37:20 AM: An unexpected error occurred while processing XXXXXXXXXXXXXX
****************************************
An exception has occurred in <PutExportEntries>b__0
Type: Lithnet.GoogleApps.AggregateGroupUpdateException
Message: The group member update operation failed. Group ID XXXXXXXXXXXXXXXXXX
Source: Lithnet.GoogleApps
TargetSite: Void AddMembers(System.String, System.Collections.Generic.IList`1[Google.Apis.Admin.Directory.directory_v1.Data.Member], Boolean)
StackTrace:
   at Lithnet.GoogleApps.GroupMemberRequestFactory.AddMembers(String id, IList`1 members, Boolean throwOnExistingMember)
   at Lithnet.GoogleApps.MA.ApiInterfaceGroupMembership.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroupMembership.cs:line 108
   at Lithnet.GoogleApps.MA.ApiInterfaceGroup.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroup.cs:line 117
   at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 102
   at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 59
   at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 16
   at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass33_0.<PutExportEntries>b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 136
****************************************
-------------------------------------------------------------------------------
5/09/2016 7:37:20 AM: Closing export connection: Normal
5/09/2016 7:37:20 AM: Writing 0 delta entries to file
*******************************************************************************

Unable to retrieve schema

Hi Ryan,

I am trying to fire up the MA and have followed - hopefully correctly - your instructions on creating the service account etc. but I am getting the error "Unable to retrieve schema". What I am not able to tell though is whether the problem is with my service account creation, firewall from within my organization or something else.

I realize this is rather vague, but I was wondering if you would have any connectivity/authentication troubleshooting tips you could share? For example, is there any way to validate the Google configuration is correct, or the communication with Google is working correctly?

Thanks,
Andy

after v2 upgrade can't see custom attributes

We upgraded our test environment today to v2 and we can't figure out how to see our schema's custom user attributes. We've read, and tried following the instructions on the "Custom schema" section of the Installation documentation but just aren't clear what we're doing wrong. We have four custom user attributes like this:
xxGoogleUser_xxeid
xxGoogleUser_xxEmail
xxGoogleUser_xxHierarchy
xxGoogleUser_xxcloudEA8

that we can no longer see on the select attributes screen. I hate asking a question like this but is it possible for someone to describe exactly how we get those attributes back? What exactly do we enter on the schema tab of the MA? And did we now have to create a new user object type LithnetGoogleAppsMA with a Text attribute called objectType? If so, can you describe what that does and how this works so we can understand it better? If no time for that, just any tips on troubleshooting or getting this working is much appreciated. Thanks so much for all the work on this. It's been working great for us.

Unable to move a user between two existing OUs

I'm using this MA (1.1.6520.18856) with MIM 2016 SP1 (4.4.1749.0) and am trying to move users between OUs.
I can provision new users successfully without issue into an OU called "/MIMManagedAccounts/NoGmail", however if I have a sync-rule that is triggered which changes the OrgUnitPath value for a user to another OU that exists, in this case "/MIMManagedAccounts/MigrationState_Z", MIM attempts to export the update but the account does not move and remains in the original OU. A full import sees the failed export and reports that as an error.

I have tried various things, like removing the leading "/" (producing a rule violation) or adding a trailing "/" (no change) to the path value, I've also tried different text combination in case it was the "_" that was the issue, and removing that doesn't help either. In fact I don't seem to be able to get an account to ever move OU.
If I move an account manually and then do a full import the change is reported correctly.

Does this MA support changing the OU? We can do this with GAM of course and I have a script running elsewhere to do that for a different project, but I'd much rather do this with this excellent MA and MIM if I can.

My MA is running in a seperate process
I have a "work" schema addition for "Organizations" and "Email"
Only "user" object types are imported via this particularl MA
I have the following attributes selected in the MA:
attributes

Here's the export xml:

<delta operation="update" dn="zz99345@xxxxxxxxxxxx">
 <anchor encoding="base64">LAAAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAA</anchor>
 <primary-objectclass>user</primary-objectclass>
 <objectclass>
  <oc-value>user</oc-value>
 </objectclass>
 <attr name="orgUnitPath" operation="update" type="string" multivalued="false">
  <value operation="add">/MIMManagedAccounts/MigrationState_Z</value>
  <value operation="delete">/MIMManagedAccounts/NoGmail</value>
 </attr>
</delta>

Here's the full import xml:

<delta operation="add" dn="zz99345@xxxxxxxxxxxx">
 <anchor encoding="base64">LAAAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAA</anchor>
 <primary-objectclass>user</primary-objectclass>
 <objectclass>
  <oc-value>user</oc-value>
 </objectclass>
 <attr name="creationTime" type="string" multivalued="false">
  <value>2018-03-13T15:47:43.000</value>
 </attr>
 <attr name="id" type="string" multivalued="false">
  <value>115061404213916952048</value>
 </attr>
 <attr name="includeInGlobalAddressList" type="boolean" multivalued="false">
  <value>false</value>
 </attr>
 <attr name="isMailboxSetup" type="boolean" multivalued="false">
  <value>false</value>
 </attr>
 <attr name="name_familyName" type="string" multivalued="false">
  <value>Zoomer</value>
 </attr>
 <attr name="name_givenName" type="string" multivalued="false">
  <value>Zoe</value>
 </attr>
 <attr name="nonEditableAliases" type="string" multivalued="true">
  <value>zz99345@yyyyyyyyyyyy</value>
  <value>zz99345@zzzzzzzzzzzz</value>
 </attr>
 <attr name="orgUnitPath" type="string" multivalued="false">
  <value>/MIMManagedAccounts/NoGmail</value>
 </attr>
 <attr name="primaryEmail" type="string" multivalued="false">
  <value>zz99345@xxxxxxxxxxxx</value>
 </attr>
 <attr name="suspended" type="boolean" multivalued="false">
  <value>false</value>
 </attr>
</delta>

A screenshot of the pending export:
1_pending_export

A screenshot of the finished export:
2_finished_export

A screenshot of the error:
3_exported-change-not-reimported

The CS object after a full import:
3_after_full_import

Steps to reproduce:

  1. create a new OU in apps domain
  2. flow a constant to OrgUnitPath in MA corresponding to the full path of the new OU
  3. full sync on MA
  4. export
  5. full import
    Results:
    Change appears to export, but does not happen in Google and an exported-change-not-reimported error is produced after the confirming import step

OrgUnitPath not being returned in the MA Call

Not sure what this is - Google Bug or MA

Any change to OrgUnit Path is not being reported in the MA DI and always comes in as a delete and it is going in a loop. The actual change requested has been done on google side. GAM and Google GUI is also reporting it as the new OrgUnitPath

So GAM is reporting correct on API call but MA isin't.. Google GUI also showing correct information

Example: Changed orgunitpath to /AdditionalServices for "c-googleorgunit"

GAM : Google Org Unit Path: /AdditionalServices

After EALL to Google, the Delta File reports for OrgUnitPath as

   <attribute-changes>
      <attribute-change>
        <name>orgUnitPath</name>
        <modification-type>Delete</modification-type>
        <data-type>String</data-type>
        <value-changes />
      </attribute-change>

Fiddler RAW Data

PUT /admin/directory/v1/users/xxxxxxxxxxxxxxxx HTTP/1.1

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Sun, 10 Sep 2017 23:46:36 GMT
Vary: X-Origin
Content-Type: application/json; charset=UTF-8
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alt-Svc: quic=":443"; ma=2592000; v="39,38,37,35"
Accept-Ranges: none
Vary: Origin,Accept-Encoding
Content-Length: 1003

{
"kind": "admin#directory#user",
"id": "XXXXXXXXXXXXXXXXXX",
"etag": ""XXXXXXXXXXXXXXXXXXXXX"",
"primaryEmail": "c-googleorgunit@XXXXXXXXXX",
"name": {
"givenName": "Test",
"familyName": "OrgUnit",
"fullName": "Test OrgUnit"
},
"isAdmin": false,
"isDelegatedAdmin": false,
"lastLoginTime": "1970-01-01T00:00:00.000Z",
"creationTime": "2017-09-10T23:14:50.000Z",
"agreedToTerms": true,
"suspended": false,
"changePasswordAtNextLogin": false,
"ipWhitelisted": false,
"emails": [
{
"address": "c-googleorgunit@XXXXXXX",
"primary": true
}
],
"externalIds": [
{
"value": "XXXXXXXXXXXXXXXXXX",
"type": "custom",
"customType": "XXXXXX"
}
],
"organizations": [
{
"primary": true,
"type": "work",
"customType": "",
"department": "XXXXXXXXXXXX"
}
],
"customerId": "XXXXXXXXXXXXXXXXXXX",
"isMailboxSetup": true,
"includeInGlobalAddressList": false
}

Member deletes from groups are returning 404 errors to the sync engine

The API has changed (again) and now when a member delete occurs during the same operation as the delete of a resource, the following error appears in the sync engine, and is not ignored by the MA.

Google.Apis.Requests.RequestError Resource Not Found: 548280772221 [404] Errors [ Message[Resource Not Found: 548280772221] Location[ - ] Reason[notFound] Domain[global] ] Failed DeleteRequest: [email protected] Group: [email protected]

Add staff users to classroom_teachers group

I can't seem to wrap my head around how to do this. I have users importing/exporting correctly. Now I want to make sure all my staff are automatically added to the classroom_teachers group. I've imported the group from Google to the MV but can't figure out how to add the users to the group. All my staff have an attribute in the metaverse (employeeType=Staff).

Do I need to add code in the extension dll while processing the group object or while processing the staff user object?

I'm pretty sure the code needed is something like:
csentry("members").values.add("[email protected]")

I just don't know where to put it.

How to add more than one type per box in Schema tab

If I'm reading your instructions correctly, I should be able to add more than one type per box on the Schema tab of the MA. The instructions say to add one per line. How to you get another line? If I press the ENTER key after typing one entry in a box, it selects the OK box and goes to another tab. Am I missing something?

Attempted to access an element as a type incompatible with the array

Hello,
we got some errors on import on last days, so we tried to re-create the MA from scratch and we get "unable to retrieve schema" issue. In the event viewer we can see the following:

The extensible extension returned an unsupported error.
The stack trace is:

"System.ArrayTypeMismatchException: Attempted to access an element as a type incompatible with the array.
at System.Collections.Generic.List1.Add(T item) at Lithnet.GoogleApps.GoogleJsonSerializer..ctor() at Lithnet.GoogleApps.SchemaRequestFactory.<>c__DisplayClass1_0.<.ctor>b__0() at Lithnet.GoogleApps.Pool1.CreateAndAddItem()
at Lithnet.GoogleApps.Pool1.Take() at Lithnet.GoogleApps.BaseClientServicePool1.Take(NullValueHandling nullValueHandling)
at Lithnet.GoogleApps.SchemaRequestFactory.ListSchemas(String customerID)
at Lithnet.GoogleApps.MA.SchemaBuilderUsers.AddUserCustomSchema(MASchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilderUsers.cs:line 846
at Lithnet.GoogleApps.MA.SchemaBuilderUsers.BuildBaseSchema(MASchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilderUsers.cs:line 338
at Lithnet.GoogleApps.MA.SchemaBuilderUsers.d__2.MoveNext() in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilderUsers.cs:line 27
at Lithnet.GoogleApps.MA.SchemaBuilder.GetSchema(IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\Schema\SchemaBuilder.cs:line 25
at Lithnet.GoogleApps.MA.ManagementAgent.GetSchema(KeyedCollection`2 configParameters) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 483
Forefront Identity Manager 4.4.1302.0"

Fix solely for export hanging

Hi Ryan,

I know that there is a pre-release version of the MA that resolves the export hanging error. However, I don't feel comfortable with installing the pre-release. Could you provide me with a patch for just that issue? Or perhaps the next release is coming soon?

Object of type 'System.Int64' cannot be converted to type 'System.Nullable`1[System.Int32]'.

Error on exporting to Google.. suspect is the maxMessageBytes attribute which is of type integer and trying to put the value "26214400"

****************************************
An exception has occurred in <PutExportEntries>b__0
Type: System.ArgumentException
Message: Object of type 'System.Int64' cannot be converted to type 'System.Nullable`1[System.Int32]'.
Source: mscorlib
TargetSite: System.Object TryChangeType(System.Object, System.Reflection.Binder, System.Globalization.CultureInfo, Boolean)
StackTrace:
   at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
   at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
   at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index)
   at Lithnet.GoogleApps.MA.AdapterPropertyValue.UpdateField(CSEntryChange csentry, Object obj) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\AttributeAdapters\AdapterPropertyValue.cs:line 83
   at Lithnet.GoogleApps.MA.ApiInterfaceGroupSettings.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroupSettings.cs:line 34
   at Lithnet.GoogleApps.MA.ApiInterfaceGroup.ApplyChanges(CSEntryChange csentry, SchemaType type, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroup.cs:line 115
   at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 107
   at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 64
   at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 21
   at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass38_0.<PutExportEntries>b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 149
****************************************

Unable to delete telephone number from shared contact


23/11/2016 6:50:41 AM: Opening export connection

23/11/2016 6:50:51 AM: Starting export Update for contact:[email protected]
23/11/2016 6:50:51 AM: Performing FULL update operation for contact:[email protected]
23/11/2016 6:50:52 AM: Updating phones_work ->
23/11/2016 6:50:52 AM: An unexpected error occurred while processing contact:[email protected]


An exception has occurred in b__0
Type: Google.GData.Client.GDataRequestException
Message: Execution of request failed: https://www.google.com/m8/feeds/contacts/ga-staff-dev.monash.edu/full/1c739e8d8bfe7596
Source: Google.GData.Client
TargetSite: Void Execute()
StackTrace:
at Google.GData.Client.GDataRequest.Execute()
at Google.GData.Client.Service.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
at Google.GData.Client.Service.Update[TEntry](TEntry entry)
at Lithnet.GoogleApps.ContactRequestFactory.Update(ContactEntry c)
at Lithnet.GoogleApps.MA.ApiInterfaceContact.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceContact.cs:line 106
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeUpdate(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 140
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 61
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 16
at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass34_0.b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 148



Inner exception details
Type: System.Net.WebException
Status: ProtocolError
Message: The remote server returned an error: (400) Bad Request.
Source: System
TargetSite: System.Net.WebResponse GetResponse()
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at Google.GData.Client.GDataRequest.Execute()



23/11/2016 6:50:52 AM: Closing export connection: Normal
23/11/2016 6:50:52 AM: Writing 0 delta entries to file


In the log the phone_work is being written out as < null > (ignore spacing) but for a user it goes out as #null# <-- Don't know if that makes a difference.

Saying that < null > of a shared contact department works.

A batch request cannot contain more than 1000 single requests

Trying to export with a large change in external members..

Getting the error

at Google.Apis.Requests.BatchRequest.Queue[TResponse](IClientServiceRequest request, OnResponse1 callback) in C:\Users\cloudsharp\Documents\GitHub\google-api-dotnet-client\Src\Support\GoogleApis\Apis\Requests\BatchRequest.cs:line 147 at Lithnet.GoogleApps.GroupMemberRequestFactory.RemoveMembers(String id, IList1 members, Boolean throwOnMissingMember)
at Lithnet.GoogleApps.MA.ApiInterfaceGroupMembership.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroupMembership.cs:line 33
at Lithnet.GoogleApps.MA.ApiInterfaceGroup.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroup.cs:line 120
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeUpdate(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 144
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 65
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 16
at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass33_0.b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 136


An exception has occurred in b__0
Type: System.InvalidOperationException

Message: A batch request cannot contain more than 1000 single requests
Source: Google.Apis
TargetSite: Void Queue[TResponse](Google.Apis.Requests.IClientServiceRequest, OnResponse1) StackTrace: at Google.Apis.Requests.BatchRequest.Queue[TResponse](IClientServiceRequest request, OnResponse1 callback) in C:\Users\cloudsharp\Documents\GitHub\google-api-dotnet-client\Src\Support\GoogleApis\Apis\Requests\BatchRequest.cs:line 147
at Lithnet.GoogleApps.GroupMemberRequestFactory.RemoveMembers(String id, IList`1 members, Boolean throwOnMissingMember)
at Lithnet.GoogleApps.MA.ApiInterfaceGroupMembership.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroupMembership.cs:line 33
at Lithnet.GoogleApps.MA.ApiInterfaceGroup.ApplyChanges(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config, Object& target, Boolean patch) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ApiInterfaces\ApiInterfaceGroup.cs:line 120
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeUpdate(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 144
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChangeObject(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 65
at Lithnet.GoogleApps.MA.ExportProcessor.PutCSEntryChange(CSEntryChange csentry, SchemaType type, IManagementAgentParameters config) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ExportProcessor.cs:line 16
at Lithnet.GoogleApps.MA.ManagementAgent.<>c__DisplayClass33_0.b__0(CSEntryChange csentry) in D:\github\lithnet\googleapps-managementagent\src\Lithnet.GoogleApps.MA\ManagementAgent.cs:line 136


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.