gam7 7.18.0__tar.gz → 7.18.2__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.
Potentially problematic release.
This version of gam7 might be problematic. Click here for more details.
- {gam7-7.18.0 → gam7-7.18.2}/.github/workflows/build.yml +1 -1
- {gam7-7.18.0 → gam7-7.18.2}/PKG-INFO +1 -1
- {gam7-7.18.0 → gam7-7.18.2}/src/GamCommands.txt +9 -2
- {gam7-7.18.0 → gam7-7.18.2}/src/GamUpdate.txt +21 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/__init__.py +95 -22
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Administrators.md +62 -7
- gam7-7.18.2/wiki/Business-Account-Management.md +36 -0
- gam7-7.18.0/wiki/Chat-Bot.md → gam7-7.18.2/wiki/Chat-Bot-Setup-Use.md +1 -1
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Classroom-Membership.md +1 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/GamUpdates.md +26 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +3 -3
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Permissions.md +45 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Version-and-Help.md +10 -10
- {gam7-7.18.0 → gam7-7.18.2}/wiki/_Sidebar.md +2 -1
- {gam7-7.18.0 → gam7-7.18.2}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/actions/decrypt.sh +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/actions/entitlements.plist +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/stale.yml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.github/workflows/pypi.yml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/.pre-commit-config.yaml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/LICENSE +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/README.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/pyproject.toml +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/.gitignore +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/LICENSE +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/README.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/cacerts.pem +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/callgam.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/__main__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/auth.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/client.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/core.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/data.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/http.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/http_core.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/service.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/token_store.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/atom/url.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/cacerts.pem +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/service.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam/six.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam-install.sh +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam-setup.bat +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam.exe.manifest +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam.spec +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/gam.wxs +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/license.rtf +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/requirements-dev.txt +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/tools/mkGamRef.py +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/tools/openssl.props +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/src/version_info.txt.in +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/00scratch.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Addresses.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Alert-Center.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Aliases.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Authorization.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Basic-Items.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Calendars-Access.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Calendars-Events.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Calendars.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Customer.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Domains-Verification.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Domains.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Drive-Items.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Global-Address-List.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Groups-Membership.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Groups.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Home.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Licenses.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/List-Items.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/List.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Organizational-Units.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Other-Resources.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Permission-Matches.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/README.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Rclone.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Reports.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Reseller.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Resources.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Schemas.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Scripts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Send-Email.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Shared-Drives.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Sites.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Tag-Replace.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Todrive.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Calendars.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Chat.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Contacts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Forms.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Meet.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Photo.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Tasks.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Tokens.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users-YouTube.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Users.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/gam.cfg.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Home.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Printers.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.18.0 → gam7-7.18.2}/wiki/l-_Footer.md +0 -0
|
@@ -1511,15 +1511,22 @@ gam show privileges
|
|
|
1511
1511
|
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
|
1512
1512
|
|
|
1513
1513
|
gam create adminrole <String> [description <String>]
|
|
1514
|
-
privileges all|all_ou|<
|
|
1514
|
+
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>
|
|
1515
|
+
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
|
1515
1516
|
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
|
1516
|
-
|
|
1517
|
+
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>]
|
|
1518
|
+
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
|
1517
1519
|
gam delete adminrole <RoleItem>
|
|
1518
1520
|
gam info adminrole <RoleItem> [privileges]
|
|
1521
|
+
[formatjson]
|
|
1519
1522
|
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|
1520
1523
|
[role <RoleItem>] [privileges] [oneitemperrow]
|
|
1524
|
+
[nosystemroles]
|
|
1525
|
+
[formatjson [quotechar <Character>]]
|
|
1521
1526
|
gam show adminroles|roles
|
|
1522
1527
|
[role <RoleItem>] [privileges]
|
|
1528
|
+
[nosystemroles]
|
|
1529
|
+
[formatjson]
|
|
1523
1530
|
|
|
1524
1531
|
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
|
1525
1532
|
[condition securitygroup|nonsecuritygroup]
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
7.18.02
|
|
2
|
+
|
|
3
|
+
Upgraded to OpenSSL 3.5.2.
|
|
4
|
+
|
|
5
|
+
7.18.01
|
|
6
|
+
|
|
7
|
+
Added option `nosystemroles` to `gam print|show adminroles` that causes GAM
|
|
8
|
+
to only display non-system roles.
|
|
9
|
+
|
|
10
|
+
Added option `formatjson` to `gam info|print|show adminroles`; this will be most useful
|
|
11
|
+
when the `privileges` option is used.
|
|
12
|
+
|
|
13
|
+
Updated `gam create|update adminrole` to allow specification of privileges with
|
|
14
|
+
JSON data: `privileges <JSONData>`. These two updates make it easier to copy admin roles.
|
|
15
|
+
|
|
16
|
+
Updated `gam create|update adminrole` to allow output of the created/updated
|
|
17
|
+
role data in CSV format; by default, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
|
18
|
+
```
|
|
19
|
+
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
|
20
|
+
```
|
|
21
|
+
|
|
1
22
|
7.18.00
|
|
2
23
|
|
|
3
24
|
Added commands to display Business Profile Accounts.
|
|
@@ -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.18.
|
|
28
|
+
__version__ = '7.18.02'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -16621,10 +16621,14 @@ def getRoleId():
|
|
|
16621
16621
|
invalidChoiceExit(role, GM.Globals[GM.MAP_ROLE_NAME_TO_ID], True)
|
|
16622
16622
|
return (role, roleId)
|
|
16623
16623
|
|
|
16624
|
+
PRINT_ADMIN_ROLES_FIELDS = ['roleId', 'roleName', 'roleDescription', 'isSuperAdminRole', 'isSystemRole']
|
|
16625
|
+
|
|
16624
16626
|
# gam create adminrole <String> [description <String>]
|
|
16625
|
-
# privileges all|all_ou|<
|
|
16627
|
+
# privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>
|
|
16628
|
+
# [csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
|
16626
16629
|
# gam update adminrole <RoleItem> [name <String>] [description <String>]
|
|
16627
|
-
# [privileges all|all_ou|<
|
|
16630
|
+
# [privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>]
|
|
16631
|
+
# [csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
|
16628
16632
|
def doCreateUpdateAdminRoles():
|
|
16629
16633
|
def expandChildPrivileges(privilege):
|
|
16630
16634
|
for childPrivilege in privilege.get('childPrivileges', []):
|
|
@@ -16641,6 +16645,9 @@ def doCreateUpdateAdminRoles():
|
|
|
16641
16645
|
allPrivileges = {}
|
|
16642
16646
|
ouPrivileges = {}
|
|
16643
16647
|
childPrivileges = {}
|
|
16648
|
+
csvPF = None
|
|
16649
|
+
FJQC = FormatJSONQuoteChar(None)
|
|
16650
|
+
addCSVData = {}
|
|
16644
16651
|
for privilege in _listPrivileges(cd):
|
|
16645
16652
|
allPrivileges[privilege['privilegeName']] = privilege['serviceId']
|
|
16646
16653
|
if privilege['isOuScopable']:
|
|
@@ -16654,6 +16661,8 @@ def doCreateUpdateAdminRoles():
|
|
|
16654
16661
|
body['rolePrivileges'] = [{'privilegeName': p, 'serviceId': v} for p, v in allPrivileges.items()]
|
|
16655
16662
|
elif privs == 'ALL_OU':
|
|
16656
16663
|
body['rolePrivileges'] = [{'privilegeName': p, 'serviceId': v} for p, v in ouPrivileges.items()]
|
|
16664
|
+
elif privs == 'JSON':
|
|
16665
|
+
body['rolePrivileges'] = getJSON(['roleId', 'roleName', 'isAdminRole', 'isSystemRole']).get('rolePrivileges', [])
|
|
16657
16666
|
else:
|
|
16658
16667
|
if privs == 'SELECT':
|
|
16659
16668
|
privsList = [p.upper() for p in getEntityList(Cmd.OB_PRIVILEGE_LIST)]
|
|
@@ -16675,25 +16684,59 @@ def doCreateUpdateAdminRoles():
|
|
|
16675
16684
|
else:
|
|
16676
16685
|
invalidChoiceExit(p, list(allPrivileges.keys())+list(ouPrivileges.keys())+list(childPrivileges.keys()), True)
|
|
16677
16686
|
elif myarg == 'description':
|
|
16678
|
-
body['roleDescription'] = getString(Cmd.OB_STRING)
|
|
16687
|
+
body['roleDescription'] = getString(Cmd.OB_STRING, minLen=0)
|
|
16679
16688
|
elif myarg == 'name':
|
|
16680
16689
|
body['roleName'] = getString(Cmd.OB_STRING)
|
|
16690
|
+
elif myarg == 'csv':
|
|
16691
|
+
csvPF = CSVPrintFile(PRINT_ADMIN_ROLES_FIELDS)
|
|
16692
|
+
FJQC.SetCsvPF(csvPF)
|
|
16693
|
+
elif csvPF and myarg == 'todrive':
|
|
16694
|
+
csvPF.GetTodriveParameters()
|
|
16695
|
+
elif csvPF and myarg == 'addcsvdata':
|
|
16696
|
+
k = getString(Cmd.OB_STRING)
|
|
16697
|
+
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
16681
16698
|
else:
|
|
16682
|
-
|
|
16699
|
+
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
16683
16700
|
if not updateCmd and not body.get('rolePrivileges'):
|
|
16684
16701
|
missingArgumentExit('privileges')
|
|
16702
|
+
if csvPF:
|
|
16703
|
+
if addCSVData:
|
|
16704
|
+
csvPF.AddTitles(sorted(addCSVData.keys()))
|
|
16705
|
+
if not FJQC.formatJSON:
|
|
16706
|
+
csvPF.AddTitles('rolePrivileges')
|
|
16707
|
+
else:
|
|
16708
|
+
csvPF.AddJSONTitles(sorted(addCSVData.keys()))
|
|
16709
|
+
csvPF.MoveJSONTitlesToEnd(['JSON'])
|
|
16710
|
+
fieldsList = ','.join(PRINT_ADMIN_ROLES_FIELDS+['rolePrivileges'])
|
|
16711
|
+
else:
|
|
16712
|
+
fieldsList = 'roleId,roleName'
|
|
16685
16713
|
try:
|
|
16686
16714
|
if not updateCmd:
|
|
16687
16715
|
result = callGAPI(cd.roles(), 'insert',
|
|
16688
16716
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
|
16689
16717
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED]+[GAPI.DUPLICATE],
|
|
16690
|
-
customer=GC.Values[GC.CUSTOMER_ID], body=body, fields=
|
|
16718
|
+
customer=GC.Values[GC.CUSTOMER_ID], body=body, fields=fieldsList)
|
|
16691
16719
|
else:
|
|
16692
16720
|
result = callGAPI(cd.roles(), 'patch',
|
|
16693
16721
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
|
16694
16722
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED]+[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.CONFLICT],
|
|
16695
|
-
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, body=body, fields=
|
|
16696
|
-
|
|
16723
|
+
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, body=body, fields=fieldsList)
|
|
16724
|
+
if not csvPF:
|
|
16725
|
+
entityActionPerformed([Ent.ADMIN_ROLE, f"{result['roleName']}({result['roleId']})"])
|
|
16726
|
+
else:
|
|
16727
|
+
if not FJQC.formatJSON:
|
|
16728
|
+
if addCSVData:
|
|
16729
|
+
result.update(addCSVData)
|
|
16730
|
+
csvPF.WriteRowNoFilter(result)
|
|
16731
|
+
else:
|
|
16732
|
+
row = {}
|
|
16733
|
+
for field in PRINT_ADMIN_ROLES_FIELDS:
|
|
16734
|
+
if field in result:
|
|
16735
|
+
row[field] = result[field]
|
|
16736
|
+
if addCSVData:
|
|
16737
|
+
row.update(addCSVData)
|
|
16738
|
+
row['JSON'] = json.dumps(cleanJSON(result), ensure_ascii=False, sort_keys=True)
|
|
16739
|
+
csvPF.WriteRowNoFilter(row)
|
|
16697
16740
|
except GAPI.duplicate as e:
|
|
16698
16741
|
entityActionFailedWarning([Ent.ADMIN_ROLE, f"{body['roleName']}"], str(e))
|
|
16699
16742
|
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.conflict) as e:
|
|
@@ -16702,6 +16745,8 @@ def doCreateUpdateAdminRoles():
|
|
|
16702
16745
|
accessErrorExit(cd)
|
|
16703
16746
|
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
16704
16747
|
ClientAPIAccessDeniedExit(str(e))
|
|
16748
|
+
if csvPF:
|
|
16749
|
+
csvPF.writeCSVfile('Admin Roles')
|
|
16705
16750
|
|
|
16706
16751
|
# gam delete adminrole <RoleItem>
|
|
16707
16752
|
def doDeleteAdminRole():
|
|
@@ -16721,9 +16766,10 @@ def doDeleteAdminRole():
|
|
|
16721
16766
|
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
16722
16767
|
ClientAPIAccessDeniedExit(str(e))
|
|
16723
16768
|
|
|
16724
|
-
|
|
16725
|
-
|
|
16726
|
-
|
|
16769
|
+
def _showAdminRole(role, FJQC, i=0, count=0):
|
|
16770
|
+
if FJQC.formatJSON:
|
|
16771
|
+
printLine(json.dumps(cleanJSON(role), ensure_ascii=False, sort_keys=True))
|
|
16772
|
+
return
|
|
16727
16773
|
printEntity([Ent.ADMIN_ROLE, role['roleName']], i, count)
|
|
16728
16774
|
Ind.Increment()
|
|
16729
16775
|
for field in PRINT_ADMIN_ROLES_FIELDS:
|
|
@@ -16744,15 +16790,21 @@ def _showAdminRole(role, i=0, count=0):
|
|
|
16744
16790
|
Ind.Decrement()
|
|
16745
16791
|
|
|
16746
16792
|
# gam info adminrole <RoleItem> [privileges]
|
|
16793
|
+
# [formatjson]
|
|
16747
16794
|
# gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|
16748
16795
|
# [role <RoleItem>] [privileges] [oneitemperrow]
|
|
16796
|
+
# [nosystemroles]
|
|
16797
|
+
# [formatjson [quotechar <Character>]]
|
|
16749
16798
|
# gam show adminroles|roles
|
|
16750
16799
|
# [role <RoleItem>] [privileges]
|
|
16800
|
+
# [nosystemroles]
|
|
16801
|
+
# [formatjson]
|
|
16751
16802
|
def doInfoPrintShowAdminRoles():
|
|
16752
16803
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
16753
16804
|
fieldsList = PRINT_ADMIN_ROLES_FIELDS[:]
|
|
16754
16805
|
csvPF = CSVPrintFile(fieldsList, PRINT_ADMIN_ROLES_FIELDS) if Act.csvFormat() else None
|
|
16755
|
-
|
|
16806
|
+
FJQC = FormatJSONQuoteChar(csvPF)
|
|
16807
|
+
noSystemRoles = oneItemPerRow = False
|
|
16756
16808
|
if Act.Get() != Act.INFO:
|
|
16757
16809
|
roleId = None
|
|
16758
16810
|
else:
|
|
@@ -16767,13 +16819,17 @@ def doInfoPrintShowAdminRoles():
|
|
|
16767
16819
|
fieldsList.append('rolePrivileges')
|
|
16768
16820
|
elif myarg == 'oneitemperrow':
|
|
16769
16821
|
oneItemPerRow = True
|
|
16822
|
+
elif myarg == 'nosystemroles':
|
|
16823
|
+
noSystemRoles = True
|
|
16770
16824
|
else:
|
|
16771
|
-
|
|
16772
|
-
if csvPF
|
|
16773
|
-
if
|
|
16774
|
-
|
|
16775
|
-
|
|
16776
|
-
|
|
16825
|
+
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
16826
|
+
if csvPF:
|
|
16827
|
+
if 'rolePrivileges' in fieldsList:
|
|
16828
|
+
if not oneItemPerRow:
|
|
16829
|
+
if not FJQC.formatJSON:
|
|
16830
|
+
csvPF.AddTitles(['rolePrivileges'])
|
|
16831
|
+
else:
|
|
16832
|
+
csvPF.AddTitles(['privilegeName', 'serviceId'])
|
|
16777
16833
|
try:
|
|
16778
16834
|
if roleId is None:
|
|
16779
16835
|
fields = getItemFieldsFromFieldsList('items', fieldsList)
|
|
@@ -16783,6 +16839,8 @@ def doInfoPrintShowAdminRoles():
|
|
|
16783
16839
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
|
16784
16840
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
16785
16841
|
customer=GC.Values[GC.CUSTOMER_ID], fields=fields)
|
|
16842
|
+
if noSystemRoles:
|
|
16843
|
+
roles = [role for role in roles if not role.get('isSystemRole', False)]
|
|
16786
16844
|
else:
|
|
16787
16845
|
fields = getFieldsFromFieldsList(fieldsList)
|
|
16788
16846
|
roles = [callGAPI(cd.roles(), 'get',
|
|
@@ -16801,23 +16859,38 @@ def doInfoPrintShowAdminRoles():
|
|
|
16801
16859
|
role.setdefault('isSystemRole', False)
|
|
16802
16860
|
if not csvPF:
|
|
16803
16861
|
count = len(roles)
|
|
16804
|
-
|
|
16862
|
+
if not FJQC.formatJSON:
|
|
16863
|
+
performActionNumItems(count, Ent.ADMIN_ROLE)
|
|
16805
16864
|
Ind.Increment()
|
|
16806
16865
|
i = 0
|
|
16807
16866
|
for role in roles:
|
|
16808
16867
|
i += 1
|
|
16809
|
-
_showAdminRole(role, i, count)
|
|
16868
|
+
_showAdminRole(role, FJQC, i, count)
|
|
16810
16869
|
Ind.Decrement()
|
|
16811
16870
|
else:
|
|
16812
16871
|
for role in roles:
|
|
16813
16872
|
if not oneItemPerRow or 'rolePrivileges' not in role:
|
|
16814
|
-
|
|
16873
|
+
row = flattenJSON(role)
|
|
16874
|
+
if not FJQC.formatJSON:
|
|
16875
|
+
csvPF.WriteRowTitles(row)
|
|
16876
|
+
elif csvPF.CheckRowTitles(row):
|
|
16877
|
+
row = {}
|
|
16878
|
+
for field in PRINT_ADMIN_ROLES_FIELDS:
|
|
16879
|
+
if field in role:
|
|
16880
|
+
row[field] = role[field]
|
|
16881
|
+
row['JSON'] = json.dumps(cleanJSON(role), ensure_ascii=False, sort_keys=True)
|
|
16882
|
+
csvPF.WriteRowNoFilter(row)
|
|
16815
16883
|
else:
|
|
16816
16884
|
privileges = role.pop('rolePrivileges')
|
|
16817
16885
|
baserow = flattenJSON(role)
|
|
16818
16886
|
for privilege in privileges:
|
|
16819
16887
|
row = flattenJSON(privilege, flattened=baserow.copy())
|
|
16820
|
-
|
|
16888
|
+
if not FJQC.formatJSON:
|
|
16889
|
+
csvPF.WriteRowTitles(row)
|
|
16890
|
+
elif csvPF.CheckRowTitles(row):
|
|
16891
|
+
row = baserow.copy()
|
|
16892
|
+
row['JSON'] = json.dumps(cleanJSON(privilege), ensure_ascii=False, sort_keys=True)
|
|
16893
|
+
csvPF.WriteRowNoFilter(row)
|
|
16821
16894
|
if csvPF:
|
|
16822
16895
|
csvPF.writeCSVfile('Admin Roles')
|
|
16823
16896
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
- [Display administrators](#display-administrators)
|
|
10
10
|
- [Copy privileges from one role to a new role](#copy-privileges-from-one-role-to-a-new-role)
|
|
11
11
|
- [Copy roles from one administrator to another](#copy-roles-from-one-administrator-to-another)
|
|
12
|
+
- [Copy non-system admin roles from a source workspace to a target workspace](#copy-non-system-admin-roles-from-a-source-workspace-to-a-target-workspace)
|
|
12
13
|
|
|
13
14
|
## API documentation
|
|
14
15
|
* [About Administrator roles](https://support.google.com/a/answer/33325?ref_topic=4514341)
|
|
@@ -21,13 +22,16 @@
|
|
|
21
22
|
<DomainName> ::= <String>(.<String>)+
|
|
22
23
|
<EmailAddress> ::= <String>@<DomainName>
|
|
23
24
|
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
|
25
|
+
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
|
24
26
|
<OrgUnitID> ::= id:<String>
|
|
25
27
|
<OrgUnitPath> ::= /|(/<String)+
|
|
26
28
|
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
|
27
29
|
<Privilege> ::= <String>
|
|
28
30
|
<PrivilegeList> ::= "<Privilege>(,<Privilege)*"
|
|
29
31
|
<RoleAssignmentID> ::= <String>
|
|
30
|
-
<
|
|
32
|
+
<RoleID> ::= <String>
|
|
33
|
+
<RoleName> ::= <String>
|
|
34
|
+
<RoleItem> ::= id:<RoleID>|<RoleName>
|
|
31
35
|
<UniqueID> ::= id:<String>
|
|
32
36
|
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
|
33
37
|
```
|
|
@@ -1383,9 +1387,11 @@ Show 111 Privileges
|
|
|
1383
1387
|
## Manage administrative roles
|
|
1384
1388
|
```
|
|
1385
1389
|
gam create adminrole <String> [description <String>]
|
|
1386
|
-
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)
|
|
1390
|
+
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)|<JSONData>
|
|
1391
|
+
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
|
1387
1392
|
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
|
1388
|
-
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)]
|
|
1393
|
+
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)|<JSONData>]
|
|
1394
|
+
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
|
1389
1395
|
gam delete adminrole <RoleItem>
|
|
1390
1396
|
```
|
|
1391
1397
|
* `privileges all` - All defined privileges
|
|
@@ -1393,24 +1399,61 @@ gam delete adminrole <RoleItem>
|
|
|
1393
1399
|
* `privileges <PrivilegeList>` - A specific list of privileges
|
|
1394
1400
|
* `privileges select <FileSelector>|<CSVFileSelector>>` - A collection of privileges from a flat or CSV file
|
|
1395
1401
|
|
|
1402
|
+
By default, when an admin role is created|update, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
|
1403
|
+
* `csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]` - Output the admin roledetails in CSV format.
|
|
1404
|
+
|
|
1405
|
+
When `csv` is uused, Add additional columns of data from the command line to the output.
|
|
1406
|
+
* `addcsvdata <FieldName> <String>`
|
|
1407
|
+
|
|
1396
1408
|
## Display administrative roles
|
|
1397
1409
|
```
|
|
1398
1410
|
gam info adminrole <RoleItem> [privileges]
|
|
1411
|
+
[formatjson]
|
|
1399
1412
|
```
|
|
1400
1413
|
* `privileges` - Display privileges associated with role
|
|
1414
|
+
|
|
1415
|
+
By default, Gam displays the information as an indented list of keys and values.
|
|
1416
|
+
* `formatjson` - Display the fields in JSON format.
|
|
1417
|
+
|
|
1401
1418
|
```
|
|
1402
|
-
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|
1403
|
-
[role <RoleItem>] [privileges] [oneitemperrow]
|
|
1404
1419
|
gam show adminroles|roles
|
|
1405
1420
|
[role <RoleItem>] [privileges]
|
|
1421
|
+
[nosystemroles]
|
|
1422
|
+
[formatjson]
|
|
1406
1423
|
```
|
|
1407
|
-
|
|
1424
|
+
* `privileges` - Display privileges associated with each role
|
|
1425
|
+
|
|
1426
|
+
By default, all roles are displayed:
|
|
1427
|
+
* `role <RoleItem>` - Display a specific role.
|
|
1428
|
+
* `nosystemroles` - Display onnly non-system roles.
|
|
1429
|
+
|
|
1430
|
+
By default, Gam displays the information as an indented list of keys and values.
|
|
1431
|
+
* `formatjson` - Display the fields in JSON format.
|
|
1408
1432
|
|
|
1433
|
+
```
|
|
1434
|
+
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|
1435
|
+
[role <RoleItem>] [privileges] [oneitemperrow]
|
|
1436
|
+
[nosystemroles]
|
|
1437
|
+
[formatjson [quotechar <Character>]]
|
|
1438
|
+
```
|
|
1409
1439
|
* `privileges` - Display privileges associated with each role
|
|
1410
1440
|
|
|
1411
|
-
By default,
|
|
1441
|
+
By default, all privileges for a role are shown on one row as a repeating item.
|
|
1412
1442
|
When `oneitemperrow` is specified, each privilege is output on a separate row/line with the other role fields.
|
|
1413
1443
|
|
|
1444
|
+
By default, all roles are displayed:
|
|
1445
|
+
* `role <RoleItem>` - Display a specific role.
|
|
1446
|
+
* `nosystemroles` - Display onnly non-system roles.
|
|
1447
|
+
|
|
1448
|
+
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format:
|
|
1449
|
+
* `formatjson` - Display the fields in JSON format.
|
|
1450
|
+
|
|
1451
|
+
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
|
1452
|
+
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
|
1453
|
+
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
|
1454
|
+
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
|
1455
|
+
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
|
1456
|
+
|
|
1414
1457
|
## Create an administrator
|
|
1415
1458
|
Add an administrator role to an administrator.
|
|
1416
1459
|
```
|
|
@@ -1469,3 +1512,15 @@ gam config csv_input_row_filter "scopeType:regex:CUSTOMER" redirect stdout ./Upd
|
|
|
1469
1512
|
gam config csv_input_row_filter "scopeType:regex:ORG_UNIT" redirect stdout ./UpdateNewAdminOrgUnitRoles.txt multiprocess redirect stderr stdout csv CurrentAdminRoles.csv gam create admin newadmin@domain.com "id:~~roleId~~" org_unit "id:~~orgUnitId~~"
|
|
1470
1513
|
```
|
|
1471
1514
|
|
|
1515
|
+
## Copy non-system admin roles from a source workspace to a target workspace
|
|
1516
|
+
This requires GAM version 7.18.01 or higher.
|
|
1517
|
+
|
|
1518
|
+
In the source workspace to the following:
|
|
1519
|
+
```
|
|
1520
|
+
gam redirect csv ./SourceNonSystemRoles.csv print adminroles privileges nosystemroles formatjson quotechar "'"
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
In the target workspacce do the following:
|
|
1524
|
+
```
|
|
1525
|
+
gam redirect csv ./TargetNonSystemRoles.csv multiprocess quotechar "'" redirect stderr - multiprocess csv SourceNonSystemRoles.csv quotechar "'" gam create adminrole "~roleName" description "~roleDescription" privileges json "~JSON" csv addcsvdata oldRoleId "~roleId" formatjson
|
|
1526
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Users - Business Account Management
|
|
2
|
+
- [API documentation](#api-documentation)
|
|
3
|
+
- [Introduction](#introduction)
|
|
4
|
+
- [Definitions](#definitions)
|
|
5
|
+
- [Display Business Profile Accounts](#display-business-profile-accounts)
|
|
6
|
+
|
|
7
|
+
## API documentation
|
|
8
|
+
* [Business Account Management](https://developers.google.com/my-business/reference/accountmanagement/rest)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## Introduction
|
|
12
|
+
These features were added in version 7.18.00.
|
|
13
|
+
|
|
14
|
+
To use these commands you add the 'Business Account Management API' to your project and update client authorization.
|
|
15
|
+
```
|
|
16
|
+
gam update project
|
|
17
|
+
gam oauth create
|
|
18
|
+
...
|
|
19
|
+
[*] 0) Business Account Management API
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
## Definitions
|
|
23
|
+
* [`<UserTypeEntity>`](Collections-of-Users)
|
|
24
|
+
|
|
25
|
+
## Display Business Profile Accounts
|
|
26
|
+
```
|
|
27
|
+
gam <UserItem> show businessprofileaccounts
|
|
28
|
+
[type locationgroup|organization|personal|usergroup]
|
|
29
|
+
```
|
|
30
|
+
Gam displays the information as an indented list of keys and values.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
gam <UserItem> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
|
34
|
+
[type locationgroup|organization|personal|usergroup]
|
|
35
|
+
```
|
|
36
|
+
Gam displays the information as columns of fields.
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* [Google Classroom API](https://developers.google.com/classroom/reference/rest)
|
|
13
13
|
* [Google Classroom API - Courses Students](https://developers.google.com/classroom/reference/rest/v1/courses.students)
|
|
14
14
|
* [Google Classroom API - Courses Teachers](https://developers.google.com/classroom/reference/rest/v1/courses.teachers)
|
|
15
|
+
* [Classroom Membership Limits](https://support.google.com/edu/classroom/answer/7300976)
|
|
15
16
|
|
|
16
17
|
## Definitions
|
|
17
18
|
```
|
|
@@ -10,6 +10,32 @@ 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.18.01
|
|
14
|
+
|
|
15
|
+
Added option `nosystemroles` to `gam print|show adminroles` that causes GAM
|
|
16
|
+
to only display non-system roles.
|
|
17
|
+
|
|
18
|
+
Added option `formatjson` to `gam info|print|show adminroles`; this will be most useful
|
|
19
|
+
when the `privileges` option is used.
|
|
20
|
+
|
|
21
|
+
Updated `gam create|update adminrole` to allow specification of privileges with
|
|
22
|
+
JSON data: `privileges <JSONData>`. These two updates make it easier to copy admin roles.
|
|
23
|
+
|
|
24
|
+
Updated `gam create|update adminrole` to allow output of the created/updated
|
|
25
|
+
role data in CSV format; by default, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
|
26
|
+
```
|
|
27
|
+
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 7.18.00
|
|
31
|
+
|
|
32
|
+
Added commands to display Business Profile Accounts.
|
|
33
|
+
These are special purpose commands and will not generally be used.
|
|
34
|
+
```
|
|
35
|
+
gam show businessprofileaccounts
|
|
36
|
+
gam print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
|
37
|
+
```
|
|
38
|
+
|
|
13
39
|
### 7.17.03
|
|
14
40
|
|
|
15
41
|
Fixed bug in `gam <UserItem> print|show chatspaces asadmin fields <ChatSpaceFieldNameList>` that caused a trap
|
|
@@ -252,10 +252,10 @@ 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.
|
|
255
|
+
GAM 7.18.01 - https://github.com/GAM-team/GAM - pyinstaller
|
|
256
256
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
257
257
|
Python 3.13.5 64-bit final
|
|
258
|
-
MacOS Sequoia 15.
|
|
258
|
+
MacOS Sequoia 15.6 x86_64
|
|
259
259
|
Path: /Users/admin/bin/gam7
|
|
260
260
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
|
261
261
|
|
|
@@ -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.
|
|
993
|
+
GAM 7.18.01 - https://github.com/GAM-team/GAM - pythonsource
|
|
994
994
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
995
995
|
Python 3.13.5 64-bit final
|
|
996
996
|
Windows-10-10.0.17134 AMD64
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
- [Delete all ACLs except owner from a user's My Drive](#delete-all-acls-except-owner-from-a-users-my-drive)
|
|
11
11
|
- [Change shares to User1 to shares to User2](#change-shares-to-user1-to-shares-to-user2)
|
|
12
12
|
- [Map All ACLs from an old domain to a new domain](#map-all-acls-from-an-old-domain-to-a-new-domain)
|
|
13
|
+
- [Remove all ACLs for a specific user or group email address](#remove-all-ACLs-for-a-specific-user-or-group-email-address)
|
|
13
14
|
|
|
14
15
|
## API documentation
|
|
15
16
|
* [Drive API - Permissions](https://developers.google.com/drive/api/v3/reference/permissions)
|
|
@@ -385,3 +386,47 @@ gam config csv_input_row_filter "permission.type:regex:user|group" redirect stdo
|
|
|
385
386
|
gam config csv_input_row_filter "permission.type:regex:domain" redirect stdout ./AddNewDomainACLsDomainShares.txt multiprocess redirect stderr stdout csv ./allUsersFiles.csv gam user "~Owner" create drivefileacl "~id" "~permission.type" "~permission.domain" role "~permission.role" allowfilediscovery "~permission.allowFileDiscovery" mappermissionsdomain olddomain.com newdomain.com
|
|
386
387
|
```
|
|
387
388
|
|
|
389
|
+
## Remove all ACLs for a specific user or group email address
|
|
390
|
+
|
|
391
|
+
### My Drives
|
|
392
|
+
|
|
393
|
+
Get My Drive ACLs sharing to that email address:
|
|
394
|
+
* Replace <Type> with user or group
|
|
395
|
+
* Replace email@domain.com with actual address
|
|
396
|
+
```
|
|
397
|
+
gam config auto_batch_min 1 num_threads 20 redirect csv ./MyDriveShares.csv multiprocess redirect stderr - multiprocess all users print filelist fields id,name,mimetype,basicpermissions query "'email@domain.com' in readers or 'email@domain.com' in writers" pm notrole owner type <Type> emailaddress email@domain.com em pmfilter oneitemperrow
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
Delete those My Drive ACLs.
|
|
401
|
+
```
|
|
402
|
+
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permissions.id~~"
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Add My Drive ACLs with a different email address and the same role.
|
|
406
|
+
```
|
|
407
|
+
gam config num_threads 20 redirect stdout ./AddMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" add drivefleacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Shared Drives
|
|
411
|
+
Get an organizer for each Shared Drive
|
|
412
|
+
```
|
|
413
|
+
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers
|
|
414
|
+
|
|
415
|
+
Get Shared Drive ACLs explicitly sharing to that email address:
|
|
416
|
+
* Replace <Type> with user or group
|
|
417
|
+
* Replace email@domain.com with actual address
|
|
418
|
+
```
|
|
419
|
+
gam config num_threads 20 csv_input_row_filter "organizers:regex:^.+$" redirect csv ./SharedDriveShares.csv multiprocess redirect stderr - multiprocess csv SharedDriveOrganizers.csv gam user "~organizers" print filelist select shareddriveid "~id" fields id,name,mimetype,basicpermissions,driveid showdrivename query "'email@domain.com' in readers or 'email@domain.com' in writers" pm type <Type> emailaddress email@domain.com inherited false em pmfilter oneitemperrow
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
Delete those Shared Drive ACLs.
|
|
423
|
+
```
|
|
424
|
+
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permissions.id~~"
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
Add Shared Drive ACLs with a different email address and the same role.
|
|
428
|
+
```
|
|
429
|
+
gam config num_threads 20 redirect stdout ./ReplaceSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" add drivefleacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Print the current version of Gam with details
|
|
4
4
|
```
|
|
5
5
|
gam version
|
|
6
|
-
GAM 7.
|
|
6
|
+
GAM 7.18.01 - https://github.com/GAM-team/GAM - pyinstaller
|
|
7
7
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
8
8
|
Python 3.13.5 64-bit final
|
|
9
|
-
MacOS Sequoia 15.
|
|
9
|
+
MacOS Sequoia 15.6 x86_64
|
|
10
10
|
Path: /Users/Admin/bin/gam7
|
|
11
11
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
|
12
12
|
Time: 2023-06-02T21:10:00-07:00
|
|
@@ -15,10 +15,10 @@ Time: 2023-06-02T21:10:00-07:00
|
|
|
15
15
|
Print the current version of Gam with details and time offset information
|
|
16
16
|
```
|
|
17
17
|
gam version timeoffset
|
|
18
|
-
GAM 7.
|
|
18
|
+
GAM 7.18.01 - https://github.com/GAM-team/GAM - pyinstaller
|
|
19
19
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
20
20
|
Python 3.13.5 64-bit final
|
|
21
|
-
MacOS Sequoia 15.
|
|
21
|
+
MacOS Sequoia 15.6 x86_64
|
|
22
22
|
Path: /Users/Admin/bin/gam7
|
|
23
23
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
|
24
24
|
Your system time differs from www.googleapis.com by less than 1 second
|
|
@@ -27,10 +27,10 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|
|
27
27
|
Print the current version of Gam with extended details and SSL information
|
|
28
28
|
```
|
|
29
29
|
gam version extended
|
|
30
|
-
GAM 7.
|
|
30
|
+
GAM 7.18.01 - https://github.com/GAM-team/GAM - pyinstaller
|
|
31
31
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
32
32
|
Python 3.13.5 64-bit final
|
|
33
|
-
MacOS Sequoia 15.
|
|
33
|
+
MacOS Sequoia 15.6 x86_64
|
|
34
34
|
Path: /Users/Admin/bin/gam7
|
|
35
35
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
|
36
36
|
Time: 2023-06-02T21:10:00-07:00
|
|
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|
|
64
64
|
Path: /Users/Admin/bin/gam7
|
|
65
65
|
Version Check:
|
|
66
66
|
Current: 5.35.08
|
|
67
|
-
Latest: 7.
|
|
67
|
+
Latest: 7.18.01
|
|
68
68
|
echo $?
|
|
69
69
|
1
|
|
70
70
|
```
|
|
@@ -72,7 +72,7 @@ echo $?
|
|
|
72
72
|
Print the current version number without details
|
|
73
73
|
```
|
|
74
74
|
gam version simple
|
|
75
|
-
7.
|
|
75
|
+
7.18.01
|
|
76
76
|
```
|
|
77
77
|
In Linux/MacOS you can do:
|
|
78
78
|
```
|
|
@@ -82,10 +82,10 @@ echo $VER
|
|
|
82
82
|
Print the current version of Gam and address of this Wiki
|
|
83
83
|
```
|
|
84
84
|
gam help
|
|
85
|
-
GAM 7.
|
|
85
|
+
GAM 7.18.01 - https://github.com/GAM-team/GAM
|
|
86
86
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
87
87
|
Python 3.13.5 64-bit final
|
|
88
|
-
MacOS Sequoia 15.
|
|
88
|
+
MacOS Sequoia 15.6 x86_64
|
|
89
89
|
Path: /Users/Admin/bin/gam7
|
|
90
90
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
|
91
91
|
Time: 2023-06-02T21:10:00-07:00
|