8000 GamUpdates · GAM-team/GAM Wiki · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

GamUpdates

GitHub Action edited this page Jun 12, 2025 · 112 revisions

Update GAM7 to latest version

Automatic update to the latest version on Linux/Mac OS/Google Cloud Shell/Raspberry Pi/ChromeOS:

  • Do not create project or authorizations, default path $HOME/bin
    • bash <(curl -s -S -L https://git.io/gam-install) -l
  • Do not create project or authorizations, specify a path
    • bash <(curl -s -S -L https://git.io/gam-install) -l -d <Path>

By default, a folder, gam7, is created in the default or specified path and the files are downloaded into that folder. Add the -s option to the end of the above commands to suppress creating the gam7 folder; the files are downloaded directly into the default or specified path.

See Downloads-Installs-GAM7 for Windows or other options, including manual installation

7.09.04

Fixed bug in gam whatis <EmailItem> where the check for an invitable user always failed.

Fixed bug in gam print shareddriveorganizers where no organizers were displayed when domain in gam.cfg was blank.

Updated to Python 3.13.5

7.09.03

Updated gam <UserTypeEntity> create focustime|outofoffice ... timerange <Time> <Time> to check that the first <Time> is less than the second Time; previously the event was not created.

For new installs the enforce_expansive_access Boolean variable in gam.cfg now defaults to True. For existing installations, if enforce_expansive_access has not been added to gam.cfg, a default value of True will be used.

7.09.02

Added command gam info chromeschema std <SchemaName> to display a Chrome policy schema in the same format as Legacy GAM.

Improved output of gam show chromeschemas [std] and gam info chromeschema [std] to more accurately display the schemas.

7.09.01

Fixed bug in gam <UserTypeEntity> print diskusage where the ownedByMe column was blank for the top folder.

Fixed bug in gam update chromepolicy where the following error was generated when updating policies with simple numerical values.

ERROR: Missing argument: Expected <value>"

7.09.00

Removed the overly broad service account IAM and Access Management API scope https://www.googleapis.com/auth/cloud-platform from DWD. The gam <UserTypeEntity> check|Update serviceaccount commands issue an error message if this scope is enabled prompting you to update your service account authorization so that the scope can be removed.

GAM commands that need IAM access now use the more limited scope https://www.googleapis.com/auth/iam in a non-DWD manner.

Added enforce_expansive_access Boolean variable to gam.cfg that provides the default value for option enforceexpansiveaccess in all commands that delete or update drive file ACLs/permissions. It's default value is False.

gam <UserTypeEntity> delete permissions
gam <UserTypeEntity> delete drivefileacl
gam <UserTypeEntity> update drivefileacl
gam <UserTypeEntity> copy drivefile
gam <UserTypeEntity> move drivefile
gam <UserTypeEntity> transfer ownership
gam <UserTypeEntity> claim ownership
gam <UserTypeEntity> transfer drive

Fixed bug in gam print shareddriveorganizers that caused a trap when an organizer was a deleted user.

Updated to Python 3.13.4

7.08.02

Updated the defaults in gam print shareddriveorganizers to match the most common use case, not the script.

  • domainlist - The workspace primary domain
  • includetypes - user
  • oneorganizer - True
  • shownoorganizerdrives - True
  • includefileorganizers - False

To select organizers from any domain, use: domainlist ""

These commands produce the same result.

gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers

7.08.01

Added option shareddrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)) to gam print shareddriveorganizers that displays organizers for a specific list of Shared Drive IDs.

See: https://github.com/GAM-team/GAM/wiki/Shared-Drives#display-shared-drive-organizers

7.08.00

Added the following command that can be used instead of the GetTeamDriveOrganizers.py script.

gam [] print shareddriveorganizers [todrive *] [adminaccessasadmin] [shareddriveadminquery|query ] [orgunit|org|ou ] [matchname ] [domainlist ] [includetypes ] [oneorganizer []] [shownorganizerdrives [false|true|only]] [includefileorganizers []] [delimiter ]

See: https://github.com/GAM-team/GAM/wiki/Shared-Drives#display-shared-drive-organizers

The command defaults match the script defaults:
* `domainlist` - All domains
* `includetypes` - user,group
* `oneorganizer` - False
* `shownoorganizerdrives` - True
* `includefileorganizers` - False

For example, to get a single user organizer from your domain for all Shared Drives including no organizer drives:

gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives


### 7.07.17

Added option `oneuserperrow` to `gam print devices` to have each of a
device's users displayed on a separate row with all of the other device fields.

### 7.07.16

Added `chromeostype`, `diskspaceusage` and `faninfo` to `<CrOSFieldName>` for use in `gam info|print cros`.

Fixed bugs/cleaned output in  `gam info|print cros`.

### 7.07.15

Added option `shareddrivesoption included|included_if_account_is_not_a_member|not_included` to `gam create vaultexport`.

The previous option `includeshareddrives <Boolean>` is mapped as follows:
* `includeshareddrives false` - `shareddrivesoption included_if_account_is_not_a_member`
* `includeshareddrives true` - `shareddrivesoption included`

### 7.07.14

Update `gam setup chat` output to include the following that shows the actual Cloud Pub/Sub Topic Name.

You'll use projects//topics/no-topic in Connection settings Cloud Pub/Sub Topic Name


### 7.07.13

Added option `showitemcountonly` to `gam [<UserTypeEntity>] print|show shareddrives` that causes GAM to display the
number of Shared Drives on stdout; no CSV file is written.

### 7.07.12

Fixed bug in `gam print|show oushareddrives` that caused a trap.

Improved getting Shared Drive names from IDs when accessing Shared Drives in external workspaces.

### 7.07.11

Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
to handle the following error:

ERROR: 400: badRequest - Bad Request


Updated `gam <UserTypeEntity> move drivefile` to handle the following error:

ERROR: 400: shareOutNotPermitted


### 7.07.10

Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
to handle the following error:

ERROR: 400: eventTypeRestriction - Attendees cannot be added to 'fromGmail' event with this visibility setting.


### 7.07.09

Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
to handle the following error:

gamlib.glgapi.serviceNotAvailable: Authentication backend unavailable.


### 7.07.08

Fixed bug in `gam <UserTypeEntity> print filelist ... countsonly` that issued an
incorrect warning message like the following when `redirect csv <FileName> multiprocess` was specified.

WARNING: csv_output_row_filter column "^name$" does not match any output columns


### 7.07.07

Fixed bug in `gam report <ActivityApplictionName> ... countsonly eventrowfilter` that issued an
incorrect warning message like the following when `redirect csv <FileName> multiprocess` was specified.

WARNING: csv_output_row_filter column "^doc_title$" does not match any output columns


### 7.07.06

Added option `eventrowfilter` to `gam calendars <CalendarEntity> print events ... countsonly`
and `gam <UserTypeEntity> print events <UserCalendarEntity> ... countsonly` that causes
GAM to apply `config csv_output_row_filter` to the event details rather than the event counts.
This will be useful when `<EventSelectProperty>` and `<EventMatchProperty>` do not have the
capabilty to select the events of interest; e.g., you want to filter based on the event `created` property.

Dropped the extraneous `id` column for `gam calendars <CalendarEntity> print events ... countsonly`
and `gam <UserTypeEntity> print events <UserCalendarEntity> ... countsonly`.

### 7.07.05

Updated `gam <UserTypeEntity> move drivefile` to recognize the API error: `ERROR: 400: shareOutWarning`.

### 7.07.04

Updated `gam create vaultexport ... rooms <ChatSpaceList>` to strip `spaces/` from the Chat Space IDs.

Updated `gam <UserTypeEntity> copy drivefile` to recognize the API error: `ERROR: 400: shareOutWarning`.

### 7.07.03

Updated `gam create vaultexport` to allow allow specifying a list of items in a search method
with `shareddrives|rooms|sitesurl select <FileSelector>|<CSVFileSelector>`.

### 7.07.02

Fixed bug in `redirect csv ... transpose` where a CSV file with multiple rows was not properly transposed.

### 7.07.01

Fixed bug in `gam print|show chromepolicies` that caused a trap. Made additional
updates to handle changes in the Chrome Policy API.

### 7.07.00

As of mid-October 2024, Google deprecated the API that retrieved the Global Address List.

The following commands have been eliminated.

gam info gal gam print gal gam show gal


These commands are a work-around for `gam print gal`.

gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" redirect csv ./UserGAL.csv print users fields name,gal gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" batch_size 25 redirect csv ./GroupGAL.csv print groups fields name,gal


### 7.06.14

Updated `create|update adminrole` to allow specifying a collection of privileges
with `privileges select <FileSelector>|<CSVFileSelector>` which makes copying roles much simpler.

Added option `role <RoleItem>` to `gam print|show adminroles` to allow display of information
for a specific role.

### 7.06.13

Updated `gam print group-members ... recursive` and `gam print cigroup-members ... recursive`
to expand groups representing chat spaces.

### 7.06.12

Deleted commands to display Analytic UA properties; the API has been deprecated.

gam print|show analyticuaproperties


### 7.06.11

Improved `gam checkconn`.

Updated `gam print group-members` and `gam print cigroup-members` to recognize members
that are groups representing chat spaces. For now, these groups are not expanded when
`recursive` is specified.

### 7.06.10

Added the following license SKU.

1010020034 - Google Workspace Frontline Plus


### 7.06.09

Added `gemini` and `geminiforworkspace` to `<ActivityApplicationName>` for use in
`gam report <ActivityApplicationName>`.

### 7.06.08

Fixed problem where Yubikeys caused a trap.

### 7.06.07

Updated private key rotation progress messages in `gam create|use|update project`
and `gam upload sakey`.

Updated `gam use project` to display the following error message when the specifed project
already has a service account.

Re-run the command specify a new service account name with: saname '


### 7.06.06

Native support for Windows 11 Arm-based devices.

Renamed some MacOS and Linux binary installer files to align on terminology. Everything is "arm64" now, no "aarch64".

### 7.06.05

Updated code in `gam delete|update chromepolicy` to handle the `policyTargetKey[additionalTargetKeys]`
field in a more general manner for future use.

### 7.06.04

Fixed bug in `gam report <ActivityApplictionName>` where a report with no activities
was not displaying any output.

### 7.06.03

Fixed bug in `gam <UserTypeEntity> print|show drivelastmodification` that caused a trap
when an empty drive was specified.

### 7.06.02

Updated `gam <UserTypeEntity> print|show filecounts ... showlastmodification` to include
file mimetype and path information for the last modified file.

Added simple commands to get information about the last modified file on a drive.
By default, a user's My Drive is processed; optionally, a Shared Drive can be processed.

gam print drivelastmodification [todrive ] [select ] [pathdelimiter ] (addcsvdata ) gam show drivelastmodification [select ] [pathdelimiter ]


### 7.06.01

Updated `gam <UserTypeEntity> create|update drivefileacl ... expiration <Time>`
to handle additional API errors.

Updated to Python 3.13.3.

### 7.06.00

Upgraded to OpenSSL 3.5.0.

Fixed bug in `gam print cigroups` where `createTime`, `updateTime` and `statusTime`
were not converted according to `gam.cfg timezone`.

### 7.05.22

Updated progress messages for  `gam <UserTypeEntity> print filelist|filecounts|filesharecounts|filetree select shareddriveid <SharedDriveID>`
to display the ID of the SharedDrive that is being accessed.

Getting all Drive Files/Folders for user@domain.com on Shared Drive ID: <SharedDriveID Got 33 Drive Files/Folders for user@domain.com on Shared Drive ID: ...


### 7.05.21

Fixed bug in `gam update chromepolicy` that generated an error like the following
when JSON data was read from a file.

ERROR: JSON: {'error': {'code': 400, 'message': 'Invalid enum value: {prefix}{value} for enum type: chrome.policy.api.v1.devicepolicy.AllowNewUsersEnum', 'status': 'INVALID_ARGUMENT'}}


Fixed bug in `gam create chromepolicyimage` that caused a trap.

### 7.05.20

Updated code to validate both `<RegularExpression>` and `<ReplacementString>`
in the following command line options; this will expose errors when the command
is being parsed rather than at run-time.

replaceregex replacedescription replacefilename


### 7.05.19

Added `replaceregex <RegularExpression> <ReplacementString> <Tag> <String>` to the following commands:

gam sendemail subject gam sendemail subject


The `<RegularExpression>` is used as a match pattern against `<String>` to produce `<ReplacementString>`.
Instances of `{Tag}` will be replaced by `<ReplacementString>` in the message subject and body.

Added `replaceregex <RegularExpression> <ReplacementString> <Tag> <UserReplace
8000
ment>` to the following commands:

gam create user gam update user gam update users gam update users gam draft message gam import message gam insert messageo gam create sendas gam update sendas gam signature gam vacation subject


The `<RegularExpression>` is used as a match pattern against `<UserReplacement>` to produce `<ReplacementString>`.
Instances of `{Tag}` will be replaced by `<ReplacementString>` in the indicated items.

For example, when adding a phone number to a signature, an unformatted number can be formatted:

replaceregex "(\d{3})(\d{3})(\d{4})" "(\1) \2-\3" Phone "9876543210" replaces 9876543210 with (987) 654-3210

replaceregex "(+\d{2})(\d{3})(\d{3})(\d{3})" "\1 \2 \3 \4" Phone "+61987654321" replaces +61421221506 with +61 987 654 321


### 7.05.18

