gam7 7.20.2__tar.gz → 7.20.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gam7-7.20.2 → gam7-7.20.3}/.github/workflows/build.yml +3 -3
- {gam7-7.20.2 → gam7-7.20.3}/PKG-INFO +1 -1
- {gam7-7.20.2 → gam7-7.20.3}/src/GamCommands.txt +11 -11
- {gam7-7.20.2 → gam7-7.20.3}/src/GamUpdate.txt +6 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/__init__.py +97 -66
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glmsgs.py +1 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glskus.py +1 -1
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Classroom-StudentGroups.md +1 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Collections-of-Items.md +2 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/GamUpdates.md +12 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Licenses.md +6 -6
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Shared-Drives.md +44 -18
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Permissions.md +20 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Shared-Drives.md +43 -18
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Version-and-Help.md +6 -6
- {gam7-7.20.2 → gam7-7.20.3}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/actions/decrypt.sh +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/actions/entitlements.plist +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/stale.yml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.github/workflows/pypi.yml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/.pre-commit-config.yaml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/LICENSE +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/README.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/pyproject.toml +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/.gitignore +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/LICENSE +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/README.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/cacerts.pem +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/callgam.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/__main__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/auth.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/client.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/core.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/data.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/http.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/http_core.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/service.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/token_store.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/atom/url.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/cacerts.pem +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/service.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam/six.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam-install.sh +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam-setup.bat +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam.exe.manifest +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam.spec +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/gam.wxs +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/license.rtf +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/requirements-dev.txt +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/tools/mkGamRef.py +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/tools/openssl.props +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/tools/ssd.mjs +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/src/version_info.txt.in +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/00scratch.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Addresses.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Administrators.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Alert-Center.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Aliases.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Authorization.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Basic-Items.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Business-Account-Management.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Calendars-Access.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Calendars-Events.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Calendars.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chat-Bot-Setup-Use.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Customer.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Domains-Verification.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Domains.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Drive-Items.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Global-Address-List.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Groups-Membership.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Groups.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Home.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/List-Items.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/List.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Organizational-Units.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Other-Resources.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Permission-Matches.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/README.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Rclone.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Reports.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Reseller.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Resources.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Schemas.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Scripts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Send-Email.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Sites.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Tag-Replace.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Todrive.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Calendars.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Chat.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Contacts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Forms.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Meet.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Photo.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Tasks.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Tokens.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users-YouTube.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Users.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/_Sidebar.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/gam.cfg.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Home.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Printers.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.20.2 → gam7-7.20.3}/wiki/l-_Footer.md +0 -0
|
@@ -30,7 +30,7 @@ env:
|
|
|
30
30
|
PYTHON_SOURCE_PATH: ${{ github.workspace }}/src/cpython
|
|
31
31
|
CRYPTOGRAPHY_BUILD_OPENSSL_NO_LEGACY: 1
|
|
32
32
|
CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1
|
|
33
|
-
WINDOWS_CODESIGN_CERT_HASH:
|
|
33
|
+
WINDOWS_CODESIGN_CERT_HASH: 3B11D9340A45CF078FF7FD984F1C3E30DA82FD05
|
|
34
34
|
|
|
35
35
|
jobs:
|
|
36
36
|
build:
|
|
@@ -655,7 +655,7 @@ jobs:
|
|
|
655
655
|
write-Host "Signing ${env:gam}...."
|
|
656
656
|
# Always explicitely use x64 version os signtool.exe, arm64 version apparently can't
|
|
657
657
|
# see Certum certs since SimplySignDesktop is x64-only today.
|
|
658
|
-
Start-Process -Wait -NoNewWindow -ErrorAction Continue -FilePath 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' -ArgumentList "sign", "/sha1", "
|
|
658
|
+
Start-Process -Wait -NoNewWindow -ErrorAction Continue -FilePath 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' -ArgumentList "sign", "/sha1", "$env:WINDOWS_CODESIGN_CERT_HASH", "/tr", "http://time.certum.pl", "/td", "SHA256", "/fd", "SHA256", "/v", "$env:gam"
|
|
659
659
|
write-Host "Verifying signature of ${env:gam}...."
|
|
660
660
|
# verify signature. If we failed to sign we should fail to verify and die.
|
|
661
661
|
& 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' verify /pa /v "$env:gam"
|
|
@@ -727,7 +727,7 @@ jobs:
|
|
|
727
727
|
write-Host "Signing ${env:MSI_FILENAME}...."
|
|
728
728
|
# Always explicitely use x64 version os signtool.exe, arm64 version apparently can't
|
|
729
729
|
# see Certum certs since SimplySignDesktop is x64-only today.
|
|
730
|
-
Start-Process -Wait -NoNewWindow -ErrorAction Continue -FilePath 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' -ArgumentList "sign", "/sha1", "
|
|
730
|
+
Start-Process -Wait -NoNewWindow -ErrorAction Continue -FilePath 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' -ArgumentList "sign", "/sha1", "$env:WINDOWS_CODESIGN_CERT_HASH", "/tr", "http://time.certum.pl", "/td", "SHA256", "/fd", "SHA256", "/v", "$env:MSI_FILENAME"
|
|
731
731
|
write-Host "Verifying signature of ${env:MSI_FILENAME}...."
|
|
732
732
|
# verify signature. If we failed to sign we should fail to verify and die.
|
|
733
733
|
& 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' verify /pa /v "$env:MSI_FILENAME"
|
|
@@ -266,7 +266,7 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
266
266
|
appsheetstandard | appsheetenterprisestandard | 1010380002 | AppSheet Enterprise Standard |
|
|
267
267
|
appsheetplus | appsheetenterpriseplus | 1010380003 | AppSheet Enterprise Plus |
|
|
268
268
|
assuredcontrols | 1010390001 | Assured Controls |
|
|
269
|
-
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
|
269
|
+
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
|
270
270
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
|
271
271
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
|
272
272
|
cloudidentity | identity | 1010010001 | Cloud Identity |
|
|
@@ -275,8 +275,8 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
275
275
|
colabpro | 1010500001 | Colab Pro |
|
|
276
276
|
colabpro+ | colabproplus | 1010500002 | Colab Pro+ |
|
|
277
277
|
eeu | 1010490001 | SKU Endpoint Education Upgrade |
|
|
278
|
+
gaiproedu | geminiedu | 1010470004 | Google AI Pro for Education |
|
|
278
279
|
geminibiz | 1010470003 | Gemini Business |
|
|
279
|
-
geminiedu | 1010470004 | Gemini Education |
|
|
280
280
|
geminiedupremium| 1010470005 | Gemini Education Premium |
|
|
281
281
|
geminient| duetai | 1010470001 | Gemini Enterprise |
|
|
282
282
|
geminiultra | 1010470008 | Google AI Ultra for Business |
|
|
@@ -316,12 +316,12 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
316
316
|
wsbizstarter | workspacebusinessstarter | wsbizstart | 1010020027 | Google Workspace Business Starter |
|
|
317
317
|
wsbizstarterarchived | workspacebusinessstarterarchived | 1010340005 | Google Workspace Business Starter - Archived User |
|
|
318
318
|
wsentess | workspaceenterpriseessentials | 1010060003 | Google Workspace Enterprise Essentials |
|
|
319
|
-
wsentplus | workspaceenterpriseplus | gae | gse | enterprise | gsuiteenterprise | 1010020020 | Google Workspace Enterprise Plus |
|
|
319
|
+
wsentplus | workspaceenterpriseplus | gae | gse | enterprise | gsuiteenterprise | 1010020020 | Google Workspace Enterprise Plus (formerly G Suite Enterprise) |
|
|
320
320
|
wsentstan | workspaceenterprisestandard | 1010020026 | Google Workspace Enterprise Standard |
|
|
321
321
|
wsentstanarchived | workspaceenterprisestandardarchived | 1010340004 | Google Workspace Enterprise Standard - Archived User |
|
|
322
322
|
wsentstarter | workspaceenterprisestarter | wes | 1010020029 | Workspace Enterprise Starter |
|
|
323
|
-
wsess | workspaceesentials | gsuiteessentials | essentials | d4e | driveenterprise | drive4enterprise | 1010060001 | Google Workspace Essentials |
|
|
324
|
-
wsessplus | workspaceessentialsplus | 1010060005 | Google Workspace Essentials Plus |
|
|
323
|
+
wsess | workspaceesentials | gsuiteessentials | essentials | d4e | driveenterprise | drive4enterprise | 1010060001 | Google Workspace Essentials (formerly G Suite Essentials) |
|
|
324
|
+
wsessplus | workspaceessentialsplus | 1010060005 | Google Workspace Enterprise Essentials Plus |
|
|
325
325
|
wsflw | workspacefrontline | workspacefrontlineworker | 1010020030 | Google Workspace Frontline Starter |
|
|
326
326
|
wsflwstan | workspacefrontlinestan | workspacefrontlineworkerstan | 1010020031 | Google Workspace Frontline Standard |
|
|
327
327
|
wsflwplus | workspacefrontlineplus | workspacefrontlineworkerplus | 1010020034 | Google Workspace Frontline Plus
|
|
@@ -5096,7 +5096,7 @@ gam create|add drivefileacl <SharedDriveEntityAdmin>
|
|
|
5096
5096
|
anyone|(user <UserItem>)|(group <GroupItem>)|(domain <DomainName>)
|
|
5097
5097
|
(role <DriveFileACLRole>) [withlink|(allowfilediscovery|discoverable [<Boolean>])]
|
|
5098
5098
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
|
5099
|
-
[expiration <Time>] [sendemail] [emailmessage <String>]
|
|
5099
|
+
[expiration <Time>] [sendemail|sendnotification] [emailmessage <String>]
|
|
5100
5100
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
|
5101
5101
|
gam update drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail>
|
|
5102
5102
|
(role <DriveFileACLRole>) [expires|expiration <Time>] [removeexpiration [<Boolean>]]
|
|
@@ -5123,7 +5123,7 @@ gam print drivefileacls <SharedDriveEntityAdmin> [todrive <ToDriveAttribute>*]
|
|
|
5123
5123
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
|
5124
5124
|
[formatjson [quotechar <Character>]]
|
|
5125
5125
|
gam create|add permissions <SharedDriveEntityAdmin> <DriveFilePermissionEntity>
|
|
5126
|
-
[expires|expiration <Time>] [sendemail] [emailmessage <String>]
|
|
5126
|
+
[expires|expiration <Time>] [sendemail|sendnotification] [emailmessage <String>]
|
|
5127
5127
|
<PermissionMatch>* [<PermissionMatchAction>]
|
|
5128
5128
|
gam delete permissions <SharedDriveEntityAdmin> <DriveFilePermissionIDEntity>
|
|
5129
5129
|
<PermissionMatch>* [<PermissionMatchAction>]
|
|
@@ -5136,7 +5136,7 @@ gam <UserTypeEntity> create|add drivefileacl <SharedDriveEntityAdmin>
|
|
|
5136
5136
|
(role <DriveFileACLRole>) [withlink|(allowfilediscovery|discoverable [<Boolean>])]
|
|
5137
5137
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
|
5138
5138
|
[movetonewownersroot [<Boolean>]]
|
|
5139
|
-
[expiration <Time>] [sendemail] [emailmessage <String>]
|
|
5139
|
+
[expiration <Time>] [sendemail|sendnotification] [emailmessage <String>]
|
|
5140
5140
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
|
5141
5141
|
adminaccess
|
|
5142
5142
|
gam <UserTypeEntity> update drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail>
|
|
@@ -5167,7 +5167,7 @@ gam <UserTypeEntity> print drivefileacls <SharedDriveEntityAdmin> [todrive <ToDr
|
|
|
5167
5167
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
|
5168
5168
|
[formatjson [quotechar <Character>]]
|
|
5169
5169
|
gam <UserTypeEntity> create|add permissions <SharedDriveEntityAdmin> <DriveFilePermissionEntity>
|
|
5170
|
-
[expires|expiration <Time>] [sendemail] [emailmessage <String>] adminaccess
|
|
5170
|
+
[expires|expiration <Time>] [sendemail|sendnotification] [emailmessage <String>] adminaccess
|
|
5171
5171
|
<PermissionMatch>* [<PermissionMatchAction>]
|
|
5172
5172
|
gam <UserTypeEntity> delete permissions <SharedDriveEntityAdmin> <DriveFilePermissionIDEntity> adminaccess
|
|
5173
5173
|
<PermissionMatch>* [<PermissionMatchAction>]
|
|
@@ -6896,7 +6896,7 @@ gam <UserTypeEntity> create|add drivefileacl <DriveFileEntity> [adminaccess|asad
|
|
|
6896
6896
|
anyone|(user <UserItem>)|(group <GroupItem>)|(domain <DomainName>) (role <DriveFileACLRole>)
|
|
6897
6897
|
[withlink|(allowfilediscovery|discoverable [<Boolean>])] [expiration <Time>]
|
|
6898
6898
|
[moveToNewOwnersRoot [<Boolean>]]
|
|
6899
|
-
[sendemail] [emailmessage <String>]
|
|
6899
|
+
[sendemail|sendnotification] [emailmessage <String>]
|
|
6900
6900
|
[updatesheetprotectedranges [<Boolean>]]
|
|
6901
6901
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
|
6902
6902
|
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
|
@@ -6922,7 +6922,7 @@ gam <UserTypeEntity> print drivefileacls <DriveFileEntity> [todrive <ToDriveAttr
|
|
|
6922
6922
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
|
6923
6923
|
[formatjson [quotechar <Character>]]
|
|
6924
6924
|
gam <UserTypeEntity> create|add permissions <DriveFileEntity> <DriveFilePermissionEntity>
|
|
6925
|
-
[expires|expiration <Time>] [sendemail] [emailmessage <String>]
|
|
6925
|
+
[expires|expiration <Time>] [sendemail|sendnotification] [emailmessage <String>]
|
|
6926
6926
|
[movetonewownersroot [<Boolean>]]
|
|
6927
6927
|
<PermissionMatch>* [<PermissionMatchAction>]
|
|
6928
6928
|
gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionIDEntity>
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
7.20.03
|
|
2
|
+
|
|
3
|
+
Rebranded license SKU `1010470004` from `Gemini Education` to `Google AI Pro for Education`.
|
|
4
|
+
|
|
5
|
+
Additional updates to student groups in Google Classroom.
|
|
6
|
+
|
|
1
7
|
7.20.02
|
|
2
8
|
|
|
3
9
|
Upgraded `gam create course-studentgroups` to allow specification of multiple student group titles;
|
|
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
|
28
|
-
__version__ = '7.20.
|
|
28
|
+
__version__ = '7.20.03'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -51247,7 +51247,7 @@ def doCreateCourseStudentGroups():
|
|
|
51247
51247
|
while Cmd.ArgumentsRemaining():
|
|
51248
51248
|
myarg = getArgument()
|
|
51249
51249
|
if myarg == 'title':
|
|
51250
|
-
titles.append(getString(Cmd.OB_STRING))
|
|
51250
|
+
titles.append(getString(Cmd.OB_STRING, maxLen=100))
|
|
51251
51251
|
elif myarg == 'select':
|
|
51252
51252
|
titles.extend(getEntityList(Cmd.OB_STRING_ENTITY, shlexSplit=True))
|
|
51253
51253
|
elif _getCourseSelectionParameters(myarg, courseSelectionParameters):
|
|
@@ -51450,8 +51450,26 @@ def doClearCourseStudentGroups():
|
|
|
51450
51450
|
# (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
|
51451
51451
|
# [showitemcountonly] [formatjson [quotechar <Character>]]
|
|
51452
51452
|
def doPrintCourseStudentGroups(showMembers=False):
|
|
51453
|
+
def _getCourseStudents():
|
|
51454
|
+
studentIdEmailMap = {}
|
|
51455
|
+
try:
|
|
51456
|
+
students = callGAPIpages(ocroom.courses().students(), 'list', 'students',
|
|
51457
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE,
|
|
51458
|
+
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
51459
|
+
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
51460
|
+
courseId=courseId, fields='nextPageToken,students(profile(id,emailAddress))',
|
|
51461
|
+
pageSize=GC.Values[GC.CLASSROOM_MAX_RESULTS])
|
|
51462
|
+
for student in students:
|
|
51463
|
+
studentIdEmailMap[student['profile']['id']] = student['profile']['emailAddress']
|
|
51464
|
+
except GAPI.notFound:
|
|
51465
|
+
pass
|
|
51466
|
+
except (GAPI.serviceNotAvailable, GAPI.notImplemented) as e:
|
|
51467
|
+
entityActionFailedExit([Ent.COURSE, courseId], str(e))
|
|
51468
|
+
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
51469
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
51470
|
+
return studentIdEmailMap
|
|
51471
|
+
|
|
51453
51472
|
croom = buildGAPIObject(API.CLASSROOM)
|
|
51454
|
-
cd = buildGAPIObject(API.DIRECTORY)
|
|
51455
51473
|
csvPF = CSVPrintFile(['courseId', 'courseName', 'studentGroupId', 'studentGroupTitle'])
|
|
51456
51474
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
51457
51475
|
courseSelectionParameters = _initCourseSelectionParameters()
|
|
@@ -51503,6 +51521,8 @@ def doPrintCourseStudentGroups(showMembers=False):
|
|
|
51503
51521
|
if not showMembers and showItemCountOnly:
|
|
51504
51522
|
itemCount += len(studentGroups)
|
|
51505
51523
|
continue
|
|
51524
|
+
if showMembers:
|
|
51525
|
+
studentIdEmailMap = _getCourseStudents()
|
|
51506
51526
|
for studentGroup in studentGroups:
|
|
51507
51527
|
studentGroupId = studentGroup['id']
|
|
51508
51528
|
if not showMembers:
|
|
@@ -51515,7 +51535,7 @@ def doPrintCourseStudentGroups(showMembers=False):
|
|
|
51515
51535
|
row['JSON'] = json.dumps(cleanJSON(studentGroup), ensure_ascii=False, sort_keys=False)
|
|
51516
51536
|
csvPF.WriteRowTitles(row)
|
|
51517
51537
|
continue
|
|
51518
|
-
printGettingEntityItemForWhom(Ent.
|
|
51538
|
+
printGettingEntityItemForWhom(Ent.STUDENT, formatKeyValueList('', [Ent.Singular(Ent.COURSE_STUDENTGROUP), studentGroupId],
|
|
51519
51539
|
currentCount(i, count)))
|
|
51520
51540
|
pageMessage = getPageMessage()
|
|
51521
51541
|
try:
|
|
@@ -51530,7 +51550,7 @@ def doPrintCourseStudentGroups(showMembers=False):
|
|
|
51530
51550
|
itemCount += len(students)
|
|
51531
51551
|
continue
|
|
51532
51552
|
for member in students:
|
|
51533
|
-
member['userEmail'] =
|
|
51553
|
+
member['userEmail'] = studentIdEmailMap.get(member['userId'], member['userId'])
|
|
51534
51554
|
except GAPI.notFound as e:
|
|
51535
51555
|
entityActionFailedWarning([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], str(e))
|
|
51536
51556
|
continue
|
|
@@ -51562,8 +51582,29 @@ def doPrintCourseStudentGroups(showMembers=False):
|
|
|
51562
51582
|
# gam sync course-studentgroup-members <CourseID> <StudentGroupID> <UserTypeEntity>
|
|
51563
51583
|
# gam clear course-studentgroup-members <CourseID> <StudentGroupID>
|
|
51564
51584
|
def doProcessCourseStudentGroupMembers():
|
|
51565
|
-
def
|
|
51566
|
-
|
|
51585
|
+
def _getCourseStudents():
|
|
51586
|
+
studentIdEmailMap = {}
|
|
51587
|
+
studentEmailIdMap = {}
|
|
51588
|
+
try:
|
|
51589
|
+
students = callGAPIpages(ocroom.courses().students(), 'list', 'students',
|
|
51590
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE,
|
|
51591
|
+
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
51592
|
+
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
51593
|
+
courseId=courseId, fields='nextPageToken,students(profile(id,emailAddress))',
|
|
51594
|
+
pageSize=GC.Values[GC.CLASSROOM_MAX_RESULTS])
|
|
51595
|
+
for student in students:
|
|
51596
|
+
studentIdEmailMap[student['profile']['id']] = student['profile']['emailAddress'].lower()
|
|
51597
|
+
studentEmailIdMap[student['profile']['emailAddress'].lower()] = student['profile']['id']
|
|
51598
|
+
return (studentIdEmailMap, studentEmailIdMap)
|
|
51599
|
+
except GAPI.notFound as e:
|
|
51600
|
+
entityActionFailedExit([Ent.COURSE, courseId], str(e))
|
|
51601
|
+
except (GAPI.serviceNotAvailable, GAPI.notImplemented) as e:
|
|
51602
|
+
entityActionFailedExit([Ent.COURSE, courseId], str(e))
|
|
51603
|
+
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
51604
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
51605
|
+
|
|
51606
|
+
def _getGroupCurrentStudents():
|
|
51607
|
+
printGettingEntityItemForWhom(Ent.STUDENT, formatKeyValueList('', [Ent.Singular(Ent.COURSE_STUDENTGROUP), studentGroupId], ''))
|
|
51567
51608
|
pageMessage = getPageMessage()
|
|
51568
51609
|
try:
|
|
51569
51610
|
return callGAPIpages(ocroom.courses().studentGroups().studentGroupMembers(), 'list', 'studentGroupMembers',
|
|
@@ -51581,18 +51622,24 @@ def doProcessCourseStudentGroupMembers():
|
|
|
51581
51622
|
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
51582
51623
|
ClientAPIAccessDeniedExit(str(e))
|
|
51583
51624
|
|
|
51584
|
-
def
|
|
51585
|
-
|
|
51586
|
-
|
|
51587
|
-
|
|
51588
|
-
|
|
51589
|
-
|
|
51590
|
-
|
|
51591
|
-
|
|
51592
|
-
|
|
51593
|
-
|
|
51594
|
-
|
|
51595
|
-
|
|
51625
|
+
def _validateClStudents(clStudents):
|
|
51626
|
+
status = True
|
|
51627
|
+
clStudentIds = []
|
|
51628
|
+
count = len(clStudents)
|
|
51629
|
+
i = 0
|
|
51630
|
+
kvList = [Ent.COURSE, courseId, Ent.STUDENT, '']
|
|
51631
|
+
for student in clStudents:
|
|
51632
|
+
i += 1
|
|
51633
|
+
student = normalizeEmailAddressOrUID(student)
|
|
51634
|
+
if student in studentIdEmailMap:
|
|
51635
|
+
clStudentIds.append(student)
|
|
51636
|
+
elif student in studentEmailIdMap:
|
|
51637
|
+
clStudentIds.append(studentEmailIdMap[student])
|
|
51638
|
+
else:
|
|
51639
|
+
kvList[-1] = student
|
|
51640
|
+
entityActionFailedWarning(kvList, Msg.STUDENT_NOT_IN_COURSE, i, count)
|
|
51641
|
+
status = False
|
|
51642
|
+
return clStudentIds if status else None
|
|
51596
51643
|
|
|
51597
51644
|
def _processStudent(function, kvList, kwargs, i, count):
|
|
51598
51645
|
try:
|
|
@@ -51611,85 +51658,69 @@ def doProcessCourseStudentGroupMembers():
|
|
|
51611
51658
|
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
51612
51659
|
ClientAPIAccessDeniedExit(str(e))
|
|
51613
51660
|
|
|
51614
|
-
def _addStudents(students
|
|
51661
|
+
def _addStudents(students):
|
|
51615
51662
|
count = len(students)
|
|
51616
51663
|
i = 0
|
|
51617
|
-
entityPerformActionNumItems([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], count, Ent.
|
|
51618
|
-
kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId, Ent.
|
|
51664
|
+
entityPerformActionNumItems([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], count, Ent.STUDENT)
|
|
51665
|
+
kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId, Ent.STUDENT, '']
|
|
51619
51666
|
kwargs = {'courseId': courseId, 'studentGroupId': studentGroupId, 'body': {'userId': ''}}
|
|
51667
|
+
Ind.Increment()
|
|
51620
51668
|
for student in students:
|
|
51621
51669
|
i += 1
|
|
51622
|
-
|
|
51623
|
-
|
|
51624
|
-
if userId is None:
|
|
51625
|
-
continue
|
|
51626
|
-
kvList[-1] = student
|
|
51627
|
-
else:
|
|
51628
|
-
userId = student
|
|
51629
|
-
kvList[-1] = convertUIDtoEmailAddress(f"id:{userId}", cd=cd, emailTypes=['user'])
|
|
51630
|
-
kwargs['body']['userId'] = userId
|
|
51670
|
+
kvList[-1] = studentIdEmailMap[student]
|
|
51671
|
+
kwargs['body']['userId'] = student
|
|
51631
51672
|
_processStudent('create', kvList, kwargs, i, count)
|
|
51673
|
+
Ind.Decrement()
|
|
51632
51674
|
|
|
51633
|
-
def _removeStudents(students
|
|
51675
|
+
def _removeStudents(students):
|
|
51634
51676
|
count = len(students)
|
|
51635
51677
|
i = 0
|
|
51636
|
-
entityPerformActionNumItems([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], count, Ent.
|
|
51637
|
-
kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId, Ent.
|
|
51678
|
+
entityPerformActionNumItems([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], count, Ent.STUDENT)
|
|
51679
|
+
kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId, Ent.STUDENT, '']
|
|
51638
51680
|
kwargs = {'courseId': courseId, 'studentGroupId': studentGroupId, 'userId': ''}
|
|
51681
|
+
Ind.Increment()
|
|
51639
51682
|
for student in students:
|
|
51640
51683
|
i += 1
|
|
51641
|
-
|
|
51642
|
-
|
|
51643
|
-
if userId is None:
|
|
51644
|
-
continue
|
|
51645
|
-
kvList[-1] = student
|
|
51646
|
-
else:
|
|
51647
|
-
userId = student
|
|
51648
|
-
kvList[-1] = convertUIDtoEmailAddress(f"id:{userId}", cd=cd, emailTypes=['user'])
|
|
51649
|
-
kwargs['userId'] = userId
|
|
51684
|
+
kvList[-1] = studentIdEmailMap[student]
|
|
51685
|
+
kwargs['userId'] = student
|
|
51650
51686
|
_processStudent('delete', kvList, kwargs, i, count)
|
|
51687
|
+
Ind.Decrement()
|
|
51651
51688
|
|
|
51652
51689
|
croom = buildGAPIObject(API.CLASSROOM)
|
|
51653
|
-
cd = buildGAPIObject(API.DIRECTORY)
|
|
51654
51690
|
action = Act.Get()
|
|
51655
51691
|
courseId = getString(Cmd.OB_COURSE_ID)
|
|
51656
51692
|
studentGroupId = getString(Cmd.OB_STUDENTGROUP_ID)
|
|
51657
51693
|
if action != Act.CLEAR:
|
|
51658
51694
|
_, clStudents = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS, groupMemberType=Ent.TYPE_USER)
|
|
51659
|
-
|
|
51695
|
+
clStudentIds = []
|
|
51660
51696
|
checkForExtraneousArguments()
|
|
51661
51697
|
_, count, coursesInfo = _getCoursesOwnerInfo(croom, [courseId], GC.Values[GC.USE_COURSE_OWNER_ACCESS])
|
|
51662
51698
|
if count == 0:
|
|
51663
51699
|
return
|
|
51664
51700
|
ocroom = coursesInfo[courseId]['croom']
|
|
51665
51701
|
courseId = coursesInfo[courseId]['id']
|
|
51702
|
+
studentIdEmailMap, studentEmailIdMap = _getCourseStudents()
|
|
51666
51703
|
if action in {Act.SYNC, Act.CLEAR}:
|
|
51667
|
-
currentStudents = [student['userId'] for student in
|
|
51704
|
+
currentStudents = [student['userId'] for student in _getGroupCurrentStudents()]
|
|
51705
|
+
if action != Act.CLEAR:
|
|
51706
|
+
clStudentIds = _validateClStudents(clStudents)
|
|
51707
|
+
if clStudentIds is None:
|
|
51708
|
+
return
|
|
51668
51709
|
if action == Act.CLEAR:
|
|
51669
|
-
_removeStudents(currentStudents
|
|
51710
|
+
_removeStudents(currentStudents)
|
|
51670
51711
|
elif action == Act.DELETE:
|
|
51671
|
-
_removeStudents(
|
|
51712
|
+
_removeStudents(clStudentIds)
|
|
51672
51713
|
elif action in {Act.ADD, Act.CREATE}:
|
|
51673
|
-
_addStudents(
|
|
51714
|
+
_addStudents(clStudentIds)
|
|
51674
51715
|
else: # elif action == Act.SYNC:
|
|
51675
51716
|
currentMembersSet = set(currentStudents)
|
|
51676
|
-
syncMembersSet = set()
|
|
51677
|
-
count = len(clStudents)
|
|
51678
|
-
i = 0
|
|
51679
|
-
kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId, Ent.USER, '']
|
|
51680
|
-
for student in clStudents:
|
|
51681
|
-
i += 1
|
|
51682
|
-
kvList[-1] = student
|
|
51683
|
-
userId = _getStudentUserId(kvList, student, i, count)
|
|
51684
|
-
if userId is None:
|
|
51685
|
-
continue
|
|
51686
|
-
syncMembersSet.add(userId)
|
|
51717
|
+
syncMembersSet = set(clStudentIds)
|
|
51687
51718
|
removeStudentsSet = currentMembersSet-syncMembersSet
|
|
51688
51719
|
addStudentsSet = syncMembersSet-currentMembersSet
|
|
51689
51720
|
Act.Set(Act.DELETE)
|
|
51690
|
-
_removeStudents(removeStudentsSet
|
|
51721
|
+
_removeStudents(removeStudentsSet)
|
|
51691
51722
|
Act.Set(Act.ADD)
|
|
51692
|
-
_addStudents(addStudentsSet
|
|
51723
|
+
_addStudents(addStudentsSet)
|
|
51693
51724
|
|
|
51694
51725
|
# gam print course-studentgroup-members [todrive <ToDriveAttribute>*]
|
|
51695
51726
|
# (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
|
@@ -65073,7 +65104,7 @@ def _checkFileIdEntityDomainAccess(fileIdEntity, useDomainAdminAccess):
|
|
|
65073
65104
|
# (mappermissionsdomain <DomainName> <DomainName>)*
|
|
65074
65105
|
# [moveToNewOwnersRoot [<Boolean>]]
|
|
65075
65106
|
# [updatesheetprotectedranges [<Boolean>]]
|
|
65076
|
-
# [sendemail] [emailmessage <String>]
|
|
65107
|
+
# [sendemail|sendnotification] [emailmessage <String>]
|
|
65077
65108
|
# [showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
|
65078
65109
|
def createDriveFileACL(users, useDomainAdminAccess=False):
|
|
65079
65110
|
moveToNewOwnersRoot = False
|
|
@@ -65117,7 +65148,7 @@ def createDriveFileACL(users, useDomainAdminAccess=False):
|
|
|
65117
65148
|
elif myarg in {'expiration', 'expires'}:
|
|
65118
65149
|
expirationLocation = Cmd.Location()
|
|
65119
65150
|
body['expirationTime'] = getTimeOrDeltaFromNow()
|
|
65120
|
-
elif myarg
|
|
65151
|
+
elif myarg in {'sendemail', 'sendnotification'}:
|
|
65121
65152
|
sendNotificationEmail = True
|
|
65122
65153
|
elif myarg == 'emailmessage':
|
|
65123
65154
|
sendNotificationEmail = True
|
|
@@ -65373,7 +65404,7 @@ def doUpdateDriveFileACLs():
|
|
|
65373
65404
|
updateDriveFileACLs([_getAdminEmail()], True)
|
|
65374
65405
|
|
|
65375
65406
|
# gam [<UserTypeEntity>] create permissions <DriveFileEntity> <DriveFilePermissionsEntity> [asadmin]
|
|
65376
|
-
# [expiration <Time>] [
|
|
65407
|
+
# [expiration <Time>] [sendemail|sendnotification] [emailmessage <String>]
|
|
65377
65408
|
# [moveToNewOwnersRoot [<Boolean>]]
|
|
65378
65409
|
# <PermissionMatch>* [<PermissionMatchAction>]
|
|
65379
65410
|
def createDriveFilePermissions(users, useDomainAdminAccess=False):
|
|
@@ -65491,7 +65522,7 @@ def createDriveFilePermissions(users, useDomainAdminAccess=False):
|
|
|
65491
65522
|
moveToNewOwnersRoot = getBoolean()
|
|
65492
65523
|
elif myarg in {'expiration', 'expires'}:
|
|
65493
65524
|
expiration = getTimeOrDeltaFromNow()
|
|
65494
|
-
elif myarg
|
|
65525
|
+
elif myarg in {'sendemail', 'sendnotification'}:
|
|
65495
65526
|
sendNotificationEmail = True
|
|
65496
65527
|
elif myarg == 'emailmessage':
|
|
65497
65528
|
sendNotificationEmail = True
|
|
@@ -499,6 +499,7 @@ STATISTICS_MOVE_FILE = 'Total: {0}, Moved: {1}, Shortcut created {2}, Shortcut e
|
|
|
499
499
|
STATISTICS_MOVE_FOLDER = 'Total: {0}, Moved: {1}, Shortcut created {2}, Shortcut exists {3}, Duplicate: {4}, Merged: {5}, Move Failed: {6}, Not writable: {7}'
|
|
500
500
|
STATISTICS_USER_NOT_ORGANIZER = 'User not organizer: {0}'
|
|
501
501
|
STRING_LENGTH = 'string length'
|
|
502
|
+
STUDENT_NOT_IN_COURSE = 'Student not in course'
|
|
502
503
|
SUBKEY_FIELD_MISMATCH = 'subkeyfield {0} does not match saved subkeyfield {1}'
|
|
503
504
|
SUBSCRIPTION_NOT_FOUND = 'Could not find subscription'
|
|
504
505
|
SUFFIX_NOT_ALLOWED_WITH_CUSTOMLANGUAGE = 'Suffix {0} not allowed with customLanguage {1}'
|
|
@@ -100,7 +100,7 @@ _SKUS = {
|
|
|
100
100
|
'1010470003': {
|
|
101
101
|
'product': '101047', 'aliases': ['geminibiz'], 'displayName': 'Gemini Business'},
|
|
102
102
|
'1010470004': {
|
|
103
|
-
'product': '101047', 'aliases': ['geminiedu'], 'displayName': '
|
|
103
|
+
'product': '101047', 'aliases': ['gaiproedu', 'geminiedu'], 'displayName': 'Google AI Pro for Education'},
|
|
104
104
|
'1010470005': {
|
|
105
105
|
'product': '101047', 'aliases': ['geminiedupremium'], 'displayName': 'Gemini Education Premium'},
|
|
106
106
|
'1010470006': {
|
|
@@ -160,6 +160,7 @@ Middle Students
|
|
|
160
160
|
Beginner Students
|
|
161
161
|
|
|
162
162
|
$ gam redirect csv ./StudentGroups.csv add coursestudentgroups course <CourseID> select csvfile titles.csv:title csv
|
|
163
|
+
Course: <CourseID>, Add 3 Course Student Groups
|
|
163
164
|
|
|
164
165
|
$ more StudentGroups.csv
|
|
165
166
|
courseId,courseName,studentGroupId,studentGroupTitle
|
|
@@ -351,6 +351,8 @@ Data fields identified in a `csvkmd` argument.
|
|
|
351
351
|
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
|
352
352
|
<SiteEntity> ::=
|
|
353
353
|
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
|
354
|
+
<StringEntity> ::=
|
|
355
|
+
<StringList> | <FileSelector> | <CSVFileSelector>
|
|
354
356
|
<StudentGroupEntity> ::=
|
|
355
357
|
<StudentGroupIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector>
|
|
356
358
|
<TagManagerAccountPathEntity> ::=
|
|
@@ -10,6 +10,18 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|
|
10
10
|
|
|
11
11
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
|
12
12
|
|
|
13
|
+
### 7.20.03
|
|
14
|
+
|
|
15
|
+
Rebranded license SKU `1010470004` from `Gemini Education` to `Google AI Pro for Education`.
|
|
16
|
+
|
|
17
|
+
Additional updates to student groups in Google Classroom.
|
|
18
|
+
|
|
19
|
+
### 7.20.02
|
|
20
|
+
|
|
21
|
+
Upgraded `gam create course-studentgroups` to allow specification of multiple student group titles;
|
|
22
|
+
multiple student groups can be created in a single command.
|
|
23
|
+
* `((title <String>)|(select <StringEntity))+`
|
|
24
|
+
|
|
13
25
|
### 7.20.01
|
|
14
26
|
|
|
15
27
|
Added option `showaccesssettings` to `gam [<UserTypeEntity>] print|show chatspaces`. When listing
|
|
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
252
252
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
|
253
253
|
admin@server:/Users/admin$ gam version
|
|
254
254
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
|
255
|
-
GAM 7.20.
|
|
255
|
+
GAM 7.20.03 - https://github.com/GAM-team/GAM - pyinstaller
|
|
256
256
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
257
257
|
Python 3.13.7 64-bit final
|
|
258
258
|
MacOS Sequoia 15.6.1 x86_64
|
|
@@ -990,7 +990,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
990
990
|
C:\>del C:\GAMConfig\oauth2.txt
|
|
991
991
|
C:\>gam version
|
|
992
992
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
|
993
|
-
GAM 7.20.
|
|
993
|
+
GAM 7.20.03 - https://github.com/GAM-team/GAM - pythonsource
|
|
994
994
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
995
995
|
Python 3.13.7 64-bit final
|
|
996
996
|
Windows-10-10.0.17134 AMD64
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
| G Suite Legacy | Google-Apps | standard |
|
|
61
61
|
| G Suite Lite | Google-Apps-Lite | gsuitelite |
|
|
62
62
|
| Gemini Business | 1010470003 | geminibiz
|
|
63
|
-
| Gemini Education | 1010470004 | geminiedu |
|
|
64
63
|
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
|
65
64
|
| Gemini Enterprise | 1010470001 | geminient | duetai |
|
|
66
|
-
| Google AI
|
|
65
|
+
| Google AI Pro for Education | 1010470004 | gaiproedu |
|
|
66
|
+
| Google AI Ultra for Business | 1010470008 | geminiultra }
|
|
67
67
|
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
|
68
68
|
| Google Chrome Device Management | Google-Chrome-Device-Management | cdm |
|
|
69
69
|
| Google Drive Storage 16TB | Google-Drive-storage-16TB | 16tb |
|
|
@@ -161,18 +161,17 @@
|
|
|
161
161
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
|
162
162
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
|
163
163
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
|
164
|
-
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
|
165
|
-
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
|
166
164
|
cloudidentity | identity | 1010010001 | Cloud Identity |
|
|
167
165
|
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
|
168
166
|
cloudsearch | 1010350001 | Cloud Search |
|
|
169
167
|
colabpro | 1010500001 | Colab Pro |
|
|
170
168
|
colabpro+ | colabproplus | 1010500002 | Colab Pro+ |
|
|
171
169
|
eeu | 1010490001 | SKU Endpoint Education Upgrade |
|
|
170
|
+
gaiproedu | geminiedu | 1010470004 | Google AI Pro for Education |
|
|
172
171
|
geminibiz | 1010470003 | Gemini Business |
|
|
173
|
-
geminiedu | 1010470004 | Gemini Education |
|
|
174
172
|
geminiedupremium| 1010470005 | Gemini Education Premium |
|
|
175
173
|
geminient| duetai | 1010470001 | Gemini Enterprise |
|
|
174
|
+
geminiultra | 1010470008 | Google AI Ultra for Business |
|
|
176
175
|
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
|
177
176
|
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
|
178
177
|
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
|
@@ -216,7 +215,8 @@
|
|
|
216
215
|
wsess | workspaceesentials | gsuiteessentials | essentials | d4e | driveenterprise | drive4enterprise | 1010060001 | Google Workspace Essentials (formerly G Suite Essentials) |
|
|
217
216
|
wsessplus | workspaceessentialsplus | 1010060005 | Google Workspace Enterprise Essentials Plus |
|
|
218
217
|
wsflw | workspacefrontline | workspacefrontlineworker | 1010020030 | Google Workspace Frontline Starter |
|
|
219
|
-
wsflwstan | workspacefrontlinestan | workspacefrontlineworkerstan | 1010020031 | Google Workspace Frontline Standard
|
|
218
|
+
wsflwstan | workspacefrontlinestan | workspacefrontlineworkerstan | 1010020031 | Google Workspace Frontline Standard |
|
|
219
|
+
wsflwplus | workspacefrontlineplus | workspacefrontlineworkerplus | 1010020034 | Google Workspace Frontline Plus
|
|
220
220
|
<SKUIDList> ::= "<SKUID>(,<SKUID>)*"
|
|
221
221
|
```
|
|
222
222
|
## Notes
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
- [Query documentation](#query-documentation)
|
|
4
4
|
- [Definitions](#definitions)
|
|
5
5
|
- [Introduction](#introduction)
|
|
6
|
-
- [GUI
|
|
6
|
+
- [API GUI permission name mapping](#api-gui-permission-name-mapping)
|
|
7
|
+
- [API GUI restriction name mapping](#api-gui-restriction-name-mapping)
|
|
7
8
|
- [Display Shared Drive themes](#display-shared-drive-themes)
|
|
8
9
|
- [Manage Shared Drives](#manage-shared-drives)
|
|
9
10
|
- [Create a Shared Drive](#create-a-shared-drive)
|
|
@@ -207,15 +208,8 @@
|
|
|
207
208
|
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
|
208
209
|
drivemembersonly|teammembersonly|
|
|
209
210
|
sharingfoldersrequiresorganizerpermission
|
|
210
|
-
|
|
211
|
-
Each pair of restrictions below are equivalent:
|
|
212
|
-
|
|
213
|
-
allowcontentmanagerstosharefolders true
|
|
214
|
-
sharingfoldersrequiresorganizerpermission false
|
|
215
|
-
|
|
216
|
-
allowcontentmanagerstosharefolders false
|
|
217
|
-
sharingfoldersrequiresorganizerpermission true
|
|
218
211
|
```
|
|
212
|
+
|
|
219
213
|
## Introduction
|
|
220
214
|
A domain administrator with the Drive and Docs administrator privilege can search for Shared Drives or update permissions for Shared Drives
|
|
221
215
|
owned by their organization, regardless of the admin's membership in any given Shared Drive.
|
|
@@ -225,15 +219,47 @@ Three forms of the commands are available:
|
|
|
225
219
|
* `gam <UserTypeEntity> action ... adminaccess` - The user named in `<UserTypeEntty>` is used, adminaccess indicates that the user is a domain administrator
|
|
226
220
|
* `gam <UserTypeEntity> action ...` - The user named in `<UserTypeEntty>` is used, access is limited to drives for which they are an organizer
|
|
227
221
|
|
|
228
|
-
## GUI
|
|
229
|
-
|
|
230
|
-
|
|
|
231
|
-
|
|
232
|
-
|
|
|
233
|
-
| Content manager |
|
|
234
|
-
|
|
|
235
|
-
|
|
|
236
|
-
|
|
|
222
|
+
## API GUI permission name mapping
|
|
223
|
+
|
|
224
|
+
| API setting | GUI setting |
|
|
225
|
+
|-------------|-------------|
|
|
226
|
+
| organizer | Manager |
|
|
227
|
+
| fileOrganizer | Content manager |
|
|
228
|
+
| writer | Contributor |
|
|
229
|
+
| commenter | Commenter |
|
|
230
|
+
| reader | Viewer |
|
|
231
|
+
|
|
232
|
+
## API GUI restriction name mapping
|
|
233
|
+
| API Setting | Description |
|
|
234
|
+
|-------------|-------------|
|
|
235
|
+
| adminManagedRestrictions | Whether administrative privileges on this shared drive are required to modify restrictions. |
|
|
236
|
+
| domainUsersOnly | Whether access to this shared drive and items inside this shared drive is restricted to users of the domain to which this shared drive belongs. |
|
|
237
|
+
| driveMembersOnly | Whether access to items inside this shared drive is restricted to its members. |
|
|
238
|
+
| allowContentManagersToShareFolders (GAM defined) | If true, users with either the organizer role or the file organizer role can share folders. If false, only users with the organizer role can share folders. |
|
|
239
|
+
| sharingFoldersRequiresOrganizerPermission | If true, only users with the organizer role can share folders. If false, users with either the organizer role or the file organizer role can share folders. |
|
|
240
|
+
| copyRequiresWriterPermission | Whether the options to copy, print, or download files inside this shared drive, should be disabled for readers and commenters. |
|
|
241
|
+
| downloadRestrictions.restrictedForWriters | Whether download and copy is restricted for writers. If true, download is also restricted for readers. |
|
|
242
|
+
| downloadRestrictions.restrictedForReaders | Whether download and copy is restricted for readers. |
|
|
243
|
+
|
|
244
|
+
| API Setting | False | True | GUI Setting | Checked | Unchecked |
|
|
245
|
+
|-------------|-------|------|-------------|---------|-----------|
|
|
246
|
+
| adminManagedRestrictions | X | | Shared drive settings can be modified | | |
|
|
247
|
+
| adminManagedRestrictions | | X | Shared drive settings can **not** be modified | | |
|
|
248
|
+
| | | | **Access** |
|
|
249
|
+
| domainUsersOnly | X | | Allow people outside of Domain name to access files | X | |
|
|
250
|
+
| domainUsersOnly | | X | Allow people outside of Domain name to access files | | X |
|
|
251
|
+
| driveMembersOnly | X | | Allow people who aren't shared drive members to access files | X | |
|
|
252
|
+
| driveMembersOnly | | X | Allow people who aren't shared drive members to access files | | X |
|
|
253
|
+
| | | | **Role permissions** |
|
|
254
|
+
| allowContentManagersToShareFolders | X | | Allow content managers to share folders | | X |
|
|
255
|
+
| allowContentManagersToShareFolders | | X | Allow content managers to share folders | X | |
|
|
256
|
+
| sharingFoldersRequiresOrganizerPermission | X | | Allow content managers to share folders | X | |
|
|
257
|
+
| sharingFoldersRequiresOrganizerPermission | | X | Allow content managers to share folders | | X |
|
|
258
|
+
| | | | **People who can download, copy, and print** |
|
|
259
|
+
| downloadRestrictions.restrictedForWriters | X | | Contributors and content managers | X | |
|
|
260
|
+
| downloadRestrictions.restrictedForWriters | | X | Contributors and content managers | | X |
|
|
261
|
+
| downloadRestrictions.restrictedForReaders | X | | Commenters and viewers | X | |
|
|
262
|
+
| downloadRestrictions.restrictedForReaders | | X | Commenters and viewers | | X |
|
|
237
263
|
|
|
238
264
|
## Display Shared Drive themes
|
|
239
265
|
```
|