gam7 7.22.2__tar.gz → 7.22.4__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.22.2 → gam7-7.22.4}/.github/workflows/pushwiki.yml +1 -1
- {gam7-7.22.2 → gam7-7.22.4}/PKG-INFO +1 -1
- {gam7-7.22.2 → gam7-7.22.4}/src/GamCommands.txt +4 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/GamUpdate.txt +15 -1
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/__init__.py +131 -80
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GamUpdates.md +8 -2
- {gam7-7.22.2 → gam7-7.22.4}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +1 -1
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Copy-Move.md +2 -7
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Permissions.md +25 -13
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Version-and-Help.md +3 -3
- {gam7-7.22.2 → gam7-7.22.4}/wiki/_Sidebar.md +0 -26
- {gam7-7.22.2 → gam7-7.22.4}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/actions/decrypt.sh +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/actions/entitlements.plist +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/stale.yml +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/workflows/build.yml +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/.github/workflows/pypi.yml +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/LICENSE +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/README.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/pyproject.toml +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/.gitignore +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/LICENSE +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/README.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/callgam.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/__main__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/auth.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/client.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/core.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/data.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/http.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/http_core.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/service.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/token_store.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/atom/url.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/cacerts.pem +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/service.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam-install.sh +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam-setup.bat +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam.exe.manifest +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam.spec +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/gam.wxs +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/license.rtf +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/hooks/hook-httplib2.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/mkGamRef.py +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/openssl.props +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/tools/ssd.mjs +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/src/version_info.txt.in +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/00scratch.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Addresses.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Administrators.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Alert-Center.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Aliases.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Authorization.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Basic-Items.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Business-Account-Management.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Calendars-Access.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Calendars-Events.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Calendars.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chat-Bot-Setup-Use.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Classroom-StudentGroups.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Customer.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Domains-Verification.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Domains.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Drive-Items.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM-Release-Process.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM7-FAQ.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Global-Address-List.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Groups-Membership.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Groups.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Home.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Licenses.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/List-Items.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/List.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Organizational-Units.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Other-Resources.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Permission-Matches.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/README.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Rclone.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Reports.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Reseller.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Resources.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Schemas.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Scripts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Send-Email.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Shared-Drives.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Sites.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Tag-Replace.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Todrive.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Calendars.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Chat.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Contacts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Forms.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Meet.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Photo.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Tasks.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Tokens.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users-YouTube.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Users.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.22.2 → gam7-7.22.4}/wiki/gam.cfg.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-AdminSettingsExamples.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Android-Installation.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-BulkOperations.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-CalendarExamples.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Chat-Bot.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Drive.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Email.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Groups.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Command-Reference-Users.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Custom-Schemas.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Data-Transfers.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-DomainVerification.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-ExamplesCSV.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-ExamplesOrganizations.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM-options-files.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM3CSVListings.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GAM3GroupSettings.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-GoogleDriveManagement.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Home.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-LicenseExamples.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Managing-Admins.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Managing-Devices.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-OAuthKeyManagement.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Printers.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-ResellerCommands.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-SecurityExamples.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.22.2/wiki → gam7-7.22.4/wiki/legacy}/l-_Footer.md +0 -0
|
@@ -565,6 +565,7 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
565
565
|
See: https://support.google.com/mail/answer/7190
|
|
566
566
|
<QueryGroup> ::= <String>
|
|
567
567
|
See: https://developers.google.com/admin-sdk/directory/v1/guides/search-groups
|
|
568
|
+
<QueryItem> ::= <UniqueID>|<String>
|
|
568
569
|
<QueryMemberRestrictions> ::= <String>
|
|
569
570
|
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
|
570
571
|
<QueryMobile> ::= <String>
|
|
@@ -5493,6 +5494,9 @@ gam show vaultexports|exports
|
|
|
5493
5494
|
[fields <VaultExportFieldNameList>] [shownames]
|
|
5494
5495
|
[formatjson]
|
|
5495
5496
|
|
|
5497
|
+
gam create vaulthold|hold matter <MatterItem> [name <String>]
|
|
5498
|
+
vaultquery <QueryItem>
|
|
5499
|
+
[showdetails|returnidonly]
|
|
5496
5500
|
gam create vaulthold|hold matter <MatterItem> [name <String>] corpus calendar|drive|mail|groups|hangouts_chat|voice
|
|
5497
5501
|
[(accounts|groups|users <EmailItemList>) | (orgunit|org|ou <OrgUnit>)]
|
|
5498
5502
|
[query <QueryVaultCorpus>]
|
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
7.22.04
|
|
2
|
+
|
|
3
|
+
Added a variant of `gam create vaulthold` that gets its parameters from a saved Vault query.
|
|
4
|
+
```
|
|
5
|
+
gam create vaulthold matter <MatterItem> [name <String>]
|
|
6
|
+
vaultquery <QueryItem>
|
|
7
|
+
[showdetails|returnidonly]
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
7.22.03
|
|
11
|
+
|
|
12
|
+
Fix backwards compatability bug introduced in 7.22.00 for `gam print users` that changed `suspended`
|
|
13
|
+
from a field name to a query option; it is now correctly interpreted as a field name.
|
|
14
|
+
|
|
1
15
|
7.22.02
|
|
2
16
|
|
|
3
17
|
An update to the httplib2 library caused GAM proxy connections to fail; this has been fixed
|
|
4
|
-
by
|
|
18
|
+
by including the pysocks library needed by the latest httplib2 library.
|
|
5
19
|
|
|
6
20
|
7.22.00
|
|
7
21
|
|
|
@@ -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.22.
|
|
28
|
+
__version__ = '7.22.04'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -18989,10 +18989,10 @@ def doPrintAliases():
|
|
|
18989
18989
|
pass
|
|
18990
18990
|
elif myarg == 'select':
|
|
18991
18991
|
_, users = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS)
|
|
18992
|
-
elif myarg
|
|
18993
|
-
isSuspended =
|
|
18994
|
-
elif myarg
|
|
18995
|
-
isArchived =
|
|
18992
|
+
elif myarg == 'issuspended':
|
|
18993
|
+
isSuspended = getBoolean()
|
|
18994
|
+
elif myarg == 'isarchived':
|
|
18995
|
+
isArchived = getBoolean()
|
|
18996
18996
|
elif myarg in {'user','users'}:
|
|
18997
18997
|
users.extend(convertEntityToList(getString(Cmd.OB_EMAIL_ADDRESS_LIST, minLen=0)))
|
|
18998
18998
|
elif myarg in {'group', 'groups'}:
|
|
@@ -41654,7 +41654,7 @@ def convertQueryNameToID(v, nameOrId, matterId, matterNameId):
|
|
|
41654
41654
|
query = callGAPI(v.matters().savedQueries(), 'get',
|
|
41655
41655
|
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41656
41656
|
matterId=matterId, savedQueryId=cg.group(1))
|
|
41657
|
-
return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']))
|
|
41657
|
+
return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']), query['query'])
|
|
41658
41658
|
except (GAPI.notFound, GAPI.badRequest):
|
|
41659
41659
|
entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, nameOrId])
|
|
41660
41660
|
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
@@ -41663,12 +41663,12 @@ def convertQueryNameToID(v, nameOrId, matterId, matterNameId):
|
|
|
41663
41663
|
try:
|
|
41664
41664
|
queries = callGAPIpages(v.matters().savedQueries(), 'list', 'savedQueries',
|
|
41665
41665
|
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41666
|
-
matterId=matterId, fields='savedQueries(savedQueryId,displayName),nextPageToken')
|
|
41666
|
+
matterId=matterId, fields='savedQueries(savedQueryId,displayName,query),nextPageToken')
|
|
41667
41667
|
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41668
41668
|
ClientAPIAccessDeniedExit(str(e))
|
|
41669
41669
|
for query in queries:
|
|
41670
41670
|
if query['displayName'].lower() == nameOrIdlower:
|
|
41671
|
-
return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']))
|
|
41671
|
+
return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']), query['query'])
|
|
41672
41672
|
entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, nameOrId])
|
|
41673
41673
|
|
|
41674
41674
|
def getMatterItem(v, state=None):
|
|
@@ -41896,7 +41896,8 @@ def _buildVaultQuery(myarg, query, corpusArgumentMap):
|
|
|
41896
41896
|
query.setdefault('mailOptions', {})['clientSideEncryptedOption'] = getChoice(VAULT_CSE_OPTION_MAP, mapChoice=True)
|
|
41897
41897
|
# voice
|
|
41898
41898
|
elif myarg == 'covereddata':
|
|
41899
|
-
query
|
|
41899
|
+
query.setdefault('voiceOptions', {'coveredData': []})
|
|
41900
|
+
query['voiceOptions']['coveredData'].append(getChoice(VAULT_VOICE_COVERED_DATA_MAP, mapChoice=True))
|
|
41900
41901
|
|
|
41901
41902
|
def _validateVaultQuery(body, corpusArgumentMap):
|
|
41902
41903
|
if 'corpus' not in body['query']:
|
|
@@ -41957,7 +41958,8 @@ def doCreateVaultExport():
|
|
|
41957
41958
|
elif myarg == 'includeaccessinfo':
|
|
41958
41959
|
body['exportOptions'].setdefault('driveOptions', {})['includeAccessInfo'] = getBoolean()
|
|
41959
41960
|
elif myarg == 'covereddata':
|
|
41960
|
-
body['exportOptions'].setdefault('voiceOptions', {
|
|
41961
|
+
body['exportOptions'].setdefault('voiceOptions', {'coveredData': []})
|
|
41962
|
+
body['exportOptions']['voiceOptions']['coveredData'].append(getChoice(VAULT_VOICE_COVERED_DATA_MAP, mapChoice=True))
|
|
41961
41963
|
elif myarg == 'showdetails':
|
|
41962
41964
|
showDetails = True
|
|
41963
41965
|
returnIdOnly = False
|
|
@@ -42459,6 +42461,34 @@ def _showVaultHold(matterNameId, hold, cd, FJQC, k=0, kcount=0):
|
|
|
42459
42461
|
showJSON(None, hold, timeObjects=VAULT_HOLD_TIME_OBJECTS)
|
|
42460
42462
|
Ind.Decrement()
|
|
42461
42463
|
|
|
42464
|
+
def _useVaultQuery(v, matterId, matterNameId, body):
|
|
42465
|
+
_, _, _, query = convertQueryNameToID(v, getString(Cmd.OB_QUERY_ITEM), matterId, matterNameId)
|
|
42466
|
+
body['corpus'] = query['corpus']
|
|
42467
|
+
method = query.get('method')
|
|
42468
|
+
if method == 'ACCOUNT':
|
|
42469
|
+
body['accounts'] = []
|
|
42470
|
+
for email in query['accountInfo']['emails']:
|
|
42471
|
+
body['accounts'].append({'email': email})
|
|
42472
|
+
elif method == 'ORG_UNIT':
|
|
42473
|
+
body['orgUnit'] = {'orgUnitId': query['orgUnitInfo']['orgUnitId']}
|
|
42474
|
+
queryType = VAULT_CORPUS_QUERY_MAP[query['corpus']]
|
|
42475
|
+
if queryType is None:
|
|
42476
|
+
return
|
|
42477
|
+
body['query'] = {queryType: {}}
|
|
42478
|
+
if query['corpus'] == 'DRIVE':
|
|
42479
|
+
body['query'][queryType]['includeSharedDriveFiles'] = query['driveOptions'].get('includeSharedDrives', False)
|
|
42480
|
+
elif query['corpus'] in {'GROUPS', 'MAIL'}:
|
|
42481
|
+
if query.get('terms'):
|
|
42482
|
+
body['query'][queryType]['terms'] = query['terms']
|
|
42483
|
+
if query.get('startTime'):
|
|
42484
|
+
body['query'][queryType]['startTime'] = query['startTime']
|
|
42485
|
+
if query.get('endTime'):
|
|
42486
|
+
body['query'][queryType]['endTime'] = query['endTime']
|
|
42487
|
+
elif query['corpus'] == 'HANGOUTS_CHAT':
|
|
42488
|
+
body['query'][queryType]['includeRooms'] = query['hangoutsChatOptions'].get('includeRooms', False)
|
|
42489
|
+
elif query['corpus'] == 'VOICE':
|
|
42490
|
+
body['query'][queryType]['coveredData'] = query['voiceOptions']['coveredData']
|
|
42491
|
+
|
|
42462
42492
|
def _getHoldQueryParameters(myarg, queryParameters):
|
|
42463
42493
|
if myarg == 'query':
|
|
42464
42494
|
queryParameters['queryLocation'] = Cmd.Location()
|
|
@@ -42474,7 +42504,8 @@ def _getHoldQueryParameters(myarg, queryParameters):
|
|
|
42474
42504
|
elif myarg in {'includeshareddrives', 'includeteamdrives'}:
|
|
42475
42505
|
queryParameters['includeSharedDriveFiles'] = getBoolean()
|
|
42476
42506
|
elif myarg == 'covereddata':
|
|
42477
|
-
queryParameters
|
|
42507
|
+
queryParameters.setdefault('coveredData', [])
|
|
42508
|
+
queryParameters['coveredData'].append(getChoice(VAULT_VOICE_COVERED_DATA_MAP, mapChoice=True))
|
|
42478
42509
|
else:
|
|
42479
42510
|
return False
|
|
42480
42511
|
return True
|
|
@@ -42509,7 +42540,11 @@ def _setHoldQuery(body, queryParameters):
|
|
|
42509
42540
|
if queryParameters.get('coveredData'):
|
|
42510
42541
|
body['query'][queryType]['coveredData'] = queryParameters['coveredData']
|
|
42511
42542
|
|
|
42512
|
-
# gam create vaulthold|hold matter <MatterItem> [name <String>]
|
|
42543
|
+
# gam create vaulthold|hold matter <MatterItem> [name <String>]
|
|
42544
|
+
# vaultquery <QueryItem>
|
|
42545
|
+
# [showdetails|returnidonly]
|
|
42546
|
+
# gam create vaulthold|hold matter <MatterItem> [name <String>]
|
|
42547
|
+
# corpus calendar|drive|mail|groups|hangouts_chat|voice
|
|
42513
42548
|
# [(accounts|groups|users <EmailItemList>) | (orgunit|org|ou <OrgUnit>)]
|
|
42514
42549
|
# [query <QueryVaultCorpus>]
|
|
42515
42550
|
# [terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
|
@@ -42523,13 +42558,16 @@ def doCreateVaultHold():
|
|
|
42523
42558
|
matterId = None
|
|
42524
42559
|
accounts = []
|
|
42525
42560
|
queryParameters = {}
|
|
42526
|
-
returnIdOnly = showDetails = False
|
|
42561
|
+
returnIdOnly = showDetails = usedVaultQuery = False
|
|
42527
42562
|
while Cmd.ArgumentsRemaining():
|
|
42528
42563
|
myarg = getArgument()
|
|
42529
42564
|
if myarg == 'matter':
|
|
42530
42565
|
matterId, matterNameId = getMatterItem(v)
|
|
42531
42566
|
elif myarg == 'name':
|
|
42532
42567
|
body['name'] = getString(Cmd.OB_STRING)
|
|
42568
|
+
elif matterId is not None and myarg == 'vaultquery':
|
|
42569
|
+
_useVaultQuery(v, matterId, matterNameId, body)
|
|
42570
|
+
usedVaultQuery = True
|
|
42533
42571
|
elif myarg == 'corpus':
|
|
42534
42572
|
body['corpus'] = getChoice(VAULT_CORPUS_ARGUMENT_MAP, mapChoice=True)
|
|
42535
42573
|
elif myarg in {'accounts', 'users', 'groups'}:
|
|
@@ -42553,7 +42591,8 @@ def doCreateVaultHold():
|
|
|
42553
42591
|
missingArgumentExit(f'corpus {"|".join(VAULT_CORPUS_ARGUMENT_MAP)}')
|
|
42554
42592
|
if 'name' not in body:
|
|
42555
42593
|
body['name'] = f'GAM {body["corpus"]} Hold - {ISOformatTimeStamp(todaysTime())}'
|
|
42556
|
-
|
|
42594
|
+
if not usedVaultQuery:
|
|
42595
|
+
_setHoldQuery(body, queryParameters)
|
|
42557
42596
|
if accounts:
|
|
42558
42597
|
body['accounts'] = []
|
|
42559
42598
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
@@ -43006,7 +43045,7 @@ def doInfoVaultQuery():
|
|
|
43006
43045
|
v = buildGAPIObject(API.VAULT)
|
|
43007
43046
|
if not Cmd.ArgumentIsAhead('matter'):
|
|
43008
43047
|
matterId, matterNameId = getMatterItem(v)
|
|
43009
|
-
queryId, queryName, queryNameId = convertQueryNameToID(v, getString(Cmd.OB_QUERY_ITEM), matterId, matterNameId)
|
|
43048
|
+
queryId, queryName, queryNameId, _ = convertQueryNameToID(v, getString(Cmd.OB_QUERY_ITEM), matterId, matterNameId)
|
|
43010
43049
|
else:
|
|
43011
43050
|
queryName = getString(Cmd.OB_QUERY_ITEM)
|
|
43012
43051
|
cd = drive = None
|
|
@@ -43016,7 +43055,7 @@ def doInfoVaultQuery():
|
|
|
43016
43055
|
myarg = getArgument()
|
|
43017
43056
|
if myarg == 'matter':
|
|
43018
43057
|
matterId, matterNameId = getMatterItem(v)
|
|
43019
|
-
queryId, queryName, queryNameId = convertQueryNameToID(v, queryName, matterId, matterNameId)
|
|
43058
|
+
queryId, queryName, queryNameId, _ = convertQueryNameToID(v, queryName, matterId, matterNameId)
|
|
43020
43059
|
elif myarg == 'shownames':
|
|
43021
43060
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
43022
43061
|
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
@@ -45754,71 +45793,81 @@ def doPrintUsers(entityList=None):
|
|
|
45754
45793
|
csvPF.WriteRowNoFilter(row)
|
|
45755
45794
|
|
|
45756
45795
|
def _printUser(userEntity, i, count):
|
|
45757
|
-
if isSuspended is None
|
|
45758
|
-
|
|
45759
|
-
|
|
45760
|
-
|
|
45761
|
-
|
|
45762
|
-
|
|
45763
|
-
|
|
45764
|
-
|
|
45765
|
-
|
|
45766
|
-
|
|
45767
|
-
|
|
45768
|
-
|
|
45769
|
-
|
|
45770
|
-
|
|
45771
|
-
|
|
45772
|
-
|
|
45773
|
-
|
|
45774
|
-
|
|
45775
|
-
|
|
45776
|
-
|
|
45777
|
-
|
|
45778
|
-
|
|
45779
|
-
|
|
45780
|
-
|
|
45781
|
-
|
|
45782
|
-
|
|
45783
|
-
|
|
45784
|
-
|
|
45785
|
-
|
|
45786
|
-
|
|
45787
|
-
|
|
45788
|
-
|
|
45789
|
-
|
|
45790
|
-
|
|
45791
|
-
|
|
45792
|
-
|
|
45793
|
-
|
|
45794
|
-
|
|
45795
|
-
|
|
45796
|
-
|
|
45797
|
-
if aliasMatchPattern and 'aliases' in userEntity:
|
|
45798
|
-
userEntity['aliases'] = [alias for alias in userEntity['aliases'] if aliasMatchPattern.match(alias)]
|
|
45799
|
-
if printOptions['getLicenseFeed'] or printOptions['getLicenseFeedByUser']:
|
|
45800
|
-
if printOptions['getLicenseFeed']:
|
|
45801
|
-
u_licenses = licenses.get(userEmail.lower(), [])
|
|
45796
|
+
if (isSuspended is None and isArchived is None):
|
|
45797
|
+
showUser = True
|
|
45798
|
+
elif (isSuspended is not None and isArchived is None):
|
|
45799
|
+
showUser = isSuspended == userEntity.get('suspended', isSuspended)
|
|
45800
|
+
elif (isSuspended is None and isArchived is not None):
|
|
45801
|
+
showUser = isArchived == userEntity.get('archived', isArchived)
|
|
45802
|
+
else:
|
|
45803
|
+
showUser = ((isSuspended == userEntity.get('suspended', isSuspended)) or
|
|
45804
|
+
(isArchived == userEntity.get('archived', isArchived)))
|
|
45805
|
+
if not showUser:
|
|
45806
|
+
return
|
|
45807
|
+
if showValidColumn:
|
|
45808
|
+
userEntity[showValidColumn] = True
|
|
45809
|
+
userEmail = userEntity['primaryEmail']
|
|
45810
|
+
if printOptions['emailParts']:
|
|
45811
|
+
if userEmail.find('@') != -1:
|
|
45812
|
+
userEntity['primaryEmailLocal'], userEntity['primaryEmailDomain'] = splitEmailAddress(userEmail)
|
|
45813
|
+
if 'languages' in userEntity and not FJQC.formatJSON:
|
|
45814
|
+
userEntity['languages'] = _formatLanguagesList(userEntity.pop('languages'), delimiter)
|
|
45815
|
+
for location in userEntity.get('locations', []):
|
|
45816
|
+
location['buildingName'] = _getBuildingNameById(cd, location.get('buildingId', ''))
|
|
45817
|
+
if quotePlusPhoneNumbers:
|
|
45818
|
+
for phone in userEntity.get('phones', []):
|
|
45819
|
+
phoneNumber = phone.get('value', '')
|
|
45820
|
+
if phoneNumber.startswith('+'):
|
|
45821
|
+
phone['value'] = "'"+phoneNumber
|
|
45822
|
+
if schemaParms['selectedSchemaFields']:
|
|
45823
|
+
_filterSchemaFields(userEntity, schemaParms)
|
|
45824
|
+
if printOptions['getGroupFeed']:
|
|
45825
|
+
printGettingAllEntityItemsForWhom(Ent.GROUP_MEMBERSHIP, userEmail, i, count)
|
|
45826
|
+
try:
|
|
45827
|
+
groups = callGAPIpages(cd.groups(), 'list', 'groups',
|
|
45828
|
+
pageMessage=getPageMessageForWhom(),
|
|
45829
|
+
throwReasons=GAPI.GROUP_LIST_USERKEY_THROW_REASONS,
|
|
45830
|
+
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
45831
|
+
userKey=userEmail, orderBy='email', fields='nextPageToken,groups(email)')
|
|
45832
|
+
numGroups = len(groups)
|
|
45833
|
+
if not printOptions['groupsInColumns']:
|
|
45834
|
+
userEntity['GroupsCount'] = numGroups
|
|
45835
|
+
userEntity['Groups'] = delimiter.join([groupname['email'] for groupname in groups])
|
|
45802
45836
|
else:
|
|
45803
|
-
|
|
45804
|
-
|
|
45805
|
-
userEntity['
|
|
45806
|
-
|
|
45807
|
-
userEntity['
|
|
45808
|
-
|
|
45837
|
+
if numGroups > printOptions['maxGroups']:
|
|
45838
|
+
printOptions['maxGroups'] = numGroups
|
|
45839
|
+
userEntity['Groups'] = numGroups
|
|
45840
|
+
for j, group in enumerate(groups):
|
|
45841
|
+
userEntity[f'Groups{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{j}'] = group['email']
|
|
45842
|
+
except (GAPI.invalidMember, GAPI.invalidInput):
|
|
45843
|
+
badRequestWarning(Ent.GROUP, Ent.MEMBER, userEmail)
|
|
45844
|
+
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.forbidden, GAPI.badRequest):
|
|
45845
|
+
accessErrorExit(cd)
|
|
45846
|
+
if aliasMatchPattern and 'aliases' in userEntity:
|
|
45847
|
+
userEntity['aliases'] = [alias for alias in userEntity['aliases'] if aliasMatchPattern.match(alias)]
|
|
45848
|
+
if printOptions['getLicenseFeed'] or printOptions['getLicenseFeedByUser']:
|
|
45849
|
+
if printOptions['getLicenseFeed']:
|
|
45850
|
+
u_licenses = licenses.get(userEmail.lower(), [])
|
|
45809
45851
|
else:
|
|
45810
|
-
u_licenses =
|
|
45852
|
+
u_licenses = getUserLicenses(lic, userEntity, skus)
|
|
45811
45853
|
if not oneLicensePerRow:
|
|
45812
|
-
|
|
45813
|
-
else:
|
|
45854
|
+
userEntity['LicensesCount'] = len(u_licenses)
|
|
45814
45855
|
if u_licenses:
|
|
45815
|
-
|
|
45816
|
-
|
|
45817
|
-
|
|
45818
|
-
|
|
45819
|
-
|
|
45820
|
-
|
|
45856
|
+
userEntity['Licenses'] = delimiter.join(u_licenses)
|
|
45857
|
+
userEntity['LicensesDisplay'] = delimiter.join([SKU.skuIdToDisplayName(skuId) for skuId in u_licenses])
|
|
45858
|
+
else:
|
|
45859
|
+
u_licenses = []
|
|
45860
|
+
if not oneLicensePerRow:
|
|
45861
|
+
_writeUserEntity(userEntity)
|
|
45862
|
+
else:
|
|
45863
|
+
if u_licenses:
|
|
45864
|
+
for skuId in u_licenses:
|
|
45865
|
+
userEntity['License'] = skuId
|
|
45866
|
+
userEntity['LicenseDisplay'] = SKU.skuIdToDisplayName(skuId)
|
|
45821
45867
|
_writeUserEntity(userEntity)
|
|
45868
|
+
else:
|
|
45869
|
+
userEntity['License'] = userEntity['LicenseDisplay'] = ''
|
|
45870
|
+
_writeUserEntity(userEntity)
|
|
45822
45871
|
|
|
45823
45872
|
def _updateDomainCounts(emailAddress):
|
|
45824
45873
|
nonlocal domainCounts
|
|
@@ -45911,10 +45960,10 @@ def doPrintUsers(entityList=None):
|
|
|
45911
45960
|
showDeleted = True
|
|
45912
45961
|
elif entityList is None and myarg == 'select':
|
|
45913
45962
|
_, entityList = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS)
|
|
45914
|
-
elif myarg
|
|
45915
|
-
isSuspended =
|
|
45916
|
-
elif myarg
|
|
45917
|
-
isArchived =
|
|
45963
|
+
elif myarg == 'issuspended':
|
|
45964
|
+
isSuspended = getBoolean()
|
|
45965
|
+
elif myarg == 'isarchived':
|
|
45966
|
+
isArchived = getBoolean()
|
|
45918
45967
|
elif myarg == 'orderby':
|
|
45919
45968
|
orderBy, sortOrder = getOrderBySortOrder(USERS_ORDERBY_CHOICE_MAP)
|
|
45920
45969
|
elif myarg == 'userview':
|
|
@@ -46092,6 +46141,8 @@ def doPrintUsers(entityList=None):
|
|
|
46092
46141
|
# If no individual fields were specified (allfields, basic, full) or individual fields other than primaryEmail were specified, look up each user
|
|
46093
46142
|
if isSuspended is not None and fieldsList:
|
|
46094
46143
|
fieldsList.append('suspended')
|
|
46144
|
+
if isArchived is not None and fieldsList:
|
|
46145
|
+
fieldsList.append('archived')
|
|
46095
46146
|
if projectionSet or len(set(fieldsList)) > 1 or showValidColumn:
|
|
46096
46147
|
jcount = len(entityList)
|
|
46097
46148
|
fields = getFieldsFromFieldsList(fieldsList)
|
|
@@ -10,9 +10,15 @@ 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.22.
|
|
13
|
+
### 7.22.03
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Fix backwards compatability bug introduced in 7.22.00 for `gam print users` that changed `suspended`
|
|
16
|
+
from a field name to a query option; it is now correctly interpreted as a field name.
|
|
17
|
+
|
|
18
|
+
### 7.22.02
|
|
19
|
+
|
|
20
|
+
An update to the httplib2 library caused GAM proxy connections to fail; this has been fixed
|
|
21
|
+
by including the pysocks library needed by the latest httplib2 library.
|
|
16
22
|
|
|
17
23
|
### 7.22.00
|
|
18
24
|
|
|
@@ -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.22.
|
|
255
|
+
GAM 7.22.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
|
|
@@ -570,17 +570,12 @@ gam config auto_batch_min 1 csv_output_row_filter "owners.0.emailAddress:notrege
|
|
|
570
570
|
### Multiple parents
|
|
571
571
|
No existing parents are copied for source top/sub files/folders.
|
|
572
572
|
|
|
573
|
-
### Removed options
|
|
574
|
-
The following options will generate an error; they were removed in 6.23.00:
|
|
575
|
-
* `copysubfileparents` and `copysubfolderparents`.
|
|
576
|
-
|
|
577
573
|
### Move Folder Permissions
|
|
578
|
-
When a folder is moved by recreating it, its permissions are not copied; these options control copying permissions for folders.
|
|
574
|
+
When a folder is moved by recreating it, its permissions are not copied by the Drive API; these options control copying permissions for folders.
|
|
579
575
|
|
|
580
576
|
For options of the form `option [<Boolean>]`; if `<Boolean>` is omitted, `true` is assumed.
|
|
581
577
|
|
|
582
578
|
When recreated, a target folder inherits the permissions of its parent folder; these options control whether/how GAM copies the existing source folder permissions;
|
|
583
|
-
The default values of options introduced in version 6.14.00 are set to match the behavior of earlier versions.
|
|
584
579
|
|
|
585
580
|
When `mergewithparent` is `true`:
|
|
586
581
|
* `copymergewithparentfolderpermissions false` - The permissions of the source top folder are not not copied to the target folder; this is the default action.
|
|
@@ -594,7 +589,7 @@ When `duplicatefolders` is `merge` and a sub folder is a duplicate:
|
|
|
594
589
|
* `copymergedsubfolderpermissions false` - The permissions of the source sub folder are not not copied to the target folder.
|
|
595
590
|
* `copymergedsubfolderpermissions true` - The permissions of the source sub folder are copied to the target folder; this is the default action.
|
|
596
591
|
|
|
597
|
-
When `duplicatefolders` is `duplicatename` or `uniquename` and a top/sub folder is not a duplicate:
|
|
592
|
+
When `duplicatefolders` is `merge` or `duplicatename` or `uniquename` and a top/sub folder is not a duplicate:
|
|
598
593
|
* `copytopfolderpermissions true` - The permissions of the source top folder are copied to the target folder; this is the default action.
|
|
599
594
|
* `copytopfolderpermissions false` - The permissions of the source top folder are not not copied to the target folder.
|
|
600
595
|
* `copysubfolderpermissions true` - The permissions of the source sub folders are copied to the target folder; this is the default action.
|
|
@@ -424,12 +424,12 @@ gam config auto_batch_min 1 num_threads 20 redirect csv ./MyDriveShares.csv mult
|
|
|
424
424
|
|
|
425
425
|
Delete those My Drive ACLs.
|
|
426
426
|
```
|
|
427
|
-
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete
|
|
427
|
+
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
428
428
|
```
|
|
429
429
|
|
|
430
430
|
Add My Drive ACLs with a different email address and the same role.
|
|
431
431
|
```
|
|
432
|
-
gam config num_threads 20 redirect stdout ./AddMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" add
|
|
432
|
+
gam config num_threads 20 redirect stdout ./AddMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" add drivefileacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
|
433
433
|
```
|
|
434
434
|
|
|
435
435
|
### Shared Drives
|
|
@@ -447,12 +447,12 @@ gam config num_threads 20 csv_input_row_filter "organizers:regex:^.+$" redirect
|
|
|
447
447
|
|
|
448
448
|
Delete those Shared Drive ACLs.
|
|
449
449
|
```
|
|
450
|
-
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete
|
|
450
|
+
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
451
451
|
```
|
|
452
452
|
|
|
453
453
|
Add Shared Drive ACLs with a different email address and the same role.
|
|
454
454
|
```
|
|
455
|
-
gam config num_threads 20 redirect stdout ./ReplaceSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" add
|
|
455
|
+
gam config num_threads 20 redirect stdout ./ReplaceSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" add drivefileacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
|
456
456
|
```
|
|
457
457
|
|
|
458
458
|
## Remove ACLs for all users-groups in external domains
|
|
@@ -469,18 +469,22 @@ Replace `<Types>` as required:
|
|
|
469
469
|
Replace `<Domains>` with specification of external domain(s)
|
|
470
470
|
* `domain domain.com` - A single external domain
|
|
471
471
|
* `domainlist domain1.com,domain2.com,domain3.com...` - A list of external domains
|
|
472
|
+
|
|
473
|
+
If you want domains other than your internal domain(s)
|
|
474
|
+
* `notdomain domain.com` - A single internal domain
|
|
475
|
+
* `notdomainlist domain1.com,domain2.com,domain3.com...` - A list of internal domains
|
|
472
476
|
```
|
|
473
477
|
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 pm notrole owner <Types> <Domains> em pmfilter oneitemperrow
|
|
474
478
|
```
|
|
475
479
|
|
|
476
480
|
Delete those My Drive ACLs.
|
|
477
481
|
```
|
|
478
|
-
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete
|
|
482
|
+
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
479
483
|
```
|
|
480
484
|
|
|
481
485
|
Add My Drive ACLs with a different email address and the same role.
|
|
482
486
|
```
|
|
483
|
-
gam config num_threads 20 redirect stdout ./AddMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" add
|
|
487
|
+
gam config num_threads 20 redirect stdout ./AddMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" add drivefileacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
|
484
488
|
```
|
|
485
489
|
|
|
486
490
|
### Shared Drives
|
|
@@ -499,18 +503,22 @@ Replace `<Types>` as required:
|
|
|
499
503
|
Replace `<Domains>` with specification of external domain(s)
|
|
500
504
|
* `domain domain.com` - A single external domain
|
|
501
505
|
* `domainlist domain1.com,domain2.com,domain3.com...` - A list of external domains
|
|
506
|
+
|
|
507
|
+
If you want domains other than your internal domain(s)
|
|
508
|
+
* `notdomain domain.com` - A single internal domain
|
|
509
|
+
* `notdomainlist domain1.com,domain2.com,domain3.com...` - A list of internal domains
|
|
502
510
|
```
|
|
503
511
|
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 pm <Types> <Domains> inherited false em pmfilter oneitemperrow
|
|
504
512
|
```
|
|
505
513
|
|
|
506
514
|
Delete those Shared Drive ACLs.
|
|
507
515
|
```
|
|
508
|
-
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete
|
|
516
|
+
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
509
517
|
```
|
|
510
518
|
|
|
511
519
|
Add Shared Drive ACLs with a different email address and the same role.
|
|
512
520
|
```
|
|
513
|
-
gam config num_threads 20 redirect stdout ./ReplaceSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" add
|
|
521
|
+
gam config num_threads 20 redirect stdout ./ReplaceSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" add drivefileacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
|
514
522
|
```
|
|
515
523
|
|
|
516
524
|
## Remove domainCanFind-domainWithLink ACLs for internal domain
|
|
@@ -529,7 +537,7 @@ gam config auto_batch_min 1 num_threads 20 redirect csv ./MyDriveShares.csv mult
|
|
|
529
537
|
|
|
530
538
|
Delete those My Drive ACLs.
|
|
531
539
|
```
|
|
532
|
-
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete
|
|
540
|
+
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
533
541
|
```
|
|
534
542
|
|
|
535
543
|
### Shared Drives
|
|
@@ -546,7 +554,7 @@ gam config num_threads 20 csv_input_row_filter "organizers:regex:^.+$" redirect
|
|
|
546
554
|
|
|
547
555
|
Delete those Shared Drive ACLs.
|
|
548
556
|
```
|
|
549
|
-
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete
|
|
557
|
+
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
550
558
|
```
|
|
551
559
|
|
|
552
560
|
## Remove My Drive ACLs for external domains
|
|
@@ -558,13 +566,17 @@ Get My Drive ACLs sharing to external domain(s)
|
|
|
558
566
|
Replace `<Domains>` with specification of external domain(s)
|
|
559
567
|
* `domain domain.com` - A single external domain
|
|
560
568
|
* `domainlist domain1.com,domain2.com,domain3.com...` - A list of external domains
|
|
569
|
+
|
|
570
|
+
If you want domains other than your internal domain(s)
|
|
571
|
+
* `notdomain domain.com` - A single internal domain
|
|
572
|
+
* `notdomainlist domain1.com,domain2.com,domain3.com...` - A list of internal domains
|
|
561
573
|
```
|
|
562
574
|
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 pm type domain <Domains> em pmfilter oneitemperrow
|
|
563
575
|
```
|
|
564
576
|
|
|
565
577
|
Delete those My Drive ACLs.
|
|
566
578
|
```
|
|
567
|
-
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete
|
|
579
|
+
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
568
580
|
```
|
|
569
581
|
|
|
570
582
|
## Remove anyoneCanFind-anyoneWithLink ACLs
|
|
@@ -583,7 +595,7 @@ gam config auto_batch_min 1 num_threads 20 redirect csv ./MyDriveShares.csv mult
|
|
|
583
595
|
|
|
584
596
|
Delete those My Drive ACLs.
|
|
585
597
|
```
|
|
586
|
-
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete
|
|
598
|
+
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
587
599
|
```
|
|
588
600
|
|
|
589
601
|
### Shared Drives
|
|
@@ -599,5 +611,5 @@ gam config num_threads 20 csv_input_row_filter "organizers:regex:^.+$" redirect
|
|
|
599
611
|
|
|
600
612
|
Delete those Shared Drive ACLs.
|
|
601
613
|
```
|
|
602
|
-
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete
|
|
614
|
+
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
|
603
615
|
```
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Print the current version of Gam with details
|
|
4
4
|
```
|
|
5
5
|
gam version
|
|
6
|
-
GAM 7.22.
|
|
6
|
+
GAM 7.22.03 - https://github.com/GAM-team/GAM - pyinstaller
|
|
7
7
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
8
8
|
Python 3.13.7 64-bit final
|
|
9
9
|
macOS Sequoia 15.7 x86_64
|
|
@@ -15,7 +15,7 @@ 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.22.
|
|
18
|
+
GAM 7.22.03 - https://github.com/GAM-team/GAM - pyinstaller
|
|
19
19
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
20
20
|
Python 3.13.7 64-bit final
|
|
21
21
|
macOS Sequoia 15.7 x86_64
|
|
@@ -27,7 +27,7 @@ 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.22.
|
|
30
|
+
GAM 7.22.03 - https://github.com/GAM-team/GAM - pyinstaller
|
|
31
31
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
32
32
|
Python 3.13.7 64-bit final
|
|
33
33
|
macOS Sequoia 15.7 x86_64
|