Updated `gam calendars <CalendarEntity> show events` and `gam <UserTypeEntity> show events`
to display the event description according to `show_convert_cr_nl` in `gam.cfg`;
previously, GAM assumed `show_convert_cr_nl = true`.

show_convert_cr_nl = false description: Line 1 Line 2 Line 3

show_convert_cr_nl = true description: Line 1\nLine 2\nLine 3\n


### 7.05.17

Updated commands that delete drive ACLs to handle the following error:

ERROR: 403: cannotDeletePermission - The authenticated user does not have the required access to delete the permission.


### 7.05.16

Added option `transpose [<Boolean>]` to `redirect csv` that causes
GAM to transpose CSV output rows and columns. This will most useful
when a `countsonly` option is used in a `print` or `report` command.

### 7.05.15

Updated `gam <UserTypeEntity> get drivefile` and `gam <UserTypeEntity> create drivefile`
to allow downloading and uploading of Google Apps Scripts.

$ gam user user1@domain.com get drivefile 1ZY-YkS3E0OKipALra_XzfIh9cvxoILSbb8TRdHBFCpyB_mXI_J8FmjHv format json User: user1@domain.com, Download 1 Drive File User: user1@domain.com, Drive File: Test Project, Downloaded to: /Users/gamteam/GamWork/Test Project.json, Type: Google Doc $ gam user user2@domain.com create drivefile localfile "Test Project.json" mimetype application/vnd.google-apps.script+json drivefilename "Test Project" User: user2@domain.com, Drive File: Test Project(1Ok_svw55VTreZ5CzcViJDLfEzVRi-Un8D9eG6I5pIeVyRl2YsmNiy3C_), Created with content from: Test Project.json


### 7.05.14

Added the following License SKU:

ProductId SKUId Display Name 101039 1010390002 Assured Controls Plus


### 7.05.13

Updated license product names to match Google.

### 7.05.12

Fixed bug in `gam update chromepolicy` where `appid` was misinterpreted for `chrome.devices.kiosk` policies
and an error was generated.

ERROR: Chrome Policy Schema: customers/C123abc456/policySchemas/, Does not exist


### 7.05.11

Added the following License SKUs:

ProductId SKUId Display Name Google-Apps 1010070001 Google Workspace for Education Fundamentals Google-Apps 1010070004 Google Workspace for Education Gmail Only 101034 1010340007 Google Workspace for Education Fundamentals - Archived User


### 7.05.10

Updated various chat space commands to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable

### 7.05.09

Fixed bug in `gam calendars <CalendarEntity> print events matchfield attendeesstatus required accepted resource_calendar@resource.calendar.google.com`
that caused a trap.

### 7.05.08

Added error message to `gam report` commands to indicate forbidden access;
previously, no error message was displayed.

ERROR: Customer ID: C012abc34, Caller does not have access to the customers reporting data.


### 7.05.07

Fixed bug in `gam calendars <CalendarEntity> info events` and `gam <UserTypeEntity> info events`
where option `showdayofweek` was not recognized.

### 7.05.06

Improve message displayed when a command is issued that requires Google Chat Bot setup;
display a link to the Wiki `Set up a Chat Bot` instructions.

### 7.05.05

Added options `password prompt` and `password uniqueprompt` to `gam create user <EmailAddress>`
and `gam update users <UserTypeEntity>` that prompt you to enter a password from stdin.

See [User Passwords](https://github.com/GAM-team/GAM/wiki/Users#passwords)

### 7.05.04

Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events`
to handle the following error:

ERROR 400: malformedWorkingLocationEvent - A working location event must have a visibility setting of public.


### 7.05.03

Fixed bug in `gam all users print users issuspended false allfields` that caused a trap.

### 7.05.02

Chat usage reports are now available. Added `chat` to `<CustomerServiceName>` and `<UserServiceName>`
for use in `gam report customer|user`.

* https://workspaceupdates.googleblog.com/2025/02/chat-usage-analytics-updates.html

### 7.05.01

Updated from `v1beta1` to `v1` for `Cloud Identity - Policy`.

* See: https://workspaceupdates.googleblog.com/2025/02/policy-api-general-availability.html

### 7.05.00

Enabled support for Limited Access as described here:
* https://workspaceupdates.googleblog.com/2025/02/updating-access-experience-in-google-drive.html

Note that the rollout may take 15 days.

Added option `inheritedpermissionsdisabled [<Boolean>]` to `<DriveFileAttribute>`; this
attribute can be set on folders.

Added `inheritedpermissionsdisabled` to `<DriveFieldName>`.

Added `capabilities.candisableinheritedpermissions` and `capabilities.canenableinheritedpermissions`
to `<DriveCapabilitiesSubfieldName>`.

Added option `enforceexpansiveaccess [<Boolean>]` to all commands that delete or update
drive file ACLs/permissions.

gam delete permissions gam delete drivefileacl gam update drivefileacl gam copy drivefile gam move drivefile gam transfer ownership gam claim ownership gam transfer drive


### 7.04.05

Added initial support for Meet API v2beta; you must be in the Developer Preview program
for this to be effective.
* https://developers.google.com/meet/api/guides/beta/configuration-beta#auto-artifacts

Added `meet_v2_beta` Boolean variable to `gam.cfg`. When this variable is true,
the following options are added to `<MeetSpaceOptions>` used in `gam <UserTypeEntity> create|update meetspace`.
    moderation <Boolean> |
    chatrestriction hostsonly|norestriction |
    reactionrestriction hostsonly|norestriction |
    presentrestriction hostsonly|norestriction |
    defaultjoinasviewer <Boolean> |
    recording <Boolean> |
    transcription <Boolean> |
    smartnotes <Boolean>

This isn't called beta for nothing, I have found problems and reported them.

### 7.04.04

Updated `gam print group-members|cigroup-members` to include the `email` column
when `fields <MembersFieldNameList>` did not include `email`.

### 7.04.03

Added option `minimal|basic|full` to `gam print cigroup-members`:
* `minimal` - Fields displayed: group, id, role, email
* `basic` - Fields displayed: group, type, id, role, email, expireTime
* `full` - Fields displayed: group, type, id, role, email, createTime, updateTime, expireTime; this is the default

Added option `minimal|basic|full` to `gam show cigroup-members`:
* `minimal` - Fields displayed: role, email
* `basic` - Fields displayed: type, role, email, expireTime
* `full` - Fields displayed: type, role, email, createTime, updateTime, expireTime; this is the default

Upgraded `gam print cigroup-members ... recursive` to display sub-group email addresses rather than IDs.

### 7.04.02

Improved output formatting for the following commands:

gam info peoplecontact gam show peoplecontacts gam info peopleprofile gam show peopleprofile gam info contacts gam show contacts gam show peopleprofile


### 7.04.01

Fixed bug where multiple `querytime<String>` values in a query were not properly processed;
only the last `querytime<String>` was processed.

Command line: query "sync:#querytime1#..#querytime2# status:provisioned" querytime1 -2y querytime2 -40w Query: (sync:#querytime1#..2024-05-09T00:00:00 status:provisioned) Invalid


### 7.04.00

The Classic Sites API no longer functions, the following commands are deprecated:

gam [] create site gam [] update site gam [] info site gam [] print sites gam [] show sites gam [] create siteacls gam [] update siteacls gam [] delete siteacls gam [] info siteacls gam [] show siteacls gam [] print siteacls gam [] print siteactivity


### 7.03.09

Added option `maxmessagesperthread <Number>` to `gam <UserTypeEntity> print|show threads`
that limits the number of messages displayed per thread. The default is 0, there is no limit.
For example, this can be used if you only want to see the first message of each thread.

gam user user@domain.com print|show threads maxmessagesperthread 1


Fixed bug in `gam <UserTypeEntity> print filelist countsonly` where extraneous columns
were displayed.

Fixed bug in `gam <UserTypeEntity> print filelist countsonly showsize` where sizes were
all shown as 0 unless`sizefield size` was specified.

### 7.03.08

Improved pip install.

Yubikey as optional should now be working also. So:

pip install --upgrade gam7

skips Yubikey.

To install with yubikey support (assuming you have installed the necessary swig and libpcsclite-dev packages already) run:

pip install --upgrade gam7[yubikey]


### 7.03.07

Updated `gam create vaultexport` to include `corpus gemini`.

* See: https://workspaceupdates.googleblog.com/2025/02/google-vault-now-supports-gemini.html

### 7.03.06

Added option `rawfields "<BrowserFieldNameList>"` to `gam info|print|show browsers` that allows
specification of complex field lists with selected subfields.

* See: https://github.com/GAM-team/GAM/wiki/Chrome-Browser-Cloud-Management#raw-fields

### 7.03.05

GAM can now be installed by pip: pip install --upgrade gam7

### 7.03.04

Added option `security` to `gam create cigroup` that allows creation of a security group
in a single command.

Updated to Python 3.13.2.

### 7.03.03

Fixed bug in `gam update resoldcustomer` that caused the following error:

ERROR: Got an unexpected keyword argument customerAuthToken


### 7.03.02

Updated `gam <UserTypeEntity> show labels nested` to properly display label nesting
when labels have embedded `/` characters in their names.

### 7.03.01

Updated `gam create project` to retry the following unexpected error:

ERROR: 400 - invalidArgument - Service account gam-project-a1b2c@gam-project-a1b2c.iam.gserviceaccount.com does not exist.


### 7.03.00

Updated `gam create|use project` to discontinue use of the `Identity-Aware Proxy (IAP) OAuth Admin APIs`
that are being deprecated by Google. You will see a set of instructions detailing how to
configure the Oauth Consent screen and create the Oauth client.

Added options `copypermissionroles <DriveFileACLRoleList>` and `copypermissiontypes <DriveFileACLTypeList>`
to `gam <UserTypeEntity> copy drivefile` that provide more control over what permissions are copied
from the source files/folders to the destination files/folders.

### 7.02.11

Updated `gam report <ActivityApplicationName>` to display `id:<actor.profileId>` in the `emailAddress` column
when `actor.email` is empty. This typically occurs when the actor is not in your workspace.

Updated `gam <UserTypeEntity> copy drivefile` to ignore ACLs referencing deleted user/groups.

### 7.02.10

Added option `bydate` to `gam report <ActivityApplicationName> ... countsonly` that provides an additional display option.
* `countsonly` - Display a row per user across all dates with all event counts on one row
* `countsonly bydate` - Display a row per user per date for all dates with any events with all events counts on the row
* `countsonly summary` - Display a row per event with counts for each event summarized across users and dates

### 7.02.09

Added option `clearresources` to `<EventUpdateAttribute>` for use in `gam <UserTypeEntity> update events`
that allows clearing all resources from a user's calendar events. For example, to clear all resources from a user's future events:

gam user user@domain.com update events primary matchfield attendeespattern @resource.calendar.google.com after now clearresources


Added option `resource <ResourceID>` to `<EventAttribute>` for use in `gam <UserTypeEntity> create|update events`
that adds a resource to an event.

Added option `removeresource <ResourceID>` to `<EventUpdateAttribute>` for use in `gam <UserTypeEntity> update events`
that removes a resource from an event.

### 7.02.08

Fixed bug in `gam print|show chromepolicies` that caused a trap when neither
`ou|orgunit <OrgUnitItem>` nor `group <GroupItem>` was specified.

### 7.02.07

Updated `gam delete|update chromepolicy` to display the `<AppID>` or `<PrinterID>` (if specified)
in the command status messages.

### 7.02.06

Added option `<JSONData>` to `gam <UserTypeEntity> create|update form` that allows for
creation/modification of all fields in a form. `<JSONData>` is a list of form update requests.

* See: https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate

### 7.02.05

Updated `gam [<UserTypeEntity>] show shareddriveacls ... formatjson` to not display this line
which interferes with the JSON output.

User: user@domain.com, Show N Shared Drives


### 7.02.04

Updated code to eliminate trap caused by bug introduced in 7.02.00 that occurs when an invalid domain or OU is specified.

### 7.02.03

Added option `archive` to `gam <UserTypeEntity> update license <NewSKUID> from <OldSKUID>` that causes GAM
to archive `<UserTypeEntity>` after updating their license to `<NewSKUID>`. This will be used when you want to
archive a user with a non-archivable license. The `<NewSKUID>` license is assigned to the user and it then converts
to the equivalent Archived User license when the user is archived.

`<NewSKUID>` must be one of the following SKUs:

Google-Apps-Unlimited - G Suite Business 1010020020 - Google Workspace Enterprise Plus 1010020025 - Google Workspace Business Plus 1010020026 - Google Workspace Enterprise Standard 1010020027 - Google Workspace Business Starter 1010020028 - Google Workspace Business Standard


### 7.02.02

Updated `gam <UserTypeEntity> archive messages <GroupItem>` to retry the following unexpected error
that occurs after many messages have been successfully archived.
`ERROR: 404: notFound - Unable to lookup group`

### 7.02.01

Added options `locked` and `unlocked` to `gam update cigroups` that allow locking/unlocking groups.

* See: https://workspaceupdates.googleblog.com/2024/12/locked-groups-open-beta.html

You'll have to do a `gam oauth create` and enable the following scope to use these options:

[*] 22) Cloud Identity Groups API Beta (Enables group locking/unlocking)


### 7.02.00

Improved the error message displayed for user service account access commands when:
* The API is not enabled
* The user does not exist
* The user exists but is in a OU where the service is disabled

### 7.01.04

Admin role assignments are now in the v1 stable API, use that and remove custom local workaround for the beta. #1724

Remove duplicate local JSON discovery files. #1724

Suppress "UserWarning: Attribute's length must be..." messages on service accounts with long emails. #1725

Added options `internal`, `internaldomains <DomainNameList>` and `external` t
10000
o these commands
that expand the options for viewing group members:

gam info group gam print groups gam print|show group-members gam info cigroup gam print cigroups gam print|show cigroup-members

By default, when listing group members, GAM does not take the domain of the member into account.
* `internal internaldomains <DomainNameList>` - Display members whose domain is in `<DomainNameList>`
* `external internaldomains <DomainNameList>` - Display members whose domain is not in `<DomainNameList>`
* `internal external internaldomains <DomainNameList>` - Display all members, indicate their category: internal or external
* `internaldomains <DomainNameList>` - Defaults to value of `domain` in `gam.cfg`

Members without an email address, e.g. `customer`, `chromeosdevice` and `cbcmbrowser` are considered internal.

Updated to Python 3.13.1.

### 7.01.03

Fixed bug in `gam update cigroups <GroupEntity> delete|sync|update` where `cbcmbrowser` and `chromeosdevice`
addresses were not properly handled.

### 7.01.02

Added option `positivecountsonly` to `gam <UserTypeEntity> print|show filecomments` that causes
GAM to display the number of comments and replies only for files that have comments.

Added `my_commentable_items` to `<DriveFileQueryShortcut>` that can be used with
`gam <UserTypeEntity> print|show filecomments my_commentable_items` to speed up processing.

Updated code that uses the Domain Shared Contacts API with an HTTPS proxy to avoid a trap:

Traceback (most recent call last): ... File "atom/http.py", line 250, in _prepare_connection AttributeError: module 'ssl' has no attribute 'wrap_socket'


### 7.01.01

Fixed bug in `gam <UserTypeEntity> print|show filetree` where no error message was generated
if a user had Drive disabled.

### 7.01.00

Fixed bug in `gam update chromepolicy` that caused some policy updates to fail.

Added option `showhtml` to `gam <UserTypeEntity> print|show messages` that, when used with `showbody`,
will display message body content of type HTML.

Added support for managing/displaying Chrome profiles.

* See: https://github.com/GAM-team/GAM/wiki/Chrome-Profile-Management

### 7.00.40

Updated `gam <UserTypeEntity> update serviceaccount` to properly set the readonly scope
for `[R] 35)  Meet API (supports readonly)` as it is a special case.

### 7.00.39

Supported MacOS versions are now in the download filename.

### 7.00.38

Fixed logic flaw in `gam print|show policies` where non-matching policies were displayed.

### 7.00.37

Added options `group <RegularExpression>` and `ou|org|orgunit <RegularExpression>`
to `gam print|show policies` that causes GAM to only display policies whose group email address
or OU path match the `<RegularExpression>`.

Updated `gam get|update|delete contactphotos` to use the People API for domain shared contact photos
as Google has deprecated the Domain Shared Contacts API for these commands. Unfortunately,
the People API fails with `gam update|delete contactphotos`.

### 7.00.36

Updated `gam print chromeapps` to correct a trap caused by an API change.

### 7.00.35

Classification labels are now available for Gmail in addition to Drive.

* See: https://workspaceupdates.googleblog.com/2024/11/open-beta-data-classification-labels-gmail.html

The following command synonyms are available, there is no change in functionality:

gam [] info classificationlabels|drivelabels gam [] print classificationlabels|drivelabels gam [] show classificationlabels|drivelabels gam [] create classificationlabelpermission|drivelabelpermission gam [] delete classificationlabelpermission|drivelabelpermission gam [] remove classificationlabelpermission|drivelabelpermission gam [] print classificationlabelpermissions|drivelabelpermission gam [] show classificationlabelpermissions|drivelabelpermission


### 7.00.34

Fixed bug introduced in 7.00.33 in `gam print group-members` that caused a trap.

### 7.00.33

Fixed bug in `gam print group-members ... cachememberinfo` that caused a trap.

### 7.00.32

Updated `gam info policies` to accept different policy specifications:
* `polices/<String>` - A policy name, `policies/ahv4hg7qc24kvaghb7zihwf4riid4`
* `settings/<String>` - A policy setting type, `settings/workspace_marketplace.apps_allowlist`
* `<String>` - A policy setting type, `workspace_marketplace.apps_allowlist`

### 7.00.31

Updated `gam info|print|show policies` to make additional API calls for `settings/workspace_marketplace.apps_allowlist`
to get the application name for the application ID. Use option `noappnames` to suppress these calls.

### 7.00.30

Added command to display selected Cloud Identity policies.

gam info policies [nowarnings] [formatjson]


Removed option `name <CIPolicyName>` from `gam print|show policies`; use `info policies`.

### 7.00.29

Added option `name <CIPolicyName>` to `gam print|show policies` that displays
information about a specific policy.

### 7.00.28

Fixed issue that caused `gam print/show policies` to fail on some group policies.

### 7.00.27

Updated `gam <UserTypeEntity> collect orphans` and all commands that print file paths to recognize
that a file owned by a user that has no parents is not an orphan if `sharedWithMeTime` is set.
This occurs when user A creates a file in a shared folder owned by user B and user B then removes
user A's access to the folder.

Added commands to display Cloud Identity policies.

gam print policies [todrive *] (filter ) [nowarnings] [formatjson [quotechar ]] gam show policies (filter ) [nowarnings] [formatjson]

### 7.00.26

Updated `drive_dir` in `gam.cfg` to allow the value `.` that causes `redirect csv|stdout|stderr <FileName>`
to write `<FileName>` in the current directory without having to prefix `<FileName>` with `./`.

Upgraded to OpenSSL 3.4.0.

### 7.00.25

Updated authentication process for `gam print|show projects`.

### 7.00.24

Updated `gam print|show projects ... showiampolicies 0|1|3` to use non-service account authentication.

### 7.00.23

Updated `gam <UserTypeEntity> create|delete chatmember` to accept external (non-domain) email addresses.

### 7.00.22

Fixed bug in `gam create vaultmatter ... showdetails` that caused a trap.

### 7.00.21

Added `csv_output_header_order` variable to `gam.cfg` that is a list of `<Strings>`
that are used to specify the order of column headers in the CSV file written by a gam print command.
Any headers in the file but not in the list will appear after the headers in the list.

This might be used when the CSV file data is to be processed by another program
that requires that the headers be in a particular order.

### 7.00.20

Fix Windows MSI installer issues on version upgrade. If you are having issues upgrading from a version older than 7.00.20 to this version or newer you may need to do a one time uninstall of GAM7 and then reinstall the new version. No configuration files will be lost during the uninstall / reinstall.

### 7.00.19

Updated `gam update shareddrive <SharedDriveEntity> ou <OrgUnitItem>` to handle the following error
that occurs when an invalid `<SharedDriveEntity>` is specified.

ERROR: 400: invalidArgument - Invalid org membership name 0AJ3b2FTPakToUk9PVAxx.~


Updated `gam print browsers` to properly format the time field `deviceIdentifiersHistory.records.0.firstRecordTime`.

### 7.00.18

Updated `gam create project` to use a default project name of `gam-project-a1b2c` (`a1b2c` is a random string of 5 characters)
instead of `gam-project-abc-123-xyz` to avoid the following warning:

Project: gam-project-abc-123-xyz, Service Account: gam-project-abc-123-xyz@gam-project-abc-123-xyz.iam.gserviceaccount.com, Extracting public certificate init.py:12382: UserWarning: Attribute's length must be >= 1 and <= 64, but it was 70 init.py:12383: UserWarning: Attribute's length must be >= 1 and <= 64, but it was 70 Project: gam-project-abc-123-xyz, Service Account: gam-project-abc-123-xyz@gam-project-abc-123-xyz.iam.gserviceaccount.com, Done generating private key and public certificate


### 7.00.17

Update all user calendar commands to disable falling back to client access if service account
authorization has never been performed.

### 7.00.16

Updated `gam <UserTypeEntity> claim|transfer ownership` to show `Got N Drive Files/Folders that matched query` messages
as files/folders are being identified for processing.

Added option `<JSONData>` to `gam create|update caalevel`.

### 7.00.15

Added options `timestamp [<Boolean>]` and `timeformat <String>` to `gam <UserTypeEntity> create|update drivefile` that allow
adding a timestamp to a created/updated file name.

### 7.00.14

Retry the following unexpected errors in `gam print users`.

ERROR: 400: failedPrecondition - Precondition check failed. ERROR: 500: unknownError - Unknown Error.


### 7.00.13

Version bump in order to confirm MSI installs are operating properly

### 7.00.12

Updated option `showlastmodification` to `gam <UserTypeEntity> print|show filecounts` to handle
the case where all users owning files are suspended. In this case the `lastModifyingUser` column
will show the user's display name as the API doesn't return the user's email address.

Updated support for `Folders with limited access`; this is a work in progress.

### 7.00.11

Updated to Python 3.12.7 where possible.

### 7.00.10

Handled the following error that occurs when `gam create user` is immediateley followed by `gam update user`.

ERROR: 412: conditionNotMet - User creation is not complete.


Updated support for `Folders with limited access`; this is a work in progress.

### 7.00.09

Added initial support for `Folders with limited access`; you must be enrolled in the Beta preview.

Updated `api_call_tries_limit` variable to `gam.cfg` that limits the number of tries
for Google API calls that return an error that indicates a retry should be performed.
The default value is 10 and the range of allowable values is 3-30.

### 7.00.08

Fixed bug in `gam <UserTypeEntity> delete groups` that caused the command to fail when `enable_dasa = true` in `gam.cfg`.

### 7.00.07

Updated `<PeopleContactAttribute>` fields `address,email,phone,url` to allow an empty type field.

address "" formatted "My Address" primary email "" user@gmail.com primary phone "" "510-555-1212" primary url "" "https://www.domain.com" primary


### 7.00.06

Updated `gam <UserTypeEntity> create|update chatspace` to support the new permissions settings
for Chat spaces that are in Developer Preview.

* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces#Space.FIELDS.predefined_permission_settings

### 7.00.05

Fixed bug that caused an error when creating a calendar birthday event.

### 7.00.04

Improved performance of `gam report users orgunit <OrgUnitPath>` when `showorgunit` is not specified.

Added option `birthday <Date>` to `gam <UserTypeEntity> create event <UserCalendarEntity>` that adds
an annual recurring event to the calendar.

Added `birthday` to `<EventType>` for use in various calendar event commands.

### 7.00.03

Updated `gam delete ou` and `gam print admins` to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.


### 7.00.02

Added option `showlastmodification` to `gam <UserTypeEntity> print|show filecounts` that adds
the following fields to the output: `lastModifiedFileId,lastModifiedFileName,lastModifyingUser,lastModifiedTime`;
these are for the most recently modified file.

Added option `keepforever [<Boolean>]` to `gam <UserTypeEntity> update filerevisions` that allows setting
`Keep forever` in revisions.

Upgraded to Python 3.12.6 where possible.

### 7.00.01

Added option `shownames` to `gam <UserTypeEntity> print|show sheet` that causes GAM
to make an additional API call to get and display the sheet file name that is not supplied by the Sheets API.

### 7.00.00

Merged GAM-Team version

### 6.81.02

Updated `gam update group postmaster@domain.com` to handle the error that is generated.

### 6.81.01

Fixed bug in `gam <UserTypeEntity> create meetspace` that caused errors
due to Developer Preview options being included.

### 6.81.00

Added support for groups when defining Chrome policies.

Added support for the Meet API.

* See: https://github.com/GAM-team/GAM/wiki/Users-Meet

Added option `countsonly` to the following course commands that displays
the number of items in a course but not the details of the items.

gam print course-announcements gam print course-materials gam print course-submissions gam print course-topics gam print course-work


### 6.80.21

Updated `gam <UserTypeEntity> archive messages` to handle the following error:

googleapiclient.errors.MediaUploadSizeError: Media larger than: 26214400


### 6.80.20

Updated `gam report usage user` and `gam report users`  to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.


### 6.80.19

Fixed bug in `gam create inboundssoprofile` that caused a trap due to
an unexpected API result.

Updated `gam create inboundssoprofile ... returnnameonly` to return `inProgress` if the API
does not return a complete result.

Upgraded to OpenSSL 3.3.2 where possible.

### 6.80.18

Updated `gam print|show admins` to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.

6.80.17

Updated gam <UserTypeEntity> modify messages to improve error handling.

6.80.16

Fixed bug in gam print vaultcounts that caused a trap.

6.80.15

Fixed bug in gam <UserTypeEntity> print filelist ... countsrowfilter that caused a trap.

Added option continueoninvalidquery [<Boolean>] to gam <UserTypeEntity> print filelist|filecounts that can be used in special cases where a query of the form query "'labels/mRoha85IbwCRl490E00xGLvBsSbkwIiuZ6PRNNEbwxyz' in labels" causes Google to issue an error saying that the query is invalid when, in fact, it is but the user does not have a license that suppprts drive file labels. When continueoninvalidquery` is true, GAM prints an error message and proceeds to the next user rather that terminating as it does now. Of course, if the query really is invalid, you will get the message for every user.

6.80.14

Updated gam <UserTypeEntity> print messages|threads to display all default headers even if no messages are to be displayed. This eliminates error messages of the following form that occurred because only the headers User,threadId,id were displayed.

WARNING: csv_output_row_filter column "^Date$" does not match any output columns

6.80.13

Added my_publishable_items to <DriveFileQueryShortcut> that can be used in gam <UserTypeEntity> print filerevisions to select only those items that can be published to the web: documents, forms, presentations(slides), spreadsheets. With row filtering, this allows identification of files that have been published outside your domain.

6.80.12

Updated gam print vaultcounts to correctly display accounts with errors.

6.80.11

Updated gam <UserTypeEntity> delete|purge|trash|untrash <DriveFileEntity> shortcutandtarget that when <DriveFileEntity is a shortcut, to have GAM validate that the shortcut and target can be successfully processed before proceeding.

6.80.10

Added option followshortcuts [<Boolean>] to gam <UserTypeEntity> print|show fileinfo|filepath <DriveFileEntity> that when true and <DriveFileEntity is a shortcut, causes GAM to display information about the target of the shortcut rather than the shortcut itself.

Added option shortcutandtarget [<Boolean>] to gam <UserTypeEntity> delete|purge|trash|untrash <DriveFileEntity> that when true and <DriveFileEntity is a shortcut, causes GAM to process the shortcut and the target of the shortcut.

6.80.09

Added options allschemas|(schemas|custom|customschemas <SchemaNameList>) to gam print group-members that display any custom schema values for the group members.

6.80.08

Updated gam print|show oushareddrives to display the Shared Drive ID, name and orgUnitPath as individual, separate entities in the output.

6.80.07

Updated dateheaderformat iso in gam <UserTypeEntity> info|print|show messages to include a colon between the hours and minutes in the timezone portion of the string as in all other time strings.

6.80.06

Added option tdreturnidonly [<Boolean>] to <ToDriveAttribute> that when true (the default), causes GAM to display only the uploaded file ID to stdout. This can be captured and used in subsequent commands, tdfileid <DriveFileID> that will update the same file.

6.80.05

Added option individualstudentcoursework copy|delete|maptoall to gam create|update course ... copyfrom that controls how individual student coursework in the copyfrom course is processed.

  • individualstudentcoursework copy - Copy individual student coursework; this is the default. You will get an error if a student is not a member of the course
  • individualstudentcoursework delete - Delete individual student coursework
  • individualstudentcoursework maptoall - Map individual student coursework to all student coursework

For convenience, setting individualstudentassignments sets all of the following to the same value:

  • individualstudentannouncements
  • individualstudentmaterials
  • individualstudentcoursework

6.80.04

Cleaned up progress messages in gam create|update course ... copyfrom.

6.80.03

Added option stripcrsfromname to gam <UserTypeEntity> print driveactivity that causes carriage returns, linefeeds and nulls to be stripped from file names.

6.80.02

Added option addcsvdata <FieldName> <String> to gam <UserTypeEntity> print filecounts that adds additional columns of data to the CSV file output.

Added options individualstudentannouncements copy|delete|maptoall and individualstudentmaterials copy|delete|maptoall to gam create|update course ... copyfrom that controls how individual student announcements and materials in the copyfrom course are processed.

  • individualstudentannouncements copy - Copy individual student announcements; this is the default. You will get an error if a student is not a member of the course
  • individualstudentannouncements delete - Delete individual student announcements
  • individualstudentannouncements maptoall - Map individual student announcements to all student announcements
  • individualstudentmaterials copy - Copy individual student materials; this is the default. You will get an error if a student is not a member of the course
  • individualstudentmaterials delete - Delete individual student materials
  • individualstudentmaterials maptoall - Map individual student materials to all student materials

6.80.01

Added options showstudentsaslist [<Boolean>] and delimiter <Character> to gam print course-work. By default, when course work is assigned to individual students, the student IDs are displayed in multiple indexed columns. Use these options to display the student IDs in a single column as a delimited list.

Updated gam <UserTypeEntity> vacation [<Boolean>] to make <Boolean> optional; this allows changes to other fields without affecting the current responder state.

Updated gam <UserTypeEntity> print|show vacation to avoid a trap when invalid start or end dates have been entered in the Gmail user interface. Invalid dates are represented as 1970-01-01.

6.80.00

Fixed bug in gam <UserTypeEntity> print users ... license ... formatjson that caused a trap.

Upgraded to Python 3.12.5 where possible.

6.79.12

Fixed bug in gam user admin@domain.com print chatspaces asadmin that caused the following error:

Chat Admin: admin@domain.com(asadmin), Print Failed: This method doesn't support non-admin user authentication. Authenticate with an admin account.

6.79.11

Fixed bug in gam <UserItem> print|show chatmembers where the filter <String> was not applied.

6.79.10

Updated commands to handle a trap that occurs when oauth2service.json specifies a YubiKey but the YubiKey is not inserted.

6.79.09

Added option addcsvdata <FieldName> <String> to gam <UserTypeEntity> print teamdriveacls that adds additional columns of data to the CSV file output. This can be used when ACLs for selected users are to be replaced with a different user email address.

6.79.08

Clarified action to perform messages when creating/deleting/updating licenses.

6.79.07

Added option totalonly to gam <UserTypeEntity> print|show groups that displays the user email address and the total number of groups to which it belongs. This is in contrast to countsonly that has to make an additional API call per group per user to get the user's role. When countsonly is specified, an additional column Total is displayed that is the sum of the role counts.

6.79.06

Fixed bug in gam calendars <CalendarEntity> update event ... removeattendee <EmailAddress> that caused a trap if the event had no attendees.

6.79.05

Updated gam <UserTypeEntity> empty drivetrash <SharedDriveEntity> to handle this error that occurs when the user is not a Manager of the Shared Drive.

ERROR: 403: insufficientFilePermissions - The user does not have sufficient permissions for this file.

6.79.04

Added options filename <FileName> and movetoou <OrgUnitItem> to gam check ou <OrgUnitItem> that causes GAM to create a batch file of GAM commands that will move any remaining items in ou <OrgUnitItem> to movetoou <OrgUnitItem>; executing the batch file will then allow ou <OrgUnitItem> to be deleted if desired.

6.79.03

Added column|field assignedToUnknown to gam print|show admins that will be True when the API assignedTo value can not be converted to an email address; it will be False when the email address is determinable.

6.79.02

Updated gam print admins to handle the following error that occurs when a service account admin no longer exists.

ERROR: 404: notFound - Requested entity was not found.

6.79.01

Updated commands that take <RoleItem> as an argument to take the value in any case, e.g., _SEED_ADMIN_ROLE or _seed_admin_role.

6.79.00

Updated code to work around a Cryptography library change that caused service account private key creation to fail.

6.78.00

Added command to check if an OU contains items; this is useful when tryng to delete an OU as it must not contain any items in order to be deleted.

6.77.18

Added option showitemcountonly to gam print domainaliases that causes GAM to display the number of domain aliasess on stdout; no CSV file is written.

6.77.17

Added option showitemcountonly to gam print domains that causes GAM to display the number of domains on stdout; no CSV file is written.

6.77.16

Fixed bug in gam <UserTypeEntity> print filelist that caused a trap.

6.77.15

Updated gam calendars <CalendarEntity> import event icaluid <iCalUID> json <JSONdata> to handle API constraints on recurring events.

6.77.14

Fixed bug in gam calendars <CalendarEntity> import event icaluid <iCalUID> json <JSONdata> that caused an error.

6.77.13

Updated gam <UserTypeEntity> print|show filecounts to reflect that Shared Drives now have a capacity of 500000 files/folders/shortcuts.

6.77.12

Fixed bug in gam <UserTypeEntity> print chatspaces todrive that caused an error.

6.77.11

Added option convertmbtogb to gam report usage customer|user and gam report customer|user that causes GAM to convert parameters expressed in megabytes (name ends with _in_mb) to gigabytes (name converted to _in_gb) with two decimal places.

6.77.10

Fixed bug in gam <UserTypeEntity> get profilephoto where data written to stdout, e.g. > filename, was not properly base64 encoded.

6.77.09

Added option usertokencounts to gam <UserTypeEntity> print|show tokens that causes GAM to display each user and their number of access tokens; there are no details.

6.77.08

Fixed bugs in gam <UserTypeEntity> delete chatmember <ChatSpace> ... group <GroupItem> and gam <UserTypeEntity> sync chatmember <ChatSpace> ... groups <GroupEntity> that caused an error.

6.77.07

Fixed bug in gam <UserTypeEntity> create chatmember <ChatSpace> ... group <GroupItem> that caused an error.

6.77.06

Updated gam update ou <OrgUnitItem> ... parent <OrgUnitItem> to handle the following error that occurs when parent <OrgUnitItem> is the same as or a sub-OU of ou <OrgUnitItem>.

ERROR: 412: conditionNotMet - OrgUnit hierarchy has cycle

6.77.05

Added option onlyusers <UserTypeEntity> to gam <UserTypeEntity> claim ownership <DriveFileEntity> that causes GAM to only claim ownership of files/folders owned by onlyusers <UserTypeEntity>. This option is multually exclusive with skipusers <UserTypeEntity>.

6.77.04

Fixed bug in gam report users ... range <Date> <Date> where an extraneous API call was made if a date was reached where no API data was available.

6.77.03

Thanks to jay, added the following Colab License SKUs:

1010500001 - Colab Pro
1010500002 - Colab Pro+

Thanks to Jay, updated gam print|show admins to properly display addresses of service accounts with admin role assignments.

Added option limitdatechanges <Integer> to gam report users|customers.

If no report is available for the specified date, can an earlier date be used?

  • `limitdatechanges -1' - Back up to earlier dates to find report data; this is the default.
  • `limitdatechanges 0 | nodatechange' - Do not report on an earlier date if no report data is available for the specified date.
  • `limitdatechanges N' - Back up to earlier dates to find report data; do not back up more than N times.

By default, when gam report user user <UserItem> is specified and no report data is available, there is no output. If csv_output_users_audit = true in gam.cfg, then a row with columns email,date will be displayed where date is the earliest date for which report data was requested.

6.77.02

Cleaned up problems with some of the new Chat API asadmin commands. Some remaining problems may require a Google fix.

6.77.01

Thanks to Jay, added column verificationCodesCount to gam <UserTypeEntity> print backupcodes that displays the number of available backup codes in addtion to the codes.

Added option countsonly that displays only the number of available backup codes but not the codes themselves.

Thanks to Jay, added option nokey to gam create project that creates a project with no service account key, oauth2service.json.

6.77.00

Added option individualstudentassignments copy|delete|maptoall to gam create|update course ... copyfrom that controls how individual student assignments in the copyfrom course are processed.

  • individualstudentassignments copy - Copy individual student assignments; this is the default. You will get an error if the student is not a member of the course.
  • individualstudentassignments delete - Delete individual student assignments
  • individualstudentassignments maptoall - Map individual student assignments to all student assignments

Upgraded to Python 3.12.4 where possible.

Added option asadmin to the following Chat commands that allows admin access. These commands are in Developer Preview, your project must have Developer Preview enabled for the Chat API in order to use these commands.

gam <UserItem> delete chatspace asadmin
gam <UserItem> update chatspace asadmin
gam <UserItem> info chatspace asadmin
gam <UserItem> print|show chatspaces asadmin
gam <UserItem> create chatmember asadmin
gam <UserItem> delete|remove chatmember asadmin
gam <UserItem> update|modify chatmember asadmin
gam <UserItem> sync chatmembers asadmin
gam <UserItem> info chatmember asadmin
gam <UserItem> print|show chatmembers|asadmin

Added use_chat_admin_access Boolean variable to gam.cfg.

* When False, GAM uses user access when making all Chat API calls. For calls that support admin access,
    this can be overridden with the asadmin command line option.
* When True, GAM uses admin access for Chat API calls that support admin access; other calls will use user access.
* Default: False

6.76.15

Fixed bug in gam <UserTypeEntity> print|show filesharecounts summary only summaryuser <String> that printed an erroneous row if <UserTypeEntity> specified a single user and <String> matched the user's email address.

6.76.14

Added the following Gemini License SKUs:

1010470004 - Gemini Education
1010470005 - Gemini Education Premium

6.76.13

Updated gam <UserTypeEntity> show fileinfo ... showlabels and gam <UserTypeEntity> print filelist ... showlabels to retry these errors that occur when trying to get the drive labels for a file/folder.

ERROR: 500: unknownError - Unknown Error.
ERROR: 503: serviceNotAvailable - The service is currently unavailable.

Upgraded to OpenSSL 3.3.1 where possible.

6.76.12

Fixed bug in gam <UserTypeEntity> print|show chatspaces that caused the following error:

ERROR: Got an unexpected keyword argument orderBy

6.76.11

Thanks to Jay, added gam report vault.

Thanks to Jay, added the following Gemini SKUs:

1010470006 - AI Security
1010470007 - AI Meetings and Messaging

Updated gam <UserTypeEntity> print filelist ... showshareddrivepermissions to display progress messages to stderr as a separate API call must be made for every file/folder on the Shared Drive to get its permissions. As this can take a long time, the progress messages indicate that progress is being made.

6.76.10

Added fromgmail to <EventType> that can be used in gam calendars <CalendarEntity> print|show events ... eventtype fromgmail.

6.76.09

Updated gam update|delete|info adminrole to handle the following error:

ERROR: 400: failedPrecondition - Precondition check failed.

6.76.08

Updated <SchemaNameList> to "<SchemaName>|<SchemaFieldName>(,<SchemaName>|<SchemaFieldName>)*" that allows schemas <SchemaNameList> in gam info user and gam print users to display all fields or selected fields of the specified custom schemas.

6.76.07

Fixed bug where control-C was not recognized when GAM had processed all rows in a CSV file and was Waiting for N running processes to finish before terminating.

6.76.06

Fixed bug in gam <UserTypeEntity> print messages ... positivecountsonly where message counts with value 0 were deiplayed.

Added option addcsvdata <FieldName> <String> to gam <UserTypeEntity> print|messages that adds additional columns of data to the CSV file output.

Added option showusagebytes to gam <UserTypeEntity> print|show drivesettings that displays the following fields in bytes usageBytes,usageInDriveBytes,usageInDriveTrashBytes in addition to the fields in their formatted form with units: usage,usageInDrive,usageInDriveTrash. This will be most useful with print as the rows can be sorted based on the usagexxxBytes columns.

6.76.05

Added options deletefromoldowner, addtonewowner <CalendarAttribute>* and nolistmessages to gam <UserTypeEntity> transfer calendars <UserItem> that allow manipulation of the source and target user's calendar lists.

6.76.04

Added the following fields to <CrOSFieldName>:

autoupdatethrough
extendedsupporteligible
extendedsupportstart
extendedsupportenabled

6.76.03

Added option folderpathonly [<Boolean>] to the following commands that causes GAM to display only the folder names when displaying the path to a file. This folder only path an be used in gam <UserTypeEntity> create drivefolderpath to recreate the folder hierarchy.

gam <UserTypeEntity> info drivefile ... filepath|fullpath
gam <UserTypeEntity> show fileinfo ... filepath|fullpath
gam <UserTypeEntity> print|show filepath
gam <UserTypeEntity> print filelist ... filepath|fullpath

6.76.02

Updated gam update group to handle the following error:

ERROR: 400: invalidArgument - Failed request validation in update settings: WHO_CAN_VIEW_MEMBERSHIP_CANNOT_BE_BROADER_THAN_WHO_CAN_SEE_GROUP

6.76.01

Fixed bug in gam create vaulthold matter <MatterItem> ... corpus calendar that caused a trap.

6.76.00

Updated versions of gam create|use project that use keyword options to also accept the following options to define non-default Service Account key characteristics.

(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
(localkeysize 1024|2048|4096 [validityhours <Number>])|
(yubikey yubikey_pin yubikey_slot AUTHENTICATION yubikey_serialnumber <String>)

6.75.05

Added option csv [todrive <ToDriveAttribute>*] to gam <UserTypeEntity> archive|delete|modify|spam|trash|untrash messages|threads that causes GAM to display the command results in CSV form.

6.75.04

Added a command to print user counts by OrgUnit. By default, all users in the workspace are counted; you can specify a domain to only count users in that domain.

gam print usercountsbyorgunit [todrive <ToDriveAttribute>*]
        [domain <String>]

Added option uploadattachments [<DriveFileParentAttribute>] to gam <UserTypeEntity> show messages|threads that causes GAM to upload all message attachments to the user's My Drive, the default, or to a specific folder. The existing option attachmentnamepattern <RegularExpression> can be used to select attachments to upload.

6.75.03

Fixed bug in gam batch|tbatch where the line sleep <Integer> in the batch file caused the error:

ERROR: Invalid argument: Expected <gam|commit-batch|print>

6.75.02

Updated gam report <ActivityApplictionName> to retry/handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.

6.75.01

Added option admin <EmailAddress> to gam upload sakey.

6.75.00

Updated gam create project to simplify handling the situation where your workspace is configured to disable service account private key uploads.

Added command gam upload sakey to aid in this process.

6.74.02

Fixed bug in gam <UserTypeEntity> print shareddrives ... formatjson that caused a trap.

6.74.01

Updated gam create|update drivefileacl <DriveFileEntity> ... expiration <Time> to handle the following error caused by tryig to add an expiration time to a member of a Shared Drive.

ERROR: 403: expirationDateNotAllowedForSharedDriveMembers - Expiration dates are not allowed for shared drive members.

6.74.00

Added truncate_client_id Boolean variable to gam.cfg. Prior to version 6.74.00, GAM stripped '.apps.googleusercontent.com' from client_id in oauth2.txt and passed the truncated value in API calls. At Jay's suggestion this is no longer performed by default; setting truncate_client_id = true restores the previous behavior.

Do gam oauth delete and gam oauth create to set the untruncated value of client_id in oauth2.txt.

6.73.00

The Google Chat API has been updated so that chat members can now have their role set to manager.

6.72.16

Updated emailaddressList <EmailAddressList> and domainlist|notdomainlist <DomainNameList> in <PermissionMatch> to perform case-insensitive matches as the API is returning mixed case ACL email addresses in some cases.

6.75.15

Updated all commands that display tasks to display the due date in GMT as the time portion is not supported by the API and converting the due date to local time may display the wrong date.

Renamed license SKU 1010400001 from Beyond Corp Enterprise to Chrome Enterprise Premium.

6.72.14

Upgraded to Python 3.12.3 where possible.

6.72.13

Added the following option to <EventMatchProperty> that can be used to select events based on the domains of the attendees.

matchfield attendeesonlydomainlist <DomainNameList>

This returns true if all attendee's email addresses are in a domain in <DomainNameList>; for example this lets you look for events with attendees only in your internal domains.

6.72.12

Added the following options to <EventMatchProperty> that can be used to select events based on the domains of the attendees.

matchfield attendeesdomainlist <DomainNameList>
matchfield attendeesnotdomainlist <DomainNameList>

The first returns true if any attendee's email address is in a domain in <DomainNameList>; for example this lets you look for events with attendees in specific external domains.

The second returns true if any attendee's email address is in a domain other than those in <DomainNameList>; for example this lets you look for events with attendees not in your internal domains.

6.72.11

Added option oneitemperrow to 'gam print vaultholds` to have each of a hold's accounts displayed on a separate row with all of the other hold fields.

6.72.10

Added timeofdayrange=<HH:MM>/<HH:MM> and timeofdayrange!=<HH:MM>/<HH:MM> to <RowValueFilter> that allows CSV row filtering based on time-of-day.

6.72.09

Updated countsonly option of gam <UserTypeEntity> print|show notes to additionally display the total number of notes.

6.72.08

Added option countsonly to gam <UserTypeEntity> print|show notes that displays the number of notes a user owns and the number of notes a user can edit.

6.72.07

Updated commands that send emails to not downshift 'First Last<firstlast@domain.com>' to 'first last<firstlast@domain.com>'.

6.72.06

Updated the following commands to properly handle emailaddress lists containing addresses of the form: 'First Last<firstlast@domain.com>'.

gam <UserTypeEntity> sendemail recipient|to <RecipientEntity> [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
gam create|update user ... notify <EmailAddressList>

6.72.05

Cleaned up code for all commands that display Chat objects.

6.72.04

Added commands to display Chat events.

6.72.03

Fixed bug in gam <UserTypeEntity> create chatspace that caused a trap.

6.72.02

Updated gam delete admin <RoleAssignmentId> to handle the following error that occurs when <RoleAssignmentId> references a user that has been deleted.

ERROR: 404: resourceNotFound - Does not exist

6.72.01

Improved commands to display drive file comments.

6.72.00

Added commands to display drive file comments.

6.71.18

Updated <CrOSFieldName> to include cpuinfo and backlightinfo.

6.71.17

Added depth column to output of gam <UserTypeEntity> print diskusage <DriveFileEntity> that can be used to filter the depth of the folders displayed. Depth -1 is the top level folder, depth 0 are its immediate children, depth 2 are the children of depth 1 and so forth.

gam config csv_output_row_filter "depth:count<1" user organizer@domain.com  print diskusage teamdriveid <TeamDriveID>

6.71.16

Updated gam <UserTypeEntity> create|update sendas <EmailAddress> ... replyto <EmailAddress> to allow uppercase letters in sendas <EmailAddress> and replyto <EmailAddress>.

6.71.15

Updated gam create project to handle the following error:

ERROR: 403: permissionDenied - Authentication error: 7; Error Details: User not allowed to access GCP services.

This error occurs when the Google Workspace admin or GCP project manager email address used in the command is in an OU where Google Cloud Platform is not enabled in Apps/Additional Google services.

6.71.14

Added a command to update a Gmail label's settings by specifying it's ID rather than it's name.

gam <UserTypeEntity> update labelid <LabelID> [name <String>]
        [messagelistvisibility hide|show] [labellistvisibility hide|show|showifunread]
        [backgroundcolor <LabelColorHex>] [textcolor <LabelColorHex>]

6.71.13

Updated <UserMultiAttribute>.location.buildingid <String> to allow non-validated building IDs by specifying nv: at the beginning of <String>; e.g., nv:Building X' sets the building ID to Building X`.

6.71.12

Added option showmimetype category <MimeTypeNameList> to gam <UserTypeEntity> print|show filecounts|filelist|filetree

<MimeTypeName> ::= application|audio|font|image|message|model|multipart|text|video
<MimeTypeNameList> ::= "<MimeTypeName>(,<MimeTypeName>)*"

gam user user@domain.com print filelist fields id,name,mimetype showmimetype prefixes audio,video

6.71.11

Added option addcsvdata <FieldName> <String> to gam print cros that adds additional columns of data to the CSV file output. Typically, you would read CSV file of device IDs/serial numbers to generate a CSV file of results and copy data from the input CSV to the outout CSV.

6.71.10

Reverted change made in 6.71.09 to gam <UserTypeEntity> print filelist when showmimetype and filepath|fullpath were both specified. The change improved the performance when showmimetype selected a small number of files; the information for just those files was downloaded and then additional API calls were made to construct the file paths. However, if a large number of files were selected, the additional APIs calls decreased performance.

Added option mimetypeinquery can be used when you expect the query to return a small number of files relative to the total number of files.

6.71.09

Improved the performance of gam <UserTypeEntity> print filelist when showmimetype and filepath|fullpath are both specified.

6.71.08

Added option oneitemperrow to 'gam print admins|adminroles` to have each of a roles privileges displayed on a separate row with all of the other admin/role fields. This produces a CSV file that can be used in subsequent commands without further script processing.

6.71.07

Added command to upload changes to Google Docs.

6.71.06

Added additional error handling to Gmail Client Side Encryption commands.

Added license product Education Endpoint Management

  • ProductID - 101049

Added license SKU Endpoint Education Upgrade

  • ProductID - 101049
  • SKUID - 1010490001 | eeu

6.71.05

Fixed a bug introduced in 6.71.00 that caused a trap in gam <UserTypeEntity> print filelist.

Added option tdfrom <EmailAddress> to <ToDriveAttribute> that causes GAM to use <EmailAddress> as the from address in all emails sent. By default, the from address is the Google Workspace Admin in gam oauth info.

6.71.04

Updated gam <UserTypeEntity> create|update cseidentity to accept either of the following key pair options:

  • primarykeypairid <KeyPairID> - The configuration of a CSE identity that uses the same key pair for signing and encryption.
  • signingkeypairid <KeyPairID> encryptionkeypairid <KeyPairID> - The configuration of a CSE identity that uses different key pairs for signing and encryption.

Updated CSV output row sorting to avoid a trap that occurred when a row was missing one of the sort fields.

6.71.03

Added option tdalert <EmailAddress> to <ToDriveAttribute>. When a todrive file is created or updated, GAM will send notification emails to all tdalert <EmailAddress> users if tdnotify is true. <EmailAddress> must be valid within your Google Workspace.

6.71.02

Added additional error handling to Gmail Client Side Encryption commands.

6.71.01

Fixed bug in gam audit monitor create that caused a trap.

6.71.00

Added csv_output_sort_headers string list variable to gam.cfg that causes GAM to sort CSV output rows by the column headers specified in the variable. The column headers are case insensitive and if column header does not appear in the CSV output, it is ignored.

Added sortheaders <StringList> to redirect csv <FileName> that has the same effect as above.

The sort keys specified in redirect csv ... sortheaders <StringList> take precedence over the values from gam.cfg.

Added option tdsubject <String> to <ToDriveAttribute> that causes GAM to use <String> as the subject in all emails sent. In <String>, #file# will, be replaced by the file title and #sheet# will be replaced by the sheet/tab title. By default, the subject is the file title.

6.70.09

Added additional error handling to Gmail Client Side Encryption commands.

Added options showpem and showkaclsdata to all Gmail CSE commands that process/display CSE key pairs. By default, the pem and kaclsdata fields will not be displayed unless the corresponding show option is specified.

6.70.08

Fixed bug in gam <UserTypeEntity> create cseidentity <KeyPairID> that caused an error.

6.70.07

Updated user instructions in gam oauth create and gam <UserTypeEntity> update serviceaccount and changed s from selecting all scopes to selecting default scopes.

6.70.06

Updated gam info users <UserTypeEntity> to not include group tree infornation unless option grouptree is specified.

6.70.05

Added commands to create|delete|display Drive Label permissions.

6.70.04

Added option showvalidcolumn to gam print users that can be used to identify whether users are defined in the domain. Typically, you would read CSV file of email addresses to verify as domain members.

Added option addcsvdata <FieldName> <String> to gam print users that adds additional columns of data to the CSV file output. Typically, you would read CSV file of email addresses to generate a CSV file of results and copy data from the input CSV to the outout CSV.

6.70.03

Renamed license product DuetAI to Gemini

  • ProductID - 101047

Renamed license SKU DuetAI for Google Workspace to Gemini Enterprise

  • ProductID - 101047
  • SKUID - 1010470001 | geminient | duetai

Added support for license SKU Gemini Business

  • ProductID - 101047
  • SKUID - 1010470003 | geminibiz

6.70.02

In 6.69.00, GAM starting using course owner access when using copyfrom in gam create|update course regardless of the value of gam.cfg/use_course_owner_access. This prevents copying from courses with a deleted user. GAM now uses the value of gam.cfg/use_course_owner_access when copyfrom is used.o

6.70.01

Added gmail_cse_incert_dir and gmail_cse_inkey_dir path variables to gam.cfg that provide default values for the incertdir <FilePath> and inkeydir <FilePath> options in gam <UserTypeEntity> create csekeypair.

6.70.00

Added support for Gmail Client Side Encryption.

This is an initial, minimally tested release; proceed with care and report all issues.

6.69.00

Added use_course_owner_access Boolean variable to gam.cfg that controls how GAM gets classroom member information and removes students/teachers. Client/admin access does not provide complete information about non-domain students/teachers.

  • False - Use client/admin access; this is the default. Use if you don't have non-domain members in your courses.
  • True - Use service account access as the classroom owner. An extra API call is required per course to authenticate the owner; this will affect performance

Added the following command which must be used to delete classroom invitations for non-domain students/teachers.

gam delete classroominvitation courses <CourseEntity> (ids <ClassroomInvitationIDEntity>)|(role all|owner|student|teacher)

You can obtain the classroom invitation IDs with these commands:

gam show classroominvitations (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
        [role all|owner|student|teacher] [formatjson]
gam print classroominvitations [todrive <ToDriveAttribute>*] (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
        [role all|owner|student|teacher] [formatjson [quotechar <Character>]]

6.68.08

Updated gam <UserTypeEntity> print filelist|drivefileacls|shareddriveacls ... oneitemperrow to print ACLs with multiple permission details on separate rows for each basic permission/permission detail combination. This case occurs when a member of a Shared Drive has access to a file and also has explicitly granted access to the same file.

Added pmtype member|file to <PermissionMatch> that allows determining whether an ACL on a Shared Drive file was derived from membership or explicitly granted.

6.68.07

Updated gam info user ... locations formatjson to include the buildingName field in the locations entries. If gam.cfg contains quick_info_user = true or the quick option is included on the command line, add the option buildingnames to the command line.

6.68.06

Fixed bug in gam <UserTypeEntity> copy drivefile <DriveFileID> ... mergewithparent that incorrectly named the copied file with the name of the parent folder.

Updated gam <UserTypeEntity> copy|move drivefile to avoid copying/moving the same file twice.

6.68.05

Updated gam print groups ... ciallfields|(cifields <CIGroupFieldNameList>) to account for an API shortcoming that failed to get all of the Cloud Identity fields.

6.68.04

Added option skiprows <Integer> to gam csv|loop that causes GAM to skip processing the first <Integer> filtered rows.

6.68.03

Fixed bug in gam <UserTypeEntity> create drivefileacl that caused a trap.

6.68.02

Upgraded to Python 3.12.2 where possible.

Added options restricted|(audience <String>) to gam <UserTypeEntity> create|update chatspace that sets the access options for the chat space. These options are in Developer Preview and will not be generally available.

6.68.01

Fixed <PermissionMatch> bug for real.

6.68.00

Fixed <PermissionMatch> bug introduced in 6.67.35 that caused a command error like the following or would not properly match type|nottype <DriveFileACLType> and role|notrole <DriveFileACLRole>.

ERROR: permission attribute allowfilediscovery/withlink not allowed with type {'a', 'y', 'e', 'o', 'n'}

My sincere apologies.

6.67.39

Added option wait <Integer> <Integer> to gam create datatransfer that causes GAM to wait for the transfer to complete. The first <Integer> must be in the range 5-60 and is the number of seconds between checks to see if the transfer has completed. The second <Integer> is the maximum number of checks to perform. By default, GAM does not wait for the transfer to complete.

6.67.38

Added option tdnotify [<Boolean>] to <ToDriveAttribute> that causes GAM to send notification emails to all tdshare <EmailAddress> users when the file is uploaded/updated.

6.67.37

Fixed bug in gam <UserTypeEntity> show messages ... showattachments to avoid a trap when text/plain attachments in character sets other than UTF-8 are displayed.

6.67.36

Updated gam batch <BatchContent> and gam tbatch <BatchContent> commands to accept lines with the following form:

sleep <Integer>

Batch processing will suspend for <Integer> seconds before the next command line is processed.

6.67.35

Added the following options to <PermissionMatch> that allow more powerful matching.

nottype	<DriveFileACLType>
typelist <DriveFileACLTypeList>
nottypelist <DriveFileACLTypeList>
rolelist <DriveFileACLRoleList>
notrolelist <DriveFileACLRoleList>

6.67.34

Added option movetoorgunitdelay <Integer> to gam <UserTypeEntity> create shareddrive <Name> ... ou|org|orgunit <OrgUnitItem>. GAM creates the Shared Drive, verifies that it has been created and then tries to move it to <OrgUnitItem>. Google seems to require a delay or the following error is generated.

ERROR: 409: 409 - The operation was aborted.

movetoorgunitdelay defaults to 20 seconds which seems to work; <Integer> can range from 0 to 60.

6.67.33

Upgraded to OpenSSL 3.2.1 where possible.

Fixed bug in gam <UserTypeEntity> print shareddrives where role was improperly displayed as fileOrganizer rather than writer.

Added option guiroles [<Boolean>] to gam <UserTypeEntity> info|print|show shareddrive that maps the Drive API role names to the Google Drive GUI role names.

API: GUI
commenter: Commenter
fileOrganizer: Content manager
organizer: Manager
reader: Viewer
writer: Contributor

6.67.32

Updated <ToDriveAttribute> to allow multiple tdshare <EmailAddress> commenter|reader|writer options.

Fixed bug in gam <UserTypeEntity> print shareddrives where role was improperly displayed as unknown rather than reader when Allow viewers and commenters to download, print, and copy files was unchecked for the Shared Drive.

6.67.31

Updated gam <UserTypeEntity> claim|transfer ownership <DriveFileEntity> to properly handle the case where <DriveFileEntity> referencess a Drive shortcut.

6.67.30

Fixed bug where the fullpath option in various commands was not converting the generic shared drive name Drive to the drive's actual name.

6.67.29

Added optional argument owneraccess to gam courses <CourseEntity> remove teachers|students [owneracccess] <UserTypeEntity and gam course <CourseID> remove teacher|student [owneraccess] <EmailAddress> in order to test a possible API change.

Updated code to avoid a trap when gam config auto_batch_min 1 csv file.csv gam ... was entered. The config auto_batch_min 1 is not appropriate in this context and will be ignored.

6.67.28

Improved handling of Bad Request error in gam <UserTypeEntity> collect orphans.

6.67.27

Updated gam <UserTypeEntity> collect orphans to handle the following error:

ERROR: 400: badRequest - Bad Request

6.67.26

Fixed bug in gam print vaultexports ... formatjson that caused a trap.

6.67.25

Added option owneraccess to gam info courses <CourseEntity> and gam info course <CourseID> in order to test a possible API change.

6.67.24

Fixed bug that caused HTML password notification email messages to be displayed in raw form.

6.67.23

Use local copy of googleapiclient to remove static discovery documents to improve performance.

6.67.22

Added permissionidlist <PermissionIDList> to <PermissionMatch> that allows matching any permission ID in a list.

Added option exportlinkeddrivefiles <Boolean> to gam create vaultexport that is used with corpus mail.

6.67.21

Updated gam remove aliases <EmailAddress> user|group <EmailAddressEntity> to give a more informative error message when the target/alias combination does not exist.

Old: User: testsimple@rdschool.org, User Alias: tsalias@rdschool.org, Remove Failed: Invalid Input: resource_id
New: User: testsimple@rdschool.org, User Alias: tsalias@rdschool.org, Remove Failed: Does not exist

6.67.20

Added option onelicenseperrow|onelicenceperrow to gam print users ... licenses that causes GAM to print a seperate user information row for each license a user is assigned. This makes processing the licenses in a script possible and allows better sorting in a CSV File.

By default, all licenses for a user are displayed in a list on one row:

primaryEmail,LicensesCount,Licenses,LicensesDisplay
user@domain.com,2,1010020020 1010330004,Google Workspace Enterprise Plus Google Voice Standard

With onelicenseperrow|onelicenceperrow, each license is on a separate row:

primaryEmail,License,LicenseDisplay
user@domain.com,1010020020,Google Workspace Enterprise Plus
user@domain.com 1010330004,Google Voice Standard

6.67.19

Updated gam create|update user ... notify to encode the characters <>& in the password so that they display correctly when the notify message content is HTML.

6.67.18

Cleaned up Getting/Got messages for gam print courses|course-participants.

6.67.17

Added option showitemcountonly to various commands that causes GAM to display the item count on stdout; no CSV file is written.

6.67.16

By default, gam print group-members membernames displays Unknown for members whose names can not be determined. Added option unknownname <String> that let's you specify an alternative value.

Further improved performance of gam print group-members membernames cachememberinfo.

6.67.15

Update gam print group-members membernames to handle the following error:

ERROR: 400: failedPrecondition - Precondition check failed.

Added option cachememberinfo [Boolean] to gam print group-members that causes GAM to cache member info so that only one API call is made to get information for each user/group. This consumes more memory but dramatically reduces the number of API calls.

6.67.14

Updated reseller commands to handle the following error:

ERROR: 400: invalid - Customer domain [domain.com] is linked to one or more email verified customers, please provide a customer id.

6.67.13

Updated gam create domain <DomainName> to handle the following error:

ERROR: 409: conflict - Domain in request is in use by an email verified customer.

6.67.12

Added option addcsvdata <FieldName> <String> to gam print datatransfers that adds additional columns of data to the CSV file output.

6.67.11

Updated various Gmail related commands to handle this error:

ERROR: 403: permissionDenied - Insufficient Permission

when the following service account scopes are selected:

[ ] 23)  Gmail API - Basic Settings (Filters,IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read
[ ] 24)  Gmail API - Full Access (Labels, Messages)
[ ] 25)  Gmail API - Full Access (Labels, Messages) except delete message
[*] 26)  Gmail API - Full Access - read only
[ ] 27)  Gmail API - Send Messages - including todrive
[ ] 28)  Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write

6.67.10

Fixed bug that caused a trap when optional argument charset <Charset> was used with emlfile <FileName> in gam <UserTypeEntity> draft|import|insert message.

6.67.09

Added option maxevents <Number> to gam report <ActivityApplictionName> that limits the number of events displayed for each activity; the default is 0, no limit. Setting options maxactivities 1 maxevents 1 maxresults 1 can be used to as efficiently as possible show the most recent activity/event; this can be useful when reporting drive activity for individual drive files.

6.67.08

Added optional argument charset <Charset> to emlfile <FileName> in gam <UserTypeEntity> draft|import|insert message; the default value is ascii.

6.67.07

Updated gam <UserTypeEntity> delete message to handle this error:

ERROR: 403: permissionDenied - Insufficient Permission

when the following service account scopes are selected:

[ ] 24)  Gmail API - Full Access (Labels, Messages)
[*] 25)  Gmail API - Full Access (Labels, Messages) except delete message

6.67.06

Updated commands that create ACLs to handle the following error:

ERROR: 400: abusiveContentRestriction - Bad Request. User message: "You cannot share this item because it has been flagged as inappropriate."

6.67.05

Updated the following commands:

gam <UserTypeEntity> create|delete|update delegate
gam <UserTypeEntity> forward
gam <UserTypeEntity> create|delete forwardingaddresses
gam <UserTypeEntity> create|delete sendas

to handle this error:

ERROR: 403: permissionDenied - Insufficient Permission

when the following serice account scope is not enabled:

[ ] 28)  Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write

6.67.04

Updated user attribute replace <Tag> <UserReplacement> to allow field:photourl which allows embedding a link to a user's photo in their signature. Formatting the signature HTML to properly display the photo is left to the GAM admin.

6.67.03

Fixed bug introduced in 6.67.02 in gam <UserTypeEntity> claim ownership that caused a trap.

6.67.02

Added option skipids <DriveFileEntity> to gam <UserTypeEntity> transfer drive that handles special cases where you want to prevent ownership from being transferred for selected files/folders.

Added option skipids <DriveFileEntity> to gam <UserTypeEntity> copy drivefile that handles special cases where you want to prevent selected files/folders from being copied.

Updated commands that create files/folders on Shared Drives to handle the following errors:

storageQuotaExceeded
teamDriveFileLimitExceeded
teamDriveHierarchyTooDeep

6.67.01

Fixed bug in gam print vaultcounts that caused a trap.

6.67.00

Updated gam <CrOSTypeEntity> update action <CrOSAction> to use the new API function batchChangeStatus that replaces the old API function action; ChromeOS devices are now processed in batches. The batch size defaults to 10, the actionbatchsize <Integer> option can be used to set a batch size between 10 and 250.

Updated gam create vaultexport matter <MatterItem> to support corpus calendar.

6.66.16

Added option convertcrnl to gam update chromepolicy to properly handle carriage returns (\r) and line feeds (\n) in value strings entered on the command line in the <Field> <Value> form.

gam update chromepolicy convertcrnl chrome.devices.DisabledDeviceReturnInstructions
    deviceDisabledMessage "Please return device to:\nSchool\n123 Main Street\nAnytown US" ou /Path/to/OU

6.66.15

Added option copysubfilesownedby any|me|others to gam <UserTypeEntity> copy drivefile that allows specification of which source folder sub files to copy based on file ownership; the default is any. This only applies when files are being copied from a 'My Drive'.

6.66.14

Updated gam <UserTypeEntity> modify messages to recognize the following error:

ERROR: 400: invalid - Invalid label: SENT

Updated gam update alias <EmailAddressEntity> user|group|target <EmailAddress> to avoid the following problem.

$ gam update alias testalias@domain.com user testuser
User Alias: testalias@domain.com, Deleted
User Alias: testalias@domain.com, User: testuser@domain.com, Update Failed: Duplicate, Email Address: testalias@domain.com

GAM updates an alias to point to a new target by deleting the alias and then recreating the alias pointing to the new target. Unfortunately, if these commands are executed back-to-back; Google generates the Update Failed: Duplicate error. Now, GAM waits 2 seconds between the delete and the insert which seems to eliminate the problem. If the problem persists, the option waitafterdelete <Integer> can be used to increase the wait time to a maximum of 10 seconds.

6.66.13

Updated functionality of option preservefiletimes in gam <UserTypeEntity> update drivefile <DriveFileEntity>.

  • Current
    • preservefiletimes localfile <FileName> - modifiedTime of <DriveFileEntity> is set to that of localfile <FileName>
    • preservefiletimes - No effect
  • Updated
    • preservefiletimes localfile <FileName> - modifiedTime of <DriveFileEntity> is set to that of localfile <FileName>
    • preservefiletimes - modifiedTime of <DriveFileEntity> retains its current value

6.66.12

Upgraded to Python 3.12.1 where possible.

Updated all drive commands to handle the following error:

ERROR: 401: Active session is invalid. Error code: 4 - authError

This is due to the Drive SDK API being disabled in the user's OU.

6.66.11

Fixed/improved handling of shortcuts in gam <UserTypeEntity> transfer drive.

6.66.10

Updated gam create datatransfer to handle the following error:

ERROR: 401: Active session is invalid. Error code: 4 - authError

6.66.09

Fixed bug in gam <UserTypeEntity> print filelist ... allfields that caused a trap when gam.cfg contained drive_v3_native_names = False.

6.66.08

Added additional columns isBase and baseId to gam <UserTypeEntity> print fileparenttree to simplify processing the output in a script.

6.66.07

Fixed bug in gam <UserTypeEntity> print diskusage that caused a trap.

6.66.06

Added a command the print the parent tree of file/folder.

gam <UserTypeEntity> print fileparenttree <DriveFileEntity> [todrive <ToDriveAttribute>*]
        [stripcrsfromname]

6.66.05

Added column space.name to gam <UserTypeEntity> print chatmembers.

6.66.04

Updated Chat info|show|print commands to display all time fields in local time if specified in gam.cfg.

6.66.03

Fixed bug in gam <UserTypeEntity> print filelist select <DriveFileEntity> where stripcrsfromname was not being applied to files below the selected folder.

6.66.02

Updated device commmands to handle the following error caused by an invalid query.

ERROR: 400: invalidArgument - Request contains an invalid argument.

Added fields deviceid and hostname to <DeviceFieldName>.

6.66.01

Added the following variables to gam.cfg that allow control over whether \ is used as an escape character when reading/writing CSV files.

csv_input_no_escape_char - default value True
csv_output_no_escape_char - default value False
todrive_no_escape_char - default value True

When the value is True, \ is ignored as an escape character; when the value is False, \\ on input is converted to \, \ on output is converted to \\.

6.66.00

Added support for Focus Time and Out of Office status events in user's primary calendars.

Updated gam <UserTypeEntity> print|show messages to allow option show_size to be used with option countsonly to display the cumulative size of the messages selected.

gam user user@domain.com print messages query "newer_than:31d" countsonly showsize
Getting all Messages for user@domain.com
Got 16 Messagess for user@domain.com...
User,messages,size
user@domain.com,16,92806

6.65.17

Added the option mappermissionsdomain <DomainName1> <DomainName2> to gam <UserTypeEntity> create drivefileacl <DriveFileEntity> that maps <DomainName1> to <DomainName2> in the user <UserItem>)|(group <GroupItem>)|(domain <DomainName>) options; <UserItem> and <GroupItem> must specify email addresses for the mapping to succeed. The option can be specified multiple times to provide different mappings. This option will be most useful when reading a CSV file containing ACLs referencing <DomainName1> and you want a new ACL with the same options but in <DomainName2>.

6.65.16

Fixed bug in gam <UserTypeEntity> print filecounts where Item Cap showed an incorrect value.

Added option addorigfieldstosubject to gam <UserTypeEntity> forward messages|threads that causes GAM to append the original from, to and date fields to the message subject.

Fwd: Ross to TestUser (Original From: Ross Scroggs <ross.scroggs@gmail.com> To: testuser@domain.com Date: Thu, 23 Nov 2023 07:01:59 -0800)

6.65.15

Added additional options to gam <UserTypeEntity> print|show youtubechannels.

6.65.14

Fixed bug in gam copy|move drivefile` that caused a trap.

UnboundLocalError: cannot access local variable 'emailAddress' where it is not associated with a value

6.65.13

Added support for user language en-CA.

Added option sizefield quotabytesused|size to the following commands that specifies which file size field to use when totaling file sizes; the default value is quotabytesused; previous versions used size.

gam <UserTypeEntity> print|show filecounts
gam <UserTypeEntity> print filelist
gam <UserTypeEntity> print|show filetree
gam <UserTypeEntity> print diskusage

See: https://github.com/GAM-team/GAM/wiki/Users-Drive-Files-Display#file-size-fields

6.65.12

Additional updates on MacOS when a gam csv command is interrupted with a contol-C.

6.65.11

Updated multiprocessing to handle the following error that occurs on MacOS when a gam csv command is interrupted with a contol-C.

multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be N leaked semaphore objects to clean up at shutdown

Fixed bug in gam print|show crostelemetry where no CrOS device data was displayed if no selection options were chosen; now, data is displayed for all CrOS devices as documented.

6.65.10

Fixed bug in gam print crostelemetry that caused a trap: KeyError: 'reportTime'.

6.65.09

Added option noduplicate to gam <UserTypeEntity> create drivefile that causes GAM to issue a warning and not perform the create if a non-trashed item with the same name (regardless of MIME type) exists in the parent folder.

Updated gam <UserTypeEntity> get drivefile <DriveFileEntity> to handle the following error that seems to occur when multiple tabs from a Google sheet are being downloaded in parallel.

Download Failed: HTTP Error: 429

6.65.08

Added option addcsvdata <FieldName> <String> to gam report <ActivityApplicationName> that adds additional columns of data to the CSV file output.

Added option shownoactivities to gam report <ActivityApplicationName> that causes GAM to display a row with a key value of NoActivities when there are no activities to report.

For example, to find Shared Drives with no activity, see: https://github.com/GAM-team/GAM/wiki/Reports#find-shared-drives-with-no-activity

6.65.07

Updated gam delete building to handle the following error:

ERROR: 412: conditionNotMet - Cannot delete building because there are Calendar resources associated with it.

6.65.06

Improved error message when trying to add external students/teachers to a course.

gam courses 544906261666 add student user@gmail.com
Course: 544906261666, Add 1 Student
  Course: 544906261666, Student: user@gmail.com, Add Failed: 403: permissionDenied - @CannotDirectAddUser Unable to directly add the user to the course. Please check that the user account exists and is within the course admin's domain. Add external user with: gam user user@gmail.com create classroominvitation courses 544906261666 role Student

6.65.05

Updated gam info users <UserTypeEntity> to make option grouptree effective when used with option formatjson.

Added option [formatjson [quotechar <Character>]]] to these commands so that event details are displayed in CSV format.

gam print|show grouptree <GroupEntity>
gam <UserTypeEntity> print|show grouptree

Added option querytime<String> <Date> to all commands that process messages. For example, you can identify all messages within a particular time period, in this case, all messages unread in the last 30 days.

gam user user@domain.com  print messages querytime30d -30d query "after:#querytime30d# is:unread"

Updated gam <UserTypeEntity> import|insert message to allow replace <Tag> <UserReplacement> as documented.

Updated non-owner permission handling in gam <UserTypeEntity> copy|move drivefile.

6.65.04

Fixed bug where license SKU 1010020031 (Google Workspace Frontline Standard) was improperly entered making it unusable; its alias wsflwstan was usable.

Added support for Google Workspace Additional Storage.

  • ProductID - 101043
  • SKUID - 1010430001 | gwas | plusstorage

6.65.03

Fixed bug in commands that display calendar events where event start and end times were not properly displayed when gam.cfg had timezone utc. The API returns the start and end times expressed in the calendar timezone but GAM replaced the timezone specifier with a Z; the date and time values were as expected. This became a problem when event data was exported and used to create or update events.

6.65.02

Updated gam print|show browsers to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.

6.65.01

Added option showmimetypesize to gam <UserTypeEntity> print|show filecounts and gam <UserTypeEntity> print filelist countsonly that displays the total file size for each MIME type.

6.65.00

Fixed bug in gam <UserTypeEntity> create contact <JSONData> that caused a trap when contacts were being copied from one user to another.

Updated the following commands to allow specification of a task list by its title.

<TaskListTitle> ::= tltitle:<String>
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
<TasklistEntity> ::=
        <TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>

gam <UserTypeEntity> create task <TasklistEntity>
gam <UserTypeEntity> show tasks [tasklists <TasklistEntity>]
gam <UserTypeEntity> print tasks [tasklists <TasklistEntity>]
gam <UserTypeEntity> update tasklist <TasklistEntity>
gam <UserTypeEntity> delete tasklist <TasklistEntity>
gam <UserTypeEntity> clear tasklist <TasklistEntity>
gam <UserTypeEntity> info tasklist <TasklistEntity>

Note the quoting in <TasklistTitleList>; the entire list should be enclosed in " and each tltitle:<String> must be enclosed in ' if <String> contains a space.

6.64.16

Fixed bug in gam <UserTypeEntity> create task <TasklistIDEntity> that caused a trap when an invalid TaskListID was specified.

6.64.15

Updated lookerstudioassets|lookerstudiopermissions commands to handle the following error:

ERROR: 500: internalError - Internal error encountered.

6.64.14

Cleaned up and renamed gam info appdetails to gam info chromeapp.

6.64.13

Added command to get customer app details.

gam info appdetails android|chrome|web <AppID> [formatjson]

6.64.12

Upgraded to Python 3.12.0 where possible. Upgraded to OpenSSL 3.1.3 where possible.

6.64.11

Added support for Google Workspace Labs license.

  • ProductID - 101047
  • SKUID - 1010470002 | gwlabs | workspacelabs

6.64.10

Fixed bug introduced in 6.64.09 that caused a trap when gam redirect csv <FileName> multiprocess was used.

6.64.09

Eliminated extraneous permisssions.0.xxxx headers in gam <UserTypeEntity> print filelist ... oneitemperrow that appeared when some user in <UserTypeEntity> had no files to display.

6.64.08

Fixed bug in redirect csv - todrive tdtitle "File Title" tdsheettitle "Sheet Title" where "Sheet Title" was not assigned to the new sheet.

6.64.07

Updated gam <UserTypeEntity> move drivefile to handle the following error:

ERROR: 403: targetUserRoleLimitedByLicenseRestriction - Cannot set the requested role for that user as they lack the necessary license

6.64.06

Added fields devicelicensetype and osupdatestatus to <CrOSFieldName>.

6.64.05

Added matchfield organizerself <Boolean> to <EventMatchProperty> to simplify selecting events where the user in the following commands is/is not the organizer of the event.

gam <UserTypeEntity> update events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> delete events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> purge events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> move events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> info events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> show events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>]
gam <UserTypeEntity> update calattendees <UserCalendarEntity> <EventEntity>

6.64.04

Updated gam calendars <CalendarEntity> move events and gam <UserTypeEntity> move events <UserCalendarEntity> to handle the following error:

ERROR: 400: badRequest - Bad Request

6.64.03

Updated gam <UserTypeEntity> get drivefile to allow downloading Jamboard files; they must be downloaded with format pdf.

6.64.02

Updated gam <UserTypeEntity> transfer drive to handle the following error:

ERROR: 400: Bad Request. User message: "The action cannot be performed on an item of mime-type: application/vnd.google-apps.shortcut" - invalidSharingRequest

6.64.01

Updated gam <UserTypeEntity> print|show youtubechannels to handle the following error:

ERROR: 403: unsupportedSupervisedAccount - Access Forbidden. The authenticated user cannot access this service.

6.64.00

Added support for displaying users YouTube channels.

6.63.19

Fixed bug in gam print vacation where endDate value was not converted to yyyy-mm-dd format.

6.63.18

Updated gam print|show ownership to show the correct file owner when the most recent event is change_owner.

6.63.17

Added support for Duet AI license.

  • ProductID - 101047
  • SKUID - 1010470001 | duetai

Added api_call_tries_limit variable to gam.cfg that limits the number of tries for Google API calls that return an error that indicates a retry should be performed. The default value is 10 and the range of allowable values is 3-10.

6.63.16

Arguments noinherit, blockinheritance and blockinheritance true have been removed from the following commands due to an upcoming API change that no longer allows blocking OU setting inheritance. Arguments inherit and blockinheritance false are still valid.

gam create org <OrgUnitPath>
gam update org <OrgUnitItem>
gam update orgs <OrgUnitEntity>

6.63.15

Added print_cros_ous and print_cros_ous_and_children variables to gam.cfg that provide a default list of OUs for these commands:

gam print cros
gam print crosactivity

Updated group commands that manage members to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.

Updated Data Studio to Looker Studio; added the following command synonyms:

  • lookerstudioassets for datastudioassets
  • 'lookerstudiopermissionsfordatastudiopermissions`

Corrected error message in gam add datastudiopermissions:

  • Old -ERROR: Missing argument: Expected <DataStudioAssetMembersEntity>
  • New - `ERROR: Missing argument: Expected

6.63.14

Added option verifyorganizer [<Boolean>] to gam <UserTypeEntity> copy|move drivefile. When a copy/move operation involves a Shared Drive, GAM verifies that the user is an organizer. Unfortunatley, this fails when the user is not a direct organizer but is a member of a group that is an organizer. Specifying verifyorganizer false suppresses the verification.

Updated the following commands to be able to specify a list of domains rather than a single domain:

gam print aliases
gam print groups
gam print|show group-members
gam print users

Added print_agu_domains variable to gam.cfg that provides a default list of domains for these commands.

When multiple domains are specified and a query/queries are specified, an API call is made for each domain/query combination.

$ gam print users domains school.org,students.school.org queries "'email:admin*','email:test*'"
Getting all Users that match query (domain=school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
Got 3 Users: admin@school.org - admindirector@school.org
Getting all Users that match query (domain=school.org, query="email:test*"), may take some time on a large Google Workspace Account...
Got 20 Users: testusera@school.org - testuserx@school.org
Getting all Users that match query (domain=students.school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
Got 1 User: admin@students.school.org - admin@students.school.org
Getting all Users that match query (domain=students.school.org, query="email:test*"), may take some time on a large Google Workspace Account...
Got 1 User: testuser1@students.school.org - testuser1@students.school.org
primaryEmail
...

6.63.13

Updated gam <UserTypeEntity> print filelist ... showdrivename and gam <UserTypeEnt 10000 ity> show fileinfo <DriveFileEntity> ... showdrivename to show the actual name of Shared Drives in other domains rather than Drive.

6.63.12

Updated commands that call the Reports API (including gam info domain) to handle a change in the Reports API that generated the following warning:

WARNING: End date greater than LastReportedDate.

Added option showdeleted [<Boolean>]' to gam print|show chatmessages`.

6.63.11

Added option ou_and_children <OrgUnitItem> to gam print|show crostelemetry to simplify getting telemetry data for all ChromeOS devices in an OU and its children.

6.63.10

Added option addcsvdata <FieldName> <String> to these commands. This adds additional columns of data to the CSV file output when the csv option is used. If a CSV file of calendar information is being used to specify the calenders, fields, e.g., summary can be added to the ACL output file.

gam <UserTypeEntity> print calendaracls <UserCalendarEntity>
gam resource <ResourceID> print calendaracls
gam resources <ResourceEntity> print calendaracls
gam calendar <CalendarEntity> printacl
gam calendars <CalendarEntity> print acls

Added commands to show the number of CrOS devices or Users in an entity.

gam <CrOSTypeEntity> show count
gam <UserTypeEntity> show count

Updated gam create project to prompt user to mark GAM Project Creation as a trusted app.

6.63.09

Updated gam create teamdrive to handle the following error:

ERROR: 403: userCannotCreateTeamDrives - The authenticated user cannot create new shared drives.

6.63.08

Updated cigroup commands to handle the following error:

ERROR: 400: invalidArgument - Request contains an invalid argument.

6.63.07

Fixed bug in gam <UserTypeEntity> append sheetrange that caused a trap when appending to an empty sheet.

Upgraded to Python 3.11.5 where possible.

6.63.06

Updated cigroup commands to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.

6.63.05

Updated inboundsso commands to handle the following error:

ERROR: 503: serviceNotAvailable - The service is currently unavailable.

6.63.04

Added option ignorerole to gam update groups|cigroups <GroupEntity> sync [<GroupRole>|ignorerole] ... <UserTypeEntity> that causes GAM to remove members regardless of role and add new members with role MEMBER. This is a special purpose option, use with caution and ensure that <UserTypeEntity> specifies the full desired membership list of all roles.

6.63.03

Added option externalusersallowed <Boolean> to gam <UserTypeEntity> create chatspace that allows creation of chat spaces that allow external users.

Updated commands that process chat members to allow external users.

6.63.02

Fixed bug in gam <UserTypeEntity> collect orphans where shortcuts were being created unnecessarily when useshortcuts was false; either by default or when explicitly set.

6.63.01

Added process_wait_limit variable to gam.cfg that controls how long (in seconds) GAM should wait for all batch|csv processes to complete after all have been started. If the limit is reached, GAM terminates any remaining processes. The default is 0 which specifies no limit.

Following Jay's lead, added option alwaysevict to gam create|update user that is used to specify GAM's behavior when verifynotinvitable is not specified and there is a conflict with an unmanaged account.

By default, when creating a user that has a conflict with an unmanaged account, GAM will honor the setting on this page:

Specifying alwaysevict forces GAM to select this setting: Replace conflicting unmanaged accounts with managed ones

With gam update user, alwaysevict only applies if createifnotfound is specified and the user was not found to update and must be created.

6.63.00

Added support for calendar working location events.

6.62.08

Added option addcsvdata <FieldName> <String> to these commands. This adds additional columns of data to the CSV file output when the csv option is used.

gam create contact
gam <UserTypeEntity> create contact
gam <UserTypeEntity> create contactgroup

6.62.07

Added option csv [todrive <ToDriveAttribute>*] to these commands that causes GAM to output the contact creator and contact ID in CSV form. This will be useful when bulk contacts are created.

Added returnidonly to these commands that causes GAM to return just the contact ID as output. This will be useful in scripts that create a contact and then want to perform subsequent GAM commands on the contact.

gam create contact
gam <UserTypeEntity> create contact
gam <UserTypeEntity> create contactgroup

6.62.06

Added output Item cap to gam <UserTypeEntity> print filecounts select select <SharedDriveEntity> that displays the total number of files/folders on the Shared Drive divided by 400000, the maximum number of file/folders on a Shared Drive.

6.62.05

Added progress messages (suppressible) to gam <UserTypeEntity> print diskusage.

6.62.04

Added command gam <UserTypeEntity> print diskusage to display disk usage by folder.

6.62.03

Handled Google Directory API bug in gam print groups that caused a trap.

6.62.02

Fixed bug introduced in 6.62.01 that caused a trap that broke redirect csv ... multiprocess. My apologies.

6.62.01

Updated code so that when gam.cfg variables csv_output_timestamp_column and output_timeformat are both specified, the timestamp is output in the alternate output time format.

6.62.00

Added output_dateformat and output_timeformat variables to gam.cfg that provide alternate output date and time formats that may be required by programs that will be processing the data. GAM will not accept alternate date/time formats as input.

6.61.21

Updated gam <UserTypeEntity> empty drivetrash <SharedDriveEntity> to use new Drive API v3 functionality for emptying the trash of a Shared Drive with a single API call. Previously, GAM had to purge each individual file and folder in the trash.

6.61.20

Remove audit.googleapis.com from the list of project APIs.

6.61.19

Fixed bug in gam <UserTypeEntity> print|show chatmembers <ChatSpace> that caused a trap.

6.61.18

Added the following options to gam [<UserTypeEntity>] create shareddrive to allow better control of the create/update process when attributes other than themeid are specified.

errorretries <Integer> - Number of create/update error retries; default value 5, range 0-10
updateinitialdelay <Integer> - Initial delay after create before update: default value 10, range 0-60
updateretrydelay <Integer> - Retry delay when update fails; default value 10, range 0-60

6.61.17

Updated gam print|show vaultexports|vaultholds|vaultqueries to not set a non-zero return code when a vault matter changes state from OPEN to CLOSED|DELETED while the command is being processed.

Updated gam create shareddrive <Name> ou|org|orgunit <OrgUnitItem> to handle the following error:

ERROR: 403: permissionDenied - Request had insufficient authentication scopes.

It's not clear what causes the error.

6.61.16

Added the following license SKUs.

1010060005 - Google Workspace Essentials Plus
1010020031 - Google Workspace Frontline Standard
1010340005 - Google Workspace Business Starter - Archived User
1010340006 - Google Workspace Business Standard - Archived User

6.61.15

Added option contentrestrictions ownerrestricted [<Boolean>] to <DriveFileAttribute>.

6.61.14

Added aggregatebyuser [Boolean] option to gam report user to allow data aggregation for users across multiple dates. Options aggregatebyuser and aggregatebydate are mutually exclusive.

6.61.13

Added commands to display Analytic UA properties.

gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
        accountid [accounts/]<String>
        [maxresults <Integer>]
        [formatjson [quotechar <Character>]]
gam <UserTypeEntity> show analyticuaproperties
        accountid [accounts/]<String>
        [maxresults <Integer>]
        [formatjson]

6.61.12

Updated gam print|show vaultexports|vaultholds|vaultqueries to handle the case where a vault matter changes state from OPEN to CLOSED|DELETED while the command is being processed.

6.61.11

Added option returnidonly to gam create vaultexport|vaulthold|vaultmatter that causes GAM to return just the ID of the item created as output.

6.61.10

Fixed bug in gam oauth create admin <EmailAddress> which caused no scopes to be selected.

6.61.09

Updated gam oauth create to handle case where Google takes a very long time to respond after you have allowed access to the scopes.

6.61.08

Updated gam <UserTypeEntity> print messages showlabels to include a column LabelsCount to display the number of labels a message has. Use option useronly to limit the labels to user labels.

Updated gam <UserTypeEntity> print messages to display these columns, if applicable, as the last columns in the CSV file.

SizeEstimate, LabelsCount, Labels, Snippet, Body

6.61.07

Improved action messages in gam update org|ou <OrgUnitItem> sync <UserTypeEntity> [removetoou <OrgUnitItem>].

6.61.06

Added option csv to gam <UserTypeEntity> check group|groups that displays the results in CSV format.

$ gam user testuser check groups csv testgroup1,testgroup2,alladmin
User: testuser@domain.com, Check in 3 Groups
user,group,role
testuser@domain.com,alladmin@domain.com,Not a MEMBER|OWNER|MANAGER
testuser@domain.com,testgroup1@domain.com,MEMBER
testuser@domain.com,testgroup2@domain.com,MANAGER

6.61.05

Fixed bug in gam print contacts that caused a trap when show_gettings = False in gam.cfg.

6.61.04

Updated gam create shareddrive <Name> to wait longer between creating the Drive and updating any attributes that could not be specified as part of the creation; i.e., <SharedDriveRestrictionsFieldName>, hidden, customtheme, color and orgunit. The initial wait is 30 seconds. Previously, GAM was not waiting long enough; the Drive would be created but the update would fail; the attributes were not set.

6.61.03

Updated processing of <UserMultiAttribute> externalid to allow an empty custom type.

externalid account|customer|login_id|network|organization|(custom <string>)|<String> <String>

These are equivalent ways of expressing an empty custom type:

externalid "" "Value"
externalid custom "" "Value"

6.61.02

Fixed bug in gam update groups <GroupEntity> sync introduced in 6.60.31 that caused this error:

ERROR: 409: generic409 - Member already exists.

6.61.01

Added option noactionifalias to gam delete groups <GroupEntity> that prevents GAM from deleting a group if <GroupEntity> specifies an alias rather than a primary email address.

6.61.00

Following Jay's lead, added no_short_urls variable to gam.cfg. When false, the long scopes URLs in gam oauth create and gam <UserTypeEntity> check|update serviceaccount will be shortened at the site https://gam-shortn.appspot.com; the shortened URL redirects to the long URL. For existing configurations, no_short_urls defaults to true; the long URLs are used as is. For new configurations the no_short_urls defaults to false unless there is a file named noshorturls.txt in the folder specified by the environment variable OLDGAMPATH.

6.60.31

Added option addcsvdata <FieldName> <String> to gam print forms|formresponses. This adds additional columns of data to the CSV file output. This can be used to combine form information from several GAM commands.

Following Jay's lead, projects can now be created with consumer accounts.

6.60.30

Added option countsonly to gam <UserTypeEntity> print|show formresponses that causes GAM to display the number of responses to a form rather than displaying the response details.

6.60.29

Updated gam <UserTypeEntity> delete|print emptydrivefolders to show the path to the deleted folder rather than just its name. Added an option to allow a starting point other that the root of My Drive or a Shared Drive. Improved the commands performance.

6.60.28

Fixed bug in gam <UserTypeEntity> print filelist countsonly showsource stripcrsfromname where carriage returns, linefeeds and nulls were not stripped from file names.

6.60.27

Updated gam <UserTypeEntity> print filelist countsonly to process addcsvdata <FieldName> <String>. Additional fields are added before Size if present, otherwise Total.

6.60.26

Added option orgunit|org|ou <OrgUnitPath> to gam print|show teamdrives that limits the display to Shared Drives in the specified Org Unit.

6.60.25

Added option orgunit|org|ou <OrgUnitPath> to gam print|show teamdriveacls that limits the display of permissions to Shared Drives in the specified Org Unit.

6.60.24

Updated gam <UserTypeEntity> info|show|print chatmessages to show the sender email address when the sender is a human.

6.60.23

Fixed bug in config csv_input_row_filter|csv_output_row_filter where "field:date<today" was being processed as "field:date<=today" and "field:date>=today" was being processeed as "field:date>today".

6.60.22