mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-07 07:41:38 +00:00
Compare commits
271 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0082a5a0b9 | ||
|
|
9971cdbfb3 | ||
|
|
837bb9f84f | ||
|
|
805b196532 | ||
|
|
a23238f97f | ||
|
|
e88e2f0d7f | ||
|
|
13ed3fe80c | ||
|
|
37bfcc1251 | ||
|
|
cb7e70ce31 | ||
|
|
25006765de | ||
|
|
594164944e | ||
|
|
56ed6e8a81 | ||
|
|
159184be73 | ||
|
|
51f4f3c401 | ||
|
|
320d5425c1 | ||
|
|
6d9839a328 | ||
|
|
1002f71d32 | ||
|
|
101a01cef0 | ||
|
|
45230860f6 | ||
|
|
ef1018f286 | ||
|
|
63c0c58bf6 | ||
|
|
aa443ae6cb | ||
|
|
dbec314359 | ||
|
|
8270f0a82a | ||
|
|
2a4cd66227 | ||
|
|
a87ff9effc | ||
|
|
df793c2bbb | ||
|
|
3bc32da275 | ||
|
|
ce7e506c29 | ||
|
|
a9d8ac27d3 | ||
|
|
58912ae7ac | ||
|
|
f882439cbd | ||
|
|
56bc52aa28 | ||
|
|
416125abac | ||
|
|
904292ded3 | ||
|
|
5f55bcc812 | ||
|
|
b35de53f5d | ||
|
|
3c34948678 | ||
|
|
0be73db60b | ||
|
|
5b57b51384 | ||
|
|
139896ec3b | ||
|
|
9b52c0bf18 | ||
|
|
b9c9b59f7b | ||
|
|
0e0877e084 | ||
|
|
bdce13e97b | ||
|
|
9c4a17e12c | ||
|
|
a64f4d4a46 | ||
|
|
c396a3b901 | ||
|
|
78453a15af | ||
|
|
a0282ba775 | ||
|
|
7b708bfeea | ||
|
|
fedb49ca9d | ||
|
|
87b4917fb0 | ||
|
|
5a9486c08a | ||
|
|
e7074cb0bc | ||
|
|
f894e5ffd7 | ||
|
|
5d1379e830 | ||
|
|
aa1b373245 | ||
|
|
1bed2383ff | ||
|
|
332d6c0761 | ||
|
|
597bbe2db9 | ||
|
|
fcb50e1e93 | ||
|
|
048d88c7a0 | ||
|
|
bd4208607b | ||
|
|
7b510075e6 | ||
|
|
882d7b5833 | ||
|
|
d4f5495909 | ||
|
|
b132e789f7 | ||
|
|
701824d984 | ||
|
|
4c63de65a5 | ||
|
|
d1d1040ec3 | ||
|
|
fe4268230e | ||
|
|
bda51867c8 | ||
|
|
a913c8f128 | ||
|
|
89ac556933 | ||
|
|
48c23c2f98 | ||
|
|
3f2a261a99 | ||
|
|
beb76c5879 | ||
|
|
bd22dc1b8b | ||
|
|
2258cd69a5 | ||
|
|
a523f9c0f7 | ||
|
|
ea41cf52de | ||
|
|
aec92f19ae | ||
|
|
df99e6ea8e | ||
|
|
d16166ffac | ||
|
|
1bd75c31ae | ||
|
|
8830da9908 | ||
|
|
fdc6c34c91 | ||
|
|
c6be86946e | ||
|
|
920c9a344a | ||
|
|
ec9f3b9e79 | ||
|
|
326e83a05d | ||
|
|
61c2b06021 | ||
|
|
60093404c1 | ||
|
|
228d3bba95 | ||
|
|
9f5dfc1a0a | ||
|
|
2b5c4561d1 | ||
|
|
4bdce171af | ||
|
|
1f68c8db00 | ||
|
|
963cbebba0 | ||
|
|
c0edbfe596 | ||
|
|
47617c2823 | ||
|
|
11e0f1c760 | ||
|
|
6c4b481eb1 | ||
|
|
c0cbddc93d | ||
|
|
b50d92404f | ||
|
|
19408f8f4c | ||
|
|
0dd8e099c5 | ||
|
|
5738cf5435 | ||
|
|
0739bdc642 | ||
|
|
ddd1924c2c | ||
|
|
a6fb1d7c0f | ||
|
|
6aeed76e70 | ||
|
|
83f94c8122 | ||
|
|
056f23c6cb | ||
|
|
7b1619f95d | ||
|
|
fe4ea3fe41 | ||
|
|
f5edd6bf81 | ||
|
|
7340557a8c | ||
|
|
66ec9d0d4b | ||
|
|
cc6ccd1338 | ||
|
|
25c167ee0a | ||
|
|
f620850a58 | ||
|
|
73ad3cc3e5 | ||
|
|
b03083cb09 | ||
|
|
6642e23e81 | ||
|
|
a237272440 | ||
|
|
d3ac277523 | ||
|
|
e21ff2bec2 | ||
|
|
369df07748 | ||
|
|
b218abaae7 | ||
|
|
967898fa86 | ||
|
|
80570f2fda | ||
|
|
6437547e33 | ||
|
|
f87f000be2 | ||
|
|
08f6f86d10 | ||
|
|
e70bfca92a | ||
|
|
2be5d40f44 | ||
|
|
170e188f1f | ||
|
|
60d6188769 | ||
|
|
626eb1eadc | ||
|
|
db40ada5d0 | ||
|
|
ba8c27339e | ||
|
|
822488dce5 | ||
|
|
bbd76ec23f | ||
|
|
e2a6f8badf | ||
|
|
2462aa7dcb | ||
|
|
d7a0da6e52 | ||
|
|
9922ed4994 | ||
|
|
3a0c52d8eb | ||
|
|
f3e7c46561 | ||
|
|
b42c916516 | ||
|
|
4fd7172f7a | ||
|
|
e670cf3e6a | ||
|
|
e305cc0789 | ||
|
|
d7b9d43c63 | ||
|
|
75e3ae8144 | ||
|
|
130a483e4d | ||
|
|
cbd04bcec4 | ||
|
|
a51b245015 | ||
|
|
64356a9736 | ||
|
|
c18375abb7 | ||
|
|
c9c0cac57e | ||
|
|
8ca3717f97 | ||
|
|
cd0d82e994 | ||
|
|
f29f27577c | ||
|
|
cb5e5d1943 | ||
|
|
88bdfd2883 | ||
|
|
e875acf428 | ||
|
|
5d213e9951 | ||
|
|
35d61da0a0 | ||
|
|
da04ead86d | ||
|
|
5526c987ea | ||
|
|
d9795b3f83 | ||
|
|
39a17bacb1 | ||
|
|
af94ea6e54 | ||
|
|
c220f41cbe | ||
|
|
8a32e53652 | ||
|
|
372f86a79a | ||
|
|
7f307254bf | ||
|
|
2ae7b4a4b5 | ||
|
|
6dde273ee9 | ||
|
|
b66f6f60fe | ||
|
|
01fcefc647 | ||
|
|
a59e3008c5 | ||
|
|
eb82da4ff2 | ||
|
|
c4aa399446 | ||
|
|
f1713ec685 | ||
|
|
74924c9c0e | ||
|
|
8d3b65f5f1 | ||
|
|
260f2d3f5c | ||
|
|
475275add7 | ||
|
|
d71832096a | ||
|
|
f12d3abfc1 | ||
|
|
474aa069b7 | ||
|
|
c49708cbae | ||
|
|
43ecba07bb | ||
|
|
51f8ebe8e2 | ||
|
|
28edce3aca | ||
|
|
fe1f0285f8 | ||
|
|
da83121d0d | ||
|
|
f58a69e374 | ||
|
|
2f40a164c5 | ||
|
|
58a3fa7313 | ||
|
|
39ce5b7349 | ||
|
|
860d44d819 | ||
|
|
5e90ff143e | ||
|
|
28e05bf09a | ||
|
|
0781e27993 | ||
|
|
a441dddc06 | ||
|
|
4a42581e00 | ||
|
|
de2bfb0d52 | ||
|
|
f418287e65 | ||
|
|
fccf6c1278 | ||
|
|
ee874858b4 | ||
|
|
dde1354bd0 | ||
|
|
c241c2744f | ||
|
|
5ee1fa1b61 | ||
|
|
f06944a1fa | ||
|
|
27d4c37be3 | ||
|
|
2f1a7eb347 | ||
|
|
a5818e144d | ||
|
|
4e6f1717fb | ||
|
|
9d347719c7 | ||
|
|
7235022a8e | ||
|
|
5db5dad576 | ||
|
|
72a6651a9f | ||
|
|
47f6dfc730 | ||
|
|
9e6c6138f8 | ||
|
|
c4ec856a58 | ||
|
|
2a32f6d2e4 | ||
|
|
afc6af68a4 | ||
|
|
80ec0a739b | ||
|
|
7a08fb0518 | ||
|
|
3006d8dfe4 | ||
|
|
f9ed16e2e3 | ||
|
|
9999adfb3a | ||
|
|
f09a1e1bd6 | ||
|
|
a95da4e2ea | ||
|
|
fce8704f87 | ||
|
|
4d3b72900b | ||
|
|
fd81d56675 | ||
|
|
762d8479a4 | ||
|
|
6f19ec4f8c | ||
|
|
8af3bc60e6 | ||
|
|
e636a69431 | ||
|
|
673460e91d | ||
|
|
9862ad446f | ||
|
|
67f21ce650 | ||
|
|
e82baccbac | ||
|
|
c51b06a6c3 | ||
|
|
b7415cd63f | ||
|
|
f0f5803698 | ||
|
|
575fdea526 | ||
|
|
f8ee94bad8 | ||
|
|
4b6c8fb518 | ||
|
|
4f8c80dcab | ||
|
|
12f5c5e670 | ||
|
|
a1216b6782 | ||
|
|
05f4795bc3 | ||
|
|
e1ff1ba378 | ||
|
|
5b2804643e | ||
|
|
3925166987 | ||
|
|
5dece6c719 | ||
|
|
b48d316bd9 | ||
|
|
1f2b33b805 | ||
|
|
a6773901c9 | ||
|
|
840784fa98 | ||
|
|
aecb17b9fe | ||
|
|
2d90c75f03 | ||
|
|
cd8691b438 |
23
.github/workflows/build.yml
vendored
23
.github/workflows/build.yml
vendored
@@ -126,7 +126,7 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
cache.tar.xz
|
||||
key: gam-${{ matrix.jid }}-20250422
|
||||
key: gam-${{ matrix.jid }}-20250805
|
||||
|
||||
- name: Untar Cache archive
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||
@@ -292,10 +292,10 @@ jobs:
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cd "${OPENSSL_SOURCE_PATH}"
|
||||
if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
||||
#if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
||||
# https://github.com/openssl/openssl/issues/26239
|
||||
export CFLAGS=-DNO_INTERLOCKEDOR64
|
||||
fi
|
||||
#fi
|
||||
# --libdir=lib is needed so Python can find OpenSSL libraries
|
||||
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
||||
|
||||
@@ -449,7 +449,7 @@ jobs:
|
||||
"$PYTHON" get-pip.py
|
||||
"$PYTHON" -m pip install --upgrade pip
|
||||
"$PYTHON" -m pip install --upgrade wheel
|
||||
"$PYTHON" -m pip install --upgrade setuptools
|
||||
"$PYTHON" -m pip install setuptools
|
||||
"$PYTHON" -m pip install --upgrade importlib-metadata
|
||||
"$PYTHON" -m pip install --upgrade setuptools-scm
|
||||
"$PYTHON" -m pip list
|
||||
@@ -457,16 +457,12 @@ jobs:
|
||||
- name: Custom wheels for Win arm64
|
||||
if: runner.os == 'Windows' && runner.arch == 'ARM64'
|
||||
run: |
|
||||
latest_lxml_whl=$(curl https://api.github.com/repos/GAM-team/lxml-wheel/releases/latest -s | jq -r .assets.[0].browser_download_url)
|
||||
echo "Downloading ${latest_lxml_whl}..."
|
||||
curl -O -L "$latest_lxml_whl"
|
||||
"$PYTHON" -m pip install lxml*.whl
|
||||
latest_crypt_whl=$(curl https://api.github.com/repos/jay0lee/cryptography/releases/latest -s | jq -r .assets.[0].browser_download_url)
|
||||
echo "Downloading ${latest_crypt_whl}..."
|
||||
curl -O -L "$latest_crypt_whl"
|
||||
"$PYTHON" -m pip install cryptography*.whl
|
||||
|
||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
#- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
|
||||
# - name: Compile cryptography from source (no legacy)
|
||||
# if: runner.os != 'Windows' || runner.arch != 'ARM64'
|
||||
@@ -477,8 +473,7 @@ jobs:
|
||||
run: |
|
||||
echo "before anything..."
|
||||
"$PYTHON" -m pip list
|
||||
"$PYTHON" -m pip install --upgrade -r requirements.txt
|
||||
echo "after requirements..."
|
||||
"$PYTHON" -m pip install --upgrade ..[yubikey]
|
||||
"$PYTHON" -m pip list
|
||||
#"$PYTHON" -m pip install --force-reinstall --no-deps --upgrade cryptography
|
||||
echo "after everything..."
|
||||
@@ -810,7 +805,7 @@ jobs:
|
||||
echo "Created shared drive ${driveid}"
|
||||
$gam create user $newuser firstname GHA lastname $JID displayname "Github Actions ${JID}" password random recoveryphone 12125121110 recoveryemail jay0lee@gmail.com gha.jid $JID languages en+,en-GB- ou "${newou}"
|
||||
$gam user $newuser add license workspaceenterpriseplus
|
||||
$gam user $newuser update photo https://dummyimage.com/400x600/000/fff
|
||||
$gam user $newuser update photo https://dummyimage.com/98x98/000/fff.jpg
|
||||
$gam user $newuser get photo
|
||||
$gam user $newuser delete photo
|
||||
$gam create alias $newalias user $newuser
|
||||
@@ -857,7 +852,7 @@ jobs:
|
||||
$gam user $newuser show labels > labels.txt
|
||||
$gam user $gam_user importemail subject "GHA import $newbase" message "This is a test import" labels IMPORTANT,UNREAD,INBOX,STARRED
|
||||
$gam user $gam_user insertemail subject "GHA insert $newbase" file gam.py labels INBOX,UNREAD # yep body is gam code
|
||||
$gam user $gam_user sendemail subject "GHA send $gam_user $newbase" file gam.py recipient admin@pdl.jaylee.us
|
||||
$gam user $gam_user sendemail recipient admin@pdl.jaylee.us subject "GHA send $gam_user $newbase" file gam.py
|
||||
$gam user $gam_user draftemail subject "GHA draft $newbase" message "Draft message test"
|
||||
$gam csvfile sample.csv:email waitformailbox retries 20
|
||||
$gam user $newuser delegate to "${newbase}-bulkuser-1" || if [ $? != 50 ]; then exit $?; fi # expect a 50 return code (delegation failed)
|
||||
@@ -920,7 +915,7 @@ jobs:
|
||||
$gam config enable_dasa true save
|
||||
$gam print users query "gha.jid=$JID" | $gam csv - gam delete user ~primaryEmail || if [ $? != 50 ]; then exit $?; fi # expect a 50 return code (vault hold on user)
|
||||
$gam print mobile
|
||||
$gam print devices
|
||||
$gam print devices clientstates
|
||||
$gam print browsers
|
||||
$gam print cros allfields orderby serialnumber
|
||||
$gam show crostelemetry storagepercentonly
|
||||
|
||||
2
.github/workflows/pushwiki.yml
vendored
2
.github/workflows/pushwiki.yml
vendored
@@ -5,6 +5,8 @@ on:
|
||||
push:
|
||||
paths:
|
||||
- 'wiki/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
pushwiki:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -7,7 +7,8 @@ authors = [
|
||||
{ name="Jay Lee", email="jay0lee@gmail.com" },
|
||||
{ name="Ross Scroggs", email="Ross.Scroggs@gmail.com" },
|
||||
]
|
||||
# # The following files should be edited to match: setup.cfg, requirements.txt
|
||||
# notice that yubikey-manager remains optional further down since it is less command and adds
|
||||
#significant compile dependencies.
|
||||
dependencies = [
|
||||
"chardet>=5.2.0",
|
||||
"cryptography>=44.0.2",
|
||||
@@ -21,7 +22,6 @@ dependencies = [
|
||||
"lxml>=5.4.0",
|
||||
"passlib>=1.7.4",
|
||||
"pathvalidate>=3.2.3",
|
||||
"pyscard==2.2.1",
|
||||
"python-dateutil",
|
||||
]
|
||||
description = "CLI tool to manage Google Workspace"
|
||||
|
||||
@@ -279,6 +279,7 @@ If an item contains spaces, it should be surrounded by ".
|
||||
geminiedu | 1010470004 | Gemini Education |
|
||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
||||
geminiultra | 1010470008 | Google AI Ultra for Business |
|
||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
||||
@@ -380,10 +381,15 @@ If an item contains spaces, it should be surrounded by ".
|
||||
domain:<DomainName>|domain|default
|
||||
<CalendarItem> ::= <EmailAddress>
|
||||
<ChannelCustomerID> ::= <String>
|
||||
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||
<ChatMember> ::= spaces/<String>/members/<String>
|
||||
<ChatMessage> ::= spaces/<String>/messages/<String>
|
||||
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||
<ChromeProfilePermanentID> ::= <String>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||
<ChromeProfileCommandName> ::= <ChomeProfileName>/commands/<String>
|
||||
<GIGroupAlias> ::= <EmailAddress>
|
||||
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
||||
<CIGroupMemberType> ::= cbcmbrowser|chromeosdevice|customer|group|other|serviceaccount|user
|
||||
@@ -402,6 +408,11 @@ If an item contains spaces, it should be surrounded by ".
|
||||
<ContactGroupItem> ::= <ContactGroupID>|<ContactGroupName>
|
||||
<CorporaAttribute> ::= alldrives|allteamdrives|domain|onlyteamdrives|user
|
||||
<CourseAlias> ::= <String>
|
||||
<CourseAnnouncementContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
<CourseAnnouncementID> ::= <Number>
|
||||
<CourseAnnouncementState> ::= draft|published|deleted
|
||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||
@@ -528,6 +539,7 @@ If an item contains spaces, it should be surrounded by ".
|
||||
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
||||
<PropertyKey> ::= <String>
|
||||
<PropertyValue> ::= <String>
|
||||
<PubSubTopicName> ::= <String>
|
||||
<QueryAlert> ::= <String>
|
||||
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||
<QueryBrowser> ::= <String>
|
||||
@@ -611,6 +623,14 @@ If an item contains spaces, it should be surrounded by ".
|
||||
gs://<StorageBucketName>/<StorageObjectName>|
|
||||
<StorageBucketName>/<StorageObjectName>
|
||||
<Tag> ::= <String>
|
||||
<TagManagerAccountID> ::= <String>
|
||||
<TagManagerAccountPath> ::= accounts/<TagManagerAccountID>
|
||||
<TagManagerContainerID> ::= <String>
|
||||
<TagManagerContainerPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>
|
||||
<TagManagerWorkspaceID> ::= <String>
|
||||
<TagManagerWorkspacePath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>
|
||||
<TagManagerTagID> ::= <String>
|
||||
<TagManagerTagPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>/tags/<TagManagerTagID>
|
||||
<TakeoutBucketName> ::= takeout-export-[a-f,0-9,-]*
|
||||
<TaskID> ::= <String>
|
||||
<TaskListID> ::= <String>
|
||||
@@ -664,6 +684,7 @@ If an item contains spaces, it should be surrounded by ".
|
||||
(gdoc|ghtml <UserGoogleDoc>)|
|
||||
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
||||
<YouTubeChannelID> ::= <String>
|
||||
|
||||
## Lists of basic items
|
||||
|
||||
<APIScopeURLList> ::= "<APIScopeURL>(,<APIScopeURL>)*"
|
||||
@@ -672,9 +693,16 @@ If an item contains spaces, it should be surrounded by ".
|
||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
||||
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||
<ChromeProfileCommandNameList> ::= "<ChromeProfileCommandName>(,<ChromeProfileCommandName>)*"
|
||||
<CIGroupAliasList> ::= "<CIGroupAlias>(,<CIGroupAlias>)*"
|
||||
<CIGroupMemberTypeList> ::= "<CIGroupMemberType>(,<CIGroupMemberType>)*"
|
||||
<CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
|
||||
<ClassificationLabelIDList> ::= "<ClassificationLabelID>(,<ClassificationLabelID>)*"
|
||||
<ClassificationLabelNameList> ::= "<ClassificationLabelName>(,<ClassificationLabelName>)*"
|
||||
<ClassificationLabelPermissionNameList> ::= "<ClassificationLabelPermissionName>(,<ClassificationLabelPermissionName>)*"
|
||||
<ClassificationLabelFieldIDList> ::= "<ClassificationLabelFieldID>(,<ClassificationLabelFieldID>)*"
|
||||
<ClassificationLabelSelectionIDList> ::= "<ClassificationLabelSelectionID>(,<ClassificationLabelSelectionID>)*"
|
||||
<ClassroomInvitationIDList> ::= "<ClassroomInvitationID>(,<ClassroomInvitationID>)*"
|
||||
<ContactGroupList> ::= "<ContactGroupItem>(,<ContactGroupItem>)*"
|
||||
<ContactIDList> ::= "<ContactID>(,<ContactID>)*"
|
||||
@@ -752,6 +780,9 @@ If an item contains spaces, it should be surrounded by ".
|
||||
<SharedDriveACLRoleList> ::= "<SharedDriveACLRole>(,<SharedDriveACLRole>)*"
|
||||
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
||||
<StringList> ::= "<String>(,<String>)*"
|
||||
<TagManagerAccountPathList> ::= "<TagManagerAccountPath>(,<TagManagerAccountPath>)*"
|
||||
<TagManagerContainerPathList> ::= "<TagManagerContainerPath>(,<TagManagerContainerPath>)*"
|
||||
<TagManagerWorkspacePathList> ::= "<TagManagerWorkspacePath>(,<TagManagerWorkspacePath>)*"
|
||||
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
||||
@@ -1006,6 +1037,11 @@ Specify a collection of items by directly specifying them; the item type is dete
|
||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<CalendarEntity> ::=
|
||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||
<CIPolicyNameEntity> ::=
|
||||
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
|
||||
<ClassificationLabelNameEntity> ::=
|
||||
@@ -1208,6 +1244,15 @@ Specify a collection of items by directly specifying them; the item type is dete
|
||||
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<SiteEntity> ::=
|
||||
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<TagManagerAccountPathEntity> ::=
|
||||
<TagManagerAccountPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
<TagManagerContainerPathEntity> ::=
|
||||
<TagManagerContainerPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
<TagManagerWorkspacePathEntity> ::=
|
||||
<TagManagerWorkspacePathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
<TasklistEntity> ::=
|
||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||
<TasklistIDTaskIDEntity> ::=
|
||||
@@ -1383,7 +1428,7 @@ gam show projects [[admin] <EmailAddress>] [all|<ProjectIDEntity>]
|
||||
[states all|active|deleterequested] [showiampolicies 0|1|3]
|
||||
gam print projects [[admin] <EmailAddress>] [all|<ProjectIDEntity>] [todrive <ToDriveAttribute>*]
|
||||
[states all|active|deleterequested] [showiampolicies 0|1|3 [onememberperrow]]
|
||||
[delimiter <Character>]] [[formatjson [quotechar <Character>]]
|
||||
[delimiter <Character>] [[formatjson [quotechar <Character>]]
|
||||
gam info currentprojectid
|
||||
|
||||
gam create|add svcacct [[admin] <EmailAddress>] [<ProjectIDEntity>]
|
||||
@@ -1467,15 +1512,22 @@ gam show privileges
|
||||
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
||||
|
||||
gam create adminrole <String> [description <String>]
|
||||
privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)
|
||||
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>
|
||||
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
||||
[privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)]
|
||||
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>]
|
||||
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||
gam delete adminrole <RoleItem>
|
||||
gam info adminrole <RoleItem> [privileges]
|
||||
[formatjson]
|
||||
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
||||
[role <RoleItem>] [privileges] [oneitemperrow]
|
||||
[nosystemroles]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam show adminroles|roles
|
||||
[role <RoleItem>] [privileges]
|
||||
[nosystemroles]
|
||||
[formatjson]
|
||||
|
||||
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
||||
[condition securitygroup|nonsecuritygroup]
|
||||
@@ -1489,6 +1541,10 @@ gam show admins
|
||||
|
||||
# Alert Center
|
||||
|
||||
gam show alertsettings
|
||||
gam update alertsettings <PubsubTopicName>
|
||||
gam clear alertsettings
|
||||
|
||||
gam delete alert <AlertID>
|
||||
gam undelete alert <AlertID>
|
||||
gam info alert <AlertID> [formatjson]
|
||||
@@ -2206,6 +2262,17 @@ gam show chromeneedsattn
|
||||
|
||||
# Chrome Profile Management
|
||||
|
||||
<ChromeProfilePermanentID> ::= <String>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||
<ChromeProfileCommandName> ::= <ChomeProfileName>/commands/<String>
|
||||
<ChromeProfileCommandNameList> ::= "<ChromeProfileCommandName>(,<ChromeProfileCommandName>)*"
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <ChromeProfileNameList>|<FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||
|
||||
<ChromeProfileFieldName> ::=
|
||||
affiliationstate|
|
||||
annotatedlocation|
|
||||
@@ -2256,15 +2323,27 @@ gam delete chromeprofile <ChromeProfileName>
|
||||
gam info chromeprofile <ChromeProfileName>
|
||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||
gam show chromeprofiles
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||
[formatjson]
|
||||
gam print chromeprofiles [todrive <ToDriveAttribute>*]
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||
[[formatjson [quotechar <Character>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam create chromeprofilecommand <ChromeProfileNameEntity>
|
||||
[clearcache [<Boolean>]] [clearcookies [<Boolean>]]
|
||||
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]
|
||||
|
||||
gam info chromeprofilecommand <ChromeProfileCommandName>
|
||||
[formatjson]
|
||||
|
||||
gam show chromeprofilecommands <ChromeProfileNameEntity>
|
||||
[formatjson]
|
||||
gam print chromeprofilecommands <ChromeProfileNameEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
# Chrome Versions Counts
|
||||
|
||||
@@ -2396,12 +2475,14 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
||||
autoupdatethrough|
|
||||
backlightinfo|
|
||||
bootmode|
|
||||
chromeostype|
|
||||
cpuinfo|
|
||||
cpustatusreports|
|
||||
deprovisionreason|
|
||||
devicefiles|
|
||||
deviceid|
|
||||
devicelicensetype|
|
||||
diskspaceusage|
|
||||
diskvolumereports|
|
||||
dockmacaddress|
|
||||
ethernetmacaddress|
|
||||
@@ -2409,6 +2490,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
||||
extendedsupporteligible|
|
||||
extendedsupportstart|
|
||||
extendedsupportenabled|
|
||||
faninfo|
|
||||
firmwareversion|
|
||||
firstenrollmenttime|
|
||||
lastdeprovisiontimestamp|
|
||||
@@ -2722,6 +2804,7 @@ gam print chromschemas [todrive <ToDriveAttribute>*]
|
||||
<ChromePolicySchemaFieldName>* [fields <ChromePolicySchemaFieldNameList>]
|
||||
[[formatjson [quotechar <Character>]]
|
||||
|
||||
gam info chromeschema std <SchemaName>
|
||||
gam show chromeschemas std
|
||||
[filter <String>]
|
||||
|
||||
@@ -3112,8 +3195,21 @@ gam delete courses <CourseEntity> [archive|archived]
|
||||
gam course <CourseID> create|add alias <CourseAlias>
|
||||
gam course <CourseID> delete alias <CourseAlias>
|
||||
|
||||
<CourseAnnouncementContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
gam course <CourseID> create announcement
|
||||
<CourseAnnouncementContent> [scheduledtime <Time>] [state draft|published]
|
||||
gam course <CourseID> remove announcement <CourseAnnouncementID>
|
||||
gam course <CourseID> update announcement <CourseAnnouncementID>
|
||||
[<CourseAnnouncementContent>] [scheduledtime <Time>] [state published]
|
||||
|
||||
gam course <CourseID> create|add topic <CourseTopic>
|
||||
gam course <CourseID> delete topic <CourseTopicID>
|
||||
gam course <CourseID> update topic <CourseTopicID> <CourseTopic>
|
||||
|
||||
gam course <CourseID> create|add teachers [makefirstteacherowner] <UserItem>
|
||||
gam course <CourseID> create|add students <UserItem>
|
||||
@@ -3125,8 +3221,15 @@ gam course <CourseID> sync students [addonly|removeonly] <UserTypeEntity>
|
||||
gam courses <CourseEntity> create|add alias <CourseAliasEntity>
|
||||
gam courses <CourseEntity> delete alias <CourseAliasEntity>
|
||||
|
||||
gam courses <CourseEntity> create announcement
|
||||
<CourseAnnouncementContent>> [scheduledtime <Time>] [state draft|published]
|
||||
gam courses <CourseEntity> remove announcement <CourseAnnouncementIDEntity>
|
||||
gam courses <CourseEntity> update announcement <CourseAnnouncementIDEntity>
|
||||
[<CourseAnnouncementContent>] [scheduledtime <Time>] [state published]
|
||||
|
||||
gam courses <CourseEntity> create|add topic <CourseTopicEntity>
|
||||
gam courses <CourseEntity> delete topic <CourseTopicIDEntity>
|
||||
gam courses <CourseEntity> update topic <CourseTopicIDEntity> <CourseTopic>
|
||||
|
||||
gam courses <CourseEntity> create|add teachers [makefirstteacherowner] <UserTypeEntity>
|
||||
gam courses <CourseEntity> create|add students <UserTypeEntity>
|
||||
@@ -3345,6 +3448,13 @@ gam print guardian|guardians [todrive <ToDriveAttribute>*] [accepted|invitations
|
||||
[showstudentemails]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
# Business Profile Accounts
|
||||
|
||||
gam show businessprofileaccounts
|
||||
[type locationgroup|organization|personal|usergroup]
|
||||
gam print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||
[type locationgroup|organization|personal|usergroup]
|
||||
|
||||
# Classroom User Profiles
|
||||
|
||||
gam <UserTypeEntity> print classroomprofile [todrive <ToDriveAttribute>*]
|
||||
@@ -3379,8 +3489,7 @@ gam print|show transferapps
|
||||
|
||||
<DataTransferService> ::=
|
||||
calendar|
|
||||
currents|
|
||||
datastudio|lookerstudio|"google data studio"|
|
||||
datastudio|lookerstudio|"looker studio"|
|
||||
googledrive|gdrive|drive|"drive and docs"
|
||||
<DataTransferServiceList> ::= "<DataTransferService>(,<DataTransferService>)*"
|
||||
|
||||
@@ -4116,7 +4225,8 @@ gam print devices [todrive <ToDriveAttribute>*]
|
||||
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
||||
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
||||
[all|company|personal|nocompanydevices|nopersonaldevices]
|
||||
[nodeviceusers]
|
||||
[nodeviceusers|oneuserperrow]
|
||||
[clientstates]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[showitemcountonly]
|
||||
|
||||
@@ -4428,19 +4538,18 @@ gam report usage customer [todrive <ToDriveAttribute>*]
|
||||
[convertmbtogb]
|
||||
|
||||
<ActivityApplicationName> ::=
|
||||
access|accesstransparency|
|
||||
accesstransparency|access|
|
||||
admin|
|
||||
calendar|calendars|
|
||||
chat|
|
||||
chrome|
|
||||
classroom|
|
||||
contextawareaccess|
|
||||
currents|gplus|google+|
|
||||
gplus|currents|google+|
|
||||
datastudio|
|
||||
devices|mobile|
|
||||
domain|
|
||||
drive|doc|docs|
|
||||
gcp|
|
||||
gemini|geminiforworkspace|
|
||||
gcp|cloud|
|
||||
geminiinworkspaceapps|gemini|geminiforworkspace|
|
||||
groups|group|
|
||||
groupsenterprise|enterprisegroups|
|
||||
jamboard|
|
||||
@@ -4458,7 +4567,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
||||
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[filtertime.* <Time>] [filter|filters <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[event|events <EventNameList>] [ip <String>]
|
||||
[groupidfilter <String>]
|
||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||
@@ -4505,7 +4614,7 @@ gam report users|user [todrive <ToDriveAttribute>*]
|
||||
[(date <Date>)|(range <Date> <Date>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
||||
[filtertime.* <Time>] [filter|filters <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
||||
[aggregatebydate|aggregatebyuser [Boolean]]
|
||||
[maxresults <Number>]
|
||||
@@ -4531,7 +4640,7 @@ gam update resoldcustomer <CustomerID> <ResoldCustomerAttribues>+
|
||||
gam info resoldcustomer <CustomerID> [formatjson]
|
||||
|
||||
gam create|add resoldsubscription <CustomerID> (sku <SKUID>)
|
||||
(plan annual_monthly_pay|annual_yearly_pay|flexible|trial) (seats <Number>)
|
||||
(plan annual_monthly_pay|annual_yearly_pay|flexible|trial|free) (seats <Number>)
|
||||
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
||||
gam update resoldsubscription <CustomerID> <SKUID>
|
||||
activate|suspend|startpaidservice|
|
||||
@@ -4624,10 +4733,10 @@ gam delete building <BuildingID>
|
||||
gam info building <BuildingID>
|
||||
[formatjson]
|
||||
gam show buildings
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[formatjson]
|
||||
gam print buildings [todrive <ToDriveAttribute>*]
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
||||
|
||||
gam create|add feature name <Name>
|
||||
@@ -4770,6 +4879,8 @@ gam <UserTypeEntity> sendemail from <EmailAddress>
|
||||
allowcontentmanagerstosharefolders|
|
||||
copyrequireswriterpermission|
|
||||
domainusersonly|
|
||||
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||
drivemembersonly|teammembersonly|
|
||||
sharingfoldersrequiresorganizerpermission
|
||||
|
||||
@@ -4786,7 +4897,7 @@ In these commands, the Google administrator named in oauth2.txt is used.
|
||||
gam show shareddrivethemes
|
||||
gam create shareddrive <Name>
|
||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||
[movetoorgunitdelay <Integer>]
|
||||
@@ -4809,13 +4920,26 @@ gam print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam show shareddrives
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[formatjson] [noorgunits [<Boolean>]]
|
||||
|
||||
gam print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
||||
[(shareddriveadminquery|query <QuerySharedDrive>) |
|
||||
(shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)))]
|
||||
[orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>]
|
||||
[domainlist <DomainList>]
|
||||
[includetypes <OrganizerTypeList>]
|
||||
[oneorganizer [<Boolean>]]
|
||||
[shownorganizerdrives [false|true|only]]
|
||||
[includefileorganizers [<Boolean>]]
|
||||
[delimiter <Character>]
|
||||
gam print oushareddrives [todrive <ToDriveAttribute>*]
|
||||
[ou|org|orgunit <OrgUnitPath>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
@@ -4827,7 +4951,7 @@ In these commands, you specify an administrator and then indicate that you want
|
||||
|
||||
gam <UserTypeEntity> create shareddrive <Name> adminaccess
|
||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||
[movetoorgunitdelay <Integer>]
|
||||
@@ -4861,7 +4985,7 @@ In these commands, you specify a user, administrator access is not used.
|
||||
|
||||
gam <UserTypeEntity> create shareddrive <Name>
|
||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||
[movetoorgunitdelay <Integer>]
|
||||
@@ -4883,12 +5007,14 @@ gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[guiroles [<Boolean>]] [formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> show shareddrives
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[guiroles [<Boolean>]] [formatjson]
|
||||
|
||||
<PermissionMatch> ::=
|
||||
@@ -5016,18 +5142,18 @@ gam <UserTypeEntity> delete permissions <SharedDriveEntityAdmin> <DriveFilePermi
|
||||
|
||||
In these commands, the Google administrator named in oauth2.txt is used.
|
||||
|
||||
gam copy teamdriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||
gam copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||
[adminaccess|asadmin]
|
||||
[showpermissionsmessages [<Boolean>]]
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
gam sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
gam sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
[adminaccess|asadmin]
|
||||
[showpermissionsmessages [<Boolean>]]
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
|
||||
gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
gam print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -5035,7 +5161,7 @@ gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam show teamdriveacls
|
||||
gam show shareddriveacls
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -5045,18 +5171,18 @@ gam show teamdriveacls
|
||||
|
||||
In these commands, you specify an administrator and then indicate that you want domain administrator access with the adminaccess option.
|
||||
|
||||
gam <UserTypeEntity> copy teamdriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||
gam <UserTypeEntity> copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||
[adminaccess|asadmin]
|
||||
[showpermissionsmessages [<Boolean>]]
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
gam <UserTypeEntity> sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
gam <UserTypeEntity> sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
[adminaccess|asadmin]
|
||||
[showpermissionsmessages [<Boolean>]]
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
|
||||
gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -5065,7 +5191,7 @@ gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
[shownopermissionsdrives false|true|only]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> show teamdriveacls
|
||||
gam <UserTypeEntity> show shareddriveacls
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -5260,7 +5386,8 @@ gam create vaultexport|export matter <MatterItem> [name <String>] corpus calenda
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
||||
[responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*] [calendarversiondate <Date>|<Time>]
|
||||
[includeshareddrives <Boolean>] [driveversiondate <Date>|<Time>] [includeaccessinfo <Boolean>]
|
||||
[(includeshareddrives <Boolean>)|(shareddrivesoption included|included_if_account_is_not_a_member|not_included)]
|
||||
[driveversiondate <Date>|<Time>] [includeaccessinfo <Boolean>]
|
||||
[driveclientsideencryption any|encrypted|unencrypted]
|
||||
[includerooms <Boolean>]
|
||||
[excludedrafts <Boolean>] [mailclientsideencryption any|encrypted|unencrypted]
|
||||
@@ -5326,14 +5453,14 @@ gam create vaulthold|hold matter <MatterItem> [name <String>] corpus calendar|dr
|
||||
[query <QueryVaultCorpus>]
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[includerooms <Boolean>] [covereddata calllogs|textmessages|voicemails]
|
||||
[includeshareddrives|includeteamdrives <Boolean>]
|
||||
[includeshareddrives <Boolean>]
|
||||
[showdetails|returnidonly]
|
||||
gam update vaulthold|hold <HoldItem> matter <MatterItem>
|
||||
[([addaccounts|addgroups|addusers <EmailItemList>] [removeaccounts|removegroups|removeusers <EmailItemList>]) | (orgunit|org|ou <OrgUnit>)]
|
||||
[query <QueryVaultCorpus>]
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[includerooms <Boolean>] [covereddata calllogs|textmessages|voicemails]
|
||||
[includeshareddrives|includeteamdrives <Boolean>]
|
||||
[includeshareddrives <Boolean>]
|
||||
[showdetails]
|
||||
gam delete vaulthold|hold <HoldItem> matter <MatterItem>
|
||||
gam delete vaulthold|hold <MatterItem> <HoldItem>
|
||||
@@ -5590,6 +5717,7 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
[logpassword <FileName>]
|
||||
gam delete user <UserItem> [noactionifalias]
|
||||
gam undelete user <UserItem> [ou|org|orgunit <OrgUnitPath>]
|
||||
gam check suspended <UserItem>
|
||||
gam suspend user <UserItem> [noactionifalias]
|
||||
gam unsuspend user <UserItem> [noactionifalias]
|
||||
gam info user [<UserItem>]
|
||||
@@ -6420,6 +6548,22 @@ gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
||||
filter <String>
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||
|
||||
gam <UserTypeEntity> create chatemoji <ChatEmojiName>
|
||||
([drivedir|(sourcefolder <FilePath>)] [filename <FileNamePattern>])
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> delete chatemoji <ChatEmoji>
|
||||
gam <UserTypeEntity> info chatemoji <ChatEmoji>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> show chatemojis
|
||||
[showcreatedby any|me|others]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print chatemojis [todrive <ToDriveAttribute>*]
|
||||
[showcreatedby any|me|others]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
# Users - Drive
|
||||
|
||||
<DriveFileOrderByFieldName> ::=
|
||||
@@ -6472,6 +6616,7 @@ gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
||||
(folderColorRgb <ColorValue>)|
|
||||
(indexabletext <String>)|
|
||||
(inheritedpermissionsdisabled [<Boolean>])|
|
||||
(itemdownloadrestriction restrictedforreaders|restrictedforwriters [<Boolean>])|
|
||||
(keeprevisionforever|pinned)|
|
||||
(lastviewedbyme <Time>)|
|
||||
(mimetype <MimeType>)|
|
||||
@@ -6890,6 +7035,7 @@ gam <UserTypeEntity> collect orphans
|
||||
capabilities.canchangecopyrequireswriterpermission|
|
||||
capabilities.canchangecopyrequireswriterpermissionrestriction|
|
||||
capabilities.canchangedomainusersonlyrestriction|
|
||||
capabilities.canchangedownloadrestriction|
|
||||
capabilities.canchangedrivebackground|
|
||||
capabilities.canchangedrivemembersonlyrestriction|
|
||||
capabilities.canchangesecurityupdateenabled|
|
||||
@@ -6945,6 +7091,10 @@ gam <UserTypeEntity> collect orphans
|
||||
contentrestrictions.restrictiontime|
|
||||
contentrestrictions.type
|
||||
|
||||
<DriveDownloadRestrictionsSubfieldName> ::=
|
||||
downloadrestrictions.itemdownloadrestriction|
|
||||
downloadrestrictions.effectivedownloadrestrictionwithcontext
|
||||
|
||||
<ClassificationLabelInfoSubfieldName> ::=
|
||||
labels.id| # modifiedByMe
|
||||
labels.revisionid| # copyRequiresWriterPermission
|
||||
@@ -7038,6 +7188,8 @@ gam <UserTypeEntity> collect orphans
|
||||
copyrequireswriterpermission|
|
||||
createddate|createdtime|
|
||||
description|
|
||||
downloadrestictions|
|
||||
<DriveDownloadRestrictionsSubfieldName>|
|
||||
driveid|
|
||||
drivename|
|
||||
editable|
|
||||
@@ -7188,7 +7340,8 @@ gam <UserTypeEntity> show filesharecounts
|
||||
owners|
|
||||
parents|
|
||||
size|
|
||||
trashed
|
||||
trashed|
|
||||
webviewlink
|
||||
<FileTreeFieldNameList> ::= "<FileTreeFieldName>(,<FileTreeFieldName>)*"
|
||||
|
||||
gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
||||
@@ -7381,10 +7534,12 @@ gam <UserTypeEntity> print filters [labelidsonly] [todrive <ToDriveAttribute>*]
|
||||
|
||||
gam <UserTypeEntity> create form
|
||||
title <String> [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
||||
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
||||
[(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
||||
gam <UserTypeEntity> update form <DriveFileEntity>
|
||||
[title <String>] [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
||||
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||
|
||||
gam <UserTypeEntity> print forms <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
@@ -7394,10 +7549,10 @@ gam <UserTypeEntity> show forms <DriveFileEntity>
|
||||
|
||||
gam <UserTypeEntity> print formresponses <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[countsonly|(formatjson [quotechar <Character>])]
|
||||
gam <UserTypeEntity> show formresponses <DriveFileEntity>
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[countsonly|formatjson]
|
||||
|
||||
# Users - Gmail - Forwarding
|
||||
@@ -7576,48 +7731,61 @@ gam <UserTypeEntity> insert message
|
||||
|
||||
gam <UserTypeEntity> archive messages <GroupItem>
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> delete messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> modify messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
||||
((addlabel <LabelName>)|(removelabel <LabelName>))+
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> spam messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> trash messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> untrash messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
|
||||
gam <UserTypeEntity> export message|messages
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [doit] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||
gam <UserTypeEntity> export thread|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||
|
||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
||||
gam <UserTypeEntity> forward thread|thtreads recipient|to <RecipientEntity>
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
||||
|
||||
gam <UserTypeEntity> show messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
@@ -7630,6 +7798,7 @@ gam <UserTypeEntity> show messages|threads
|
||||
[uploadattachments [<DriveFileParentAttribute>]]]
|
||||
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
@@ -8217,6 +8386,59 @@ gam <UserTypeEntity> profile share|shared|unshare|unshared
|
||||
|
||||
gam <UserTypeEntity> show profile
|
||||
|
||||
# Users - Tag Manager
|
||||
|
||||
<TagManagerAccountID> ::= <String>
|
||||
<TagManagerAccountPath> ::= accounts/<TagManagerAccountID>
|
||||
<TagManagerAccountPathList> ::= "<TagManagerAccountPath>(,<TagManagerAccountPath>)*"
|
||||
<TagManagerAccountPathEntity> ::=
|
||||
<TagManagerAccountPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
|
||||
<TagManagerContainerID> ::= <String>
|
||||
<TagManagerContainerPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>
|
||||
<TagManagerContainerPathList> ::= "<TagManagerContainerPath>(,<TagManagerContainerPath>)*"
|
||||
<TagManagerContainerPathEntity> ::=
|
||||
<TagManagerContainerPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
|
||||
<TagManagerWorkspaceID> ::= <String>
|
||||
<TagManagerWorkspacePath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>
|
||||
<TagManagerWorkspacePathList> ::= "<TagManagerWorkspacePath>(,<TagManagerWorkspacePath>)*"
|
||||
<TagManagerWorkspacePathEntity> ::=
|
||||
<TagManagerWorkspacePathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
|
||||
<TagManagerTagID> ::= <String>
|
||||
<TagManagerTagPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>/tags/<TagManagerTagID>
|
||||
|
||||
gam <UserTypeEntity> show tagmanageraccounts
|
||||
[includegoogletags [<Boolean>]]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print tagmanagerccounts [todrive <ToDriveAttribute>*]
|
||||
[includegoogletags [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> show tagmanagercontainers <TagManagerAccountPathEntity>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print tagmanagercontainers <TagManagerAccountPathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> show tagmanagerworkspaces <TagManagerContainerPathEntity>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print tagmanagerworkspaces <TagManagerContainerPathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> show tagmanagertags <TagManagerWorkspacePathEntity>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print tagmanagertags <TagManagerWorkspacePathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> show tagmanagerpermissions <TagManagerAccountPathEntity>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print tagmanagerpermissions <TagManagerAccountPathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
# Users - Tasks
|
||||
|
||||
<TaskAttribute> ::=
|
||||
@@ -8279,6 +8501,8 @@ gam <UserTypeEntity> print tasklists [todrive <ToDriveAttribute>*]
|
||||
allowcontentmanagerstosharefolders|
|
||||
copyrequireswriterpermission|
|
||||
domainusersonly|
|
||||
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||
drivemembersonly|teammembersonly|
|
||||
sharingfoldersrequiresorganizerpermission
|
||||
|
||||
@@ -8293,13 +8517,13 @@ sharingfoldersrequiresorganizerpermission true
|
||||
gam <UserTypeEntity> show shareddrivethemes
|
||||
gam <UserTypeEntity> create shareddrive <Name>
|
||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>]
|
||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
||||
gam <UserTypeEntity> update shareddrive <SharedDriveEntity> [name <Name>]
|
||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>]
|
||||
gam <UserTypeEntity> delete shareddrive <SharedDriveEntity>
|
||||
[allowitemdeletion]
|
||||
@@ -8322,6 +8546,19 @@ gam <UserTypeEntity> show shareddrives
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[formatjson]
|
||||
|
||||
gam <UserTypeEntity> print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin]
|
||||
[(shareddriveadminquery|query <QuerySharedDrive>) |
|
||||
(shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)))]
|
||||
[orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>]
|
||||
[domainlist <DomainList>]
|
||||
[includetypes <OrganizerTypeList>]
|
||||
[oneorganizer [<Boolean>]]
|
||||
[shownorganizerdrives [false|true|only]]
|
||||
[includefileorganizers [<Boolean>]]
|
||||
[delimiter <Character>]
|
||||
|
||||
# Users - Force Signout and Turn Off 2-Step Verification
|
||||
|
||||
gam <UserTypeEntity> signout
|
||||
@@ -8485,3 +8722,11 @@ gam <UserTypeEntity> print youtubechannels [todrive <ToDriveAttribute>*]
|
||||
gam create|add verify|verification <DomainName>
|
||||
gam update verify|verification <DomainName> cname|txt|text|site|file
|
||||
gam info verify|verification
|
||||
|
||||
# Web Resourses and Sites
|
||||
|
||||
gam <UserTypeEntity> show webresources
|
||||
gam <UserTypeEntity> print webresources [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> show webmastersites
|
||||
gam <UserTypeEntity> print webmastersites [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
|
||||
@@ -1,3 +1,507 @@
|
||||
7.18.04
|
||||
|
||||
Added commands to display/manage Alert Center Pub/Sub notifications.
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Alert-Center#configuring-settings
|
||||
|
||||
7.18.03
|
||||
|
||||
Updated `gam oauth create` to give a warning if the number of selected scopes will
|
||||
probably cause Google to generate a "Something went wrong" error.
|
||||
|
||||
7.18.02
|
||||
|
||||
Upgraded to OpenSSL 3.5.2.
|
||||
|
||||
7.18.01
|
||||
|
||||
Added option `nosystemroles` to `gam print|show adminroles` that causes GAM
|
||||
to only display non-system roles.
|
||||
|
||||
Added option `formatjson` to `gam info|print|show adminroles`; this will be most useful
|
||||
when the `privileges` option is used.
|
||||
|
||||
Updated `gam create|update adminrole` to allow specification of privileges with
|
||||
JSON data: `privileges <JSONData>`. These two updates make it easier to copy admin roles.
|
||||
|
||||
Updated `gam create|update adminrole` to allow output of the created/updated
|
||||
role data in CSV format; by default, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
||||
```
|
||||
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
||||
```
|
||||
|
||||
7.18.00
|
||||
|
||||
Added commands to display Business Profile Accounts.
|
||||
These are special purpose commands and will not generally be used.
|
||||
```
|
||||
gam show businessprofileaccounts
|
||||
gam print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
|
||||
7.17.03
|
||||
|
||||
Fixed bug in `gam <UserItem> print|show chatspaces asadmin fields <ChatSpaceFieldNameList>` that caused a trap
|
||||
when `displayname` was not in `<ChatSpaceFieldNameList>`.
|
||||
|
||||
7.17.02
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show webmastersites` to handle the following error
|
||||
that occurs if you haven't updated your project to include the Google Search Console API.
|
||||
```
|
||||
ERROR: 403: permissionDenied - Google Search Console API has not been used in project 111055363999 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/searchconsole.googleapis.com/overview?project=111055363999 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
|
||||
```
|
||||
|
||||
7.17.01
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> show webmastersites` that caused a trap.
|
||||
|
||||
7.17.00
|
||||
|
||||
Added commands to discover Sites and WebResources that managed users (previously unmanaged) may have access to for better governance and visibility.
|
||||
These are special purpose commands and will not generally be used.
|
||||
```
|
||||
gam <UserTypeEntity> show webresources
|
||||
gam <UserTypeEntity> print webresources [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> show webmastersites
|
||||
gam <UserTypeEntity> print webmastersites [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
|
||||
7.16.01
|
||||
|
||||
The Drive API now supports setting download restrictions on individual files.
|
||||
|
||||
Added `downloadrestictions` and `<DriveDownloadRestrictionsSubfieldName>` to `<DriveFieldName>`.
|
||||
```
|
||||
<DriveDownloadRestrictionsSubfieldName> ::=
|
||||
downloadrestrictions.itemdownloadrestriction|
|
||||
downloadrestrictions.effectivedownloadrestrictionwithcontext
|
||||
```
|
||||
|
||||
Added `itemdownloadrestriction restrictedforreaders|restrictedforwriters [<Boolean>]`
|
||||
to `<DriveFileAttribute>`.
|
||||
|
||||
From the Drive API documentation:
|
||||
```
|
||||
itemDownloadRestriction - The download restriction of the file applied directly by the owner or organizer. This does not take into account shared drive settings or DLP rules.
|
||||
effectiveDownloadRestrictionWithContext - Output only. The effective download restriction applied to this file. This considers all restriction settings and DLP rules.
|
||||
restrictedForReaders - Whether download and copy is restricted for readers.
|
||||
restrictedForWriters - Whether download and copy is restricted for writers. If true, download is also restricted for readers.
|
||||
```
|
||||
|
||||
7.16.00
|
||||
|
||||
Removed `drive_v3_native_names` from `gam.cfg`; GAM now only uses Drive API v3 fields names on output.
|
||||
If you had `drive_v3_native_names = False` in `gam.cfg` or are updating from Legacy GAM:
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Drive-REST-API-v3
|
||||
|
||||
7.15.01
|
||||
|
||||
Added `downloadrestrictions.restrictedforreaders` and `downloadrestrictions.restrictedforwriters`
|
||||
to `<SharedDriveRestrictionsSubfieldName>`; previously, only the abbreviations `downloadrestrictedforreaders`
|
||||
and `downloadrestrictedforwriters` were supported (they are still supported).
|
||||
|
||||
Updated `gam <UserTypeEntity> copy drivefile` to handle unexpected data returned by Google that caused a trap.
|
||||
|
||||
7.15.00
|
||||
|
||||
Updated `gam print shareddriveorganizers` to make `shownoorganizerdrives` default to `True`
|
||||
as documented; it was defaulting to `False`.
|
||||
|
||||
Cleaned up code for processing Python dictionary structures; this should have no noticable effect.
|
||||
|
||||
7.14.04
|
||||
|
||||
Fixed bug in `gam print|show cigroups cimember <UserItem>` that generated the following error:
|
||||
```
|
||||
ERROR: Cloud Identity Group: groups/-, Print Failed: Error(4013): Insufficient permissions to retrieve memberships.
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> update user suspended off` and `gam <UserTypeEntity> unsuspend users`
|
||||
to handle the following error that occurs when trying to unsuspend a user that has been suspended for abuse.
|
||||
```
|
||||
ERROR: 412: adminCannotUnsuspend - Cannot restore a user suspended for abuse.
|
||||
```
|
||||
|
||||
* See: https://support.google.com/a/answer/1110339
|
||||
|
||||
7.14.03
|
||||
|
||||
Fixed bug in `gam print cigroup-members includederivedmembership` that caused a trap.
|
||||
|
||||
7.14.02
|
||||
|
||||
Fixed bug in `gam print|show cigroups|cigroups-members cimember <UserItem>` that generated the following error:
|
||||
```
|
||||
Cloud Identity Group Print Failed: Request contains an invalid argument.
|
||||
```
|
||||
|
||||
7.14.01
|
||||
|
||||
Don't install yubikey library via pip by default. To install with yubikey support use pip install gam7[yubikey]
|
||||
|
||||
7.14.00
|
||||
|
||||
Added commands to display Google Tag Manager accounts, containers, workspaces, tags and user permissions.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Users-Tag-Manager
|
||||
|
||||
7.13.03
|
||||
|
||||
Added option `csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]`
|
||||
to `gam create chromeprofilecommand` so that command details are displayed in CSV format.
|
||||
|
||||
Added option `commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>` to `<ChromeProfileNameEntity>`
|
||||
so that `gam print|show chromeprofilecommands` can directly display the commands generated by
|
||||
`gam create chromeprofilecommand` with the `csv` option.
|
||||
|
||||
7.13.02
|
||||
|
||||
Fixed bug in `gam create chromeprofilecommand` where `select|filter` were not recognized.
|
||||
|
||||
Updated `gam create datatransfer <OldOwnerID> datastudio <NewOwnerID>` that generated the following
|
||||
error due to an unhandled API change.
|
||||
```
|
||||
ERROR: Invalid choice (google data studio): Expected <calendar|looker studio|drive and docs>
|
||||
```
|
||||
|
||||
7.13.01
|
||||
|
||||
Enhanced `gam create|print|show chromeprofilecommand` to allow specification
|
||||
of multiple Chrome browser profiles rather than just one.
|
||||
```
|
||||
<ChromeProfilePermanentID> ::= <String>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]])
|
||||
|
||||
gam create|print_show chromeprofilecommand <ChromeProfileNameEntity>
|
||||
```
|
||||
|
||||
7.13.00
|
||||
|
||||
Added commands that send remote commands to Chrome browser profiles and display the results;
|
||||
at the moment, these commands can clear the browser cache and cookies.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Chrome-Profile-Management#create-a-chrome-profile-command
|
||||
|
||||
7.12.02
|
||||
|
||||
Updated `gam print users` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable
|
||||
```
|
||||
|
||||
7.12.01
|
||||
|
||||
Added support for `plan free` in `gam create resoldsubscription`.
|
||||
|
||||
* The free plan is exclusive to the Cloud Identity SKU and does not incur any billing.
|
||||
|
||||
7.12.00
|
||||
|
||||
Started updated handling of missing scopes messages in client access commands;
|
||||
this is a work in progress.
|
||||
|
||||
Updated `gam info|show shareddrive` to handle changes in the Drive API that caused traps.
|
||||
|
||||
Added `downloadrestrictedforreaders` and `downloadrestrictedforwriters` to
|
||||
`<SharedDriveRestrictionsSubfieldName>` to support new Shared Drive restrictions.
|
||||
|
||||
Updated `gam course <CourseID> create|update announcement` to accept input from
|
||||
a literal string, a file or a Google Doc.
|
||||
```
|
||||
<CourseAnnouncementContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
```
|
||||
|
||||
Added command `gam check suspended <UserItem>` that checks the suspension status of a user
|
||||
and sets the return code to 0 if the user is not suspended or 26 if it is.
|
||||
```
|
||||
$ gam check suspended testok@domain.com
|
||||
User: testok@domain.com, Account Suspended: False
|
||||
$ echo $?
|
||||
0
|
||||
|
||||
$ gam check suspended testsusp@domain.com
|
||||
User: testsusp@domain.com, Account Suspended: True, Suspension Reason: ADMIN
|
||||
$ echo $?
|
||||
26
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> sendemail` to verify that one of `recipient|to|from`
|
||||
immediately follows `sendemail`.
|
||||
|
||||
7.11.00
|
||||
|
||||
Added commands to manage classroom/course announcements.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Classroom-Courses#manage-course-announcements
|
||||
|
||||
Upgraded to OpenSSL 3.5.1.
|
||||
|
||||
7.10.10
|
||||
|
||||
Added choices `text` and `hyperlink` to option `showwebviewlink` in `gam [<UserTypeEntity>] print|show shareddrives`.
|
||||
* `showwebviewlink text` - Displays `https://drive.google.com/drive/folders/<SharedDriveID>`
|
||||
* `showwebviewlink hyperlink` - Displays `=HYPERLINK("https://drive.google.com/drive/folders/<SharedDriveID>", "<SharedDriveName>")`
|
||||
|
||||
7.10.09
|
||||
|
||||
Added option `showwebviewlink` to `gam [<UserTypeEntity>] print|show shareddrives` that
|
||||
displays the web view link for the Shared Drive: `https://drive.google.com/drive/folders/<SharedDriveID>`.
|
||||
|
||||
7.10.08
|
||||
|
||||
Fixed bug in commands that modify messages where the `labelids <LabelIdList>` option
|
||||
could not be used unless one of these options was also specified: `query`, `matchlabel`, `ids`;
|
||||
it can be now be used by itself.
|
||||
|
||||
7.10.07
|
||||
|
||||
Updated `gam <UserTypeEntity> copy|move drivefile` to hanndle additional instances of
|
||||
the `cannotModifyInheritedPermission` error.
|
||||
|
||||
Added license SKU `Google AI Ultra for Business`
|
||||
* ProductID - 101047
|
||||
* SKUID - 1010470008 | geminiultra
|
||||
|
||||
7.10.06
|
||||
|
||||
Added option `clientstates` to `gam print devices` to include client states in device output.
|
||||
|
||||
7.10.05
|
||||
|
||||
Google renamed an error: `cannotModifyInheritedTeamDrivePermission` became `cannotModifyInheritedPermission`.
|
||||
GAM will now handle the new error.
|
||||
|
||||
7.10.04
|
||||
|
||||
Updated `gam report <ActivityApplicationName>` to accept accept application names as defined
|
||||
in the Reports API discovery document; this means that GAM does not have to be updated when
|
||||
Google defines a new application name.
|
||||
|
||||
`gemini_in_workspace_apps` is now available in `gam report`.
|
||||
|
||||
7.10.03
|
||||
|
||||
Fixed bug in commands that modify messages where the `labelids <LabelIdList>` option
|
||||
was not being applied.
|
||||
|
||||
7.10.02
|
||||
|
||||
Added option `labelids <LabelIdList>` to all commands that process messages;
|
||||
this option causes GAM to only return messages with labels that match all of the specified label IDs.
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show forms` to always display `isPublished` and
|
||||
`isAcceptingResponses` in `publishSettings/publishState` regardless of their value;
|
||||
the API doesn't return these values when they are False.
|
||||
|
||||
7.10.01
|
||||
|
||||
Added options `ispublished [<Boolean>]` and `isacceptingresponses [<Boolean>]` to
|
||||
`gam <UserTypeEntity> create|update form`.
|
||||
|
||||
7.10.00
|
||||
|
||||
Added commands to manage/display Chat Custom Emojis.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#manage-chat-emojis
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-emojis
|
||||
|
||||
Updated `gam <UserItem> print|show chatspaces|chatmembers asadmin` to display
|
||||
the spaces in ascending display name order.
|
||||
|
||||
7.09.07
|
||||
|
||||
Added `webviewlink` to `<FileTreeFieldName>` for use in `gam <UserTypeEntity> print|show filetree`.
|
||||
|
||||
7.09.06
|
||||
|
||||
Upddated `gam print|show shareddrives`, `gam print|show shareddriveacls`, `gam print shareddriveorganizers`
|
||||
to display the Shared Drives in ascending name order; the API returns them in an unidentifiable order.
|
||||
|
||||
7.09.05
|
||||
|
||||
Improved output of `gam info|show chromeschemas [std]` to more accurately display the schemas.
|
||||
|
||||
Fixed bugs in `gam update chromepolicy` that caused invalid error messaages.
|
||||
|
||||
7.09.04
|
||||
|
||||
Fixed bug in `gam whatis <EmailItem>` where the check for an invitable user always failed.
|
||||
|
||||
Fixed bug in `gam print shareddriveorganizers` where no organizers were displayed when `domain` in `gam.cfg` was blank.
|
||||
|
||||
Updated to Python 3.13.5
|
||||
|
||||
7.09.03
|
||||
|
||||
Updated `gam <UserTypeEntity> create focustime|outofoffice ... timerange <Time> <Time>` to check
|
||||
that the first `<Time>` is less than the second `Time`; previously the event was not created.
|
||||
|
||||
For new installs the `enforce_expansive_access` Boolean variable in `gam.cfg` now defaults to True.
|
||||
For existing installations, if `enforce_expansive_access` has not been added to `gam.cfg`,
|
||||
a default value of True will be used.
|
||||
|
||||
7.09.02
|
||||
|
||||
Added command `gam info chromeschema std <SchemaName>` to display a Chrome policy schema in the same format as Legacy GAM.
|
||||
|
||||
Improved output of `gam show chromeschemas [std]` and `gam info chromeschema [std]` to more accurately display the schemas.
|
||||
|
||||
7.09.01
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print diskusage` where the `ownedByMe` column was
|
||||
blank for the top folder.
|
||||
|
||||
Fixed bug in `gam update chromepolicy` where the following error was generated
|
||||
when updating policies with simple numerical values.
|
||||
```
|
||||
ERROR: Missing argument: Expected <value>"
|
||||
```
|
||||
|
||||
7.09.00
|
||||
|
||||
Removed the overly broad service account `IAM and Access Management API` scope `https://www.googleapis.com/auth/cloud-platform`
|
||||
from DWD. The `gam <UserTypeEntity> check|Update serviceaccount` commands issue an error message if this scope
|
||||
is enabled prompting you to update your service account authorization so that the scope can be removed.
|
||||
|
||||
GAM commands that need IAM access now use the more limited scope `https://www.googleapis.com/auth/iam` in a non-DWD manner.
|
||||
|
||||
Added `enforce_expansive_access` Boolean variable to `gam.cfg` that provides the default value
|
||||
for option `enforceexpansiveaccess` in all commands that delete or update drive file ACLs/permissions.
|
||||
It's default value is False.
|
||||
```
|
||||
gam <UserTypeEntity> delete permissions
|
||||
gam <UserTypeEntity> delete drivefileacl
|
||||
gam <UserTypeEntity> update drivefileacl
|
||||
gam <UserTypeEntity> copy drivefile
|
||||
gam <UserTypeEntity> move drivefile
|
||||
gam <UserTypeEntity> transfer ownership
|
||||
gam <UserTypeEntity> claim ownership
|
||||
gam <UserTypeEntity> transfer drive
|
||||
```
|
||||
|
||||
Fixed bug in `gam print shareddriveorganizers` that caused a trap when an organizer was a deleted user.
|
||||
|
||||
Updated to Python 3.13.4
|
||||
|
||||
7.08.02
|
||||
|
||||
Updated the defaults in `gam print shareddriveorganizers` to match the most common use case, not the script.
|
||||
|
||||
* `domainlist` - The workspace primary domain
|
||||
* `includetypes` - user
|
||||
* `oneorganizer` - True
|
||||
* `shownoorganizerdrives` - True
|
||||
* `includefileorganizers` - False
|
||||
|
||||
To select organizers from any domain, use: `domainlist ""`
|
||||
|
||||
These commands produce the same result.
|
||||
```
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers
|
||||
```
|
||||
|
||||
7.08.01
|
||||
|
||||
Added option `shareddrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>))` to
|
||||
`gam print shareddriveorganizers` that displays organizers for a specific list of Shared Drive IDs.
|
||||
|
||||
7.08.00
|
||||
|
||||
Added the following command that can be used instead of the `GetTeamDriveOrganizers.py` script.
|
||||
|
||||
```
|
||||
gam [<UserTypeEntity>] print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
||||
[orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>]
|
||||
[domainlist <DomainList>]
|
||||
[includetypes <OrganizerTypeList>]
|
||||
[oneorganizer [<Boolean>]]
|
||||
[shownorganizerdrives [false|true|only]]
|
||||
[includefileorganizers [<Boolean>]]
|
||||
[delimiter <Character>]
|
||||
```
|
||||
The command defaults match the script defaults:
|
||||
* `domainlist` - All domains
|
||||
* `includetypes` - user,group
|
||||
* `oneorganizer` - False
|
||||
* `shownoorganizerdrives` - True
|
||||
* `includefileorganizers` - False
|
||||
|
||||
For example, to get a single organizer from your domain for all Shared Drives including no organizer drives:
|
||||
```
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
||||
```
|
||||
|
||||
7.07.17
|
||||
|
||||
Added option `oneuserperrow` to `gam print devices` to have each of a
|
||||
device's users displayed on a separate row with all of the other device fields.
|
||||
|
||||
7.07.16
|
||||
|
||||
Added `chromeostype`, `diskspaceusage` and `faninfo` to `<CrOSFieldName>` for use in `gam info|print cros`.
|
||||
|
||||
Fixed bugs/cleaned output in `gam info|print cros`.
|
||||
|
||||
7.07.15
|
||||
|
||||
Added option `shareddrivesoption included|included_if_account_is_not_a_member|not_included` to `gam create vaultexport`.
|
||||
|
||||
The previous option `includeshareddrives <Boolean>` is mapped as follows:
|
||||
* `includeshareddrives false` - `shareddrivesoption included_if_account_is_not_a_member`
|
||||
* `includeshareddrives true` - `shareddrivesoption included`
|
||||
|
||||
7.07.14
|
||||
|
||||
Update `gam setup chat` output to include the following that shows the actual Cloud Pub/Sub Topic Name.
|
||||
```
|
||||
You'll use projects/<ProjectID>/topics/no-topic in Connection settings Cloud Pub/Sub Topic Name
|
||||
```
|
||||
|
||||
7.07.13
|
||||
|
||||
Added option `showitemcountonly` to `gam [<UserTypeEntity>] print|show shareddrives` that causes GAM to display the
|
||||
number of Shared Drives on stdout; no CSV file is written.
|
||||
|
||||
7.07.12
|
||||
|
||||
Fixed bug in `gam print|show oushareddrives` that caused a trap.
|
||||
|
||||
Improved getting Shared Drive names from IDs when accessing Shared Drives in external workspaces.
|
||||
|
||||
7.07.11
|
||||
|
||||
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
ERROR: 400: badRequest - Bad Request
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> move drivefile` to handle the following error:
|
||||
```
|
||||
ERROR: 400: shareOutNotPermitted
|
||||
```
|
||||
|
||||
7.07.10
|
||||
|
||||
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
ERROR: 400: eventTypeRestriction - Attendees cannot be added to 'fromGmail' event with this visibility setting.
|
||||
```
|
||||
|
||||
7.07.09
|
||||
|
||||
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
||||
@@ -12486,7 +12990,7 @@ gam <UserTypeEntity> update teamdrive <TeamDriveEntity> [adminaccess|asadmin] [n
|
||||
Updated gam report users to support new orgUnitID argument in Reports API.
|
||||
|
||||
gam report users|user [todrive <ToDriveAttribute>*] [date <Date>] [nodatechange | (fulldatarequired all|<ReportsAppList>)]
|
||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath>)|(select <UserTypeEntity>)] (filtertime.* <Time>)* [filter|filters <String>] [fields|parameters <String>]
|
||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath>)|(select <UserTypeEntity>)] (filtertime<String> <Time>)* [filter|filters <String>] [fields|parameters <String>]
|
||||
[maxactivities <Number>] [maxresults <Number>]
|
||||
|
||||
Select the users for whom information is desired.
|
||||
@@ -13077,15 +13581,15 @@ gam print cros query "sync:#querytime1#.." querytime1 -30d
|
||||
For example, to print information about CrOS devices synced between 45 days ago and 30 days ago:
|
||||
gam print cros query "sync:#querytime1#..#querytime2#" querytime1 -45d querytime2 -30d
|
||||
|
||||
Added filtertime.* <Time> option to gam report to allow times, usually relative, to be substituted into the filter <String> option.
|
||||
The filtertime.* value replaces the string #filtertime.*# in the filter <String>.
|
||||
Added filtertime<String> <Time> option to gam report to allow times, usually relative, to be substituted into the filter <String> option.
|
||||
The filtertime<String> value replaces the string #filtertime<String># in the filter <String>.
|
||||
The characters following filtertime can be any combination of lowercase letters and numbers.
|
||||
gam report users|user [todrive <ToDriveAttribute>*] [date <Date>] [nodatechange | (fulldatarequired all|<ReportsAppList>)]
|
||||
[(user all|<UserItem>)|(select <UserTypeEntity>)] (filtertime.* <Time>)* [filter|filters <String>] [fields|parameters <String>]
|
||||
[(user all|<UserItem>)|(select <UserTypeEntity>)] (filtertime<String> <Time>)* [filter|filters <String>] [fields|parameters <String>]
|
||||
[maxactivities <Number>] [maxresults <Number>]
|
||||
gam report admin|calendar|calendars|drive|docs|doc|gplus|groups|group|logins|login|mobile|rules|tokens|token [todrive <ToDriveAttribute>*] [maxresults <Number>] [maxactivities <Number>]
|
||||
[([start <Time>] [end <Time>])|yesterday] [(user all|<UserItem>)|(select <UserTypeEntity>)]
|
||||
[event <String>] (filtertime.* <Time>)* [filter|filters <String>] [ip <String>] [countsonly] [summary]
|
||||
[event <String>] (filtertime<String> <Time>)* [filter|filters <String>] [ip <String>] [countsonly] [summary]
|
||||
|
||||
For example, this command reports on the users that haven't logged in in the last 5 years.
|
||||
gam report users parameters accounts:last_login_time filters "accounts:last_login_time<#filtertime#" filtertime -5y
|
||||
@@ -13241,21 +13745,21 @@ Added units of years to <Date>, <DateTime> and <Time>; a year is 365 days. Added
|
||||
never|
|
||||
now|today
|
||||
|
||||
Added filtertime <Time> option to gam report to allow times, usually relative, to be substituted into the filter <String> option.
|
||||
If both filtertime and filter are specified, the filtertime value replaces the string #filtertime# in the filter <String>.
|
||||
Added filtertime<String> <Time> option to gam report to allow times, usually relative, to be substituted into the filter <String> option.
|
||||
If both filtertime<String> and filter are specified, the filtertime value replaces the string #filtertime<String># in the filter <String>.
|
||||
|
||||
gam report users|user [todrive <ToDriveAttribute>*] [date <Date>] [nodatechange | (fulldatarequired all|<ReportsAppList>)]
|
||||
[(user all|<UserItem>)|(select <UserTypeEntity>)] [filtertime <Time>] [filter|filters <String>] [fields|parameters <String>]
|
||||
[(user all|<UserItem>)|(select <UserTypeEntity>)] [filtertime<String> <Time>] [filter|filters <String>] [fields|parameters <String>]
|
||||
[maxactivities <Number>] [maxresults <Number>]
|
||||
gam report admin|calendar|calendars|drive|docs|doc|gplus|groups|group|logins|login|mobile|rules|tokens|token [todrive <ToDriveAttribute>*] [maxresults <Number>] [maxactivities <Number>]
|
||||
[([start <Time>] [end <Time>])|yesterday] [(user all|<UserItem>)|(select <UserTypeEntity>)]
|
||||
[event <String>] [filtertime <Time>] [filter|filters <String>] [ip <String>] [countsonly] [summary]
|
||||
[event <String>] [filtertime<String> <Time>] [filter|filters <String>] [ip <String>] [countsonly] [summary]
|
||||
|
||||
For example, this command reports on the users that haven't logged in in the last 5 years.
|
||||
gam report users parameters accounts:last_login_time filters "accounts:last_login_time<#filtertime#" filtertime -5y
|
||||
gam report users parameters accounts:last_login_time filters "accounts:last_login_time<#filtertime5y#" filtertime5y -5y
|
||||
|
||||
For example, this command reports on the users that haven't ever logged in.
|
||||
gam report users parameters accounts:last_login_time filters "accounts:last_login_time==#filtertime#" filtertime never
|
||||
gam report users parameters accounts:last_login_time filters "accounts:last_login_time==#filtertimeNever#" filtertimeNever never
|
||||
|
||||
4.60.14
|
||||
|
||||
|
||||
1
src/README.md
Symbolic link
1
src/README.md
Symbolic link
@@ -0,0 +1 @@
|
||||
../README.md
|
||||
@@ -11,7 +11,7 @@ if __name__ == '__main__':
|
||||
# One time initialization
|
||||
if platform.system() != 'Linux':
|
||||
multiprocessing.freeze_support()
|
||||
multiprocessing.set_start_method('spawn')
|
||||
multiprocessing.set_start_method('spawn', force=True)
|
||||
initializeLogging()
|
||||
#
|
||||
CallGAMCommand(['gam', 'version'])
|
||||
|
||||
@@ -11,5 +11,5 @@ from gam.__main__ import main
|
||||
if __name__ == '__main__':
|
||||
if platform.system() != 'Linux':
|
||||
multiprocessing.freeze_support()
|
||||
multiprocessing.set_start_method('spawn')
|
||||
multiprocessing.set_start_method('spawn', force=True)
|
||||
main()
|
||||
|
||||
@@ -38,6 +38,10 @@ hiddenimports = [
|
||||
'gam.gamlib.yubikey',
|
||||
]
|
||||
|
||||
excludes = [
|
||||
'pkg_resources',
|
||||
]
|
||||
|
||||
runtime_hooks = []
|
||||
a = Analysis(
|
||||
['gam/__main__.py'],
|
||||
@@ -48,7 +52,7 @@ a = Analysis(
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=runtime_hooks,
|
||||
excludes=[],
|
||||
excludes=excludes,
|
||||
win_no_prefer_redirects=False,
|
||||
win_private_assemblies=False,
|
||||
cipher=None,
|
||||
|
||||
3701
src/gam/__init__.py
3701
src/gam/__init__.py
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -24,8 +24,10 @@ ACCESSCONTEXTMANAGER = 'accesscontextmanager'
|
||||
ALERTCENTER = 'alertcenter'
|
||||
ANALYTICS_ADMIN = 'analyticsadmin'
|
||||
CALENDAR = 'calendar'
|
||||
BUSINESSACCOUNTMANAGEMENT = 'mybusinessaccountmanagement'
|
||||
CBCM = 'cbcm'
|
||||
CHAT = 'chat'
|
||||
CHAT_CUSTOM_EMOJIS = 'chatcustomemojis'
|
||||
CHAT_EVENTS = 'chatevents'
|
||||
CHAT_MEMBERSHIPS = 'chatmemberships'
|
||||
CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
|
||||
@@ -84,6 +86,7 @@ PRINTERS = 'printers'
|
||||
PUBSUB = 'pubsub'
|
||||
REPORTS = 'reports'
|
||||
RESELLER = 'reseller'
|
||||
SEARCHCONSOLE = 'searchconsole'
|
||||
SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
|
||||
SERVICEMANAGEMENT = 'servicemanagement'
|
||||
SERVICEUSAGE = 'serviceusage'
|
||||
@@ -93,10 +96,13 @@ SITEVERIFICATION = 'siteVerification'
|
||||
STORAGE = 'storage'
|
||||
STORAGEREAD = 'storageread'
|
||||
STORAGEWRITE = 'storagewrite'
|
||||
TAGMANAGER = 'tagmanager'
|
||||
TAGMANAGER_USERS = 'tagmanagerusers'
|
||||
TASKS = 'tasks'
|
||||
VAULT = 'vault'
|
||||
YOUTUBE = 'youtube'
|
||||
#
|
||||
BUSINESSACCOUNTMANAGEMENT_SCOPE = 'https://www.googleapis.com/auth/business.manage'
|
||||
CHROMEVERSIONHISTORY_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms'
|
||||
DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive'
|
||||
GMAIL_SEND_SCOPE = 'https://www.googleapis.com/auth/gmail.send'
|
||||
@@ -113,11 +119,13 @@ USERINFO_PROFILE_SCOPE = 'https://www.googleapis.com/auth/userinfo.profile' # pr
|
||||
VAULT_SCOPES = ['https://www.googleapis.com/auth/ediscovery', 'https://www.googleapis.com/auth/ediscovery.readonly']
|
||||
REQUIRED_SCOPES = [USERINFO_EMAIL_SCOPE, USERINFO_PROFILE_SCOPE]
|
||||
REQUIRED_SCOPES_SET = set(REQUIRED_SCOPES)
|
||||
NUM_CLIENT_SCOPES_ERROR_LIMIT = 48
|
||||
#
|
||||
JWT_APIS = {
|
||||
ACCESSCONTEXTMANAGER: [CLOUD_PLATFORM_SCOPE],
|
||||
CHAT: ['https://www.googleapis.com/auth/chat.bot'],
|
||||
CLOUDRESOURCEMANAGER: [CLOUD_PLATFORM_SCOPE],
|
||||
IAM: [IAM_SCOPE],
|
||||
ORGPOLICY: [CLOUD_PLATFORM_SCOPE],
|
||||
}
|
||||
#
|
||||
@@ -131,6 +139,12 @@ APIS_NEEDING_ACCESS_TOKEN = {
|
||||
CBCM: ['https://www.googleapis.com/auth/admin.directory.device.chromebrowsers']
|
||||
}
|
||||
#
|
||||
DEPRECATED_SCOPES = {
|
||||
'https://www.googleapis.com/auth/cloud-identity',
|
||||
'https://www.googleapis.com/auth/cloud-platform',
|
||||
'https://www.googleapis.com/auth/iam',
|
||||
}
|
||||
#
|
||||
REFRESH_PERM_ERRORS = [
|
||||
'invalid_grant: reauth related error (rapt_required)', # no way to reauth today
|
||||
'invalid_grant: Token has been expired or revoked',
|
||||
@@ -163,6 +177,7 @@ PROJECT_APIS = [
|
||||
'alertcenter.googleapis.com',
|
||||
'analyticsadmin.googleapis.com',
|
||||
# 'audit.googleapis.com',
|
||||
'mybusinessaccountmanagement.googleapis.com',
|
||||
'calendar-json.googleapis.com',
|
||||
'chat.googleapis.com',
|
||||
'chromemanagement.googleapis.com',
|
||||
@@ -188,9 +203,11 @@ PROJECT_APIS = [
|
||||
'people.googleapis.com',
|
||||
'pubsub.googleapis.com',
|
||||
'reseller.googleapis.com',
|
||||
'searchconsole.googleapis.com',
|
||||
'sheets.googleapis.com',
|
||||
'siteverification.googleapis.com',
|
||||
'storage-api.googleapis.com',
|
||||
'tagmanager.googleapis.com',
|
||||
'tasks.googleapis.com',
|
||||
'vault.googleapis.com',
|
||||
'youtube.googleapis.com',
|
||||
@@ -200,9 +217,11 @@ _INFO = {
|
||||
ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
|
||||
ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
|
||||
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
||||
BUSINESSACCOUNTMANAGEMENT: {'name': 'Business Account Management API', 'version': 'v1', 'v2discovery': True},
|
||||
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
||||
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
||||
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True},
|
||||
CHAT_CUSTOM_EMOJIS: {'name': 'Chat API - Custom Emojis', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
@@ -217,15 +236,15 @@ _INFO = {
|
||||
CHROMEMANAGEMENT_TELEMETRY: {'name': 'Chrome Management API - Telemetry', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
|
||||
CHROMEPOLICY: {'name': 'Chrome Policy API', 'version': 'v1', 'v2discovery': True},
|
||||
CHROMEVERSIONHISTORY: {'name': 'Chrome Version History API', 'version': 'v1', 'v2discovery': True},
|
||||
CLOUDCHANNEL: {'name': 'Channel Channel API', 'version': 'v1', 'v2discovery': True},
|
||||
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity Devices API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_GROUPS: {'name': 'Cloud Identity Groups API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_GROUPS_BETA: {'name': 'Cloud Identity Groups API', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_INBOUND_SSO: {'name': 'Cloud Identity Inbound SSO API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity OrgUnits API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity OrgUnits API', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity Policy API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_USERINVITATIONS: {'name': 'Cloud Identity User Invitations API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDCHANNEL: {'name': 'Cloud Channel API', 'version': 'v1', 'v2discovery': True},
|
||||
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity API - Devices', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_GROUPS: {'name': 'Cloud Identity API - Groups', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_GROUPS_BETA: {'name': 'Cloud Identity API - Groups Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_INBOUND_SSO: {'name': 'Cloud Identity API - Inbound SSO Settings', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity API - OrgUnits', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity API - Policy', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDIDENTITY_USERINVITATIONS: {'name': 'Cloud Identity API - User Invitations', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||
CLOUDRESOURCEMANAGER: {'name': 'Cloud Resource Manager API v3', 'version': 'v3', 'v2discovery': True},
|
||||
CONTACTS: {'name': 'Contacts API', 'version': 'v3', 'v2discovery': False},
|
||||
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||
@@ -249,16 +268,17 @@ _INFO = {
|
||||
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
||||
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||
MEET: {'name': 'Meet API', 'version': 'v2', 'v2discovery': True},
|
||||
MEET_BETA: {'name': 'Meet API', 'version': 'v2beta', 'v2discovery': True, 'localjson': True, 'mappedAPI': MEET},
|
||||
MEET_BETA: {'name': 'Meet API Beta', 'version': 'v2beta', 'v2discovery': True, 'localjson': True, 'mappedAPI': MEET},
|
||||
OAUTH2: {'name': 'OAuth2 API', 'version': 'v2', 'v2discovery': False},
|
||||
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
||||
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
||||
PEOPLE_DIRECTORY: {'name': 'People Directory API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': PEOPLE},
|
||||
PEOPLE_OTHERCONTACTS: {'name': 'People API - Other Contacts', 'version': 'v1', 'v2discovery': True, 'mappedAPI': PEOPLE},
|
||||
PRINTERS: {'name': 'Directory API Printers', 'version': 'directory_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||
PRINTERS: {'name': 'Directory API - Printers', 'version': 'directory_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||
PUBSUB: {'name': 'Pub / Sub API', 'version': 'v1', 'v2discovery': True},
|
||||
REPORTS: {'name': 'Reports API', 'version': 'reports_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||
RESELLER: {'name': 'Reseller API', 'version': 'v1', 'v2discovery': True},
|
||||
SEARCHCONSOLE: {'name': 'Search Console API', 'version': 'v1', 'v2discovery': True},
|
||||
SERVICEACCOUNTLOOKUP: {'name': 'Service Account Lookup pseudo-API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||
SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
|
||||
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
||||
@@ -268,6 +288,8 @@ _INFO = {
|
||||
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
||||
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
||||
STORAGEWRITE: {'name': 'Cloud Storage API - Write', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
||||
TAGMANAGER: {'name': 'Tag Manager API - Accounts, Containers, Workspaces, Tags', 'version': 'v2', 'v2discovery': True},
|
||||
TAGMANAGER_USERS: {'name': 'Tag Manager API - Users', 'version': 'v2', 'v2discovery': True, 'mappedAPI': TAGMANAGER},
|
||||
TASKS: {'name': 'Tasks API', 'version': 'v1', 'v2discovery': True},
|
||||
VAULT: {'name': 'Vault API', 'version': 'v1', 'v2discovery': True},
|
||||
YOUTUBE: {'name': 'Youtube API', 'version': 'v3', 'v2discovery': True},
|
||||
@@ -276,6 +298,11 @@ _INFO = {
|
||||
READONLY = ['readonly',]
|
||||
|
||||
_CLIENT_SCOPES = [
|
||||
{'name': 'Business Account Management API',
|
||||
'api': BUSINESSACCOUNTMANAGEMENT,
|
||||
'subscopes': [],
|
||||
'offByDefault': True,
|
||||
'scope': BUSINESSACCOUNTMANAGEMENT_SCOPE},
|
||||
{'name': 'Calendar API',
|
||||
'api': CALENDAR,
|
||||
'subscopes': READONLY,
|
||||
@@ -353,29 +380,29 @@ _CLIENT_SCOPES = [
|
||||
'subscopes': READONLY,
|
||||
'offByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
||||
{'name': 'Cloud Identity Groups API',
|
||||
{'name': 'Cloud Identity API - Groups',
|
||||
'api': CLOUDIDENTITY_GROUPS,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
||||
{'name': 'Cloud Identity Groups API Beta (Enables group locking/unlocking)',
|
||||
{'name': 'Cloud Identity API - Groups Beta (Enables group locking/unlocking)',
|
||||
'api': CLOUDIDENTITY_GROUPS_BETA,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
||||
{'name': 'Cloud Identity - Inbound SSO Settings',
|
||||
{'name': 'Cloud Identity API - Inbound SSO Settings',
|
||||
'api': CLOUDIDENTITY_INBOUND_SSO,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.inboundsso'},
|
||||
{'name': 'Cloud Identity OrgUnits API',
|
||||
{'name': 'Cloud Identity API - OrgUnits Beta',
|
||||
'api': CLOUDIDENTITY_ORGUNITS_BETA,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.orgunits'},
|
||||
{'name': 'Cloud Identity - Policy',
|
||||
{'name': 'Cloud Identity API - Policy',
|
||||
'api': CLOUDIDENTITY_POLICY,
|
||||
'subscopes': READONLY,
|
||||
'roByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'
|
||||
},
|
||||
{'name': 'Cloud Identity User Invitations API',
|
||||
{'name': 'Cloud Identity API - User Invitations',
|
||||
'api': CLOUDIDENTITY_USERINVITATIONS,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.userinvitations'},
|
||||
@@ -537,6 +564,10 @@ _SVCACCT_SCOPES = [
|
||||
'api': CALENDAR,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/calendar'},
|
||||
{'name': 'Chat API - Custom Emojis',
|
||||
'api': CHAT_CUSTOM_EMOJIS,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/chat.customemojis'},
|
||||
{'name': 'Chat API - Memberships',
|
||||
'api': CHAT_MEMBERSHIPS,
|
||||
'subscopes': READONLY,
|
||||
@@ -596,7 +627,7 @@ _SVCACCT_SCOPES = [
|
||||
{'name': 'Cloud Identity Devices API',
|
||||
'api': CLOUDIDENTITY_DEVICES,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity'},
|
||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.devices'},
|
||||
# {'name': 'Cloud Identity User Invitations API',
|
||||
# 'api': CLOUDIDENTITY_USERINVITATIONS,
|
||||
# 'subscopes': READONLY,
|
||||
@@ -637,7 +668,7 @@ _SVCACCT_SCOPES = [
|
||||
'api': GMAIL,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/gmail.modify'},
|
||||
{'name': 'Gmail API - Basic Settings (Filters,IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
||||
{'name': 'Gmail API - Basic Settings (Filters, IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
||||
'api': GMAIL,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
||||
@@ -645,10 +676,11 @@ _SVCACCT_SCOPES = [
|
||||
'api': GMAIL,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
|
||||
{'name': 'Identity and Access Management API',
|
||||
'api': IAM,
|
||||
'subscopes': [],
|
||||
'scope': CLOUD_PLATFORM_SCOPE},
|
||||
# {'name': 'Identity and Access Management API',
|
||||
# 'api': IAM,
|
||||
# 'offByDefault': True,
|
||||
# 'subscopes': [],
|
||||
# 'scope': CLOUD_PLATFORM_SCOPE},
|
||||
{'name': 'Keep API',
|
||||
'api': KEEP,
|
||||
'subscopes': READONLY,
|
||||
@@ -678,10 +710,30 @@ _SVCACCT_SCOPES = [
|
||||
'api': PEOPLE_OTHERCONTACTS,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/contacts.other.readonly'},
|
||||
{'name': 'Search Console API - read only',
|
||||
'api': SEARCHCONSOLE,
|
||||
'subscopes': [],
|
||||
'offByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/webmasters.readonly'},
|
||||
{'name': 'Sheets API',
|
||||
'api': SHEETS,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
||||
{'name': 'Site Verification API',
|
||||
'api': SITEVERIFICATION,
|
||||
'subscopes': [],
|
||||
'offByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
||||
{'name': 'Tag Manager API - Accounts, Containers, Workspaces, Tags - read only',
|
||||
'api': TAGMANAGER,
|
||||
'subscopes': [],
|
||||
'offByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/tagmanager.readonly'},
|
||||
{'name': 'Tag Manager API - Users',
|
||||
'api': TAGMANAGER_USERS,
|
||||
'subscopes': [],
|
||||
'offByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/tagmanager.manage.users'},
|
||||
{'name': 'Tasks API',
|
||||
'api': TASKS,
|
||||
'subscopes': READONLY,
|
||||
@@ -721,56 +773,6 @@ _USER_SVCACCT_ONLY_SCOPES = [
|
||||
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
||||
]
|
||||
|
||||
DRIVE3_TO_DRIVE2_ABOUT_FIELDS_MAP = {
|
||||
'displayName': 'name',
|
||||
'limit': 'quotaBytesTotal',
|
||||
'usage': 'quotaBytesUsedAggregate',
|
||||
'usageInDrive': 'quotaBytesUsed',
|
||||
'usageInDriveTrash': 'quotaBytesUsedInTrash',
|
||||
}
|
||||
|
||||
DRIVE3_TO_DRIVE2_CAPABILITIES_FIELDS_MAP = {
|
||||
'canComment': 'canComment',
|
||||
'canReadRevisions': 'canReadRevisions',
|
||||
'canCopy': 'copyable',
|
||||
'canEdit': 'editable',
|
||||
'canShare': 'shareable',
|
||||
}
|
||||
|
||||
DRIVE3_TO_DRIVE2_CAPABILITIES_NAMES_MAP = {
|
||||
'canChangeViewersCanCopyContent': 'canChangeRestrictedDownload',
|
||||
}
|
||||
|
||||
DRIVE3_TO_DRIVE2_FILES_FIELDS_MAP = {
|
||||
'allowFileDiscovery': 'withLink',
|
||||
'createdTime': 'createdDate',
|
||||
'expirationTime': 'expirationDate',
|
||||
'modifiedByMe': 'modified',
|
||||
'modifiedByMeTime': 'modifiedByMeDate',
|
||||
'modifiedTime': 'modifiedDate',
|
||||
'name': 'title',
|
||||
'restrictionTime': 'restrictionDate',
|
||||
'sharedWithMeTime': 'sharedWithMeDate',
|
||||
'size': 'fileSize',
|
||||
'trashedTime': 'trashedDate',
|
||||
'viewedByMe': 'viewed',
|
||||
'viewedByMeTime': 'lastViewedByMeDate',
|
||||
'webViewLink': 'alternateLink',
|
||||
}
|
||||
|
||||
DRIVE3_TO_DRIVE2_LABELS_MAP = {
|
||||
'modifiedByMe': 'modified',
|
||||
'starred': 'starred',
|
||||
'trashed': 'trashed',
|
||||
'viewedByMe': 'viewed',
|
||||
}
|
||||
|
||||
DRIVE3_TO_DRIVE2_REVISIONS_FIELDS_MAP = {
|
||||
'modifiedTime': 'modifiedDate',
|
||||
'keepForever': 'pinned',
|
||||
'size': 'fileSize',
|
||||
}
|
||||
|
||||
def getAPIName(api):
|
||||
return _INFO[api]['name']
|
||||
|
||||
@@ -819,3 +821,27 @@ def getSvcAcctScopesList(userServiceAccountAccessOnly, svcAcctSpecialScopes):
|
||||
|
||||
def hasLocalJSON(api):
|
||||
return _INFO[api].get('localjson', False)
|
||||
|
||||
def findAPIforScope(scopesList):
|
||||
def checkScopeMatch(scope, cscope):
|
||||
if cscope['scope'] == scope:
|
||||
requiredAPIs.append(cscope['name'])
|
||||
return True
|
||||
if cscope['subscopes'] == READONLY and cscope['scope']+'.readonly' == scope:
|
||||
requiredAPIs.append(cscope['name']+' (supports readonly)')
|
||||
return True
|
||||
return False
|
||||
|
||||
requiredAPIs = []
|
||||
for scope in scopesList:
|
||||
for cscope in _CLIENT_SCOPES:
|
||||
if checkScopeMatch(scope, cscope):
|
||||
break
|
||||
else:
|
||||
for cscope in _SVCACCT_SCOPES:
|
||||
if checkScopeMatch(scope, cscope):
|
||||
break
|
||||
if not requiredAPIs:
|
||||
requiredAPIs = scopesList
|
||||
return ' or '.join(requiredAPIs)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -155,14 +155,14 @@ DRIVE_DIR = 'drive_dir'
|
||||
DRIVE_MAX_RESULTS = 'drive_max_results'
|
||||
# Use Drive V3 beta
|
||||
DRIVE_V3_BETA = 'drive_v3_beta'
|
||||
# Use Drive V3 ntive names
|
||||
DRIVE_V3_NATIVE_NAMES = 'drive_v3_native_names'
|
||||
# When processing email messages in batches, how many should be processed in each batch
|
||||
EMAIL_BATCH_SIZE = 'email_batch_size'
|
||||
# Enable Delegated Admin Service Account
|
||||
ENABLE_DASA = 'enable_dasa'
|
||||
# Enable Cloud Session Reauthentication by borrowing a RAPT token from gcloud command
|
||||
ENABLE_GCLOUD_REAUTH = 'enable_gcloud_reauth'
|
||||
# Value for enforceExpansiveAccess for commands that delete or update drive file ACLs/permissions.
|
||||
ENFORCE_EXPANSIVE_ACCESS = 'enforce_expansive_access'
|
||||
# When retrieving lists of calendar events from API, how many should be retrieved in each chunk
|
||||
EVENT_MAX_RESULTS = 'event_max_results'
|
||||
# Path to extra_args.txt
|
||||
@@ -260,12 +260,12 @@ SMTP_HOST = 'smtp_host'
|
||||
SMTP_USERNAME = 'smtp_username'
|
||||
# SMTP password
|
||||
SMTP_PASSWORD = 'smtp_password'
|
||||
# Time Zone
|
||||
TIMEZONE = 'timezone'
|
||||
## Minimum TLS Version required for HTTPS connections
|
||||
TLS_MIN_VERSION = 'tls_min_version'
|
||||
## Maximum TLS Version used for HTTPS connections
|
||||
TLS_MAX_VERSION = 'tls_max_version'
|
||||
# Time Zone
|
||||
TIMEZONE = 'timezone'
|
||||
# Clear basic filter when updating an existing sheet
|
||||
TODRIVE_CLEARFILTER = 'todrive_clearfilter'
|
||||
# Use client access for todrive
|
||||
@@ -377,9 +377,9 @@ Defaults = {
|
||||
DEVICE_MAX_RESULTS: '200',
|
||||
DOMAIN: '',
|
||||
DRIVE_DIR: '',
|
||||
ENFORCE_EXPANSIVE_ACCESS: TRUE,
|
||||
DRIVE_MAX_RESULTS: '1000',
|
||||
DRIVE_V3_BETA: FALSE,
|
||||
DRIVE_V3_NATIVE_NAMES: TRUE,
|
||||
EMAIL_BATCH_SIZE: '50',
|
||||
ENABLE_DASA: FALSE,
|
||||
ENABLE_GCLOUD_REAUTH: FALSE,
|
||||
@@ -431,9 +431,9 @@ Defaults = {
|
||||
SMTP_HOST: '',
|
||||
SMTP_USERNAME: '',
|
||||
SMTP_PASSWORD: '',
|
||||
TIMEZONE: 'utc',
|
||||
TLS_MIN_VERSION: 'TLSv1_3',
|
||||
TLS_MAX_VERSION: '',
|
||||
TIMEZONE: 'utc',
|
||||
TODRIVE_CLEARFILTER: FALSE,
|
||||
TODRIVE_CLIENTACCESS: FALSE,
|
||||
TODRIVE_CONVERSION: TRUE,
|
||||
@@ -545,9 +545,9 @@ VAR_INFO = {
|
||||
DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
||||
DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
|
||||
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
||||
ENFORCE_EXPANSIVE_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
||||
DRIVE_V3_BETA: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
DRIVE_V3_NATIVE_NAMES: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
EMAIL_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
||||
ENABLE_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
||||
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
@@ -599,9 +599,9 @@ VAR_INFO = {
|
||||
SMTP_HOST: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
||||
SMTP_USERNAME: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
||||
SMTP_PASSWORD: {VAR_TYPE: TYPE_PASSWORD, VAR_LIMITS: (0, None)},
|
||||
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
||||
TLS_MIN_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MIN_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
||||
TLS_MAX_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MAX_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
||||
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
||||
TODRIVE_CLEARFILTER: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
TODRIVE_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
TODRIVE_CONVERSION: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -411,6 +411,7 @@ class GamCLArgs():
|
||||
ARG_ALERTFEEDBACK = 'alertfeedback'
|
||||
ARG_ALERTFEEDBACKS = 'alertfeedbacks'
|
||||
ARG_ALERTSFEEDBACK = 'alertsfeedback'
|
||||
ARG_ALERTSETTINGS = 'alertsettings'
|
||||
ARG_ALIAS = 'alias'
|
||||
ARG_ALIASES = 'aliases'
|
||||
ARG_ALIASDOMAIN = 'aliasdomain'
|
||||
@@ -441,6 +442,8 @@ class GamCLArgs():
|
||||
ARG_BUCKETS = 'buckets'
|
||||
ARG_BUILDING = 'building'
|
||||
ARG_BUILDINGS = 'buildings'
|
||||
ARG_BUSINESSPROFILEACCOUNT = 'businessprofileaccount'
|
||||
ARG_BUSINESSPROFILEACCOUNTS = 'businessprofileaccounts'
|
||||
ARG_CAALEVEL = 'caalevel'
|
||||
ARG_CAALEVELS = 'caalevels'
|
||||
ARG_CALATTENDEES = 'calattendees'
|
||||
@@ -461,6 +464,8 @@ class GamCLArgs():
|
||||
ARG_CHANNELSKU = 'channelsku'
|
||||
ARG_CHANNELSKUS = 'channelskus'
|
||||
ARG_CHAT = 'chat'
|
||||
ARG_CHATEMOJI = 'chatemoji'
|
||||
ARG_CHATEMOJIS = 'chatemojis'
|
||||
ARG_CHATEVENT = 'chatevent'
|
||||
ARG_CHATEVENTS = 'chatevents'
|
||||
ARG_CHATMEMBER = 'chatmember'
|
||||
@@ -483,6 +488,8 @@ class GamCLArgs():
|
||||
ARG_CHROMEPOLICIES = 'chromepolicies'
|
||||
ARG_CHROMEPROFILE = 'chromeprofile'
|
||||
ARG_CHROMEPROFILES = 'chromeprofiles'
|
||||
ARG_CHROMEPROFILECOMMAND = 'chromeprofilecommand'
|
||||
ARG_CHROMEPROFILECOMMANDS = 'chromeprofilecommands'
|
||||
ARG_CHROMESCHEMA = 'chromeschema'
|
||||
ARG_CHROMESCHEMAS = 'chromeschemas'
|
||||
ARG_CHROMESNVALIDITY = 'chromesnvalidity'
|
||||
@@ -755,6 +762,7 @@ class GamCLArgs():
|
||||
ARG_SHAREDDRIVES = 'shareddrives'
|
||||
ARG_SHAREDDRIVEACLS = 'shareddriveacls'
|
||||
ARG_SHAREDDRIVEINFO = 'shareddriveinfo'
|
||||
ARG_SHAREDDRIVEORGANIZERS = 'shareddriveorganizers'
|
||||
ARG_SHAREDDRIVETHEMES = 'shareddrivethemes'
|
||||
ARG_SHEET = 'sheet'
|
||||
ARG_SHEETS = 'sheets'
|
||||
@@ -774,8 +782,19 @@ class GamCLArgs():
|
||||
ARG_STORAGEBUCKETS = 'storagebuckets'
|
||||
ARG_STORAGEFILE = 'storagefile'
|
||||
ARG_STORAGEFILES = 'storagefiles'
|
||||
ARG_SUSPENDED = 'suspended'
|
||||
ARG_SVCACCT = 'svcacct'
|
||||
ARG_SVCACCTS = 'svcaccts'
|
||||
ARG_TAGMANAGERACCOUNT = 'tagmanageraccount'
|
||||
ARG_TAGMANAGERACCOUNTS = 'tagmanageraccounts'
|
||||
ARG_TAGMANAGERCONTAINER = 'tagmanagercontainer'
|
||||
ARG_TAGMANAGERCONTAINERS = 'tagmanagercontainers'
|
||||
ARG_TAGMANAGERPERMISSION = 'tagmanagerpermission'
|
||||
ARG_TAGMANAGERPERMISSIONS = 'tagmanagerpermissions'
|
||||
ARG_TAGMANAGERTAG = 'tagmanagertag'
|
||||
ARG_TAGMANAGERTAGS = 'tagmanagertags'
|
||||
ARG_TAGMANAGERWORKSPACE = 'tagmanagerworkspace'
|
||||
ARG_TAGMANAGERWORKSPACES = 'tagmanagerworkspaces'
|
||||
ARG_TASK = 'task'
|
||||
ARG_TASKS = 'tasks'
|
||||
ARG_TASKLIST = 'tasklist'
|
||||
@@ -784,6 +803,7 @@ class GamCLArgs():
|
||||
ARG_TEAMDRIVES = 'teamdrives'
|
||||
ARG_TEAMDRIVEACLS = 'teamdriveacls'
|
||||
ARG_TEAMDRIVEINFO = 'teamdriveinfo'
|
||||
ARG_TEAMDRIVEORGANIZERS = 'teamdriveorganizers'
|
||||
ARG_TEAMDRIVETHEMES = 'teamdrivethemes'
|
||||
ARG_THREAD = 'thread'
|
||||
ARG_THREADS = 'threads'
|
||||
@@ -813,6 +833,10 @@ class GamCLArgs():
|
||||
ARG_VERIFICATION = 'verification'
|
||||
ARG_VERIFICATIONCODES = 'verificationcodes'
|
||||
ARG_VERIFY = 'verify'
|
||||
ARG_WEBMASTERSITE = 'webmastersite'
|
||||
ARG_WEBMASTERSITES = 'webmastersites'
|
||||
ARG_WEBRESOURCE = 'webresource'
|
||||
ARG_WEBRESOURCES = 'webresources'
|
||||
ARG_WORKINGLOCATION = 'workinglocation'
|
||||
ARG_WORKINGLOCATIONS = 'workinglocations'
|
||||
ARG_YOUTUBECHANNEL = 'youtubechannel'
|
||||
@@ -841,6 +865,8 @@ class GamCLArgs():
|
||||
OB_CHARACTER = 'Character'
|
||||
OB_CHAR_SET = 'CharacterSet'
|
||||
OG_CHAT_ATTACHMENT = 'ChatAttachment'
|
||||
OB_CHAT_EMOJI = 'ChatEmoji'
|
||||
OB_CHAT_EMOJI_NAME = 'ChatEmojiName'
|
||||
OB_CHAT_EVENT = 'ChatEvent'
|
||||
OB_CHAT_MEMBER = 'ChatMember'
|
||||
OB_CHAT_MESSAGE = 'ChatMessage'
|
||||
@@ -848,7 +874,10 @@ class GamCLArgs():
|
||||
OB_CHAT_SPACE = 'ChatSpace'
|
||||
OB_CHAT_SPACE_LIST = 'ChatSpaceList'
|
||||
OB_CHAT_THREAD = 'ChatThread'
|
||||
OB_CHROMEPROFILE_ID = 'ChromeProfileId'
|
||||
OB_CHROMEPROFILE_NAME = 'ChromeProfileName'
|
||||
OB_CHROMEPROFILE_NAME_LIST = 'ChromeProfileNameList'
|
||||
OB_CHROMEPROFILE_COMMAND_NAME = 'ChromeProfileCommandName'
|
||||
OB_CHROMEPROFILE_COMMAND_NAME_LIST = 'ChromeProfileNameCommandList'
|
||||
OB_CHROME_VERSION = 'ChromeVersion'
|
||||
OB_CIDR_NETMASK = 'CIDRnetmask'
|
||||
OB_CIGROUP_ALIAS_LIST = "CIGroupAliasList"
|
||||
@@ -869,8 +898,11 @@ class GamCLArgs():
|
||||
OB_CONTACT_GROUP_ITEM = 'ContactGroupItem'
|
||||
OB_COURSE_ALIAS = 'CourseAlias'
|
||||
OB_COURSE_ALIAS_ENTITY = 'CourseAliasEntity'
|
||||
OB_COURSE_ANNOUNCEMENT_ID = "CourseAnnouncementID"
|
||||
OB_COURSE_ANNOUNCEMENT_ID_ENTITY = "CourseAnnouncementIDEntity"
|
||||
OB_COURSE_ANNOUNCEMENT_STATE_LIST = "CourseAnnouncementStateList"
|
||||
OB_COURSE_ANNOUNCEMENT_ADD_STATE_LIST = "CourseAnnouncementAddStateList"
|
||||
OB_COURSE_ANNOUNCEMENT_UPDATE_STATE_LIST = "CourseAnnouncementUpdateStateList"
|
||||
OB_COURSE_ENTITY = 'CourseEntity'
|
||||
OB_COURSE_ID = 'CourseID'
|
||||
OB_COURSE_MATERIAL_ID_ENTITY = 'CourseMaterialIDEntity'
|
||||
@@ -928,6 +960,7 @@ class GamCLArgs():
|
||||
OB_FILE_NAME = 'FileName'
|
||||
OB_FILE_NAME_FIELD_NAME = OB_FILE_NAME+'(:'+OB_FIELD_NAME+')+'
|
||||
OB_FILE_NAME_OR_URL = 'FileName|URL'
|
||||
OB_FILE_NAME_PATTERN = 'FileNamePattern'
|
||||
OB_FILE_PATH = 'FilePath'
|
||||
OB_FILTER_ID_ENTITY = 'FilterIDEntity'
|
||||
OB_FORMAT_LIST = 'FormatList'
|
||||
@@ -964,6 +997,7 @@ class GamCLArgs():
|
||||
OB_MOBILE_ENTITY = 'MobileEntity'
|
||||
OB_NETWORK_ID = 'networkID'
|
||||
OB_NAME = 'Name'
|
||||
OB_ORGANIZER_TYPE_LIST = 'OrganizerTypeList'
|
||||
OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
|
||||
OB_ORGUNIT_ITEM = 'OrgUnitItem'
|
||||
OB_ORGUNIT_PATH = 'OrgUnitPath'
|
||||
@@ -972,7 +1006,6 @@ class GamCLArgs():
|
||||
OB_PERMISSION_ID_LIST = 'PermissionIDList'
|
||||
OB_PERMISSION_ROLE_LIST = 'PermissionRoleList'
|
||||
OB_PERMISSION_TYPE_LIST = 'PermissionTypeList'
|
||||
OB_PHOTO_FILENAME_PATTERN = 'FilenameNamePattern'
|
||||
OB_PRINTER_ID = 'PrinterID'
|
||||
OB_PRIVILEGE_LIST = 'PrivilegeList'
|
||||
OB_PRODUCT_ID = 'ProductID'
|
||||
@@ -981,6 +1014,7 @@ class GamCLArgs():
|
||||
OB_PROJECT_ID_ENTITY = 'ProjectIDEntity'
|
||||
OB_PROPERTY_KEY = 'PropertyKey'
|
||||
OB_PROPERTY_VALUE = 'PropertyValue'
|
||||
OB_PUBSUB_TOPIC_NAME = 'PubSubTopicName'
|
||||
OB_QUERY = 'Query'
|
||||
OB_QUERY_ITEM = 'QueryItem'
|
||||
OB_QUERY_LIST = 'QueryList'
|
||||
@@ -1023,6 +1057,7 @@ class GamCLArgs():
|
||||
OB_STRING_LIST = 'StringList'
|
||||
OB_STUDENT_ITEM = 'StudentItem'
|
||||
OB_TAG = 'Tag'
|
||||
OB_TAGMANAGER_PATH_LIST = 'TagManagerPathList'
|
||||
OB_TASK_ID = 'TaskID'
|
||||
OB_TASKLIST_ID = 'TaskListID'
|
||||
OB_TASKLIST_ID_ENTITY = 'TaskListIDEntity'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -54,6 +54,7 @@ class GamEntity():
|
||||
ALERT_ID = 'alri'
|
||||
ALERT_FEEDBACK = 'alfb'
|
||||
ALERT_FEEDBACK_ID = 'alfi'
|
||||
ALERT_SETTINGS = 'alrs'
|
||||
ALIAS = 'alia'
|
||||
ALIAS_EMAIL = 'alie'
|
||||
ALIAS_TARGET = 'alit'
|
||||
@@ -75,6 +76,7 @@ class GamEntity():
|
||||
BACKUP_VERIFICATION_CODES = 'buvc'
|
||||
BUILDING = 'bldg'
|
||||
BUILDING_ID = 'bldi'
|
||||
BUSINESS_PROFILE_ACCOUNT = 'bpac'
|
||||
CAA_LEVEL = 'calv'
|
||||
CALENDAR = 'cale'
|
||||
CALENDAR_ACL = 'cacl'
|
||||
@@ -86,6 +88,7 @@ class GamEntity():
|
||||
CHANNEL_SKU = 'chsk'
|
||||
CHAT_BOT = 'chbo'
|
||||
CHAT_ADMIN = 'chad'
|
||||
CHAT_EMOJI = 'chem'
|
||||
CHAT_EVENT = 'chev'
|
||||
CHAT_MANAGER_USER = 'chgu'
|
||||
CHAT_MEMBER = 'chme'
|
||||
@@ -110,6 +113,7 @@ class GamEntity():
|
||||
CHROME_POLICY_IMAGE = 'cpim'
|
||||
CHROME_POLICY_SCHEMA = 'cpsc'
|
||||
CHROME_PROFILE = 'cpro'
|
||||
CHROME_PROFILE_COMMAND = 'cpcm'
|
||||
CHROME_RELEASE = 'crel'
|
||||
CHROME_VERSION = 'cver'
|
||||
CLASSIFICATION_LABEL = 'dlab'
|
||||
@@ -282,10 +286,11 @@ class GamEntity():
|
||||
MIMETYPE = 'mime'
|
||||
MOBILE_DEVICE = 'mobi'
|
||||
NAME = 'name'
|
||||
NONEDITABLE_ALIAS = 'neal'
|
||||
NOTE = 'note'
|
||||
NOTE_ACL = 'nota'
|
||||
NOTES_ACLS = 'naac'
|
||||
NONEDITABLE_ALIAS = 'neal'
|
||||
NOTIFICATION = 'noti'
|
||||
OAUTH2_TXT_FILE = 'oaut'
|
||||
OAUTH2SERVICE_JSON_FILE = 'oau2'
|
||||
ORGANIZATIONAL_UNIT = 'orgu'
|
||||
@@ -356,7 +361,12 @@ class GamEntity():
|
||||
SUBSCRIPTION = 'subs'
|
||||
SVCACCT = 'svac'
|
||||
SVCACCT_KEY = 'svky'
|
||||
TARGET_USER = 'tgt'
|
||||
TAGMANAGER_ACCOUNT = 'tmac'
|
||||
TAGMANAGER_CONTAINER = 'tmco'
|
||||
TAGMANAGER_PERMISSION = 'tmpm'
|
||||
TAGMANAGER_TAG = 'tmtg'
|
||||
TAGMANAGER_WORKSPACE = 'tmws'
|
||||
TARGET_USER = 'tgt '
|
||||
TASK = 'task'
|
||||
TASKLIST = 'tali'
|
||||
TEACHER = 'teac'
|
||||
@@ -387,6 +397,8 @@ class GamEntity():
|
||||
VAULT_MATTER_ID = 'vlmi'
|
||||
VAULT_OPERATION = 'vlto'
|
||||
VAULT_QUERY = 'vltq'
|
||||
WEB_MASTERSITE = 'wems'
|
||||
WEB_RESOURCE = 'were'
|
||||
WEBCLIPS_ENABLED = 'webc'
|
||||
YOUTUBE_CHANNEL = 'ytch'
|
||||
# _NAMES[0] is plural, _NAMES[1] is singular unless the item name is explicitly plural (Calendar Settings)
|
||||
@@ -404,6 +416,7 @@ class GamEntity():
|
||||
ALERT_ID: ['Alert IDs', 'Alert ID'],
|
||||
ALERT_FEEDBACK: ['Alert Feedbacks', 'Alert Feedback'],
|
||||
ALERT_FEEDBACK_ID: ['Alert Feedback IDs', 'Alert Feedback ID'],
|
||||
ALERT_SETTINGS: ['Alert Settings', 'Alert Settings'],
|
||||
ALIAS: ['Aliases', 'Alias'],
|
||||
ALIAS_EMAIL: ['Alias Emails', 'Alias Email'],
|
||||
ALIAS_TARGET: ['Alias Targets', 'Alias Target'],
|
||||
@@ -425,6 +438,7 @@ class GamEntity():
|
||||
BACKUP_VERIFICATION_CODES: ['Backup Verification Codes', 'Backup Verification Codes'],
|
||||
BUILDING: ['Buildings', 'Building'],
|
||||
BUILDING_ID: ['Building IDs', 'Building ID'],
|
||||
BUSINESS_PROFILE_ACCOUNT: ['Business Profile Accounts', 'Business Profile Account'],
|
||||
CAA_LEVEL: ['CAA Levels', 'CAA Level'],
|
||||
CALENDAR: ['Calendars', 'Calendar'],
|
||||
CALENDAR_ACL: ['Calendar ACLs', 'Calendar ACL'],
|
||||
@@ -436,6 +450,7 @@ class GamEntity():
|
||||
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
||||
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
||||
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
||||
CHAT_EMOJI: ['Chat Emojis', 'Chat Emoji'],
|
||||
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
||||
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
||||
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
||||
@@ -460,6 +475,7 @@ class GamEntity():
|
||||
CHROME_POLICY_IMAGE: ['Chrome Policy Images', 'Chrome Policy Image'],
|
||||
CHROME_POLICY_SCHEMA: ['Chrome Policy Schemas', 'Chrome Policy Schema'],
|
||||
CHROME_PROFILE: ['Chrome Profiles', 'Chrome Profile'],
|
||||
CHROME_PROFILE_COMMAND: ['Chrome Profile Commands', 'Chrome Profile Command'],
|
||||
CHROME_RELEASE: ['Chrome Releases', 'Chrome Release'],
|
||||
CHROME_VERSION: ['Chrome Versions', 'Chrome Version'],
|
||||
CLASSIFICATION_LABEL: ['Classification Labels', 'Classification Label'],
|
||||
@@ -632,10 +648,11 @@ class GamEntity():
|
||||
MIMETYPE: ['MIME Types', 'MIME Type'],
|
||||
MOBILE_DEVICE: ['Mobile Devices', 'Mobile Device'],
|
||||
NAME: ['Names', 'Name'],
|
||||
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
||||
NOTE: ['Notes', 'Note'],
|
||||
NOTE_ACL: ['Note ACLs', 'Note ACL'],
|
||||
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
|
||||
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
||||
NOTIFICATION: ['Notifications', 'Notification'],
|
||||
OAUTH2_TXT_FILE: ['Client OAuth2 File', 'Client OAuth2 File'],
|
||||
OAUTH2SERVICE_JSON_FILE: ['Service Account OAuth2 File', 'Service Account OAuth2 File'],
|
||||
ORGANIZATIONAL_UNIT: ['Organizational Units', 'Organizational Unit'],
|
||||
@@ -706,6 +723,11 @@ class GamEntity():
|
||||
SUBSCRIPTION: ['Subscriptions', 'Subscription'],
|
||||
SVCACCT: ['Service Accounts', 'Service Account'],
|
||||
SVCACCT_KEY: ['Service Account Keys', 'Service Account Key'],
|
||||
TAGMANAGER_ACCOUNT: ['Tag Manager Accounts', 'Tag Manager Account'],
|
||||
TAGMANAGER_CONTAINER: ['Tag Manager Containers', 'Tag Manager Container'],
|
||||
TAGMANAGER_PERMISSION: ['Tag Manager Permissions', 'Tag Manager Permission'],
|
||||
TAGMANAGER_TAG: ['Tag Manager Tags', 'Tag Manager Tag'],
|
||||
TAGMANAGER_WORKSPACE: ['Tag Manager Workspaces', 'Tag Manager Workspace'],
|
||||
TARGET_USER: ['Target Users', 'Target User'],
|
||||
TASK: ['Tasks', 'Task'],
|
||||
TASKLIST: ['Tasklists', 'Tasklist'],
|
||||
@@ -738,6 +760,8 @@ class GamEntity():
|
||||
VAULT_OPERATION: ['Vault Operations', 'Vault Operation'],
|
||||
VAULT_QUERY: ['Vault Queries', 'Vault Query'],
|
||||
WEBCLIPS_ENABLED: ['Web Clips Enabled', 'Web Clips Enabled'],
|
||||
WEB_MASTERSITE: ['Web Master Sites', 'Web Master Site'],
|
||||
WEB_RESOURCE: ['Web Resources', 'Web Resource'],
|
||||
YOUTUBE_CHANNEL: ['YouTube Channels', 'YouTube Channel'],
|
||||
ROLE_MANAGER: ['Managers', 'Manager'],
|
||||
ROLE_MEMBER: ['Members', 'Member'],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -23,6 +23,7 @@
|
||||
ABORTED = 'aborted'
|
||||
ABUSIVE_CONTENT_RESTRICTION = 'abusiveContentRestriction'
|
||||
ACCESS_NOT_CONFIGURED = 'accessNotConfigured'
|
||||
ADMIN_CANNOT_UNSUSPEND = 'adminCannotUnsuspend'
|
||||
ALREADY_EXISTS = 'alreadyExists'
|
||||
APPLY_LABEL_FORBIDDEN = 'applyLabelForbidden'
|
||||
AUTH_ERROR = 'authError'
|
||||
@@ -41,6 +42,7 @@ CANNOT_DELETE_PERMISSION = 'cannotDeletePermission'
|
||||
CANNOT_DELETE_PRIMARY_CALENDAR = 'cannotDeletePrimaryCalendar'
|
||||
CANNOT_DELETE_PRIMARY_SENDAS = 'cannotDeletePrimarySendAs'
|
||||
CANNOT_DELETE_RESOURCE_WITH_CHILDREN = 'cannotDeleteResourceWithChildren'
|
||||
CANNOT_MODIFY_INHERITED_PERMISSION = 'cannotModifyInheritedPermission'
|
||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION = 'cannotModifyInheritedTeamDrivePermission'
|
||||
CANNOT_MODIFY_RESTRICTED_LABEL = 'cannotModifyRestrictedLabel'
|
||||
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT = 'cannotModifyViewersCanCopyContent'
|
||||
@@ -72,6 +74,7 @@ DOMAIN_POLICY = 'domainPolicy'
|
||||
DOWNLOAD_QUOTA_EXCEEDED = 'downloadQuotaExceeded'
|
||||
DUPLICATE = 'duplicate'
|
||||
EVENT_DURATION_EXCEEDS_LIMIT = 'eventDurationExceedsLimit'
|
||||
EVENT_TYPE_RESTRICTION = 'eventTypeRestriction'
|
||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE = 'expirationDatesMustBeInTheFuture'
|
||||
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS = 'expirationDateNotAllowedForSharedDriveMembers'
|
||||
FAILED_PRECONDITION = 'failedPrecondition'
|
||||
@@ -132,6 +135,7 @@ OPERATION_NOT_SUPPORTED = 'operationNotSupported'
|
||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED = 'organizerOnNonTeamDriveNotSupported'
|
||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'organizerOnNonTeamDriveItemNotSupported'
|
||||
ORGUNIT_NOT_FOUND = 'orgunitNotFound'
|
||||
OUTSIDE_DOMAIN_MEMBER_CANNOT_CHANGE_TEAMDRIVE_RESTRICTIONS = 'outsideDomainMemberCannotChangeTeamDriveRestrictions'
|
||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'ownerOnTeamDriveItemNotSupported'
|
||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED = 'ownershipChangeAcrossDomainNotPermitted'
|
||||
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE = 'participantIsNeitherOrganizerNorAttendee'
|
||||
@@ -227,6 +231,7 @@ DRIVE3_CREATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID, INVALID_SHARING_REQUEST
|
||||
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE,
|
||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
||||
CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||
TEAMDRIVES_FOLDER_SHARING_NOT_SUPPORTED, INVALID_LINK_VISIBILITY, ABUSIVE_CONTENT_RESTRICTION]
|
||||
DRIVE3_GET_ACL_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
||||
@@ -247,10 +252,10 @@ DRIVE3_UPDATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID_OWNERSHIP_TRANSFER, CANN
|
||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
||||
CANNOT_UPDATE_PERMISSION,
|
||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION,
|
||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||
FIELD_NOT_WRITABLE, PERMISSION_NOT_FOUND]
|
||||
DRIVE3_DELETE_ACL_THROW_REASONS = [BAD_REQUEST, CANNOT_REMOVE_OWNER,
|
||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION,
|
||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
||||
NOT_FOUND, PERMISSION_NOT_FOUND, CANNOT_DELETE_PERMISSION]
|
||||
DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
||||
@@ -272,17 +277,18 @@ GROUP_SETTINGS_THROW_REASONS = [NOT_FOUND, GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DO
|
||||
INVALID, INVALID_ARGUMENT, INVALID_PARAMETER, INVALID_ATTRIBUTE_VALUE, INVALID_INPUT,
|
||||
SERVICE_LIMIT, SERVICE_NOT_AVAILABLE, AUTH_ERROR, REQUIRED]
|
||||
GROUP_SETTINGS_RETRY_REASONS = [INVALID, SERVICE_LIMIT, SERVICE_NOT_AVAILABLE]
|
||||
GROUP_LIST_THROW_REASONS = [RESOURCE_NOT_FOUND, DOMAIN_NOT_FOUND, FORBIDDEN, BAD_REQUEST]
|
||||
GROUP_LIST_THROW_REASONS = [RESOURCE_NOT_FOUND, DOMAIN_NOT_FOUND, FORBIDDEN, BAD_REQUEST, PERMISSION_DENIED]
|
||||
GROUP_LIST_USERKEY_THROW_REASONS = GROUP_LIST_THROW_REASONS+[INVALID_MEMBER, INVALID_INPUT]
|
||||
KEEP_THROW_REASONS = [AUTH_ERROR, BAD_REQUEST, PERMISSION_DENIED, INVALID_ARGUMENT, NOT_FOUND]
|
||||
LOOKERSTUDIO_THROW_REASONS = [INVALID_ARGUMENT, SERVICE_NOT_AVAILABLE, BAD_REQUEST, NOT_FOUND, PERMISSION_DENIED, INTERNAL_ERROR]
|
||||
MEMBERS_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, INVALID, FORBIDDEN, SERVICE_NOT_AVAILABLE]
|
||||
MEMBERS_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, INVALID, FORBIDDEN, SERVICE_NOT_AVAILABLE, PERMISSION_DENIED]
|
||||
MEMBERS_RETRY_REASONS = [SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
|
||||
ORGUNIT_GET_THROW_REASONS = [INVALID_ORGUNIT, ORGUNIT_NOT_FOUND, BACKEND_ERROR, BAD_REQUEST, INVALID_CUSTOMER_ID, LOGIN_REQUIRED]
|
||||
PEOPLE_ACCESS_THROW_REASONS = [SERVICE_NOT_AVAILABLE, FORBIDDEN, PERMISSION_DENIED, FAILED_PRECONDITION]
|
||||
RESELLER_THROW_REASONS = [BAD_REQUEST, RESOURCE_NOT_FOUND, FORBIDDEN, INVALID]
|
||||
SHEETS_ACCESS_THROW_REASONS = DRIVE_USER_THROW_REASONS+[NOT_FOUND, PERMISSION_DENIED, FORBIDDEN, INTERNAL_ERROR, INSUFFICIENT_FILE_PERMISSIONS,
|
||||
BAD_REQUEST, INVALID, INVALID_ARGUMENT, FAILED_PRECONDITION]
|
||||
TAGMANAGER_THROW_REASONS = [BAD_REQUEST, PERMISSION_DENIED, INVALID, NOT_FOUND, ACCESS_NOT_CONFIGURED]
|
||||
TASK_THROW_REASONS = [BAD_REQUEST, PERMISSION_DENIED, INVALID, NOT_FOUND, ACCESS_NOT_CONFIGURED]
|
||||
TASKLIST_THROW_REASONS = [BAD_REQUEST, PERMISSION_DENIED, INVALID, NOT_FOUND, ACCESS_NOT_CONFIGURED]
|
||||
USER_GET_THROW_REASONS = [USER_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, SYSTEM_ERROR]
|
||||
@@ -363,6 +369,8 @@ class abusiveContentRestriction(Exception):
|
||||
pass
|
||||
class accessNotConfigured(Exception):
|
||||
pass
|
||||
class adminCannotUnsuspend(Exception):
|
||||
pass
|
||||
class alreadyExists(Exception):
|
||||
pass
|
||||
class applyLabelForbidden(Exception):
|
||||
@@ -397,6 +405,8 @@ class cannotDeletePrimarySendAs(Exception):
|
||||
pass
|
||||
class cannotDeleteResourceWithChildren(Exception):
|
||||
pass
|
||||
class cannotModifyInheritedPermission(Exception):
|
||||
pass
|
||||
class cannotModifyInheritedTeamDrivePermission(Exception):
|
||||
pass
|
||||
class cannotModifyRestrictedLabel(Exception):
|
||||
@@ -457,6 +467,8 @@ class duplicate(Exception):
|
||||
pass
|
||||
class eventDurationExceedsLimit(Exception):
|
||||
pass
|
||||
class eventTypeRestriction(Exception):
|
||||
pass
|
||||
class expirationDatesMustBeInTheFuture(Exception):
|
||||
pass
|
||||
class expirationDateNotAllowedForSharedDriveMembers(Exception):
|
||||
@@ -571,6 +583,8 @@ class organizerOnNonTeamDriveItemNotSupported(Exception):
|
||||
pass
|
||||
class orgunitNotFound(Exception):
|
||||
pass
|
||||
class outsideDomainMemberCannotChangeTeamDriveRestrictions(Exception):
|
||||
pass
|
||||
class ownerOnTeamDriveItemNotSupported(Exception):
|
||||
pass
|
||||
class ownershipChangeAcrossDomainNotPermitted(Exception):
|
||||
@@ -678,6 +692,7 @@ REASON_EXCEPTION_MAP = {
|
||||
ABORTED: aborted,
|
||||
ABUSIVE_CONTENT_RESTRICTION: abusiveContentRestriction,
|
||||
ACCESS_NOT_CONFIGURED: accessNotConfigured,
|
||||
ADMIN_CANNOT_UNSUSPEND: adminCannotUnsuspend,
|
||||
ALREADY_EXISTS: alreadyExists,
|
||||
APPLY_LABEL_FORBIDDEN: applyLabelForbidden,
|
||||
AUTH_ERROR: authError,
|
||||
@@ -695,6 +710,7 @@ REASON_EXCEPTION_MAP = {
|
||||
CANNOT_DELETE_PRIMARY_CALENDAR: cannotDeletePrimaryCalendar,
|
||||
CANNOT_DELETE_PRIMARY_SENDAS: cannotDeletePrimarySendAs,
|
||||
CANNOT_DELETE_RESOURCE_WITH_CHILDREN: cannotDeleteResourceWithChildren,
|
||||
CANNOT_MODIFY_INHERITED_PERMISSION: cannotModifyInheritedPermission,
|
||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION: cannotModifyInheritedTeamDrivePermission,
|
||||
CANNOT_MODIFY_RESTRICTED_LABEL: cannotModifyRestrictedLabel,
|
||||
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT: cannotModifyViewersCanCopyContent,
|
||||
@@ -725,6 +741,7 @@ REASON_EXCEPTION_MAP = {
|
||||
DOWNLOAD_QUOTA_EXCEEDED: downloadQuotaExceeded,
|
||||
DUPLICATE: duplicate,
|
||||
EVENT_DURATION_EXCEEDS_LIMIT: eventDurationExceedsLimit,
|
||||
EVENT_TYPE_RESTRICTION: eventTypeRestriction,
|
||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE: expirationDatesMustBeInTheFuture,
|
||||
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS: expirationDateNotAllowedForSharedDriveMembers,
|
||||
FAILED_PRECONDITION: failedPrecondition,
|
||||
@@ -782,6 +799,7 @@ REASON_EXCEPTION_MAP = {
|
||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED: organizerOnNonTeamDriveNotSupported,
|
||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED: organizerOnNonTeamDriveItemNotSupported,
|
||||
ORGUNIT_NOT_FOUND: orgunitNotFound,
|
||||
OUTSIDE_DOMAIN_MEMBER_CANNOT_CHANGE_TEAMDRIVE_RESTRICTIONS: outsideDomainMemberCannotChangeTeamDriveRestrictions,
|
||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED: ownerOnTeamDriveItemNotSupported,
|
||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED: ownershipChangeAcrossDomainNotPermitted,
|
||||
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE: participantIsNeitherOrganizerNorAttendee,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -25,8 +25,6 @@
|
||||
# Some commands want to set a non-zero return code but not bail
|
||||
# GAM admin user from oauth2.txt or oauth2service.json
|
||||
ADMIN = 'admn'
|
||||
# Drive service for admin; used to look up Shared Drive Names
|
||||
ADMIN_DRIVE = 'addr'
|
||||
# Number/length of API call retries
|
||||
API_CALLS_RETRY_DATA = 'rtry'
|
||||
# GAM cache directory. If no_cache is True, this variable will be set to None
|
||||
@@ -220,7 +218,6 @@ REDIRECT_QUEUE_EOF = 'eof'
|
||||
#
|
||||
Globals = {
|
||||
ADMIN: None,
|
||||
ADMIN_DRIVE: None,
|
||||
API_CALLS_RETRY_DATA: {},
|
||||
CACHE_DIR: None,
|
||||
CACHE_DISCOVERY_ONLY: True,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -140,12 +140,13 @@ SERVICE_ACCOUNT_PRIVATE_KEY_AGE = 'Service Account Private Key age: {0} days'
|
||||
SERVICE_ACCOUNT_SKIPPING_KEY_AGE_CHECK = 'Skipping Private Key age check: {0} rotation not necessary'
|
||||
UPDATE_PROJECT_TO_VIEW_MANAGE_SAKEYS = 'Please run "gam update project" to view/manage service account keys'
|
||||
DOMAIN_WIDE_DELEGATION_AUTHENTICATION = 'Domain-wide Delegation authentication'
|
||||
DEPRECATED_SCOPES = 'Deprecated scopes that GAM should NEVER have DwD access to'
|
||||
SCOPE_AUTHORIZATION_PASSED = '''All scopes PASSED!
|
||||
|
||||
Service Account Client name: {0} is fully authorized.
|
||||
'''
|
||||
SCOPE_AUTHORIZATION_UPDATE_PASSED = '''All scopes PASSED!
|
||||
To authorize them (in case some scopes were unselected), please go to the following link in your browser:
|
||||
To update authorization (in case some scopes were unselected), please go to the following link in your browser:
|
||||
{0}
|
||||
{1}
|
||||
|
||||
@@ -156,8 +157,8 @@ Click AUTHORIZE
|
||||
When the box closes you're done
|
||||
After authorizing it may take some time for this test to pass so wait a few moments and then try this command again.
|
||||
'''
|
||||
SCOPE_AUTHORIZATION_FAILED = '''Some scopes FAILED!
|
||||
To authorize them, please go to the following link in your browser:
|
||||
SCOPE_AUTHORIZATION_FAILED = '''Some scopes FAILED or should be DISABLED!
|
||||
To update authorization, please go to the following link in your browser:
|
||||
{0}
|
||||
{1}
|
||||
|
||||
@@ -183,8 +184,8 @@ ALREADY_EXISTS_IN_TARGET_FOLDER = 'Already exists in {0}: {1}'
|
||||
ALREADY_EXISTS_USE_MERGE_ARGUMENT = 'Already exists; use the "merge" argument to merge the labels'
|
||||
API_ACCESS_DENIED = 'API access Denied'
|
||||
API_CALLS_RETRY_DATA = 'API calls retry data\n'
|
||||
API_CHECK_CLIENT_AUTHORIZATION = 'Please make sure the Client ID: {0} is authorized for the appropriate API or scopes:\n{1}\n\nRun: gam oauth create\n'
|
||||
API_CHECK_SVCACCT_AUTHORIZATION = 'Please make sure the Service Account Client ID: {0} is authorized for the appropriate API or scopes:\n{1}\n\nRun: gam user {2} update serviceaccount\n'
|
||||
API_CHECK_CLIENT_AUTHORIZATION = 'Please make sure the Client ID: {0} is authorized for the appropriate API or scopes: {1}\n\nRun: gam oauth create\n'
|
||||
API_CHECK_SVCACCT_AUTHORIZATION = 'Please make sure the Service Account Client ID: {0} is authorized for the appropriate API or scopes: {1}\n\nRun: gam user {2} update serviceaccount\n'
|
||||
API_ERROR_SETTINGS = 'API error, some settings not set'
|
||||
ARE_BOTH_REQUIRED = 'Arguments {0} and {1} are both required'
|
||||
ARE_MUTUALLY_EXCLUSIVE = 'Arguments {0} and {1} are mutually exclusive'
|
||||
@@ -308,7 +309,9 @@ INVALID_ALIAS = 'Invalid Alias'
|
||||
INVALID_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
||||
INVALID_CHARSET = 'Invalid charset "{0}"'
|
||||
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
||||
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
||||
INVALID_ENTITY = 'Invalid {0}, {1}'
|
||||
INVALID_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
||||
INVALID_FILE_SELECTION_WITH_ADMIN_ACCESS = 'Invalid file selection with adminaccess|asadmin'
|
||||
INVALID_GROUP = 'Invalid Group'
|
||||
INVALID_HTTP_HEADER = 'Invalid http header data: {0}'
|
||||
@@ -422,7 +425,7 @@ NO_LABELS_TO_PROCESS = 'No Labels to process'
|
||||
NO_MESSAGES_WITH_LABEL = 'No Messages with Label'
|
||||
NO_PARENTS_TO_CONVERT_TO_SHORTCUTS = 'No parents to convert to shortcuts'
|
||||
NO_REPORT_AVAILABLE = 'No {0} report available.'
|
||||
NO_SCOPES_FOR_API = 'There are no scopes authorized for the {0}'
|
||||
NO_SCOPES_FOR_API = 'There are no scopes authorized for the API(s): {0}'
|
||||
NO_SERIAL_NUMBERS_SPECIFIED = 'No serial numbers specified'
|
||||
NO_SSO_PROFILE_MATCHES = 'No SSO profile matches display name {0}'
|
||||
NO_SSO_PROFILE_ASSIGNED = 'No SSO profile assigned to {0} {1}'
|
||||
@@ -430,6 +433,7 @@ NO_SVCACCT_ACCESS_ALLOWED = 'No Service Account Access allowed'
|
||||
NO_TRANSFER_LACK_OF_DISK_SPACE = 'Transfer not performed due to lack of target drive space.'
|
||||
NO_USAGE_PARAMETERS_DATA_AVAILABLE = 'No usage parameters data available.'
|
||||
NO_USER_COUNTS_DATA_AVAILABLE = 'No User counts data available.'
|
||||
NUM_SELECTED_CLIENT_SCOPES = '\n{0} scopes are selected, if more than {1} scopes are selected, Google will probably generate a "Something went wrong" error\n'
|
||||
OAUTH2_GO_TO_LINK_MESSAGE = """
|
||||
Go to the following link in a browser on this computer or on another computer:
|
||||
|
||||
@@ -504,13 +508,15 @@ TO = 'To'
|
||||
TO_LC = 'to'
|
||||
TO_MAXIMUM_OF = 'to maximum of'
|
||||
TO_SET_UP_GOOGLE_CHAT = """
|
||||
To set up Google Chat for your API project, please go to:
|
||||
To set up Google Chat for your current project, please go to:
|
||||
|
||||
{0}
|
||||
|
||||
and follow the instructions at:
|
||||
|
||||
https://github.com/GAM-team/GAM/wiki/Chat-Bot#set-up-a-chat-bot
|
||||
|
||||
You'll use projects/{1}/topics/no-topic in Connection settings Cloud Pub/Sub Topic Name
|
||||
"""
|
||||
TOTAL_ITEMS_IN_ENTITY = 'Total {0} in {1}'
|
||||
TRIMMED_MESSAGE_FROM_LENGTH_TO_MAXIMUM = 'Trimmed message of length {0} to maximum length {1}'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@@ -107,6 +107,8 @@ _SKUS = {
|
||||
'product': '101047', 'aliases': ['aisecurity'], 'displayName': 'AI Security'},
|
||||
'1010470007': {
|
||||
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
||||
'1010470008': {
|
||||
'product': '101047', 'aliases': ['geminiultra'], 'displayName': 'Google AI Ultra for Business'},
|
||||
'1010490001': {
|
||||
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
||||
'1010500001': {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
chardet>=5.2.0
|
||||
cryptography>=44.0.2
|
||||
distro; sys_platform=='linux'
|
||||
filelock>=3.18.0
|
||||
google-api-python-client>=2.167.0
|
||||
google-auth-httplib2>=0.2.0
|
||||
google-auth-oauthlib>=1.2.2
|
||||
google-auth>=2.39.0
|
||||
httplib2>=0.22.0
|
||||
lxml>=5.4.0
|
||||
passlib>=1.7.4
|
||||
pathvalidate>=3.2.3
|
||||
pyscard==2.2.1
|
||||
python-dateutil
|
||||
yubikey-manager>=5.6.1
|
||||
@@ -1,56 +0,0 @@
|
||||
[metadata]
|
||||
name = GAM for Google Workspace
|
||||
version = attr: gam.var.GAM_VERSION
|
||||
description = Command line management for Google Workspaces
|
||||
long_description = file: readme.md
|
||||
long_description_content_type = text/markdown
|
||||
url = https://github.com/GAM-team/GAM
|
||||
author = GAM Team
|
||||
author_email = google-apps-manager@googlegroups.com
|
||||
license = Apache
|
||||
license_files = LICENSE
|
||||
keywords = google, oauth2, gsuite, google-apps, google-admin-sdk, google-drive, google-cloud, google-calendar, gam, google-api, oauth2-client, google-workspace
|
||||
classifiers =
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3 :: Only
|
||||
Programming Language :: Python :: 3.9
|
||||
Programming Language :: Python :: 3.10
|
||||
Programming Language :: Python :: 3.11
|
||||
Programming Language :: Python :: 3.12
|
||||
Programming Language :: Python :: 3.13
|
||||
License :: OSI Approved :: Apache License
|
||||
|
||||
[options]
|
||||
packages = find:
|
||||
python_requires = >= 3.9
|
||||
# The following files should be edited to match: pyproject.toml, requirements.txt
|
||||
install_requires =
|
||||
chardet >= 5.2.0
|
||||
cryptography >= 44.0.2
|
||||
distro; sys_platform == 'linux'
|
||||
filelock >= 3.18.0
|
||||
google-api-python-client >= 2.167.0
|
||||
google-auth-httplib2 >= 0.2.0
|
||||
google-auth-oauthlib >= 1.2.2
|
||||
google-auth >= 2.39.0
|
||||
httplib2 >= 0.22.0
|
||||
lxml >= 5.4.0
|
||||
passlib >= 1.7.4
|
||||
pathvalidate >= 3.2.3
|
||||
pyscard == 2.2.1
|
||||
python-dateutil
|
||||
yubikey-manager >= 5.6.1
|
||||
|
||||
[options.package_data]
|
||||
* = *.pem
|
||||
|
||||
# used during pip install .[test]
|
||||
[options.extras_require]
|
||||
test = pre-commit
|
||||
|
||||
[options.entry_points]
|
||||
console_scripts =
|
||||
gam = gam.__main__:main
|
||||
|
||||
[bdist_wheel]
|
||||
universal = True
|
||||
@@ -1,3 +0,0 @@
|
||||
from setuptools import setup
|
||||
|
||||
setup()
|
||||
@@ -9,6 +9,7 @@
|
||||
- [Display administrators](#display-administrators)
|
||||
- [Copy privileges from one role to a new role](#copy-privileges-from-one-role-to-a-new-role)
|
||||
- [Copy roles from one administrator to another](#copy-roles-from-one-administrator-to-another)
|
||||
- [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)
|
||||
|
||||
## API documentation
|
||||
* [About Administrator roles](https://support.google.com/a/answer/33325?ref_topic=4514341)
|
||||
@@ -21,13 +22,16 @@
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||
<OrgUnitID> ::= id:<String>
|
||||
<OrgUnitPath> ::= /|(/<String)+
|
||||
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
||||
<Privilege> ::= <String>
|
||||
<PrivilegeList> ::= "<Privilege>(,<Privilege)*"
|
||||
<RoleAssignmentID> ::= <String>
|
||||
<RoleItem> ::= id:<String>|uid:<String>|<String>
|
||||
<RoleID> ::= <String>
|
||||
<RoleName> ::= <String>
|
||||
<RoleItem> ::= id:<RoleID>|<RoleName>
|
||||
<UniqueID> ::= id:<String>
|
||||
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
```
|
||||
@@ -1383,9 +1387,11 @@ Show 111 Privileges
|
||||
## Manage administrative roles
|
||||
```
|
||||
gam create adminrole <String> [description <String>]
|
||||
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)
|
||||
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)|<JSONData>
|
||||
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
||||
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)]
|
||||
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)|<JSONData>]
|
||||
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||
gam delete adminrole <RoleItem>
|
||||
```
|
||||
* `privileges all` - All defined privileges
|
||||
@@ -1393,24 +1399,61 @@ gam delete adminrole <RoleItem>
|
||||
* `privileges <PrivilegeList>` - A specific list of privileges
|
||||
* `privileges select <FileSelector>|<CSVFileSelector>>` - A collection of privileges from a flat or CSV file
|
||||
|
||||
By default, when an admin role is created|update, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
||||
* `csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]` - Output the admin roledetails in CSV format.
|
||||
|
||||
When `csv` is uused, Add additional columns of data from the command line to the output.
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
## Display administrative roles
|
||||
```
|
||||
gam info adminrole <RoleItem> [privileges]
|
||||
[formatjson]
|
||||
```
|
||||
* `privileges` - Display privileges associated with role
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam show adminroles|roles
|
||||
[role <RoleItem>] [privileges]
|
||||
[nosystemroles]
|
||||
[formatjson]
|
||||
```
|
||||
* `privileges` - Display privileges associated with each role
|
||||
|
||||
By default, all roles are displayed:
|
||||
* `role <RoleItem>` - Display a specific role.
|
||||
* `nosystemroles` - Display onnly non-system roles.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
||||
[role <RoleItem>] [privileges] [oneitemperrow]
|
||||
gam show adminroles|roles
|
||||
[role <RoleItem>] [privileges]
|
||||
[nosystemroles]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, all roles are displayed, use `role <RoleItem>` to display a specific role.
|
||||
|
||||
* `privileges` - Display privileges associated with each role
|
||||
|
||||
By default, with `print`, all privileges for a role are shown on one row as a repeating item.
|
||||
By default, all privileges for a role are shown on one row as a repeating item.
|
||||
When `oneitemperrow` is specified, each privilege is output on a separate row/line with the other role fields.
|
||||
|
||||
By default, all roles are displayed:
|
||||
* `role <RoleItem>` - Display a specific role.
|
||||
* `nosystemroles` - Display onnly non-system roles.
|
||||
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format:
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Create an administrator
|
||||
Add an administrator role to an administrator.
|
||||
```
|
||||
@@ -1469,3 +1512,15 @@ gam config csv_input_row_filter "scopeType:regex:CUSTOMER" redirect stdout ./Upd
|
||||
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~~"
|
||||
```
|
||||
|
||||
## Copy non-system admin roles from a source workspace to a target workspace
|
||||
This requires GAM version 7.18.01 or higher.
|
||||
|
||||
In the source workspace to the following:
|
||||
```
|
||||
gam redirect csv ./SourceNonSystemRoles.csv print adminroles privileges nosystemroles formatjson quotechar "'"
|
||||
```
|
||||
|
||||
In the target workspacce do the following:
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
- [Display alerts](#display-alerts)
|
||||
- [Manage alert feedback](#manage-alert-feedback)
|
||||
- [Display alert feedback](#display-alert-feedback)
|
||||
- [Configuring settings](#configuring-settings)
|
||||
|
||||
## API documentation
|
||||
* [Alert Center API](https://developers.google.com/admin-sdk/alertcenter/reference/rest/)
|
||||
@@ -18,6 +19,7 @@
|
||||
## Definitions
|
||||
```
|
||||
<AlertID> ::= <String>
|
||||
<PubSubTopicName> ::= <String>
|
||||
<QueryAlert> ::= <String> See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||
```
|
||||
## Introduction
|
||||
@@ -95,3 +97,15 @@ the quote character itself, the column delimiter (comma by default) and new-line
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Configuring settings
|
||||
|
||||
Alert Center can be configured to send notifications to a Google Cloud Pub/Sub topic, but it first requires configuration.
|
||||
* See https://developers.google.com/workspace/admin/alertcenter/guides/notifications for information.
|
||||
|
||||
Gam can be used to display or modify the settings:
|
||||
```
|
||||
gam show alertsettings
|
||||
gam update alertsettings <PubSubTopicName>
|
||||
gam clear alertsettings
|
||||
```
|
||||
@@ -5,7 +5,7 @@
|
||||
- [Python Regular Expressions](Python-Regular-Expressions)
|
||||
- [Definitions](#definitions)
|
||||
- [Manage Projects](#manage-projects)
|
||||
- [Authorize a super admin to create projects](#authorize-a-super-admin-to-create-projects)
|
||||
- [Authorize a user to create projects](#authorize-a-user-to-create-projects)
|
||||
- [Authorize Service Account Key Uploads](#authorize-service-account-key-uploads)
|
||||
- [Authorize GAM to create projects](#authorize-gam-to-create-projects)
|
||||
- [Create a new GCP project folder](#create-a-new-gcp-project-folder)
|
||||
@@ -64,6 +64,7 @@ Verify the following steps:
|
||||
* If groups are used to authenticate access, make sure the super admin is in one of the groups
|
||||
* Collapse "Service status"
|
||||
* Expand "Cloud Resource Manager API settings"
|
||||
* Select the OU in the left that contains the super admin you'll be using
|
||||
* Make sure that "Allow users to create projects" is checked
|
||||
|
||||
Verify that all scopes are available:
|
||||
@@ -73,11 +74,6 @@ Verify that all scopes are available:
|
||||
* Select "ON for everyone"
|
||||
* Click "SAVE"
|
||||
|
||||
Verify that internal apps are trusted.
|
||||
* Access the admin console and go to Security -> Access and data control -> API Controls
|
||||
* Check that "Trust internal, domain-owned apps" is present in the **Settings** section
|
||||
* Click "SAVE"
|
||||
|
||||
If you run a Google Workspace Education SKU, verify that Classroom API is enabled if required.
|
||||
* Access the admin console and go to Apps -> Google Workspace - Classroom
|
||||
* Expand "Data access"
|
||||
@@ -109,12 +105,13 @@ Verify whether the super admin you'll be using is in an OU where reauthenticatio
|
||||
* Access the admin console and go to Security -> Overview
|
||||
* Scroll down and open Google Cloud session control section
|
||||
* Select the OU containing the super admin
|
||||
* If Require reauthentication is selected and Exempt Trusted apps is not checked, you'll have to do `gam oauth create` at whatever frequency is specified
|
||||
* If that sounds unappealing, check Exempt Trusted apps
|
||||
* Click "OVERRIDE"
|
||||
* If Require reauthentication is selected, you'll need either:
|
||||
* uncheck Google Cloud Storage and any other GCP APIs that you selected on `gam oauth create` (reauth is only necessary for GCP APIs)
|
||||
* enable "Exempt Trusted apps"
|
||||
* rerun `gam oauth create` at whatever frequency is specified
|
||||
|
||||
Additional steps may be required if errors are encountered.
|
||||
* [Authorize a super admin to create projects](#authorize-a-super-admin-to-create-projects)
|
||||
* [Authorize a user to create projects](#authorize-a-user-to-create-projects)
|
||||
* [Authorize Service Account Key Uploads](#authorize-service-account-key-uploads)
|
||||
* [Authorize GAM to create projects](#authorize-gam-to-create-projects)
|
||||
|
||||
@@ -168,8 +165,8 @@ For `print|show projects`, you can eliminate the password prompt and authenticat
|
||||
gam print projects admin admin@domain.com
|
||||
```
|
||||
|
||||
## Authorize a super admin to create projects
|
||||
If you try to create a project and get an error saying that the admin you specified is not authorized to create projects,
|
||||
## Authorize a user to create projects
|
||||
If you try to create a project and get an error saying that the user you specified is not authorized to create projects,
|
||||
perform these steps and then retry the create project command.
|
||||
|
||||
* Login as an existing super admin at console.cloud.google.com
|
||||
@@ -183,13 +180,12 @@ perform these steps and then retry the create project command.
|
||||
* Click in the Select a role box
|
||||
* Type project creator in the Filter box
|
||||
* Click Project Creator
|
||||
* Click + Add Another Role
|
||||
* Type orgpolicy.policyAdmin in the Filter box
|
||||
* Click Organization Policy Administrator
|
||||
* Click Save
|
||||
|
||||
## Authorize Service Account Key Uploads
|
||||
|
||||
*IMPORTANT:* Google best practice is to NOT use service account keys. Rather than overriding Google's default policy please consider [running GAM on Google Compute Engine Securely](https://github.com/GAM-team/GAM/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely) so that service account keys are not necessary.
|
||||
|
||||
If you try to create a project and get an error saying that Constraint `constraints/iam.disableServiceAccountKeyUpload violated for service account projects/gam-project-xxxxx`,
|
||||
perform these steps and then you should be able to authorize and use your project.
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
banana|basil|blueberry|flamingo|graphite|grape|
|
||||
lavender|peacock|sage|tangerine|tomato
|
||||
<FileFormat> ::=
|
||||
csv|doc|dot|docx|dotx|epub|html|jpeg|jpg|mht|odp|ods|odt|
|
||||
csv|doc|dot|docx|dotx|epub|html|jpeg|jpg|json|mht|odp|ods|odt|
|
||||
pdf|png|ppt|pot|potx|pptx|rtf|svg|tsv|txt|xls|xlt|xlsx|xltx|zip|
|
||||
ms|microsoft|openoffice|
|
||||
<LabelColorHex> ::=
|
||||
@@ -278,10 +278,15 @@
|
||||
domain:<DomainName>|domain|default
|
||||
<CalendarItem> ::= <EmailAddress>
|
||||
<ChannelCustomerID> ::= <String>
|
||||
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||
<ChatMember> ::= spaces/<String>/members/<String>
|
||||
<ChatMessage> ::= spaces/<String>/messages/<String>
|
||||
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||
<ChromeProfilePermanentID> ::= <String>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||
<ChromeProfileCommandName> ::= <ChomeProfileName>/commands/<String>
|
||||
<GIGroupAlias> ::= <EmailAddress>
|
||||
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
||||
<CIGroupMemberType> ::= cbcmbrowser|chromeosdevice|customer|group|other|serviceaccount|user
|
||||
@@ -300,6 +305,11 @@
|
||||
<ContactGroupItem> ::= <ContactGroupID>|<ContactGroupName>
|
||||
<CorporaAttribute> ::= alldrives|allteamdrives|domain|onlyteamdrives|user
|
||||
<CourseAlias> ::= <String>
|
||||
<CourseAnnouncementContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
<CourseAnnouncementID> ::= <Number>
|
||||
<CourseAnnouncementState> ::= draft|published|deleted
|
||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||
@@ -426,6 +436,7 @@
|
||||
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
||||
<PropertyKey> ::= <String>
|
||||
<PropertyValue> ::= <String>
|
||||
<PubSubTopicName> ::= <String>
|
||||
<QueryAlert> ::= <String>
|
||||
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||
<QueryBrowser> ::= <String>
|
||||
@@ -509,6 +520,14 @@
|
||||
gs://<StorageBucketName>/<StorageObjectName>|
|
||||
<StorageBucketName>/<StorageObjectName>
|
||||
<Tag> ::= <String>
|
||||
<TagManagerAccountID> ::= <String>
|
||||
<TagManagerAccountPath> ::= accounts/<TagManagerAccountID>
|
||||
<TagManagerContainerID> ::= <String>
|
||||
<TagManagerContainerPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>
|
||||
<TagManagerWorkspaceID> ::= <String>
|
||||
<TagManagerWorkspacePath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>
|
||||
<TagManagerTagID> ::= <String>
|
||||
<TagManagerTagPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>/tags/<TagManagerTagID>
|
||||
<TakeoutBucketName> ::= takeout-export-[a-f,0-9,-]*
|
||||
<TaskID> ::= <String>
|
||||
<TaskListID> ::= <String>
|
||||
|
||||
36
wiki/Business-Account-Management.md
Normal file
36
wiki/Business-Account-Management.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# Users - Business Account Management
|
||||
- [API documentation](#api-documentation)
|
||||
- [Introduction](#introduction)
|
||||
- [Definitions](#definitions)
|
||||
- [Display Business Profile Accounts](#display-business-profile-accounts)
|
||||
|
||||
## API documentation
|
||||
* [Business Account Management](https://developers.google.com/my-business/reference/accountmanagement/rest)
|
||||
|
||||
|
||||
## Introduction
|
||||
These features were added in version 7.18.00.
|
||||
|
||||
To use these commands you add the 'Business Account Management API' to your project and update client authorization.
|
||||
```
|
||||
gam update project
|
||||
gam oauth create
|
||||
...
|
||||
[*] 0) Business Account Management API
|
||||
|
||||
```
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
|
||||
## Display Business Profile Accounts
|
||||
```
|
||||
gam <UserItem> show businessprofileaccounts
|
||||
[type locationgroup|organization|personal|usergroup]
|
||||
```
|
||||
Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam <UserItem> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||
[type locationgroup|organization|personal|usergroup]
|
||||
```
|
||||
Gam displays the information as columns of fields.
|
||||
@@ -1,8 +1,8 @@
|
||||
# Chat Bot
|
||||
|
||||
# Chat Bot Setup and Use
|
||||
- [Introduction](#introduction)
|
||||
- [Set up a Chat Bot](#set-up-a-chat-bot)
|
||||
- [API documentation](#api-documentation)
|
||||
- [Definitions](#definitions)
|
||||
- [Set up a Chat Bot](#set-up-a-chat-bot)
|
||||
- [Display Rooms and Chats to which your Bot belongs](#display-rooms-and-chats-to-which-your-bot-belongs)
|
||||
- [Display Members of a Room or Chat](#display-members-of-a-room-or-chat)
|
||||
- [Create a Chat Message](#create-a-chat-message)
|
||||
@@ -10,6 +10,44 @@
|
||||
- [Delete a Chat Message](#delete-a-chat-message)
|
||||
- [Display a Chat Message](#display-a-chat-message)
|
||||
|
||||
## Introduction
|
||||
To use these commands you must update your service account authorization.
|
||||
```
|
||||
gam user user@domain.com update serviceaccount
|
||||
|
||||
[*] 4) Chat API - Memberships (supports readonly)
|
||||
[*] 5) Chat API - Memberships Admin (supports readonly)
|
||||
[*] 6) Chat API - Messages (supports readonly)
|
||||
[*] 7) Chat API - Spaces (supports readonly)
|
||||
[*] 8) Chat API - Spaces Admin (supports readonly)
|
||||
[*] 9) Chat API - Spaces Delete
|
||||
[*] 10) Chat API - Spaces Delete Admin
|
||||
```
|
||||
|
||||
Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
||||
```
|
||||
* When False, GAM uses user access when making all Chat API calls. For calls that support admin access,
|
||||
this can be overridden with the asadmin command line option.
|
||||
* When True, GAM uses admin access for Chat API calls that support admin access; other calls will use user access.
|
||||
* Default: False
|
||||
```
|
||||
|
||||
Google requires that you have a Chat Bot configured in order to use the Chat API; set up a Chat Bot as described in the next section.
|
||||
|
||||
## Set up a Chat Bot
|
||||
GAM is capable of acting as a Chat Bot and sending messages to Chat Rooms or direct messages to users.
|
||||
|
||||
Even if you're not going to use GAM as a Chat Bot, you have to configure a Chat Bot as it is required by the Chat API in [Users - Chat](Users-Chat).
|
||||
|
||||
* Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot.
|
||||
* Uncheck "Build this Chat app as a Workspace add-on."
|
||||
* Enter an App name and Description of your choosing.
|
||||
* For the Avatar URL you can use `https://dummyimage.com/384x256/4d4d4d/0011ff.png&text=+GAM` or a public URL to an image of your own choosing.
|
||||
* In Functionality, uncheck both "Receive 1:1 messages" and "Join spaces and group conversations"
|
||||
* In Connection settings, choose "Cloud Pub/Sub" and enter `projects/<ProjectID>/topics/no-topic` for the Topic Name. Replace `<ProjectID>` with your GAM project ID. GAM doesn't yet listen to pub/sub so this option is not used.
|
||||
* In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
|
||||
* Click Save.
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/chat/concepts
|
||||
* https://developers.google.com/chat/reference/rest
|
||||
@@ -102,19 +140,6 @@
|
||||
<ChatMessageFieldNameList> ::= "<ChatMessageFieldName>(,<ChatMessageFieldName>)*"
|
||||
```
|
||||
|
||||
## Set up a Chat Bot
|
||||
Since GAM 6.04.00, GAM is capable of acting as a Chat Bot and sending messages to Chat Rooms or direct messages to users. You first need to configure your Chat Bot.
|
||||
|
||||
* Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot.
|
||||
* Enter an App name and Description of your choosing.
|
||||
* For the Avatar URL you can use `https://dummyimage.com/384x256/4d4d4d/0011ff.png&text=+GAM` or a public URL to an image of your own choosing.
|
||||
* In Functionality, uncheck both "Receive 1:1 messages" and "Join spaces and group conversations"
|
||||
* In Connection settings, choose "Cloud Pub/Sub" and enter `projects/<ProjectID>/topics/no-topic` for the topic name. Replace `<ProjectID>` with your GAM project ID. GAM doesn't yet listen to pub/sub so this option is not used.
|
||||
* In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
|
||||
* Click Save.
|
||||
|
||||
----
|
||||
|
||||
## Display Rooms and Chats to which your Bot belongs
|
||||
Display the spaces to which your Chat Bot can send messages.
|
||||
A space can be a direct message to a user, a chat group or a chat room.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,9 +2,12 @@
|
||||
- [API documentation](#api-documentation)
|
||||
- [Introduction](#introduction)
|
||||
- [Definitions](#definitions)
|
||||
- [Delete Chrome profiles](#delete-chrome-profiles)
|
||||
- [Display Chrome profiles](#display-chrome-profiles)
|
||||
- [Delete Chrome Profiles](#delete-chrome-profiles)
|
||||
- [Display Chrome Profiles](#display-chrome-profiles)
|
||||
- [Profile Query Searchable Fields](#profile-query-searchable-fields)
|
||||
- [Collections of Chrome Profile names for commands](#collections-of-chrome-profile-names-for-commands)
|
||||
- [Create a Chrome Profile command](#create-a-chrome-profile-command)
|
||||
- [Display Chrome Profile commands](#display-chrome-profile-commands)
|
||||
|
||||
## Introduction
|
||||
These features were added in version 7.01.00.
|
||||
@@ -21,13 +24,24 @@ Follow instructions at: Turn on managed profile reporting
|
||||
|
||||
## API documentation
|
||||
* [Chrome Management API - Profiles](https://developers.google.com/chrome/management/reference/rest/v1/customers.profiles)
|
||||
* [Chrome Management API - Profile Commands](https://developers.google.com/chrome/management/reference/rest/v1/customers.profiles.commands)
|
||||
* [Turn on Chrome Browser and Profile Reporting](https://support.google.com/chrome/a/answer/9301421)
|
||||
|
||||
## Definitions
|
||||
* [`<FileSelector> | <CSVFileSelector>`](Collections-of-Items)
|
||||
|
||||
```
|
||||
<CustomerID> ::= <String>
|
||||
<ChromeProfilePermanentID> ::= <String>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||
<ChromeProfileCommandName> ::= <ChomeProfileName>/commands/<String>
|
||||
<ChromeProfileCommandNameList> ::= "<ChromeProfileCommandName>(,<ChromeProfileCommandName>)*"
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||
|
||||
<ChromeProfileFieldName> ::=
|
||||
affiliationstate|
|
||||
@@ -89,11 +103,11 @@ Select the fields to be displayed:
|
||||
* `<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]` - Display a selected list of fields
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values:
|
||||
- `formatjson` - Display the fields in JSON format.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam show chromeprofiles
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||
[formatjson]
|
||||
@@ -106,18 +120,18 @@ Select the fields to be displayed:
|
||||
* `<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]` - Display a selected list of fields
|
||||
|
||||
Use the `filtertime<String> <Time>` option to allow times, usually relative, to be substituted into the `filter <String>` option.
|
||||
The `filtertime<String> <Time>` value replaces the string `#fiktertime<String>#` in the `filter <String>`.
|
||||
The `filtertime<String> <Time>` value replaces the string `#filtertime<String>#` in the `filter <String>`.
|
||||
The characters following `filtertime` can be any combination of lowercase letters and numbers.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values:
|
||||
- `formatjson` - Display the fields in JSON format.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam print chromeprofiles [todrive <ToDriveAttribute>*]
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||
[[formatjson [quotechar <Character>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
Use these options to select Chrome profiles; if none are chosen, all Chrome profiles in the account are selected:
|
||||
@@ -192,4 +206,111 @@ gam print chromeprofiles filter "lastPolicySyncTime >= \"#filtertime1#\" lastPol
|
||||
Print information about Chrome profiles on Windows.
|
||||
```
|
||||
gam print chromeprofiles filter "osPlatformType=WINDOWS"
|
||||
```
|
||||
```
|
||||
## Collections of Chrome Profile names for commands
|
||||
```
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <ChromeProfileNameList>|<FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||
```
|
||||
* `<ChromeProfileNameList>` - A list of Chrome profile names
|
||||
* `select <ChromeProfileNameList>` - A list of Chrome profile names
|
||||
* `select <FileSelector>|<CSVFileSelector>` - A flat or CSV file containing Chrome profile names
|
||||
* `filter <String> (filtertime<String> <Time>)*` - A filter to select Chrome profiles
|
||||
* `commands <ChromeProfileCommandNameList>` - A list of Chrome profile command names
|
||||
* `commands <FileSelector>|<CSVFileSelector>` - A flat or CSV file containing Chrome profile command names
|
||||
|
||||
Use the `filtertime<String> <Time>` option to allow times, usually relative, to be substituted into the `filter <String>` option.
|
||||
The `filtertime<String> <Time>` value replaces the string `#filtertime<String>#` in the `filter <String>`.
|
||||
The characters following `filtertime` can be any combination of lowercase letters and numbers.
|
||||
|
||||
## Create a Chrome Profile command
|
||||
Clear a Chrome Browser profile cache and/or cookies.
|
||||
```
|
||||
gam create chromeprofilecommand <ChromeProfileNameEntity>
|
||||
[clearcache [<Boolean>]] [clearcookies [<Boolean>]]
|
||||
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]
|
||||
```
|
||||
By default, when a Chrome profile command is created, GAM outputs details of the command as indented keywords and values.
|
||||
* `formatjson` - Display the details in JSON format.
|
||||
* `csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]` - Output the details in CSV format.
|
||||
|
||||
## Display Chrome Profile commands
|
||||
Display the status of a specific Chrome Browser profile command.
|
||||
```
|
||||
gam info chromeprofilecommand <ChromeProfileCommandName>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values:
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
Display the status of selected Chrome Browser profile commands.
|
||||
```
|
||||
gam show chromeprofilecommands <ChromeProfileNameEntity>
|
||||
[formatjson]
|
||||
```
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values:
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam print chromeprofilecommands <ChromeProfileNameEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format:
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
### Examples
|
||||
|
||||
For Windows PowerShell, replace `\"` with ``` `" ```.
|
||||
|
||||
Clear cache and cookies for two specific Chrome profiles:
|
||||
```
|
||||
gam create chromeprofilecommand 4c6c0a9f-de78-4285-be86-713fca8cffff,aa03151c-7c1d-41fe-b793-5753e167ffff clearcache clearcookies
|
||||
```
|
||||
|
||||
Display the command status for those Chrome profiles:
|
||||
```
|
||||
gam show chromeprofilecommand 4c6c0a9f-de78-4285-be86-713fca8cffff,aa03151c-7c1d-41fe-b793-5753e167ffff
|
||||
gam print chromeprofilecommand 4c6c0a9f-de78-4285-be86-713fca8cffff,aa03151c-7c1d-41fe-b793-5753e167ffff
|
||||
```
|
||||
|
||||
Clear cache and cookies for Chrome profiles in a CSV file named `ChromeProfiles.csv` with a column `name`:
|
||||
```
|
||||
gam create chromeprofilecommand select csvfile ChromeProfiles.csv:name clearcache clearcookies
|
||||
```
|
||||
|
||||
Display the command status for those Chrome profiles:
|
||||
```
|
||||
gam show chromeprofilecommand select csvfile ChromeProfiles.csv:name
|
||||
gam print chromeprofilecommand select csvfile ChromeProfiles.csv:name
|
||||
```
|
||||
|
||||
Clear cache and cookies for Chrome profiles with last activity more that 60 days ago:
|
||||
```
|
||||
gam create chromeprofilecommand filter "lastActivityTime < \"#filtertime1#\"" filtertime1 -60d clearcache clearcookies
|
||||
```
|
||||
|
||||
Display the command status for those Chrome profiles:
|
||||
```
|
||||
gam show chromeprofilecommand filter "lastActivityTime < \"#filtertime1#\"" filtertime1 -60d
|
||||
gam print chromeprofilecommand filter "lastActivityTime < \"#filtertime1#\"" filtertime1 -60d
|
||||
```
|
||||
|
||||
Clear cache and cookies for Chrome profiles with last activity more that 60 days ago:
|
||||
```
|
||||
gam redirect csv ./ChromeProfileCmds.csv create chromeprofilecommand filter "lastActivityTime < \"#filtertime1#\"" filtertime1 -60d clearcache clearcookies csv
|
||||
```
|
||||
|
||||
Display the command status for those Chrome profile commands
|
||||
```
|
||||
gam show chromeprofilecommand commands ChromeProfileCmds.csv:name
|
||||
gam print chromeprofilecommand commands ChromeProfileCmds.csv:name
|
||||
```
|
||||
|
||||
@@ -106,12 +106,14 @@ The second form is backwards compatible with Legacy GAM and selection with `<CrO
|
||||
autoupdatethrough|
|
||||
backlightinfo|
|
||||
bootmode|
|
||||
chromeostype|
|
||||
cpuinfo|
|
||||
cpustatusreports|
|
||||
deprovisionreason|
|
||||
devicefiles|
|
||||
deviceid|
|
||||
devicelicensetype|
|
||||
diskspaceusage|
|
||||
diskvolumereports|
|
||||
dockmacaddress|
|
||||
ethernetmacaddress|
|
||||
@@ -119,6 +121,7 @@ The second form is backwards compatible with Legacy GAM and selection with `<CrO
|
||||
extendedsupporteligible|
|
||||
extendedsupportstart|
|
||||
extendedsupportenabled|
|
||||
faninfo|
|
||||
firmwareversion|
|
||||
firstenrollmenttime|
|
||||
lastdeprovisiontimestamp|
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- [Create and update courses](#create-and-update-courses)
|
||||
- [Delete courses](#delete-courses)
|
||||
- [Manage course aliases](#manage-course-aliases)
|
||||
- [Manage course announcements](#manage-course-announcements)
|
||||
- [Manage course topics](#manage-course-topics)
|
||||
- [Display courses](#display-courses)
|
||||
- [Display course counts](#display-course-counts)
|
||||
@@ -55,6 +56,11 @@ gam user user@domain.com check|update serviceaccount
|
||||
<CourseAliasEntity> ::=
|
||||
<CourseAliasList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
||||
<CourseAnnouncementContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
<CourseAnnouncementID> ::= <Number>
|
||||
<CourseAnnouncementIDList> ::= "<CourseAnnouncementID>(,<CourseAnnouncementID>)*"
|
||||
<CourseAnnouncementIDEntity> ::=
|
||||
@@ -389,17 +395,40 @@ These commands can process multiple courses.
|
||||
gam courses <CourseEntity> add alias <CourseAliasEntity>
|
||||
gam courses <CourseEntity> delete alias <CourseAliasEntity>
|
||||
```
|
||||
|
||||
## Manage course announcements
|
||||
These commands can process a single course.
|
||||
```
|
||||
gam course <CourseID> add announcement
|
||||
<CourseAnnouncementContent> [scheduledtime <Time>] [state draft|published]
|
||||
gam course <CourseID> delete announcement <CourseAnnouncementID>
|
||||
gam course <CourseID> update announcement <CourseAnnouncementID>
|
||||
[<CourseAnnouncementContent>] [scheduledtime <Time>] [state published]
|
||||
```
|
||||
These commands can process multiple courses.
|
||||
```
|
||||
gam courses <CourseEntity> add announcement
|
||||
<CourseAnnouncementContent> [scheduledtime <Time>] [state draft|published]
|
||||
gam courses <CourseEntity> delete announcement <CourseAnnouncementIDEntity>
|
||||
gam courses <CourseEntity> update announcement <CourseAnnouncementIDEntity>
|
||||
[<CourseAnnouncementContent>] [scheduledtime <Time>] [state published]
|
||||
```
|
||||
|
||||
## Manage course topics
|
||||
These commands can process a single course.
|
||||
```
|
||||
gam course <CourseID> add topic <CourseTopic>
|
||||
gam course <CourseID> delete topic <CourseTopicID>
|
||||
gam course <CourseID> update topic <CourseTopicID> <CourseTopic>
|
||||
|
||||
```
|
||||
These commands can process multiple courses.
|
||||
```
|
||||
gam courses <CourseEntity> add topic <CourseTopicEntity>
|
||||
gam courses <CourseEntity> delete topic <CourseTopicIDEntity>
|
||||
gam courses <CourseEntity> update topic <CourseTopicIDEntity> <CourseTopic>
|
||||
```
|
||||
|
||||
## Display courses
|
||||
```
|
||||
gam info course <CourseID> [owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
* [Google Classroom API](https://developers.google.com/classroom/reference/rest)
|
||||
* [Google Classroom API - Courses Students](https://developers.google.com/classroom/reference/rest/v1/courses.students)
|
||||
* [Google Classroom API - Courses Teachers](https://developers.google.com/classroom/reference/rest/v1/courses.teachers)
|
||||
* [Classroom Membership Limits](https://support.google.com/edu/classroom/answer/7300976)
|
||||
|
||||
## Definitions
|
||||
```
|
||||
|
||||
@@ -210,7 +210,8 @@ gam print devices [todrive <ToDriveAttribute>*]
|
||||
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
||||
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
||||
[all|company|personal|nocompanydevices|nopersonaldevices]
|
||||
[nodeviceusers]
|
||||
[nodeviceusers|oneuserperrow]
|
||||
[clientstates]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, all devices are displayed; use the query options to limit the display.
|
||||
@@ -231,6 +232,9 @@ Select the view of devices to display:
|
||||
By default, Gam makes additional API calls to display the device users for the devices;
|
||||
use `nodeviceuser` to suppress making the additional calls.
|
||||
|
||||
By default, when device users are displayed, they are all displayed on one row;
|
||||
use `oneuserperrow` to have each of a device's users displayed on a separate row with all of the other device fields.
|
||||
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Cloud Identity Groups - Membership
|
||||
- [API documentation](#api-documentation)
|
||||
- [Query documentation](#query-documentation)
|
||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
||||
- [Definitions](#definitions)
|
||||
- [Notes](#Notes)
|
||||
@@ -22,10 +21,6 @@
|
||||
* [Cloud Identity Groups](https://gsuiteupdates.googleblog.com/2020/08/new-api-cloud-identity-groups-google.html)
|
||||
* [Security Groups](https://gsuiteupdates.googleblog.com/2020/09/security-groups-beta.html)
|
||||
|
||||
## Query documentation
|
||||
* [Cloud Identity Groups API - Search Dynamic Groups](https://cloud.google.com/identity/docs/reference/rest/v1/groups#dynamicgroupquery)
|
||||
* [Member Restrictions](https://cloud.google.com/identity/docs/reference/rest/v1/SecuritySettings#MemberRestriction)
|
||||
|
||||
## Notes
|
||||
|
||||
In the Admin Directory API a group has the following characteristics:
|
||||
@@ -45,7 +40,7 @@ Dynamic Groups require Cloud Identity Premium accounts.
|
||||
* https://cloud.google.com/identity/docs/how-to/create-dynamic-groups
|
||||
|
||||
The `cimember <UserItem>` option of `gam print|show cigroup-members` requires a Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education;
|
||||
and Cloud Identity Premium accounts. Unfortunately, even if you have the required account, the API call that supports the query doesn't work.
|
||||
and Cloud Identity Premium accounts.
|
||||
|
||||
* https://cloud.google.com/identity/docs/reference/rest/v1/groups.memberships/searchTransitiveGroups
|
||||
|
||||
|
||||
@@ -19,8 +19,10 @@
|
||||
* [Security Groups](https://gsuiteupdates.googleblog.com/2020/09/security-groups-beta.html)
|
||||
|
||||
## Query documentation
|
||||
* [Cloud Identity Groups API - Search Dynamic Groups](https://cloud.google.com/identity/docs/reference/rest/v1/groups#dynamicgroupquery)
|
||||
* [Member REstrictions](https://cloud.google.com/identity/docs/reference/rest/v1/SecuritySettings#MemberRestriction)
|
||||
* [Cloud Identity Groups API - Search](https://cloud.google.com/identity/docs/reference/rest/v1/groups/search)
|
||||
* [Cloud Identity Groups API - Dynamic Group Query](https://cloud.google.com/identity/docs/reference/rest/v1/groups#dynamicgroupquery)
|
||||
* [Dynamic Groups Member Attributes](https://cloud.google.com/identity/docs/how-to/dynamic-groups-attributes)
|
||||
* [Member Restrictions](https://cloud.google.com/identity/docs/reference/rest/v1/SecuritySettings#MemberRestriction)
|
||||
|
||||
## Notes
|
||||
|
||||
@@ -50,7 +52,7 @@ Dynamic Groups require Cloud Identity Premium accounts.
|
||||
* https://cloud.google.com/identity/docs/how-to/create-dynamic-groups
|
||||
|
||||
The `cimember <UserItem>` option of `gam print cigroups` requires a Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education;
|
||||
and Cloud Identity Premium accounts. Unfortunately, even if you have the required account, the API call that supports the query doesn't work.
|
||||
and Cloud Identity Premium accounts.
|
||||
|
||||
* https://cloud.google.com/identity/docs/reference/rest/v1/groups.memberships/searchTransitiveGroups
|
||||
|
||||
|
||||
@@ -12,14 +12,28 @@
|
||||
|
||||
## Notes
|
||||
To use these commands you must update your client access authentication.
|
||||
You'll enter 19R to turn on the Cloud Identity Policy scope; then continue
|
||||
You'll enter 20r to turn on the Cloud Identity Policy scope; then continue
|
||||
with authentication.
|
||||
```
|
||||
gam oauth delete
|
||||
gam oauth create
|
||||
...
|
||||
[R] 19) Cloud Identity - Policy
|
||||
[R] 20) Cloud Identity - Policy (supports readonly)
|
||||
```
|
||||
You must enable access to policies in the GCP cloud console.
|
||||
|
||||
* Login at console.cloud.google.com
|
||||
* In the upper left click the three lines to the left of Google Cloud and select IAM & Admin
|
||||
* Under IAM & Admin select IAM
|
||||
* Click in the box to the right of Google Cloud
|
||||
* Click the three dots at the right and select IAM/Permissions
|
||||
* Now you should be at "Permissions for organization ..."
|
||||
* Click on Grant Access
|
||||
* Enter the GAM project creator address in Principals
|
||||
* Click in the Select a role box
|
||||
* Type orgpolicy.policyAdmin in the Filter box
|
||||
* Click Organization Policy Administrator
|
||||
* Click Save
|
||||
|
||||
## Definitions
|
||||
```
|
||||
|
||||
@@ -144,6 +144,11 @@ Data fields identified in a `csvkmd` argument.
|
||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<CalendarEntity> ::=
|
||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||
<CIPolicyNameEntity> ::=
|
||||
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
|
||||
<ClassificationLabelNameEntity> ::=
|
||||
@@ -206,6 +211,7 @@ Data fields identified in a `csvkmd` argument.
|
||||
all_shortcuts |
|
||||
all_3p_shortcuts |
|
||||
all_items |
|
||||
my_commentable_items |
|
||||
my_docs |
|
||||
my_files |
|
||||
my_folders |
|
||||
@@ -231,6 +237,7 @@ Data fields identified in a `csvkmd` argument.
|
||||
others_3p_shortcuts |
|
||||
others_items |
|
||||
writable_files
|
||||
|
||||
<DriveFileEntityShortcut> ::=
|
||||
alldrives |
|
||||
mydrive_any |
|
||||
@@ -246,6 +253,7 @@ Data fields identified in a `csvkmd` argument.
|
||||
sharedwithme_all |
|
||||
sharedwithme_mydrive |
|
||||
sharedwithme_notmydrive
|
||||
|
||||
<DriveFileEntity> ::=
|
||||
<DriveFileIDEntity> |
|
||||
<DriveFileNameEntity> |
|
||||
@@ -343,6 +351,15 @@ Data fields identified in a `csvkmd` argument.
|
||||
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<SiteEntity> ::=
|
||||
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<TagManagerAccountPathEntity> ::=
|
||||
<TagManagerAccountPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
<TagManagerContainerPathEntity> ::=
|
||||
<TagManagerContainerPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
<TagManagerWorkspacePathEntity> ::=
|
||||
<TagManagerWorkspacePathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
<TasklistEntity> ::=
|
||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||
<TasklistIDTaskIDEntity> ::=
|
||||
|
||||
@@ -308,12 +308,3 @@ the quote character itself, the column delimiter (comma by default) and new-line
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display global address list
|
||||
As of mid-October 2024, Google deprecated the API that retrieved the Global Address List.
|
||||
|
||||
These commands are a work-around.
|
||||
```
|
||||
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" redirect csv ./UserGAL.csv print users fields name,gal
|
||||
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" batch_size 25 redirect csv ./GroupGAL.csv print groups fields name,gal
|
||||
```
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
!All Google Drive API calls have been converted from v2 to v3, see: https://developers.google.com/drive/v3/web/migration
|
||||
Many of the changes are internal to Gam and have no visible effect. Google has modified/renamed many field names and these will affect scripts that parse the output from `gam print/show drivesettings/drivefileacls/fileinfo/filelist/filerevisions`. Additionally, Google has dropped some fields and their values are no longer available. On input, Gam accepts both the old and new field names.
|
||||
Legacy GAM used Drive API v2, GAM7 uses Drive API v3. See: https://developers.google.com/drive/v3/web/migration
|
||||
Many of the changes are internal to GAM7 and have no visible effect.
|
||||
Google has modified/renamed many field names and these will affect scripts that parse the output from `gam print/show drivesettings/drivefileacls/fileinfo/filelist/filerevisions`.
|
||||
Additionally, Google has dropped some fields and their values are no longer available. On input, GAM7 accepts both the old and new field names where applicable.
|
||||
|
||||
A variable, `drive_v3_native_names` (default value is True), has been added to `gam.cfg` to control the field names on output: when True, the v3 native field names are used; when False, the v3 native field names are mapped to the v2 field names.
|
||||
|
||||
If you have scripts that process the output from these print commands, you may have to make modifications to your scripts.
|
||||
Run your print/show commands with a version of Legacy Gam and save the output.
|
||||
With drive_v3_native_names = False, run your print/show commands with this version of Gam and compare the output to that saved in the previous run;
|
||||
If you use Legacy GAM and have scripts that process the output from these print commands, you may have to make modifications to your scripts when you upgrade to GAM7.
|
||||
Run your print/show commands with a version of Legacy GAM and save the output.
|
||||
Run your print/show commands with GAM7 and compare the output to that saved in the previous run;
|
||||
modify your scripts that process the output as appropriate.
|
||||
|
||||
There is a cost to mapping the v3 field names back to the v2 field names; you can avoid this cost by setting drive_v3_native_names = True,
|
||||
running your print/show commands, comparing the output and making the appropriate script modifications.
|
||||
```
|
||||
print/show drivesettings
|
||||
Dropped fields:
|
||||
@@ -30,7 +28,7 @@ Dropped fields:
|
||||
authKey
|
||||
Renamed fields (Old->New):
|
||||
name->displayName
|
||||
withLink->allowFileDiscovery
|
||||
withLink->allowFileDiscovery - value is complemented
|
||||
|
||||
print/show fileinfo/filelist
|
||||
Dropped fields:
|
||||
@@ -40,19 +38,20 @@ Dropped fields:
|
||||
labels(hidden)
|
||||
markedViewedByMeDate
|
||||
openWithLinks
|
||||
selfLink
|
||||
ownerNames
|
||||
parents(isRoot)
|
||||
parents(parentLink)
|
||||
parents(selfLink)
|
||||
permissions(selfLink)
|
||||
selfLink
|
||||
userPermission(selfLink)
|
||||
userPermission
|
||||
Renamed fields (Old->New):
|
||||
alternateLink->webViewLink
|
||||
capabilities(canChangeRestrictedDownload)->capabilities(canChangeViewersCanCopyContent)
|
||||
createdDate->createdTime
|
||||
expirationDate->expirationTime
|
||||
fileSize->size
|
||||
lastModifyingUserName->lastModifyingUser(displayName)
|
||||
lastViewedByMeDate->viewedByMeTime
|
||||
modified->modifiedByMe
|
||||
modifiedByMeDate->modifiedByMeTime
|
||||
@@ -76,18 +75,3 @@ Renamed fields (Old->New):
|
||||
picture.url->photoLink
|
||||
pinned->keepForever
|
||||
```
|
||||
The parents field of a file has undergone the most change. In Drive v2 it was a list of compound items with three sub-fields per item: id, isRoot, parentLink.
|
||||
In Drive v3 the parents field is a list of simple items, the parent ids. The following examples show how the parents field is output in a CSV file for a file with two parents.
|
||||
```
|
||||
Previous versions of Gam:
|
||||
Owner,title,parents,parents.0.isRoot,parents.0.id,parents.0.parentLink,parents.1.isRoot,parents.1.id,parents.1.parentLink
|
||||
testuser@domain.com,TestFile,2,True,PPPP1111,https://www.googleapis.com/drive/v2/files/PPPP1111,False,PPPP2222,https://www.googleapis.com/drive/v2/files/PPPP2222
|
||||
|
||||
Current version of Gam with drive_v3_name_names = false
|
||||
Owner,title,parents,parents.0.id,parents.1.id
|
||||
testuser@domain.com,TestFile,2,PPPP1111,PPPP2222
|
||||
|
||||
Current version of Gam with drive_v3_name_names = true
|
||||
Owner,name,parents
|
||||
testuser@domain.com,TestFile,PPPP1111 PPPP2222
|
||||
```
|
||||
|
||||
@@ -33,6 +33,7 @@ ENTITY_IS_A_GROUP_RC = 22
|
||||
ENTITY_IS_A_GROUP_ALIAS_RC = 23
|
||||
ENTITY_IS_AN_UNMANAGED_ACCOUNT_RC = 24
|
||||
ORGUNIT_NOT_EMPTY_RC = 25
|
||||
USER_SUSPENDED_RC = 26
|
||||
CHECK_USER_GROUPS_ERROR_RC = 29
|
||||
ORPHANS_COLLECTED_RC = 30
|
||||
# Warnings/Errors
|
||||
|
||||
@@ -10,6 +10,517 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
||||
|
||||
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||
|
||||
### 7.18.03
|
||||
|
||||
Updated `gam oauth create` to give a warning if the number of selected scopes will
|
||||
probably cause Google to generate a "Something went wrong" error.
|
||||
|
||||
### 7.18.02
|
||||
|
||||
Upgraded to OpenSSL 3.5.2.
|
||||
|
||||
### 7.18.01
|
||||
|
||||
Added option `nosystemroles` to `gam print|show adminroles` that causes GAM
|
||||
to only display non-system roles.
|
||||
|
||||
Added option `formatjson` to `gam info|print|show adminroles`; this will be most useful
|
||||
when the `privileges` option is used.
|
||||
|
||||
Updated `gam create|update adminrole` to allow specification of privileges with
|
||||
JSON data: `privileges <JSONData>`. These two updates make it easier to copy admin roles.
|
||||
|
||||
Updated `gam create|update adminrole` to allow output of the created/updated
|
||||
role data in CSV format; by default, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
||||
```
|
||||
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
||||
```
|
||||
|
||||
### 7.18.00
|
||||
|
||||
Added commands to display Business Profile Accounts.
|
||||
These are special purpose commands and will not generally be used.
|
||||
```
|
||||
gam show businessprofileaccounts
|
||||
gam print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
|
||||
### 7.17.03
|
||||
|
||||
Fixed bug in `gam <UserItem> print|show chatspaces asadmin fields <ChatSpaceFieldNameList>` that caused a trap
|
||||
when `displayname` was not in `<ChatSpaceFieldNameList>`.
|
||||
|
||||
### 7.17.02
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show webmastersites` to handle the following error
|
||||
that occurs if you haven't updated your project to include the Google Search Console API.
|
||||
```
|
||||
ERROR: 403: permissionDenied - Google Search Console API has not been used in project 111055363999 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/searchconsole.googleapis.com/overview?project=111055363999 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
|
||||
```
|
||||
|
||||
### 7.17.01
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> show webmastersites` that caused a trap.
|
||||
|
||||
### 7.17.00
|
||||
|
||||
Added commands to discover Sites and WebResources that managed users (previously unmanaged) may have access to for better governance and visibility.
|
||||
These are special purpose commands and will not generally be used.
|
||||
```
|
||||
gam <UserTypeEntity> show webresources
|
||||
gam <UserTypeEntity> print webresources [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> show webmastersites
|
||||
gam <UserTypeEntity> print webmastersites [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
|
||||
### 7.16.01
|
||||
|
||||
The Drive API now supports setting download restrictions on individual files.
|
||||
|
||||
Added `downloadrestictions` and `<DriveDownloadRestrictionsSubfieldName>` to `<DriveFieldName>`.
|
||||
```
|
||||
<DriveDownloadRestrictionsSubfieldName> ::=
|
||||
downloadrestrictions.itemdownloadrestriction|
|
||||
downloadrestrictions.effectivedownloadrestrictionwithcontext
|
||||
```
|
||||
|
||||
Added `itemdownloadrestriction (restrictedforreaders [<Boolean>]) (restrictedforwriters [<Boolean>])`
|
||||
to `<DriveFileAttribute>`.
|
||||
|
||||
From the Drive API documentation:
|
||||
```
|
||||
itemDownloadRestriction - The download restriction of the file applied directly by the owner or organizer. This does not take into account shared drive settings or DLP rules.
|
||||
effectiveDownloadRestrictionWithContext - Output only. The effective download restriction applied to this file. This considers all restriction settings and DLP rules.
|
||||
restrictedForReaders - Whether download and copy is restricted for readers.
|
||||
restrictedForWriters - Whether download and copy is restricted for writers. If true, download is also restricted for readers.
|
||||
```
|
||||
|
||||
### 7.16.00
|
||||
|
||||
Removed `drive_v3_native_names` from `gam.cfg`; GAM now only uses Drive API v3 fields names on output.
|
||||
If you had `drive_v3_native_names = False` in `gam.cfg` or are updating from Legacy GAM:
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Drive-REST-API-v3
|
||||
|
||||
### 7.15.01
|
||||
|
||||
Added `downloadrestrictions.restrictedforreaders` and `downloadrestrictions.restrictedforwriters`
|
||||
to `<SharedDriveRestrictionsSubfieldName>`; previously, only the abbreviations `downloadrestrictedforreaders`
|
||||
and `downloadrestrictedforwriters` were supported (they are still supported).
|
||||
|
||||
Updated `gam <UserTypeEntity> copy drivefile` to handle unexpected data returned by Google that caused a trap.
|
||||
|
||||
### 7.15.00
|
||||
|
||||
Updated `gam print shareddriveorganizers` to make `shownoorganizerdrives` default to `True`
|
||||
as documented; it was defaulting to `False`.
|
||||
|
||||
Cleaned up code for processing Python dictionary structures; this should have no noticable effect.
|
||||
|
||||
### 7.14.04
|
||||
|
||||
Fixed bug in `gam print|show cigroups cimember <UserItem>` that generated the following error:
|
||||
```
|
||||
ERROR: Cloud Identity Group: groups/-, Print Failed: Error(4013): Insufficient permissions to retrieve memberships.
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> update user suspended off` and `gam <UserTypeEntity> unsuspend users`
|
||||
to handle the following error that occurs when trying to unsuspend a user that has been suspended for abuse.
|
||||
```
|
||||
ERROR: 412: adminCannotUnsuspend - Cannot restore a user suspended for abuse.
|
||||
```
|
||||
|
||||
* See: https://support.google.com/a/answer/1110339
|
||||
|
||||
### 7.14.03
|
||||
|
||||
Fixed bug in `gam print cigroup-members includederivedmembership` that caused a trap.
|
||||
|
||||
### 7.14.02
|
||||
|
||||
Fixed bug in `gam print|show cigroups|cigroups-members cimember <UserItem>` that generated the following error:
|
||||
```
|
||||
Cloud Identity Group Print Failed: Request contains an invalid argument.
|
||||
```
|
||||
|
||||
### 7.14.01
|
||||
|
||||
Don't install yubikey library via pip by default. To install with yubikey support use pip install gam7[yubikey]
|
||||
|
||||
### 7.14.00
|
||||
|
||||
Added commands to display Google Tag Manager accounts, containers, workspaces, tags and user permissions.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Users-Tag-Manager
|
||||
|
||||
### 7.13.03
|
||||
|
||||
Added option `csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]`
|
||||
to `gam create chromeprofilecommand` so that command details are displayed in CSV format.
|
||||
|
||||
Added option `commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>` to `<ChromeProfileNameEntity>`
|
||||
so that `gam print|show chromeprofilecommands` can directly display the commands generated by
|
||||
`gam create chromeprofilecommand` with the `csv` option.
|
||||
|
||||
### 7.13.02
|
||||
|
||||
Fixed bug in `gam create chromeprofilecommand` where `select|filter` were not recognized.
|
||||
|
||||
Updated `gam create datatransfer <OldOwnerID> datastudio <NewOwnerID>` that generated the following
|
||||
error due to an unhandled API change.
|
||||
```
|
||||
ERROR: Invalid choice (google data studio): Expected <calendar|looker studio|drive and docs>
|
||||
```
|
||||
|
||||
### 7.13.01
|
||||
|
||||
Enhanced `gam create|print|show chromeprofilecommand` to allow specification
|
||||
of multiple Chrome browser profiles rather than just one.
|
||||
```
|
||||
<ChromeProfilePermanentID> ::= <String>
|
||||
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameEntity> ::=
|
||||
<ChromeProfileNameList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]])
|
||||
|
||||
gam create|print_show chromeprofilecommand <ChromeProfileNameEntity>
|
||||
```
|
||||
|
||||
### 7.13.00
|
||||
|
||||
Added commands that send remote commands to Chrome browser profiles and display the results;
|
||||
at the moment, these commands can clear the browser cache and cookies.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Chrome-Profile-Management#create-a-chrome-profile-command
|
||||
|
||||
### 7.12.02
|
||||
|
||||
Updated `gam print users` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable
|
||||
```
|
||||
|
||||
### 7.12.01
|
||||
|
||||
Added support for `plan free` in `gam create resoldsubscription`.
|
||||
|
||||
* The free plan is exclusive to the Cloud Identity SKU and does not incur any billing.
|
||||
|
||||
### 7.12.00
|
||||
|
||||
Started updated handling of missing scopes messages in client access commands;
|
||||
this is a work in progress.
|
||||
|
||||
Updated `gam info|show shareddrive` to handle changes in the Drive API that caused traps.
|
||||
|
||||
Added `downloadrestrictedforreaders` and `downloadrestrictedforwriters` to
|
||||
`<SharedDriveRestrictionsSubfieldName>` to support new Shared Drive restrictions.
|
||||
|
||||
Updated `gam course <CourseID> create|update announcement` to accept input from
|
||||
a literal string, a file or a Google Doc.
|
||||
```
|
||||
<CourseAnnouncementContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
```
|
||||
|
||||
Added command `gam check suspended <UserItem>` that checks the suspension status of a user
|
||||
and sets the return code to 0 if the user is not suspended or 26 if it is.
|
||||
```
|
||||
$ gam check suspended testok@domain.com
|
||||
User: testok@domain.com, Account Suspended: False
|
||||
$ echo $?
|
||||
0
|
||||
|
||||
$ gam check suspended testsusp@domain.com
|
||||
User: testsusp@domain.com, Account Suspended: True, Suspension Reason: ADMIN
|
||||
$ echo $?
|
||||
26
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> sendemail` to verify that one of `recipient|to|from`
|
||||
immediately follows `sendemail`.
|
||||
|
||||
### 7.11.00
|
||||
|
||||
Added commands to manage classroom/course announcements.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Classroom-Courses#manage-course-announcements
|
||||
|
||||
Upgraded to OpenSSL 3.5.1.
|
||||
|
||||
### 7.10.10
|
||||
|
||||
Added choices `text` and `hyperlink` to option `showwebviewlink` in `gam [<UserTypeEntity>] print|show shareddrives`.
|
||||
* `showwebviewlink text` - Displays `https://drive.google.com/drive/folders/<SharedDriveID>`
|
||||
* `showwebviewlink hyperlink` - Displays `=HYPERLINK("https://drive.google.com/drive/folders/<SharedDriveID>", "<SharedDriveName>")`
|
||||
|
||||
### 7.10.09
|
||||
|
||||
Added option `showwebviewlink` to `gam [<UserTypeEntity>] print|show shareddrives` that
|
||||
displays the web view link for the Shared Drive: `https://drive.google.com/drive/folders/<SharedDriveID>`.
|
||||
|
||||
### 7.10.08
|
||||
|
||||
Fixed bug in commands that modify messages where the `labelids <LabelIdList>` option
|
||||
could not be used unless one of these options was also specified: `query`, `matchlabel`, `ids`;
|
||||
it can be now be used by itself.
|
||||
|
||||
### 7.10.07
|
||||
|
||||
Updated `gam <UserTypeEntity> copy|move drivefile` to hanndle additional instances of
|
||||
the `cannotModifyInheritedPermission` error.
|
||||
|
||||
Added license SKU `Google AI Ultra for Business`
|
||||
* ProductID - 101047
|
||||
* SKUID - 1010470008 | geminiultra
|
||||
|
||||
### 7.10.06
|
||||
|
||||
Added option `clientstates` to `gam print devices` to include client states in device output.
|
||||
|
||||
### 7.10.05
|
||||
|
||||
Google renamed an error: `cannotModifyInheritedTeamDrivePermission` became `cannotModifyInheritedPermission`.
|
||||
GAM will now handle the new error.
|
||||
|
||||
### 7.10.04
|
||||
|
||||
Updated `gam report <ActivityApplicationName>` to accept accept application names as defined
|
||||
in the Reports API discovery document; this means that GAM does not have to be updated when
|
||||
Google defines a new application name.
|
||||
|
||||
`gemini_in_workspace_apps` is now available in `gam report`.
|
||||
|
||||
### 7.10.03
|
||||
|
||||
Fixed bug in commands that modify messages where the `labelids <LabelIdList>` option
|
||||
was not being applied.
|
||||
|
||||
### 7.10.02
|
||||
|
||||
Added option `labelids <LabelIdList>` to all commands that process messages;
|
||||
this option causes GAM to only return messages with labels that match all of the specified label IDs.
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show forms` to always display `isPublished` and
|
||||
`isAcceptingResponses` in `publishSettings/publishState` regardless of their value;
|
||||
the API doesn't return these values when they are False.
|
||||
|
||||
### 7.10.01
|
||||
|
||||
Added options `ispublished [<Boolean>]` and `isacceptingresponses [<Boolean>]` to
|
||||
`gam <UserTypeEntity> create|update form`.
|
||||
|
||||
### 7.10.00
|
||||
|
||||
Added commands to manage/display Chat Custom Emojis.
|
||||
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#manage-chat-emojis
|
||||
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-emojis
|
||||
|
||||
Updated `gam <UserItem> print|show chatspaces|chatmembers asadmin` to display
|
||||
the spaces in ascending display name order.
|
||||
|
||||
### 7.09.07
|
||||
|
||||
Added `webviewlink` to `<FileTreeFieldName>` for use in `gam <UserTypeEntity> print|show filetree`.
|
||||
|
||||
### 7.09.06
|
||||
|
||||
Upddated `gam print|show shareddrives`, `gam print|show shareddriveacls`, `gam print shareddriveorganizers`
|
||||
to display the Shared Drives in ascending name order; the API returns them in an unidentifiable order.
|
||||
|
||||
### 7.09.05
|
||||
|
||||
Improved output of `gam info|show chromeschemas [std]` to more accurately display the schemas.
|
||||
|
||||
Fixed bugs in `gam update chromepolicy` that caused invalid error messaages.
|
||||
|
||||
### 7.09.04
|
||||
|
||||
Fixed bug in `gam whatis <EmailItem>` where the check for an invitable user always failed.
|
||||
|
||||
Fixed bug in `gam print shareddriveorganizers` where no organizers were displayed when `domain` in `gam.cfg` was blank.
|
||||
|
||||
Updated to Python 3.13.5
|
||||
|
||||
### 7.09.03
|
||||
|
||||
Updated `gam <UserTypeEntity> create focustime|outofoffice ... timerange <Time> <Time>` to check
|
||||
that the first `<Time>` is less than the second `Time`; previously the event was not created.
|
||||
|
||||
For new installs the `enforce_expansive_access` Boolean variable in `gam.cfg` now defaults to True.
|
||||
For existing installations, if `enforce_expansive_access` has not been added to `gam.cfg`,
|
||||
a default value of True will be used.
|
||||
|
||||
### 7.09.02
|
||||
|
||||
Added command `gam info chromeschema std <SchemaName>` to display a Chrome policy schema in the same format as Legacy GAM.
|
||||
|
||||
Improved output of `gam show chromeschemas [std]` and `gam info chromeschema [std]` to more accurately display the schemas.
|
||||
|
||||
### 7.09.01
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print diskusage` where the `ownedByMe` column was
|
||||
blank for the top folder.
|
||||
|
||||
Fixed bug in `gam update chromepolicy` where the following error was generated
|
||||
when updating policies with simple numerical values.
|
||||
```
|
||||
ERROR: Missing argument: Expected <value>"
|
||||
```
|
||||
|
||||
### 7.09.00
|
||||
|
||||
Removed the overly broad service account `IAM and Access Management API` scope `https://www.googleapis.com/auth/cloud-platform`
|
||||
from DWD. The `gam <UserTypeEntity> check|Update serviceaccount` commands issue an error message if this scope
|
||||
is enabled prompting you to update your service account authorization so that the scope can be removed.
|
||||
|
||||
GAM commands that need IAM access now use the more limited scope `https://www.googleapis.com/auth/iam` in a non-DWD manner.
|
||||
|
||||
Added `enforce_expansive_access` Boolean variable to `gam.cfg` that provides the default value
|
||||
for option `enforceexpansiveaccess` in all commands that delete or update drive file ACLs/permissions.
|
||||
It's default value is False.
|
||||
```
|
||||
gam <UserTypeEntity> delete permissions
|
||||
gam <UserTypeEntity> delete drivefileacl
|
||||
gam <UserTypeEntity> update drivefileacl
|
||||
gam <UserTypeEntity> copy drivefile
|
||||
gam <UserTypeEntity> move drivefile
|
||||
gam <UserTypeEntity> transfer ownership
|
||||
gam <UserTypeEntity> claim ownership
|
||||
gam <UserTypeEntity> transfer drive
|
||||
```
|
||||
|
||||
Fixed bug in `gam print shareddriveorganizers` that caused a trap when an organizer was a deleted user.
|
||||
|
||||
Updated to Python 3.13.4
|
||||
|
||||
### 7.08.02
|
||||
|
||||
Updated the defaults in `gam print shareddriveorganizers` to match the most common use case, not the script.
|
||||
|
||||
* `domainlist` - The workspace primary domain
|
||||
* `includetypes` - user
|
||||
* `oneorganizer` - True
|
||||
* `shownoorganizerdrives` - True
|
||||
* `includefileorganizers` - False
|
||||
|
||||
To select organizers from any domain, use: `domainlist ""`
|
||||
|
||||
These commands produce the same result.
|
||||
```
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers
|
||||
```
|
||||
|
||||
### 7.08.01
|
||||
|
||||
Added option `shareddrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>))` to
|
||||
`gam print shareddriveorganizers` that displays organizers for a specific list of Shared Drive IDs.
|
||||
|
||||
See: https://github.com/GAM-team/GAM/wiki/Shared-Drives#display-shared-drive-organizers
|
||||
|
||||
### 7.08.00
|
||||
|
||||
Added the following command that can be used instead of the `GetTeamDriveOrganizers.py` script.
|
||||
|
||||
gam [<UserTypeEntity>] print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
||||
[adminaccessasadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
||||
[orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>]
|
||||
[domainlist <DomainList>]
|
||||
[includetypes <OrganizerTypeList>]
|
||||
[oneorganizer [<Boolean>]]
|
||||
[shownorganizerdrives [false|true|only]]
|
||||
[includefileorganizers [<Boolean>]]
|
||||
[delimiter <Character>]
|
||||
```
|
||||
See: https://github.com/GAM-team/GAM/wiki/Shared-Drives#display-shared-drive-organizers
|
||||
|
||||
The command defaults match the script defaults:
|
||||
* `domainlist` - All domains
|
||||
* `includetypes` - user,group
|
||||
* `oneorganizer` - False
|
||||
* `shownoorganizerdrives` - True
|
||||
* `includefileorganizers` - False
|
||||
|
||||
For example, to get a single user organizer from your domain for all Shared Drives including no organizer drives:
|
||||
```
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
||||
```
|
||||
|
||||
### 7.07.17
|
||||
|
||||
Added option `oneuserperrow` to `gam print devices` to have each of a
|
||||
device's users displayed on a separate row with all of the other device fields.
|
||||
|
||||
### 7.07.16
|
||||
|
||||
Added `chromeostype`, `diskspaceusage` and `faninfo` to `<CrOSFieldName>` for use in `gam info|print cros`.
|
||||
|
||||
Fixed bugs/cleaned output in `gam info|print cros`.
|
||||
|
||||
### 7.07.15
|
||||
|
||||
Added option `shareddrivesoption included|included_if_account_is_not_a_member|not_included` to `gam create vaultexport`.
|
||||
|
||||
The previous option `includeshareddrives <Boolean>` is mapped as follows:
|
||||
* `includeshareddrives false` - `shareddrivesoption included_if_account_is_not_a_member`
|
||||
* `includeshareddrives true` - `shareddrivesoption included`
|
||||
|
||||
### 7.07.14
|
||||
|
||||
Update `gam setup chat` output to include the following that shows the actual Cloud Pub/Sub Topic Name.
|
||||
```
|
||||
You'll use projects/<ProjectID>/topics/no-topic in Connection settings Cloud Pub/Sub Topic Name
|
||||
```
|
||||
|
||||
### 7.07.13
|
||||
|
||||
Added option `showitemcountonly` to `gam [<UserTypeEntity>] print|show shareddrives` that causes GAM to display the
|
||||
number of Shared Drives on stdout; no CSV file is written.
|
||||
|
||||
### 7.07.12
|
||||
|
||||
Fixed bug in `gam print|show oushareddrives` that caused a trap.
|
||||
|
||||
Improved getting Shared Drive names from IDs when accessing Shared Drives in external workspaces.
|
||||
|
||||
### 7.07.11
|
||||
|
||||
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
ERROR: 400: badRequest - Bad Request
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> move drivefile` to handle the following error:
|
||||
```
|
||||
ERROR: 400: shareOutNotPermitted
|
||||
```
|
||||
|
||||
### 7.07.10
|
||||
|
||||
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
ERROR: 400: eventTypeRestriction - Attendees cannot be added to 'fromGmail' event with this visibility setting.
|
||||
```
|
||||
|
||||
### 7.07.09
|
||||
|
||||
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
gamlib.glgapi.serviceNotAvailable: Authentication backend unavailable.
|
||||
```
|
||||
|
||||
### 7.07.08
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filelist ... countsonly` that issued an
|
||||
|
||||
17
wiki/Global-Address-List.md
Normal file
17
wiki/Global-Address-List.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Global Address List
|
||||
|
||||
As of mid-October 2024, Google deprecated the API that retrieved the Global Address List.
|
||||
|
||||
These commands are a work-around.
|
||||
|
||||
Display users/groups in GAL.
|
||||
```
|
||||
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" redirect csv ./UserGAL.csv print users fields name,gal
|
||||
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" batch_size 25 redirect csv ./GroupGAL.csv print groups fields name,gal
|
||||
```
|
||||
|
||||
Display users/groups not in GAL.
|
||||
```
|
||||
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:false" redirect csv ./UserNotGAL.csv print users fields name,gal
|
||||
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:false" batch_size 25 redirect csv ./GroupNotGAL.csv print groups fields name,gal
|
||||
```
|
||||
@@ -13,8 +13,7 @@
|
||||
```
|
||||
<DataTransferService> ::=
|
||||
calendar|
|
||||
currents|
|
||||
datastudio|lookerstudio|"google data studio"|
|
||||
datastudio|lookerstudio|"looker studio"|
|
||||
drive|gdrive|googledrive|"drive and docs"
|
||||
<DataTransferServiceList> ::= "<DataTransferService>(,<DataTransferService>)*"
|
||||
|
||||
@@ -38,7 +37,7 @@ gam create|add datatransfer|transfer <OldOwnerID> <DataTransferServiceList> <New
|
||||
(<ParameterKey> <ParameterValue>)*
|
||||
[wait <Integer> <Integer>]
|
||||
```
|
||||
For`datastudio` and `drive`, there are options to control the privacy level of the files to be transferred.
|
||||
For`lookerstudio` and `drive`, there are options to control the privacy level of the files to be transferred.
|
||||
* `private` or `privacy_level private` - Transfer files that are not shared with anyone
|
||||
* `shared` or `privacy_level shared` - Transfer files shared with at least one other user; this is the **default**
|
||||
* `all` or `privacy_level private,shared` - Transfer all files
|
||||
|
||||
@@ -152,7 +152,7 @@ gam update group|groups <GroupEntity> create|add [<GroupRole>]
|
||||
[preview] [actioncsv]
|
||||
<UserItem>|<UserTypeEntity>
|
||||
```
|
||||
To add a group as a memmber of another group, just specify its email address.
|
||||
To add a group as a member of another group, just specify its email address.
|
||||
```
|
||||
gam update group group1@domain.com add member group2@domain.com
|
||||
```
|
||||
@@ -208,7 +208,7 @@ gam update group|groups <GroupEntity> delete|remove [<GroupRole>]
|
||||
```
|
||||
`<GroupRole>` is ignored, deletions take place regardless of role.
|
||||
|
||||
To remove a group as a memmber of another group, just specify its email address.
|
||||
To remove a group as a member of another group, just specify its email address.
|
||||
```
|
||||
gam update group group1@domain.com remove group2@domain.com
|
||||
```
|
||||
|
||||
@@ -335,6 +335,11 @@ gam update group group@domain.com whoCanViewMembership ALL_MEMBERS_CAN_VIEW whoC
|
||||
Group: group@domain.com, Updated
|
||||
```
|
||||
|
||||
If you are entering a valid combination but an error message is returned, do the following and then re-issue your command.
|
||||
```
|
||||
gam update group group@domain.com whoCanViewMembership ALL_IN_DOMAIN_CAN_VIEW whoCanDiscoverGroup ALL_IN_DOMAIN_CAN_DISCOVER
|
||||
```
|
||||
|
||||
## Manage groups
|
||||
|
||||
These commands allow you to create, update and delete groups.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
Use these steps if you have used any version of GAM in your domain. They will update your GAM project
|
||||
and all necessary authentications.
|
||||
|
||||
- [Drive API v2 to Drive API v3](Drive-REST-v3)
|
||||
- [Downloads-Installs](Downloads-Installs)
|
||||
- [Linux and MacOS and Google Cloud Shell](#linux-and-mac-os-and-google-cloud-shell)
|
||||
- [Windows](#windows)
|
||||
@@ -251,10 +252,10 @@ writes the credentials into the file oauth2.txt.
|
||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||
admin@server:/Users/admin$ gam version
|
||||
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||
GAM 7.07.08 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM 7.18.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM Team <google-apps-manager@googlegroups.com>
|
||||
Python 3.13.3 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.6 x86_64
|
||||
Path: /Users/admin/bin/gam7
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
|
||||
@@ -989,9 +990,9 @@ writes the credentials into the file oauth2.txt.
|
||||
C:\>del C:\GAMConfig\oauth2.txt
|
||||
C:\>gam version
|
||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||
GAM 7.07.08 - https://github.com/GAM-team/GAM - pythonsource
|
||||
GAM 7.18.03 - https://github.com/GAM-team/GAM - pythonsource
|
||||
GAM Team <google-apps-manager@googlegroups.com>
|
||||
Python 3.13.3 64-bit final
|
||||
Python 3.13.5 64-bit final
|
||||
Windows-10-10.0.17134 AMD64
|
||||
Path: C:\GAM7
|
||||
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
# Install GAM as Python Library
|
||||
|
||||
Thanks to Jay Lee for showing me how to do this.
|
||||
|
||||
On Windows, you need to install Git to use the pip command.
|
||||
* See: https://pythoninoffice.com/python-pip-install-from-github/
|
||||
|
||||
Scroll down to Install Git
|
||||
|
||||
You can install GAM as a Python library with pip.
|
||||
```
|
||||
pip install git+https://github.com/GAM-team/GAM.git#subdirectory=src
|
||||
pip install gam7
|
||||
```
|
||||
|
||||
Or as a PEP 508 Requirement Specifier, e.g. in requirements.txt file:
|
||||
```
|
||||
advanced-gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git#subdirectory=src
|
||||
gam7
|
||||
```
|
||||
|
||||
Or a pyproject.toml file:
|
||||
@@ -23,13 +17,13 @@ Or a pyproject.toml file:
|
||||
name = "your-project"
|
||||
# ...
|
||||
dependencies = [
|
||||
"advanced-gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git#subdirectory=src"
|
||||
"gam7"
|
||||
]
|
||||
```
|
||||
|
||||
Target a specific revision or tag:
|
||||
Target a specific version:
|
||||
```
|
||||
advanced-gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git@v6.76.01#subdirectory=src
|
||||
gam7==/7.13.3
|
||||
```
|
||||
|
||||
## Using the library
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
- [Synchronize licenses](#synchronize-licenses)
|
||||
|
||||
## API documentation
|
||||
* [License Manager API](https://developers.google.com/admin-sdk/licensing/rest/v1/licenseAssignments)
|
||||
* [License Manager API](https://developers.google.com/workspace/admin/licensing/reference/rest/v1/licenseAssignments)
|
||||
|
||||
## License Products and SKUs
|
||||
* [Product and SKU IDs](https://developers.google.com/admin-sdk/licensing/v1/how-tos/products)
|
||||
@@ -62,6 +62,7 @@
|
||||
| Gemini Education | 1010470004 | geminiedu |
|
||||
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
||||
| Gemini Enterprise | 1010470001 | geminient | duetai |
|
||||
| Google AI Ultra for Business | 1010470008 | geminiultra |
|
||||
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
||||
| Google Chrome Device Management | Google-Chrome-Device-Management | cdm |
|
||||
| Google Drive Storage 16TB | Google-Drive-storage-16TB | 16tb |
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
||||
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||
<ChromeProfileCommandNameList> ::= "<ChromeProfileCommandName>(,<ChromeProfileCommandName>)*"
|
||||
<CIGroupAliasList> ::= "<CIGroupAlias>(,<CIGroupAlias>)*"
|
||||
<CIGroupMemberTypeList> ::= "<CIGroupMemberType>(,<CIGroupMemberType>)*"
|
||||
<CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
|
||||
@@ -96,6 +98,9 @@
|
||||
<SharedDriveACLRoleList> ::= "<SharedDriveACLRole>(,<SharedDriveACLRole>)*"
|
||||
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
||||
<StringList> ::= "<String>(,<String>)*"
|
||||
<TagManagerAccountPathList> ::= "<TagManagerAccountPath>(,<TagManagerAccountPath>)*"
|
||||
<TagManagerContainerPathList> ::= "<TagManagerContainerPath>(,<TagManagerContainerPath>)*"
|
||||
<TagManagerWorkspacePathList> ::= "<TagManagerWorkspacePath>(,<TagManagerWorkspacePath>)*"
|
||||
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
||||
|
||||
@@ -39,19 +39,18 @@ config csv_output_row_filter "'\"accounts:used_quota_in_mb\":count>15000'"
|
||||
## Activity reports
|
||||
```
|
||||
<ActivityApplicationName> ::=
|
||||
access|accesstransparency|
|
||||
accesstransparency|access|
|
||||
admin|
|
||||
calendar|calendars|
|
||||
chat|
|
||||
chrome|
|
||||
classroom|
|
||||
contextawareaccess|
|
||||
currents|gplus|google+|
|
||||
gplus|currents|google+|
|
||||
datastudio|
|
||||
devices|mobile|
|
||||
domain|
|
||||
drive|doc|docs|
|
||||
gcp|
|
||||
gemini|geminiforworkspace|
|
||||
gcp|cloud|
|
||||
geminiinworkspaceapps|gemini|geminiforworkspace|
|
||||
groups|group|
|
||||
groupsenterprise|enterprisegroups|
|
||||
jamboard|
|
||||
@@ -69,7 +68,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
||||
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[filtertime<String> <Time>] [filter|filters <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[event|events <EventNameList>] [ip <String>]
|
||||
[groupidfilter <String>]
|
||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||
@@ -364,7 +363,7 @@ gam report users|user [todrive <ToDriveAttribute>*]
|
||||
[(date <Date>)|(range <Date> <Date>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
||||
[filtertime<String> <Time>] [filter|filters <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
||||
[aggregatebydate|aggregatebyuser [Boolean]]
|
||||
[maxresults <Number>]
|
||||
@@ -414,7 +413,7 @@ where you can specify a relative date without having to change the script.
|
||||
|
||||
For example, filter for last logins more that 60 days ago.
|
||||
```
|
||||
filtertime60d -60d filters "accounts:last_login_time<#filtertime60d#"
|
||||
filters "accounts:last_login_time<#filtertime60d#" filtertime60d -60d
|
||||
```
|
||||
|
||||
Select the fields/parameters to display.
|
||||
|
||||
@@ -135,7 +135,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
## Manage Resold Subscriptions
|
||||
```
|
||||
gam create resoldsubscription <CustomerID> (sku <SKUID>)
|
||||
(plan annual_monthly_pay|annual_yearly_pay|flexible|trial)
|
||||
(plan annual_monthly_pay|annual_yearly_pay|flexible|trial|free)
|
||||
(seats <Number>)
|
||||
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
||||
gam update resoldsubscription <CustomerID> <SKUID>
|
||||
|
||||
@@ -390,14 +390,14 @@ gam delete building <BuildingID>
|
||||
gam info building <BuildingID>
|
||||
[formatjson]
|
||||
gam show buildings
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam print buildings [todrive <ToDriveAttribute>*]
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
|
||||
@@ -12,8 +12,10 @@
|
||||
- [Delete a Shared Drive](#delete-a-shared-drive)
|
||||
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
||||
- [Display Shared Drives](#display-shared-drives)
|
||||
- [Display List of Shared Drives in an Organizational Unit other than /](#display-list-of-shared-drives-in-an-organizational-unit-other-than-)
|
||||
- [Display Shared Drive Counts](#display-shared-drive-counts)
|
||||
- [Display List of Shared Drives in an Organizational Unit](#display-list-of-shared-drives-in-an-organizational-unit)
|
||||
- [Display Count of Shared Drives in an Organizational Unit](#display-count-of-shared-drives-in-an-organizational-unit)
|
||||
- [Display Shared Drive Organizers](#display-shared-drive-organizers)
|
||||
- [Display all Shared Drives with no members](#display-all-shared-drives-with-no-members)
|
||||
- [Display all Shared Drives with no organizers](#display-all-shared-drives-with-no-organizers)
|
||||
- [Display all Shared Drives with a specific organizer](#display-all-shared-drives-with-a-specific-organizer)
|
||||
@@ -29,6 +31,7 @@
|
||||
- [Display ACLs for Shared Drives with all organizers outside of your domain](#display-acls-for-shared-drives-with-all-organizers-outside-of-your-domain)
|
||||
- [Display ACLs for Shared Drives with all ACLs outside of your domain](#display-acls-for-shared-drives-with-all-acls-outside-of-your-domain)
|
||||
- [Clean up scammed Shared Drives](#clean-up-scammed-shared-drives)
|
||||
- [Delete old empty Shared Drives](#delete-old-empty-shared-drives)
|
||||
|
||||
## API documentation
|
||||
* [Drive API - Drives](https://developers.google.com/drive/api/reference/rest/v3/drives)
|
||||
@@ -42,6 +45,8 @@
|
||||
* [Shared Drives Search](https://developers.google.com/drive/api/guides/search-shareddrives)
|
||||
|
||||
## Definitions
|
||||
* [`<FileSelector> | <CSVFileSelector>`](Collections-of-Items)
|
||||
|
||||
```
|
||||
<ColorHex> ::= "#<Hex><Hex><Hex><Hex><Hex><Hex>"
|
||||
<ColorNameGoogle> ::=
|
||||
@@ -76,6 +81,9 @@
|
||||
```
|
||||
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||
|
||||
<OrganizerType> ::= user|group
|
||||
<OrganizerTypeList> ::= "<OrganizerType>(,<OrganizerType>)*"
|
||||
|
||||
<OrgUnitID> ::= id:<String>
|
||||
<OrgUnitPath> ::= /|(/<String>)+
|
||||
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
||||
@@ -174,6 +182,7 @@
|
||||
createdtime|
|
||||
id|
|
||||
name|
|
||||
restrictions|
|
||||
themeid
|
||||
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
||||
|
||||
@@ -194,6 +203,8 @@
|
||||
allowcontentmanagerstosharefolders|
|
||||
copyrequireswriterpermission|
|
||||
domainusersonly|
|
||||
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||
drivemembersonly|teammembersonly|
|
||||
sharingfoldersrequiresorganizerpermission
|
||||
|
||||
@@ -226,29 +237,29 @@ Three forms of the commands are available:
|
||||
|
||||
## Display Shared Drive themes
|
||||
```
|
||||
gam show teamdrivethemes
|
||||
gam show shareddrivethemes
|
||||
```
|
||||
## Manage Shared Drives
|
||||
|
||||
## Create a Shared Drive
|
||||
The user that creates a Shared Drive is given the permission role organizer for the Shared Drive,
|
||||
```
|
||||
gam [<UserTypeEntity>] create teamdrive <Name>
|
||||
gam [<UserTypeEntity>] create shareddrive <Name>
|
||||
[(theme|themeid <String>)|
|
||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
||||
[adminaccess|asadmin]
|
||||
```
|
||||
* `themeid` - a Shared Drive themeId obtained from `show teamdrivethemes`
|
||||
* `themeid` - a Shared Drive themeId obtained from `show shareddrivethemes`
|
||||
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||
* `<Float>` - X coordinate, typically 0.0
|
||||
* `<Float>` - Y coordinate, typically 0.0
|
||||
* `<Float>` - width, typically 1.0
|
||||
* `color` - set the Shared Drive color
|
||||
* `<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `[restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `hide <Boolean>` - Set Shared Drive visibility
|
||||
|
||||
If any attributes other than `themeid` are specified, GAM must create the Drive and then update the Drive attributes.
|
||||
@@ -275,9 +286,9 @@ When either of these options is chosen, no infomation about Shared Drive restric
|
||||
To retrieve the Shared Drive ID with `returnidonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
teamDriveId=$(gam create teamdrive ... returnidonly)
|
||||
teamDriveId=$(gam create shareddrive ... returnidonly)
|
||||
Windows PowerShell
|
||||
$teamDriveId = & gam create teamdrive ... returnidonly
|
||||
$teamDriveId = & gam create shareddrive ... returnidonly
|
||||
```
|
||||
|
||||
## Bulk Create Shared Drives
|
||||
@@ -287,7 +298,7 @@ As a newly created Drive can't be updated for 30+ seconds; split the operation i
|
||||
|
||||
Make a CSV file SharedDriveNames.csv with at least one column, name.
|
||||
```
|
||||
gam redirect csv ./SharedDrivesCreated.csv multiprocess csv SharedDriveNames.csv gam create teamdrive "~name" csv
|
||||
gam redirect csv ./SharedDrivesCreated.csv multiprocess csv SharedDriveNames.csv gam create shareddrive "~name" csv
|
||||
```
|
||||
This will create a three column CSV file SharedDrivesCreated.csv with columns: User,name,id
|
||||
* There will be a row for each Shared Drive.
|
||||
@@ -318,17 +329,17 @@ gam redirect stdout ./StudentSharedDrivesAccess.txt multiprocess redirect stderr
|
||||
|
||||
These commands are used to set basic Shared Drive settings.
|
||||
```
|
||||
gam [<UserTypeEntity>] update teamdrive <SharedDriveEntity> [name <Name>]
|
||||
gam [<UserTypeEntity>] update shareddrive <SharedDriveEntity> [name <Name>]
|
||||
[adminaccess|asadmin]
|
||||
[(theme|themeid <String>)|
|
||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
```
|
||||
* `themeid` - a Shared Drive themeId obtained from `show teamdrivethemes`
|
||||
* `themeid` - a Shared Drive themeId obtained from `show shareddrivethemes`
|
||||
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||
* `color` - set the Shared Drive color
|
||||
* `<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `[restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `hidden <Boolean>` - Set Shared Drive visibility
|
||||
|
||||
* `ou|org|orgunit <OrgUnitItem>` - See: https://workspaceupdates.googleblog.com/2022/05/shared-drives-in-organizational-units-open-beta.html
|
||||
@@ -337,7 +348,7 @@ This option is only available when the command is run as an administrator.
|
||||
|
||||
## Delete a Shared Drive
|
||||
```
|
||||
gam [<UserTypeEntity>] delete teamdrive <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] delete shareddrive <SharedDriveEntity>
|
||||
[adminaccess|asadmin] [allowitemdeletion]
|
||||
```
|
||||
By default, deleting a Shared Drive that contains any files/folders will fail.
|
||||
@@ -346,46 +357,58 @@ This is not reversible, proceed with caution.
|
||||
|
||||
## Change Shared Drive visibility
|
||||
```
|
||||
gam [<UserTypeEntity>] hide teamdrive <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] unhide teamdrive <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] hide shareddrive <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] unhide shareddrive <SharedDriveEntity>
|
||||
```
|
||||
|
||||
## Display Shared Drives
|
||||
These commands are used to get information about Shared Drives themselves, not the files/folders on the Shared Drives.
|
||||
```
|
||||
gam [<UserTypeEntity>] info teamdrive <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] info shareddrive <SharedDriveEntity>
|
||||
[adminaccess|asadmin]
|
||||
[fields <SharedDriveFieldNameList>] [formatjson]
|
||||
gam [<UserTypeEntity>] show teamdriveinfo <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] show shareddriveinfo <SharedDriveEntity>
|
||||
[adminaccess|asadmin]
|
||||
[fields <SharedDriveFieldNameList>] [formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam [<UserTypeEntity>] show teamdrives
|
||||
gam [<UserTypeEntity>] show shareddrives
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[fields <SharedDriveFieldNameList>] [formatjson]
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[formatjson]
|
||||
```
|
||||
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||
|
||||
Use option `showwebviewlink` to display the web view link for the Shared Drive.
|
||||
* `showwebviewlink text` - Displays `https://drive.google.com/drive/folders/<SharedDriveID>`
|
||||
* `showwebviewlink hyperlink` - Dsiplays `=HYPERLINK("https://drive.google.com/drive/folders/<SharedDriveID>", "<SharedDriveName>")`
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam [<UserTypeEntity>] print teamdrives [todrive <ToDriveAttribute>*]
|
||||
gam [<UserTypeEntity>] print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[fields <SharedDriveFieldNameList>] [formatjson [quotechar <Character>]]
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||
|
||||
Use option `showwebviewlink` to display the web view link for the Shared Drive.
|
||||
* `showwebviewlink text` - Displays `https://drive.google.com/drive/folders/<SharedDriveID>`
|
||||
* `showwebviewlink hyperlink` - Dsiplays `=HYPERLINK("https://drive.google.com/drive/folders/<SharedDriveID>", "<SharedDriveName>")`
|
||||
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
@@ -398,50 +421,116 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
### Examples
|
||||
Print information about all Shared Drives in the organization.
|
||||
```
|
||||
gam print teamdrives
|
||||
gam user admin@domain.com print teamdrives adminaccess
|
||||
gam print shareddrives
|
||||
gam user admin@domain.com print shareddrives adminaccess
|
||||
```
|
||||
Print information about Shared Drives that have admin@domain.com as a member.
|
||||
```
|
||||
gam user admin@domain.com print teamdrives
|
||||
gam user admin@domain.com print shareddrives
|
||||
```
|
||||
|
||||
## Display Shared Drive Organizers
|
||||
The following command can be used instead of the `GetTeamDriveOrganizers.py` script.
|
||||
|
||||
```
|
||||
gam [<UserTypeEntity>] print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin]
|
||||
[(shareddriveadminquery|query <QuerySharedDrive>) |
|
||||
(shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)))]
|
||||
[orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>]
|
||||
[domainlist <DomainList>]
|
||||
[includetypes <OrganizerTypeList>]
|
||||
[oneorganizer [<Boolean>]]
|
||||
[shownorganizerdrives [false|true|only]]
|
||||
[includefileorganizers [<Boolean>]]
|
||||
[delimiter <Character>]
|
||||
```
|
||||
Options `shareddriveadminquery|query` and `shareddrives|teamdrives` are mutually exclusive.
|
||||
|
||||
Options `shareddriveadminquery|query` and `orgunit|org|ou` require `adminaccess|asadmin`.
|
||||
|
||||
By default, organizers for all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||
* `shareddrives|teamdrives <SharedDriveIDList>` - Select the Shared Drive IDs specified in `<SharedDriveIDList>`
|
||||
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Select the Shared Drive IDs specified in `<FileSelector>|<CSVFileSelector>`
|
||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||
|
||||
For multiple organizers:
|
||||
* `delimiter <Character>` - Separate `organizers` entries with `<Character>`; the default value is `csv_output_field_delimiter` from `gam.cfg`.
|
||||
|
||||
The command defaults do not match the script defaults, they are set for the most common use case:
|
||||
* `domainlist` - The workspace primary domain
|
||||
* `includetypes` - user
|
||||
* `oneorganizer` - True
|
||||
* `shownoorganizerdrives` - True
|
||||
* `includefileorganizers` - False
|
||||
|
||||
To select organizers from any domain, use: `domainlist ""`
|
||||
|
||||
For example, to get a single user organizer from your domain for all Shared Drives including no organizer drives:
|
||||
```
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers
|
||||
```
|
||||
|
||||
## Display all Shared Drives with no members
|
||||
```
|
||||
gam print teamdrives query "memberCount = 0"
|
||||
gam print shareddrives query "memberCount = 0"
|
||||
```
|
||||
|
||||
## Display all Shared Drives with no organizers
|
||||
```
|
||||
gam print teamdrives query "organizerCount = 0"
|
||||
gam print shareddrives query "organizerCount = 0"
|
||||
```
|
||||
|
||||
## Display Shared Drive Counts
|
||||
Display the number of Shared Drives.
|
||||
```
|
||||
gam [<UserTypeEntity>] show|print shareddrives
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
showitemcountonly
|
||||
```
|
||||
By default, all Shared Drives are counted; use the following options to select a subset of Shared Drives:
|
||||
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||
|
||||
Example
|
||||
```
|
||||
$ gam print shareddrives showitemcountonly
|
||||
Getting all Shared Drives, may take some time on a large Google Workspace Account...
|
||||
Got 12 Shared Drives...
|
||||
12
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print shareddrives showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print shareddrives showitemcountonly
|
||||
```
|
||||
|
||||
## Display all Shared Drives with a specific organizer
|
||||
Substitute actual email address for `organizer@domain.com`.
|
||||
```
|
||||
gam config csv_output_header_filter "id,name" print teamdriveacls pm emailaddress organizer@domain.com role organizer em pma process pmselect
|
||||
gam config csv_output_header_filter "id,name" print shareddriveacls pm emailaddress organizer@domain.com role organizer em pma process pmselect
|
||||
```
|
||||
|
||||
## Display all Shared Drives without a specific organizer
|
||||
Substitute actual email address for `organizer@domain.com`.
|
||||
```
|
||||
gam config csv_output_header_filter "id,name" print teamdriveacls pm emailaddress organizer@domain.com role organizer em pma skip pmselect
|
||||
```
|
||||
|
||||
## Display List of Shared Drives in an Organizational Unit other than /
|
||||
Get the orgUnitID of OU / and use it (without the id:) in the print|show command. Adjust fields as desired.
|
||||
```
|
||||
gam info ou / nousers
|
||||
gam show teamdrives query "orgUnitId!='00gjdgxs2p9cxyz'" fields id,name,orgunit,createdtime
|
||||
gam print teamdrives query "orgUnitId!='00gjdgxs2p9cxyz'" fields id,name,orgunit,createdtime
|
||||
gam config csv_output_header_filter "id,name" print shareddriveacls pm emailaddress organizer@domain.com role organizer em pma skip pmselect
|
||||
```
|
||||
|
||||
## Display List of Shared Drives in an Organizational Unit
|
||||
Get the orgUnitID of the desired OU and use it (without the id:) in the print|show command. Adjust fields as desired.
|
||||
```
|
||||
gam info ou <OrgUnitPath> nousers
|
||||
gam show teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||
gam print teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||
gam show shareddrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||
gam print shareddrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||
```
|
||||
Alternative method; `<OrgUnitPath>` defaults to `/`.
|
||||
```
|
||||
@@ -453,6 +542,31 @@ gam print oushareddrives [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
## Display Count of Shared Drives in an Organizational Unit
|
||||
```
|
||||
gam print|show oushareddrives
|
||||
[ou|org|orgunit <OrgUnitPath>]
|
||||
showitemcountonly
|
||||
```
|
||||
`<OrgUnitPath>` defaults to `"/"`.
|
||||
|
||||
Example
|
||||
```
|
||||
$ gam print oushareddrives showitemcountonly
|
||||
Getting all Shared Drives for /, may take some time on a large Organizational Unit...
|
||||
Got 9 Shared Drives for /...
|
||||
9
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print oushareddrives showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print oushareddrives showitemcountonly
|
||||
```
|
||||
|
||||
## Manage Shared Drive access
|
||||
These commands are used to manage the ACLs on Shared Drives themselves, not the files/folders on the Shared Drives.
|
||||
|
||||
@@ -504,12 +618,12 @@ These commands are used to transfer ACLs from one Shared Drive to another.
|
||||
* `copy` - Copy all ACLs from the source Shared Drive to the target Shared Drive. The role of an existing ACL in the target Shared Drive will never be reduced.
|
||||
* `sync` - Add/delete/update ACLs in the target Shared Drive to match those in the source Shared Drive.
|
||||
```
|
||||
gam [<UserTypeEntity>] copy teamdriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||
[showpermissionsmessages [<Boolean>]]
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
[adminaccess|asadmin]
|
||||
gam [<UserTypeEntity>] sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
gam [<UserTypeEntity>] sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
[showpermissionsmessages [<Boolean>]]
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
@@ -547,7 +661,7 @@ gam [<UserTypeEntity>] print drivefileacls <SharedDriveEntityAdmin> [todrive <To
|
||||
### Examples:
|
||||
Find all the organizers and file organizers on the Golgafrincham shared drive in CSV form.
|
||||
```
|
||||
gam print drivefileacls teamdrive "Golgafrincham" pm role organizer em pm role fileorganizer em oneitemperrow
|
||||
gam print drivefileacls shareddrive "Golgafrincham" pm role organizer em pm role fileorganizer em oneitemperrow
|
||||
```
|
||||
|
||||
By default, all Shared Drives specified are displayed; use the following option to select a subset of those Shared Drives.
|
||||
@@ -578,7 +692,7 @@ gam config csv_output_header_drop_filter "User,createdTime,permission.photoLink,
|
||||
|
||||
## Display Shared Drive access for selected Shared Drives
|
||||
```
|
||||
gam [<UserTypeEntity>] show teamdriveacls
|
||||
gam [<UserTypeEntity>] show shareddriveacls
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -587,7 +701,7 @@ gam [<UserTypeEntity>] show teamdriveacls
|
||||
[shownopermissionsdrives false|true|only]
|
||||
[formatjson]
|
||||
|
||||
gam [<UserTypeEntity>] print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
gam [<UserTypeEntity>] print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -614,7 +728,7 @@ By default, all ACLS are displayed; use the following options to select a subset
|
||||
* `role|roles <SharedDriveACLRoleList>` - Display ACLs for the specified roles only.
|
||||
* `<PermissionMatch>* [<PermissionMatchAction>]` - Use permission matching to display a subset of the ACLs for each Shared Drive; this only applies when `pmselect` is not specified
|
||||
|
||||
With `print teamdriveacls` or `show teamdrivecls formatjson`, the ACLs selected for display are all output on one row/line as a repeating item with the matching Shared Drive id.
|
||||
With `print shareddriveacls` or `show shareddrivecls formatjson`, the ACLs selected for display are all output on one row/line as a repeating item with the matching Shared Drive id.
|
||||
When `oneitemperrow` is specified, each ACL is output on a separate row/line with the matching Shared Drive id and name. This simplifies processing the CSV file with subsequent Gam commands.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
@@ -626,35 +740,35 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
### Examples
|
||||
Find all organizers and viewers on the shared drive Heart of Gold in CSV form.
|
||||
```
|
||||
gam print teamdriveacls matchname "Heart of Gold" role organizer,reader oneitemperrow
|
||||
gam print shareddriveacls matchname "Heart of Gold" role organizer,reader oneitemperrow
|
||||
```
|
||||
|
||||
Print ACLs for all Shared Drives in the organization created after November 1, 2017.
|
||||
```
|
||||
gam print teamdriveacls teamdriveadminquery "createdTime > '2017-11-01T00:00:00'"
|
||||
gam print shareddriveacls shareddriveadminquery "createdTime > '2017-11-01T00:00:00'"
|
||||
```
|
||||
|
||||
Print ACLs for all Shared Drives in the organization with foo@bar.com as an organizer.
|
||||
```
|
||||
gam print teamdriveacls user foo@bar.com role organizer
|
||||
gam print shareddriveacls user foo@bar.com role organizer
|
||||
```
|
||||
|
||||
Print ACLs for all Shared Drives in the organization with foo@bar.com or groups that contain foo@bar.com as a reader.
|
||||
```
|
||||
gam print teamdriveacls user foo@bar.com role reader checkgroups
|
||||
gam print shareddriveacls user foo@bar.com role reader checkgroups
|
||||
```
|
||||
|
||||
## Display ACLs for Shared Drives with no organizers
|
||||
### For all Shared Drives
|
||||
```
|
||||
One row per Shared Drive, all ACLs on the same row
|
||||
gam redirect csv ./SharedDriveACLsNoOrganizers.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted query "organizerCount = 0"
|
||||
gam redirect csv ./SharedDriveACLsNoOrganizers.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted query "organizerCount = 0"
|
||||
|
||||
A row per Shared Drive/ACL combination
|
||||
gam redirect csv ./SharedDriveACLsNoOrganizers.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted query "organizerCount = 0" oneitemperrow
|
||||
gam redirect csv ./SharedDriveACLsNoOrganizers.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted query "organizerCount = 0" oneitemperrow
|
||||
```
|
||||
### For selected Shared Drives
|
||||
Create a CSV file TeamDrives.csv with at least two columns (id, name) for the selected Shared Drives.
|
||||
Create a CSV file shareddrives.csv with at least two columns (id, name) for the selected Shared Drives.
|
||||
```
|
||||
One row per Shared Drive, all ACLs on the same row
|
||||
gam redirect csv ./SharedDriveACLsNoOrganizers.csv multiprocess csv ./SharedDrives.csv gam print drivefileacls "~id" addtitle "~name" fields id,domain,emailaddress,role,type,deleted pm role organizer em pma skip pmselect
|
||||
@@ -667,13 +781,13 @@ gam redirect csv ./SharedDriveACLsNoOrganizersOIPR.csv multiprocess csv ./Shared
|
||||
### For all Shared Drives
|
||||
```
|
||||
One row per Shared Drive, all ACLs on the same row
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOrganizers.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted role organizer pm role organizer domainlist domain.com,... em pma skip pmselect
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOrganizers.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted role organizer pm role organizer domainlist domain.com,... em pma skip pmselect
|
||||
|
||||
A row per Shared Drive/ACL combination
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOrganizers.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted role organizer pm role organizer domainlist domain.com,... em pma skip pmselect
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOrganizers.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted role organizer pm role organizer domainlist domain.com,... em pma skip pmselect
|
||||
```
|
||||
### For selected Shared Drives
|
||||
Create a CSV file TeamDrives.csv with at least two columns (id, name) for the selected Shared Drives.
|
||||
Create a CSV file shareddrives.csv with at least two columns (id, name) for the selected Shared Drives.
|
||||
```
|
||||
One row per Shared Drive, all ACLs on the same row
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOrganizers.csv multiprocess csv ./SharedDrives.csv gam print drivefileacls "~id" addtitle "~name" fields id,domain,emailaddress,role,type,deleted pm role organizer domainlist domain.com,... em pma skip pmselect
|
||||
@@ -687,13 +801,13 @@ gam redirect csv ./SharedDriveACLsAllExternalOrganizersOIPR.csv multiprocess csv
|
||||
Include a permission match `pm domainlist domain.com,... em` that lists your internal domain(s).
|
||||
```
|
||||
One row per Shared Drive, all ACLs on the same row
|
||||
gam redirect csv ./SharedDriveACLsAllExternal.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect
|
||||
gam redirect csv ./SharedDriveACLsAllExternal.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect
|
||||
|
||||
A row per Shared Drive/ACL combination
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOIPR.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect oneitemperrow
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOIPR.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect oneitemperrow
|
||||
```
|
||||
### For selected Shared Drives
|
||||
Create a CSV file TeamDrives.csv with at least two columns (id, name) for the selected Shared Drives.
|
||||
Create a CSV file shareddrives.csv with at least two columns (id, name) for the selected Shared Drives.
|
||||
|
||||
Include a permission match `pm domainlist domain.com,... em` that lists your internal domain(s).
|
||||
```
|
||||
@@ -716,16 +830,16 @@ to get the Shared Drive ACLs for the scammed Shared Drives.
|
||||
|
||||
```
|
||||
One row per Shared Drive, all ACLs on the same row
|
||||
gam redirect csv ./SharedDriveACLsAllExternal.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect
|
||||
gam redirect csv ./SharedDriveACLsAllExternal.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect
|
||||
|
||||
A row per Shared Drive/ACL combination
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOIPR.csv print teamdriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect oneitemperrow
|
||||
gam redirect csv ./SharedDriveACLsAllExternalOIPR.csv print shareddriveacls fields id,domain,emailaddress,role,type,deleted pm domainlist domain.com,... em pma skip pmselect oneitemperrow
|
||||
```
|
||||
|
||||
### Add an organizer from your domain
|
||||
Sustitute an appropriate value for `admin@domain.com`.
|
||||
```
|
||||
gam redirect stdout ./AddOrganizer.txt multiprocess redirect stderr stdout csv ./SharedDriveACLsAllExternal.csv gam add drivefileacl teamdriveid "~id" user admin@domain.com role organizer
|
||||
gam redirect stdout ./AddOrganizer.txt multiprocess redirect stderr stdout csv ./SharedDriveACLsAllExternal.csv gam add drivefileacl shareddriveid "~id" user admin@domain.com role organizer
|
||||
```
|
||||
|
||||
### Delete non domain ACLs
|
||||
@@ -734,7 +848,7 @@ you must delete all rows in `SharedDriveACLsAllExternalOIPR.csv` that have the s
|
||||
|
||||
This will disable all non-domain users access to the Shared Drive.
|
||||
```
|
||||
gam redirect stdout ./DeleteExternalACLs.txt multiprocess redirect stderr stdout csv ./SharedDriveACLsAllExternalOIPR.csv gam delete drivefileacl teamdriveid "~id" "id:~~permission.id~~"
|
||||
gam redirect stdout ./DeleteExternalACLs.txt multiprocess redirect stderr stdout csv ./SharedDriveACLsAllExternalOIPR.csv gam delete drivefileacl shareddriveid "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
### Delete the Shared Drives
|
||||
@@ -742,5 +856,21 @@ The `allowitemdeletion` option allows deletion of non-empty Shared Drives. This
|
||||
|
||||
This is not reversible, proceed with caution.
|
||||
```
|
||||
gam redirect stdout ./DeleteSharedDrives.txt multiprocess redirect stderr stdout csv ./SharedDriveACLsAllExternal.csv gam delete teamdrive "~id" allowitemdeletion
|
||||
gam redirect stdout ./DeleteSharedDrives.txt multiprocess redirect stderr stdout csv ./SharedDriveACLsAllExternal.csv gam delete shareddrive "~id" allowitemdeletion
|
||||
```
|
||||
|
||||
## Delete old empty Shared Drives
|
||||
```
|
||||
# Get a list of Shared Drives organizers for Shared Drives created before one year ago; alter date<-1y as required.
|
||||
gam config csv_output_row_filter "createdTime:date<-1y" redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
||||
|
||||
# Inspect shareddriveOrganizers.csv, you'll have to deal with Shared Drives with no organizer/manager
|
||||
|
||||
# Get old empty Shared Drives
|
||||
gam config num_threads 10 csv_input_row_filter "organizers:regex:^.+$" csv_output_row_filter "Total:count=0" redirect csv ./OldEmptySharedDrives.csv multiprocess redirect stderr - multiprocess csv ./TeamDriveOrganizers.csv gam user "~organizers" print filecounts select shareddriveid "~id" showsize
|
||||
|
||||
# Inspect OldEmptySharedDrives.csv, if you're confident of the results, proceed
|
||||
|
||||
# Delete old empty Shared Drives
|
||||
gam redirect stdout ./DeleteOldEmptySharedDrives.txt multiprocess redirect stderr stdout csv ./OldEmptySharedDrives.csv gam user "~User" delete shareddrive "~id"
|
||||
```
|
||||
@@ -12,15 +12,16 @@
|
||||
- [Manage Chat Messages](#manage-chat-messages)
|
||||
- [Display Chat Messages](#display-chat-messages)
|
||||
- [Display Chat Events](#display-chat-events)
|
||||
- [Manage Chat Emojis](#manage-chat-emojis)
|
||||
- [Display Chat Emojis](#display-chat-emojis)
|
||||
- [Bulk Operations](#bulk-operations)
|
||||
|
||||
## Introduction
|
||||
These features were added in version 6.60.00.
|
||||
|
||||
To use these commands you must update your service account authorization.
|
||||
```
|
||||
gam user user@domain.com update serviceaccount
|
||||
|
||||
[*] 3) Chat API - Custom Emojis (supports readonly)
|
||||
[*] 4) Chat API - Memberships (supports readonly)
|
||||
[*] 5) Chat API - Memberships Admin (supports readonly)
|
||||
[*] 6) Chat API - Messages (supports readonly)
|
||||
@@ -46,17 +47,19 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
* Enter an App name and Description of your choosing.
|
||||
* For the Avatar URL you can use `https://dummyimage.com/384x256/4d4d4d/0011ff.png&text=+GAM` or a public URL to an image of your own choosing.
|
||||
* In Functionality, uncheck both "Receive 1:1 messages" and "Join spaces and group conversations"
|
||||
* In Connection settings, choose "Cloud Pub/Sub" and enter `projects/<ProjectID>/topics/no-topic` for the topic name. Replace `<ProjectID>` with your GAM project ID. GAM doesn't yet listen to pub/sub so this option is not used.
|
||||
* In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
|
||||
* In Connection settings, choose "Cloud Pub/Sub" and enter `projects/<ProjectID>/topics/no-topic` for the Topic Name. Replace `<ProjectID>` with your GAM project ID. GAM doesn't yet listen to pub/sub so this option is not used.
|
||||
* In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
|
||||
* Click Save.
|
||||
|
||||
## API documentation
|
||||
* [Overview](https://developers.google.com/workspace/chat/overview)
|
||||
* [Chat API](https://developers.google.com/workspace/chat/api/reference/rest)
|
||||
* [Chat API - Custom Emojis](https://developers.google.com/workspace/chat/api/reference/rest/v1/customEmojis)
|
||||
* [Chat API - Members](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.members/list)
|
||||
* [Chat API - Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/list)
|
||||
* [Chat API - Events](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.spaceEvents/list)
|
||||
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
||||
* [Manage customemoji permissions](https://support.google.com/a/answer/12850085)
|
||||
* [Manage Spaces in Admin Console](https://support.google.com/a/answer/13369245)
|
||||
* [Predefined permission settings](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces#Space.FIELDS.predefined_permission_settings)
|
||||
|
||||
@@ -85,6 +88,8 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||
<ChatEvent> ::= spaces/<String>/spaceEvents/<String>
|
||||
<ChatMember> ::= spaces/<String>/members/<String>
|
||||
<ChatMemberList> ::= "<ChatMember>(,<ChatMember>)*"
|
||||
@@ -459,7 +464,7 @@ gam <UserItem> delete chatmember asadmin <ChatSpace>
|
||||
|
||||
Delete members from a chat space by specifying chatmember names, asadmin
|
||||
```
|
||||
gam <UserItem> remove chatmember members asadmin <ChatMemberList>
|
||||
gam <UserItem> remove chatmember asadmin members <ChatMemberList>
|
||||
```
|
||||
|
||||
### Update a members role in a user's chat space
|
||||
@@ -898,6 +903,75 @@ filter 'start_time=\"2024-03-15T11:30:00-04:00\" AND event_types:\"google.worksp
|
||||
filter 'start_time=\"2024-03-15T11:30:00+00:00\" AND end_time=\"2024-03-3100:00:00+00:00\" AND event_types:\"google.workspace.chat.message.v1.created\"'
|
||||
```
|
||||
|
||||
## Manage Chat Emojis
|
||||
|
||||
### Create a Chat Emoji
|
||||
```
|
||||
gam <UserTypeEntity> create chatemoji <ChatEmojiName>
|
||||
([drivedir|(sourcefolder <FilePath>)] [filename <FileNamePattern>])
|
||||
[formatjson]
|
||||
```
|
||||
Emoji names must start and end with colons, must be lowercase and can only contain alphanumeric characters, hyphens, and underscores.
|
||||
Hyphens and underscores should be used to separate words and cannot be used consecutively.
|
||||
|
||||
By default, the emoji file will be uploaded from the current working directory.
|
||||
* `drivedir` - The emoji file will be uploaded from the directory specified by `drive_dir` in gam.cfg
|
||||
* `sourcefolder <FilePath>` - The emoji file will be uploaded from `<FilePath>`
|
||||
|
||||
Specify the emoji file name; the following substitutions will be made:
|
||||
* `#email#` and `#user#` will be replaced by the user's full email address
|
||||
* `#username#` will be replaced by the local part of the user's email address
|
||||
|
||||
### Delete a Chat Emoji
|
||||
Deletes the given Chat emoji.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> delete chatemoji <Chatemoji>
|
||||
```
|
||||
|
||||
## Display Chat Emojis
|
||||
### Display a specific Chat emoji
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> info chatemoji <Chatemoji>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
### Display information about all chat emojis
|
||||
```
|
||||
gam <UserTypeEntity> show chatemojis
|
||||
[showcreatedby any|me|others]
|
||||
[formatjson]
|
||||
```
|
||||
Select emojis to display:
|
||||
* `showcreatedby any` - Display all emojis regardless of creator
|
||||
* `showcreatedby ` - Display all emojis created by the user; this is the default
|
||||
* `showcreatedby others` - Display all emojis not created by the user
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print chatemojis [todrive <ToDriveAttribute>*]
|
||||
[showcreatedby any|me|others]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
Select emojis to display:
|
||||
* `showcreatedby any` - Display all emojis regardless of creator
|
||||
* `showcreatedby ` - Display all emojis created by the user; this is the default
|
||||
* `showcreatedby others` - Display all emojis not created by the user
|
||||
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Bulk Operations
|
||||
### Display information about all chat spaces for a collection of users
|
||||
```
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
- [Move with ownership change](#move-with-ownership-change)
|
||||
- [Complex moves](#complex-moves)
|
||||
- [Move content of a Shared Drive to another Shared Drive](#move-content-of-a-shared-drive-to-another-shared-drive)
|
||||
- [Move content of a Shared Drive to a My Drive](#move-content-of-a-shared-drive-to-a-my-drive)
|
||||
|
||||
## API documentation
|
||||
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
||||
@@ -662,7 +663,7 @@ When moving a folder you can use the `retainsourcefolders` option to cause GAM t
|
||||
Moving a Drive folder to a Shared Drive is not directly supported by the API; GAM has to make a copy of the folder on the Shared Drive and
|
||||
recursively adjust the files/folders within it to point to the new parent folder. Once the original folder is emptied, it is deleted unless `retainsourcefolders` is specified.
|
||||
|
||||
### Move content of a Shared Drive to another Shared Drive
|
||||
## Move content of a Shared Drive to another Shared Drive
|
||||
Suppose you have a source Shared Drive with ID 0AC_1AB with multiple files and folders, and want to move all of its content to the target Shared Drive with ID 0AE_9ZX.
|
||||
|
||||
The following command will change the parents of the top level files and folders from 0AC_1AB to 0AE_9ZX; the sub files and folders will move along with their top level folder.
|
||||
@@ -673,6 +674,42 @@ gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0A
|
||||
```
|
||||
|
||||
If you want the source Shared Drive with ID 0AC_1AB to be contained in a top level folder of the target Shared Drive with ID 0AE_9ZX, omit the `mergewithparent` argument.
|
||||
The folder on the target Shared Drive will have the same name as the name of the source Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
||||
```
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX newfilename "Copy of source Shared Drive"
|
||||
```
|
||||
|
||||
### Inter-workspace moves
|
||||
Due to a restructuring, you want to move data from Shared Drive A in domaina.com to Shared Drive B in domainb.com.
|
||||
* Shared Drive A in domaina.com has the following unchecked: `Allow people outside of Domain A to access files`
|
||||
* Shared Drive B in domainb.com has the following checked: `Allow people outside of Domain B to access files`
|
||||
* `user@domaina.com` is a manager of both Shared Drives.
|
||||
|
||||
```
|
||||
$ gam user user@domaina move drivefile teamdriveid <SharedDriveAID> teamdriveparentid <SharedDriveBID> mergewithparent
|
||||
User: user@domaina.com, Move 1 Drive File/Folder
|
||||
User: user@domaina.com, Drive Folder: Shared Drive A(<SharedDriveAID>), Move(Merge) contents with Drive Folder: Shared Drive B(<SharedDriveBID>)
|
||||
User: user@domaina.com, Drive File: Filename(<FileID>), Move Failed: Bad Request. User message: "shareOutNotPermitted"
|
||||
...
|
||||
User: user@domaina.com, Drive Folder: Shared Drive A(<SharedDriveAID>), Retained
|
||||
```
|
||||
To get this to work, you must check `Allow people outside of Domain A to access files` on Shared Drive A in domaina.com
|
||||
|
||||
## Move content of a Shared Drive to a My Drive
|
||||
Suppose you have a Shared Drive with ID 0AC_1AB with multiple files and folders, and want to move all of its content to the root of a My Drive.
|
||||
|
||||
The following command will change the parents of the top level files and folders from 0AC_1AB to the root of the My Drive; the sub files and folders will move along with their top level folder.
|
||||
|
||||
* No permissions are processed.
|
||||
```
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root mergewithparent
|
||||
```
|
||||
|
||||
If you want the contents of Shared Drive with ID 0AC_1AB to be contained in a top level folder of the My Drive, omit the `mergewithparent` argument.
|
||||
The folder on the My Drive will have the same name as the name of the Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
||||
```
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root newfilename "Copy of Shared Drive"
|
||||
```
|
||||
|
||||
|
||||
@@ -157,12 +157,16 @@
|
||||
contentrestrictions.restrictiontime|
|
||||
contentrestrictions.type
|
||||
|
||||
<DriveLabelInfoSubfieldName> ::=
|
||||
<DriveDownloadRestrictionsSubfieldName> ::=
|
||||
downloadrestrictions.itemdownloadrestriction|
|
||||
downloadrestrictions.effectivedownloadrestrictionwithcontext
|
||||
|
||||
<ClassificationLabelInfoSubfieldName> ::=
|
||||
labels.id| # modifiedByMe
|
||||
labels.revisionid| # copyRequiresWriterPermission
|
||||
labels.fields # viewedByMe
|
||||
|
||||
<DriveLabelsSubfieldName> ::=
|
||||
<ClassificationLabelsSubfieldName~> ::=
|
||||
labels.modified| # modifiedByMe
|
||||
labels.restricted| # copyRequiresWriterPermission
|
||||
labels.starred| # starred
|
||||
@@ -251,6 +255,8 @@
|
||||
copyrequireswriterpermission|
|
||||
createddate|createdtime|
|
||||
description|
|
||||
downloadrestictions|
|
||||
<DriveDownloadRestrictionsSubfieldName>|
|
||||
driveid|
|
||||
drivename|
|
||||
editable|
|
||||
@@ -269,9 +275,9 @@
|
||||
inheritedpermissionsdisabled|
|
||||
isappauthorized|
|
||||
labelinfo|
|
||||
<DriveLabelInfoSubfieldName>|
|
||||
<ClassificationLabelInfoSubfieldName>|
|
||||
labels|
|
||||
<DriveLabelsSubfieldName>|
|
||||
<ClassificationLabelsSubfieldName>|
|
||||
lastmodifyinguser|
|
||||
<DriveLastModifyingUserSubfieldName>|
|
||||
lastmodifyingusername|
|
||||
@@ -968,7 +974,8 @@ Display a list of file/folder names indented to show structure.
|
||||
owners|
|
||||
parents|
|
||||
size|
|
||||
trashed
|
||||
trashed|
|
||||
webviewlink
|
||||
<FileTreeFieldNameList> ::= "<FileTreeFieldName>(,<FileTreeFieldName>)*"
|
||||
|
||||
gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
||||
@@ -1722,9 +1729,9 @@ User,Owner,id,name,ownedByMe,trashed,explicitlyTrashed,directFileCount,directFil
|
||||
user@domain.com,user@domain.com,012YenC8f12ALUk9PVA,My Drive,,False,False,100,138212,24,167,189598,79,-1,My Drive
|
||||
user@domain.com,user@domain.com,Trash,Trash,,True,True,0,0,1,3,3072,9,-1,Trash
|
||||
|
||||
$ gam redirect csv ./MyDriveUsage.csv user user@domain.com print diskusage shareddriveid 0AL5LiIe4dqxZUk9PVA show summaryandtrash
|
||||
$ gam redirect csv ./SharedDriveUsage.csv user user@domain.com print diskusage shareddriveid 0AL5LiIe4dqxZUk9PVA show summaryandtrash
|
||||
User: user@domain.com, Print 1 Drive Disk Usage
|
||||
$ more MyDriveUsage.csv
|
||||
$ more SharedDriveUsage.csv
|
||||
User,id,name,trashed,explicitlyTrashed,directFileCount,directFileSize,directFolderCount,totalFileCount,totalFileSize,totalFolderCount,depth,path
|
||||
user@domain.com,0125LiIe4dqxZUk9PVA,TS Shared Drive 1,False,False,16,6144,7,42,73799,25,-1,SharedDrives/TS Shared Drive 1
|
||||
user@domain.com,Trash,Trash,True,True,1,1024,0,1,1024,0,-1,Trash
|
||||
|
||||
@@ -125,6 +125,7 @@
|
||||
(folderColorRgb <ColorValue>)|
|
||||
(indexabletext <String>)|
|
||||
(inheritedpermissionsdisabled [<Boolean>])|
|
||||
(itemdownloadrestriction restrictedforreaders|restrictedforwriters [<Boolean>])|
|
||||
(keeprevisionforever|pinned)|
|
||||
(lastviewedbyme <Time>)|
|
||||
(mimetype <MimeType>)|
|
||||
|
||||
@@ -7,8 +7,11 @@
|
||||
- [Manage file permissions/sharing](#manage-file-permissionssharing)
|
||||
- [Display file permissions/sharing](#display-file-permissionssharing)
|
||||
- [Delete all ACLs except owner from a file](#delete-all-acls-except-owner-from-a-file)
|
||||
- [Delete all ACLs except owner from a user's My Drive](#delete-all-acls-except-owner-from-a-users-my-drive)
|
||||
- [Change shares to User1 to shares to User2](#change-shares-to-user1-to-shares-to-user2)
|
||||
- [Map All ACLs from an old domain to a new domain](#map-all-acls-from-an-old-domain-to-a-new-domain)
|
||||
- [Remove all ACLs for a specific user or group email address](#remove-all-ACLs-for-a-specific-user-or-group-email-address)
|
||||
- [Remove anyone-anyoneWithLink ACLs](#remove-anyone-anyonewithlink-acls)
|
||||
|
||||
## API documentation
|
||||
* [Drive API - Permissions](https://developers.google.com/drive/api/v3/reference/permissions)
|
||||
@@ -213,6 +216,12 @@ The option `updatesheetprotectedranges` only applies to items in `<DriveFileEnti
|
||||
* ACLs with role reader or commenter will be removed from existing protected ranges
|
||||
* ACLs with role writer or higher will be added to existing protected ranges
|
||||
|
||||
`
|
||||
`enforceexpansiveaccess` defaults to the value of `gam.cfg/enforce_expansive_access` that controls
|
||||
the ability to update inherited ACLs.
|
||||
* False - Inherited ACLs can be updated
|
||||
* True = Inherited ACLs can not be updated
|
||||
|
||||
By default, the file ID is displayed in the output; to see the file name, use the `showtitles`
|
||||
option; this requires an additional API call per file.
|
||||
|
||||
@@ -233,6 +242,11 @@ The option `updatesheetprotectedranges` only applies to items in `<DriveFileEnti
|
||||
* Sheet Protected Ranges are updated to reflect the deleted ACL; additional API calls are required.
|
||||
* ACLs with any role will be removed from existing protected ranges
|
||||
|
||||
`enforceexpansiveaccess` defaults to the value of `gam.cfg/enforce_expansive_access` that controls
|
||||
the ability to delete delete inherited ACLs.
|
||||
* False - Inherited ACLs can be deleted
|
||||
* True = Inherited ACLs can not be deleted
|
||||
|
||||
By default, the file ID is displayed in the output; to see the file name, use the `showtitles`
|
||||
option; this requires an additional API call per file.
|
||||
|
||||
@@ -265,6 +279,11 @@ gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionID
|
||||
<PermissionMatch>* [<PermissionMatchAction>]
|
||||
[enforceexpansiveaccess [<Boolean>]]
|
||||
```
|
||||
`enforceexpansiveaccess` defaults to the value of `gam.cfg/enforce_expansive_access` that controls
|
||||
the ability to delete delete inherited ACLs.
|
||||
* False - Inherited ACLs can be deleted
|
||||
* True = Inherited ACLs can not be deleted
|
||||
|
||||
When deleting permissions from JSON data, permissions with role `owner` true are never processed.
|
||||
|
||||
## Display file permissions/sharing
|
||||
@@ -318,13 +337,23 @@ gam redirect csv ./TeamDriveACLs.csv multiprocess csv ./TeamDrives.csv gam print
|
||||
## Delete all ACLs except owner from a file
|
||||
Get the current ACLs.
|
||||
```
|
||||
gam redirect csv ./Permissions.csv user <UserItem> print drivefileacls <DriveFileID> oneitemperrow
|
||||
gam redirect csv ./Permissions.csv user user@domain.com print drivefileacls <DriveFileID> oneitemperrow
|
||||
```
|
||||
Inspect Permissions.csv, verify that you want to proceed.
|
||||
```
|
||||
gam config csv_input_row_drop_filter "permission.role:regex:(owner)|(organizer)" csv ./Permissions.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
## Delete all ACLs except owner from a user's My Drive
|
||||
Get the current ACLs.
|
||||
```
|
||||
gam redirect csv ./Permissions.csv user user@domain.com print filelist fields id,name,mimetype,basicpermissions pm not role owner em pmfilter oneitemperrow
|
||||
```
|
||||
Inspect Permissions.csv, verify that you want to proceed.
|
||||
```
|
||||
gam redirect stdout ./DeletePermissions.txt multiprocess redirect stderr stdout csv Permissions.csv.csv gam user "~Owner" delete drivefileacls "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
## Change shares to User1 to shares to User2
|
||||
```
|
||||
# Get files shared to User1
|
||||
@@ -358,3 +387,83 @@ gam config csv_input_row_filter "permission.type:regex:user|group" redirect stdo
|
||||
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
|
||||
```
|
||||
|
||||
## Remove all ACLs for a specific user or group email address
|
||||
|
||||
### My Drives
|
||||
|
||||
Get My Drive ACLs sharing to that email address:
|
||||
* Replace `<Type>` with user or group
|
||||
* Replace `email@domain.com` with actual email address
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
Delete those My Drive ACLs.
|
||||
```
|
||||
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
Add My Drive ACLs with a different email address and the same role.
|
||||
```
|
||||
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"
|
||||
```
|
||||
|
||||
### Shared Drives
|
||||
Get an organizer for each Shared Drive
|
||||
```
|
||||
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers
|
||||
```
|
||||
|
||||
Get Shared Drive ACLs explicitly sharing to that email address:
|
||||
* Replace `<Type>` with user or group
|
||||
* Replace `email@domain.com` with actual email address
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
Delete those Shared Drive ACLs.
|
||||
```
|
||||
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
Add Shared Drive ACLs with a different email address and the same role.
|
||||
```
|
||||
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"
|
||||
```
|
||||
|
||||
## Remove anyone-anyoneWithLink ACLs
|
||||
|
||||
Here are the queries that will be used in these commands:
|
||||
* anyone - query "visibility='anyoneCanFind'"
|
||||
* anyoneWithLink - query "visibility='anyoneWithLink'"
|
||||
* both - query "(visibility='anyoneCanFind' or visibility='anyoneWithLink')"
|
||||
|
||||
### My Drives
|
||||
|
||||
Get My Drive anyone/anyoneWithLink ACLs
|
||||
```
|
||||
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> pm type anyone em pmfilter oneitemperrow
|
||||
```
|
||||
|
||||
Delete those My Drive ACLs.
|
||||
```
|
||||
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
### Shared Drives
|
||||
Get an organizer for each Shared Drive
|
||||
```
|
||||
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers
|
||||
```
|
||||
|
||||
Get Shared Drive anyone/anyoneWithLink ACLs
|
||||
```
|
||||
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> pm type anyone inherited false em pmfilter oneitemperrow
|
||||
```
|
||||
|
||||
Delete those Shared Drive ACLs.
|
||||
```
|
||||
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -49,10 +49,19 @@ gam user user@domain.com update serviceaccount
|
||||
```
|
||||
gam <UserTypeEntity> create form
|
||||
title <String> [description <String>] [isquiz [Boolean>]] [<JSONData>]
|
||||
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
||||
[(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
||||
```
|
||||
|
||||
The valid combinations of `ispublished` and `isacceptingresponses` are:
|
||||
* `ispublished true isacceptingresponses true`
|
||||
* `ispublished true isacceptingresponses false`
|
||||
* `ispublished false isacceptingresponses false`
|
||||
* `ispublished false` - Sets `isacceptingresponses false`
|
||||
* `isacceptingresponses false` - Sets `ispublished false`
|
||||
* `isacceptingresponses true` - Sets `ispublished true`
|
||||
|
||||
`<JSONData>` is a list of form update requests.
|
||||
|
||||
* See: https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate
|
||||
@@ -79,15 +88,24 @@ Select forms with `<DriveFileEntity>`:
|
||||
```
|
||||
gam <UserTypeEntity> update form <DriveFileEntity>
|
||||
[title <String>] [description <String>] [isquiz [Boolean>]] [<JSONData>]
|
||||
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||
```
|
||||
|
||||
The valid combinations of `ispublished` and `isacceptingresponses` are:
|
||||
* `ispublished true isacceptingresponses true`
|
||||
* `ispublished true isacceptingresponses false`
|
||||
* `ispublished false isacceptingresponses false`
|
||||
* `ispublished false` - Sets `isacceptingresponses false`
|
||||
* `isacceptingresponses false` - Sets `ispublished false`
|
||||
* `isacceptingresponses true` - Sets `ispublished true`
|
||||
|
||||
`<JSONData>` is a list of form update requests.
|
||||
|
||||
* See: https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate
|
||||
|
||||
## Extended Example
|
||||
|
||||
This example illustrates the use of JSN data to create and update forms
|
||||
This example illustrates the use of JSON data to create and update forms
|
||||
concerning student classtoom attendance.
|
||||
The form has two items: Absences and Notes.
|
||||
In `Absences`, the teacher can check `All present.` or check individual student absences.
|
||||
@@ -272,7 +290,7 @@ Select forms with `<DriveFileEntity>`:
|
||||
* `my_forms` - Display responses for all forms owned by the user
|
||||
```
|
||||
gam <UserTypeEntity> show formresponses <DriveFileEntity>
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[countsonly|formatjson]
|
||||
```
|
||||
By default, GAM displays form response details, use the `countsonly` option to get the number of responses but no response details.
|
||||
@@ -284,11 +302,12 @@ By default, GAM displays all form responses, you can filter by response time:
|
||||
For example, to get the form responses submitted since the beginning of the year:
|
||||
* `filter timestamp >= 2022-01-01T00:00:00Z`
|
||||
|
||||
Use the `filtertime.* <Time>` option to allow times, usually relative, to be substituted into the `filter <String>` option.
|
||||
Use the `filtertime<String <Time>` option to allow times, usually relative, to be substituted into the `filter <String>` option.
|
||||
The `filtertime<String> <Time>` value replaces the string `#filtertime<String>#` in any filters..
|
||||
The characters following `filtertime` can be any combination of lowercase letters and numbers.
|
||||
|
||||
For example, to get the responses subnitted in the last four hours:
|
||||
* `filtertime4h -4h filter "timestamp >= #filtertime4h#`
|
||||
For example, to get the responses submitted in the last four hours:
|
||||
* `filter "timestamp >= #filtertime4h#" filtertime4h -4h`
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the form response in JSON format
|
||||
@@ -296,7 +315,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
```
|
||||
gam <UserTypeEntity> print formresponses <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[filtertime.* <Time>] [filter <String>]
|
||||
[filter <String> (filtertime<String> <Time>)*]
|
||||
[countsonly|(formatjson [quotechar <Character>])]
|
||||
```
|
||||
By default, GAM displays form response details, use the `countsonly` option to get the number of responses but no response details.
|
||||
@@ -310,11 +329,12 @@ By default, GAM displays all form responses, you can filter by response time:
|
||||
For example, to get the form responses submitted since the beginning of the year:
|
||||
* `filter timestamp >= 2022-01-01T00:00:00Z`
|
||||
|
||||
Use the `filtertime.* <Time>` option to allow times, usually relative, to be substituted into the `filter <String>` option.
|
||||
Use the `filtertime<String> <Time>` option to allow times, usually relative, to be substituted into the `filter <String>` option.
|
||||
The `filtertime<String> <Time>` value replaces the string `#filtertime<String>#` in any filters..
|
||||
The characters following `filtertime` can be any combination of lowercase letters and numbers.
|
||||
|
||||
For example, to get the responses subnitted in the last four hours:
|
||||
* `filtertime4h -4h filter "timestamp >= #filtertime4h#`
|
||||
* `filter "timestamp >= #filtertime4h#" filtertime4h -4h`
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# Users - Gmail - Delegates
|
||||
- [Notes](#notes)
|
||||
- [API documentation](#api-documentation)
|
||||
- [Definitions](#definitions)
|
||||
- [Aliases](#aliases)
|
||||
@@ -8,6 +9,11 @@
|
||||
- [Display Gmail delegates](#display-gmail-delegates)
|
||||
- [Delete all delegates for a user](#delete-all-delegates-for-a-user)
|
||||
|
||||
## Notes
|
||||
|
||||
To use Gmail delegation, the delegator and delagatee must be in org units where
|
||||
mail delegation is enabled. In the admin console, go to Apps/Google Workspace/Gmail/User Settings.
|
||||
|
||||
## API documentation
|
||||
* [Gmail API - Delegates](https://developers.google.com/gmail/api/v1/reference/users.settings.delegates)
|
||||
* [Delegation Notes](https://support.google.com/a/answer/7223765)
|
||||
|
||||
@@ -80,8 +80,8 @@ All `<FilterAction>s` except `forward <EmailAddress>` involve adding/removing la
|
||||
* `label <LabelName>` - Add the user label `<LabelName>`; only one user label can be specified. It will be created if necessary.
|
||||
|
||||
In Gmail, you can have a multi-level label like `Top/Middle/Bottom`; you can also have a single-level label like `Top/Middle/Bottom`,
|
||||
* If `buildpath` is omitted or `<Boolean>` is set to False, a <labelName>` containing `/` will be created as single-level.
|
||||
* If `buildpath` is present and `<Boolean>` is omitted or set to True, a <labelName>` containing `/` will be created as multi-level;
|
||||
* If `buildpath` is omitted or `<Boolean>` is set to False, a `<labelName>` containing `/` will be created as single-level.
|
||||
* If `buildpath` is present and `<Boolean>` is omitted or set to True, a `<labelName>` containing `/` will be created as multi-level;
|
||||
all parent labels are created as necessary.
|
||||
|
||||
If `forward <EmailAddress>` is specified, the filter creation will fail if the user has not defined `<EmailAddress>` as a forwarding address.
|
||||
|
||||
@@ -72,6 +72,8 @@ This table and other suggestions came from:
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<UniqueID> ::= id:<String>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<LabelID> ::= <String>
|
||||
<LabelIDList> ::= "<LabelID>(,<LabelID)*"
|
||||
<LabelName> ::= <String>
|
||||
<QueryGmail> ::= <String> See: https://support.google.com/mail/answer/7190
|
||||
<Time> ::=
|
||||
@@ -389,6 +391,7 @@ Your command line will have: `embedimage file1.jpg image1` embedimage file2.jpg
|
||||
```
|
||||
gam <UserTypeEntity> archive messages <GroupItem>
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
```
|
||||
@@ -400,6 +403,7 @@ Messages are archived to the group specified by `<GroupItem>`.
|
||||
|
||||
### Archive a selected set of messages
|
||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `labelids <LabelIDList>` - Select messages with labels that match all of the specified label IDs.
|
||||
* `max_to_archive` - Limit the number of messages that will be archived; use a value of 0 for no limit
|
||||
* `doit` - No messages are archived unless you specify `doit`. By not specifying `doit`, you can preview the messages selected to verify that the results match your expectations.
|
||||
|
||||
@@ -432,10 +436,14 @@ See below for message selection.
|
||||
Export messages in EML format.
|
||||
```
|
||||
gam <UserTypeEntity> export message|messages
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||
gam <UserTypeEntity> export thread|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||
```
|
||||
|
||||
@@ -459,10 +467,12 @@ See below for message selection.
|
||||
```
|
||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||
[subject <String>] [addorigfieldstosubject]
|
||||
gam <UserTypeEntity> forward thread|threads recipient|to <RecipientEntity>
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||
[subject <String>] [addorigfieldstosubject]
|
||||
```
|
||||
@@ -482,23 +492,28 @@ See below for message selection.
|
||||
```
|
||||
gam <UserTypeEntity> delete messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> modify messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
||||
((addlabel <LabelName>)|(removelabel <LabelName>))+
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> spam messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> trash messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
gam <UserTypeEntity> untrash messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
||||
[csv [todrive <ToDriveAttribute>*]]
|
||||
```
|
||||
@@ -522,6 +537,7 @@ user@domain.com,18e9fc58c5491f4c,Deleted,
|
||||
|
||||
### Manage a selected set of messages
|
||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `labelids <LabelIDList>` - Select messages with labels that match all of the specified label IDs.
|
||||
* `max_to_xxx` - Limit the number of messages that will be processed; use a value of 0 for no limit
|
||||
* `doit` - No messages are processed unless you specify `doit`. By not specifying `doit`, you can preview the messages selected to verify that the results match your expectations.
|
||||
|
||||
@@ -570,6 +586,7 @@ gam config auto_batch_min 1 groups_inde EastOffice delete message query "rfc822m
|
||||
```
|
||||
gam <UserTypeEntity> show messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
@@ -581,6 +598,7 @@ gam <UserTypeEntity> show messages|threads
|
||||
[targetfolder <FilePath>] [overwrite [<Boolean>]]
|
||||
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[labelids <LabelIDList>]
|
||||
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
@@ -607,6 +625,7 @@ gam user user@domain.com print|show threads maxmessagesperthread 1
|
||||
|
||||
## Display a selected set of messages
|
||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `labelids <LabelIDList>` - Select messages with labels that match all of the specified label IDs.
|
||||
* `max_to_xxx` - Limit the number of messages that will be displayed
|
||||
* `includespamtrash` - Include messages in the Spam and Trash folders
|
||||
* `labelmatchpattern <REMatchPattern>` - Only display messages with some label that matches `<REMatchPattern>`
|
||||
|
||||
@@ -108,7 +108,7 @@ Paul shall send emails from the marketing email address with the name Paul from
|
||||
``` gam user paul add sendas marketing@example.com "Paul from Example" replyto paul```
|
||||
|
||||
## Display sendas
|
||||
### Display the information as an indented list of keys and values.
|
||||
### Display the sendas information as an indented list of keys and values.
|
||||
```
|
||||
gam <UserTypeEntity> info sendas <EmailAddressEntity> [compact|format|html]
|
||||
gam <UserTypeEntity> show sendas [compact|format|html]
|
||||
@@ -126,7 +126,19 @@ By default, all sendas addresses are shown, use these options to limit the displ
|
||||
|
||||
Use the `verifyonly` option to display `True` or `False` in the signature field based on whether the signature is non-blank.
|
||||
|
||||
### Display the information in CSV form.
|
||||
To capture a signature for use as input to GAM, do the following.
|
||||
```
|
||||
gam redirect stdout ./signature.html user user@domain.com show sendas compact
|
||||
```
|
||||
Edit signature.html and remove the following data leaving just the HTML.
|
||||
```
|
||||
SendAs Address: <user@domain.com>
|
||||
IsPrimary: True
|
||||
Default: True
|
||||
Signature:
|
||||
```
|
||||
|
||||
### Display the sendas information in CSV form.
|
||||
```
|
||||
gam <UserTypeEntity> print sendas [compact]
|
||||
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
||||
@@ -170,7 +182,7 @@ email address signature rather than the alias signature to be set.
|
||||
If you have a current default signature, the API will update that, but if you delete it, it seems that the API will not over-write any of the other signatures, but instead add a new signature called `My signature`. If you rename that signature, the API will keep on updating that same signature, and not touch the other signatures.
|
||||
|
||||
## Display signature
|
||||
### Display the information as an indented list of keys and values.
|
||||
### Display the signature as an indented list of keys and values.
|
||||
```
|
||||
gam <UserTypeEntity> show signature|sig [compact|format|html]
|
||||
[primary|default] [verifyonly]
|
||||
@@ -187,7 +199,19 @@ By default, the signature for `<UserTypeEntity>` is displayed, use these options
|
||||
|
||||
Use the `verifyonly` option to display `True` or `False` in the signature field based on whether the signature is non-blank.
|
||||
|
||||
### Display the information in CSV form.
|
||||
To capture a signature for use as input to GAM, do the following.
|
||||
```
|
||||
gam redirect stdout ./signature.html user user@domain.com show signature compact
|
||||
```
|
||||
Edit signature.html and remove the following data leaving just the HTML.
|
||||
```
|
||||
SendAs Address: <user@domain.com>
|
||||
IsPrimary: True
|
||||
Default: True
|
||||
Signature:
|
||||
```
|
||||
|
||||
### Display the signature in CSV form.
|
||||
```
|
||||
gam <UserTypeEntity> print signature [compact]
|
||||
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
- [Delete a Shared Drive](#delete-a-shared-drive)
|
||||
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
||||
- [Display Shared Drives](#display-shared-drives)
|
||||
- [Display Shared Drive Counts](#display-shared-drive-counts)
|
||||
- [Display Shared Drive Organizers](#display-shared-drive-organizers)
|
||||
- [Manage Shared Drive access](#manage-shared-drive-access)
|
||||
- [Display Shared Drive access](#display-shared-drive-access)
|
||||
- [Display Shared Drive access for specific Shared Drives](#display-shared-drive-access-for-specific-shared-drives)
|
||||
@@ -71,6 +73,9 @@
|
||||
```
|
||||
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||
|
||||
<OrganizerType> ::= user|group
|
||||
<OrganizerTypeList> ::= "<OrganizerType>(,<OrganizerType>)*"
|
||||
|
||||
<OrgUnitID> ::= id:<String>
|
||||
<OrgUnitPath> ::= /|(/<String>)+
|
||||
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
||||
@@ -153,6 +158,7 @@
|
||||
createdtime|
|
||||
id|
|
||||
name|
|
||||
restrictions|
|
||||
themeid
|
||||
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
||||
|
||||
@@ -175,6 +181,8 @@
|
||||
allowcontentmanagerstosharefolders|
|
||||
copyrequireswriterpermission|
|
||||
domainusersonly|
|
||||
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||
drivemembersonly|teammembersonly|
|
||||
sharingfoldersrequiresorganizerpermission
|
||||
|
||||
@@ -199,28 +207,28 @@ sharingfoldersrequiresorganizerpermission true
|
||||
|
||||
## Display Shared Drive themes
|
||||
```
|
||||
gam <UserTypeEntity> show teamdrivethemes
|
||||
gam <UserTypeEntity> show shareddrivethemes
|
||||
```
|
||||
## Manage Shared Drives
|
||||
|
||||
## Create a Shared Drive
|
||||
The user that creates a Shared Drive is given the permission role organizer for the Shared Drive,
|
||||
```
|
||||
gam <UserTypeEntity> create teamdrive <Name>
|
||||
gam <UserTypeEntity> create shareddrive <Name>
|
||||
[(theme|themeid <String>)|
|
||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
||||
```
|
||||
* `themeid` - a Shared Drive themeId obtained from `show teamdrivethemes`
|
||||
* `themeid` - a Shared Drive themeId obtained from `show shareddrivethemes`
|
||||
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||
* `<Float>` - X coordinate, typically 0.0
|
||||
* `<Float>` - Y coordinate, typically 0.0
|
||||
* `<Float>` - width, typically 1.0
|
||||
* `color` - set the Shared Drive color
|
||||
* `<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `[restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `hide <Boolean>` - Set Shared Drive visibility
|
||||
|
||||
If any attributes other than `themeid` are specified, GAM must create the Drive and then update the Drive attributes.
|
||||
@@ -247,9 +255,9 @@ When either of these options is chosen, no infomation about Shared Drive restric
|
||||
To retrieve the Shared Drive ID with `returnidonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
teamDriveId=$(gam user user@domain.com create teamdrive ... returnidonly)
|
||||
teamDriveId=$(gam user user@domain.com create shareddrive ... returnidonly)
|
||||
Windows PowerShell
|
||||
$teamDriveId = & gam user user@domain.com create teamdrive ... returnidonly
|
||||
$teamDriveId = & gam user user@domain.com create shareddrive ... returnidonly
|
||||
```
|
||||
|
||||
## Bulk Create Shared Drives
|
||||
@@ -259,7 +267,7 @@ As a newly created Drive can't be updated for 30+ seconds; split the operation i
|
||||
|
||||
Make a CSV file SharedDriveNames.csv with at least two columns, User and name.
|
||||
```
|
||||
gam redirect csv ./SharedDrivesCreated.csv multiprocess csv SharedDriveNames.csv gam user "~User" create teamdrive "~name" csv
|
||||
gam redirect csv ./SharedDrivesCreated.csv multiprocess csv SharedDriveNames.csv gam user "~User" create shareddrive "~name" csv
|
||||
```
|
||||
This will create a three column CSV file SharedDriveNamesIDs.csv with columns: User,name,id
|
||||
* There will be a row for each Shared Drive.
|
||||
@@ -273,16 +281,16 @@ gam redirect stdout ./SharedDrivesUpdated.txt multiprocess redirect stderr stdou
|
||||
|
||||
This command is used to set basic Shared Drive settings.
|
||||
```
|
||||
gam <UserTypeEntity> update teamdrive <SharedDriveEntity> [adminaccess|asadmin] [name <Name>]
|
||||
gam <UserTypeEntity> update shareddrive <SharedDriveEntity> [adminaccess|asadmin] [name <Name>]
|
||||
[(theme|themeid <String>)|
|
||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||
```
|
||||
* `themeid` - a Shared Drive themeId obtained from `show teamdrivethemes`
|
||||
* `themeid` - a Shared Drive themeId obtained from `show shareddrivethemes`
|
||||
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||
* `color` - set the Shared Drive color
|
||||
* `<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `[restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>` - Set Shared Drive Restrictions
|
||||
* `hidden <Boolean>` - Set Shared Drive visibility
|
||||
|
||||
This option is only available when the command is run as an administrator.
|
||||
@@ -290,7 +298,7 @@ This option is only available when the command is run as an administrator.
|
||||
|
||||
## Delete a Shared Drive
|
||||
```
|
||||
gam <UserTypeEntity> delete teamdrive <SharedDriveEntity> [allowitemdeletion] [adminaccess|asadmin]
|
||||
gam <UserTypeEntity> delete shareddrive <SharedDriveEntity> [allowitemdeletion] [adminaccess|asadmin]
|
||||
```
|
||||
By default, deleting a Shared Drive that contains any files/folders will fail.
|
||||
The `allowitemdeletion` option allows a Super Admin to delete a non-empty Shared Drive.
|
||||
@@ -298,38 +306,49 @@ This is not reversible, proceed with caution.
|
||||
|
||||
## Change Shared Drive visibility
|
||||
```
|
||||
gam <UserTypeEntity> hide teamdrive <SharedDriveEntity>
|
||||
gam <UserTypeEntity> unhide teamdrive <SharedDriveEntity>
|
||||
gam <UserTypeEntity> hide shareddrive <SharedDriveEntity>
|
||||
gam <UserTypeEntity> unhide shareddrive <SharedDriveEntity>
|
||||
```
|
||||
## Display Shared Drives
|
||||
```
|
||||
gam <UserTypeEntity> show teamdriveinfo <SharedDriveEntity>
|
||||
gam <UserTypeEntity> info teamdrive <SharedDriveEntity>
|
||||
gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity>
|
||||
gam <UserTypeEntity> info shareddrive <SharedDriveEntity>
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[guiroles [<Boolean>] [formatjson]
|
||||
gam <UserTypeEntity> show teamdriveinfo <SharedDriveEntity>
|
||||
gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity>
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[guiroles [<Boolean>] [formatjson]
|
||||
gam <UserTypeEntity> show teamdrives
|
||||
gam <UserTypeEntity> show shareddrives
|
||||
[matchname <REMatchPattern>] (role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[guiroles [<Boolean>] [formatjson]
|
||||
```
|
||||
By default, Gam displays all Teams Drives accessible by the user.
|
||||
* `matchname <REMatchPattern>` - Display Shared Drives with names that match a pattern.
|
||||
* `(role|roles <SharedDriveACLRoleList>)*` - Display Shared Drives where the user has one of the specified roles.
|
||||
|
||||
Use option `showwebviewlink` to display the web view link for the Shared Drive.
|
||||
* `showwebviewlink text` - Displays `https://drive.google.com/drive/folders/<SharedDriveID>`
|
||||
* `showwebviewlink hyperlink` - Dsiplays `=HYPERLINK("https://drive.google.com/drive/folders/<SharedDriveID>", "<SharedDriveName>")`
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam <UserTypeEntity> print teamdrives [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[matchname <REMatchPattern>] (role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>] [formatjson [quotechar <Character>]]
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[showwebviewlink text|hyperlink]
|
||||
[guiroles [<Boolean>]] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays all Teams Drives accessible by the user.
|
||||
* `matchname <REMatchPattern>` - Display Shared Drives with names that match a pattern.
|
||||
* `(role|roles <SharedDriveACLRoleList>)*` - Display Shared Drives where the user has one of the specified roles.
|
||||
|
||||
Use option `showwebviewlink` to display the web view link for the Shared Drive.
|
||||
* `showwebviewlink text` - Displays `https://drive.google.com/drive/folders/<SharedDriveID>`
|
||||
* `showwebviewlink hyperlink` - Dsiplays `=HYPERLINK("https://drive.google.com/drive/folders/<SharedDriveID>", "<SharedDriveName>")`
|
||||
|
||||
The Google Drive API does not list roles for Shared Drives so GAM generates a role from the capabilities:
|
||||
* `commenter - canComment: True, canEdit: False`
|
||||
* `reader - canComment: False, canEdit: False`
|
||||
@@ -356,6 +375,80 @@ When using the `formatjson` option, double quotes are used extensively in the da
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Shared Drive Counts
|
||||
Display the number of Shared Drives.
|
||||
```
|
||||
gam <UserTypeEntity> show|print shareddrives
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
showitemcountonly
|
||||
```
|
||||
By default, all Shared Drives are counted; use the following options to select a subset of Shared Drives:
|
||||
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||
|
||||
Example
|
||||
```
|
||||
$ gam user user@domain.com print shareddrives showitemcountonly
|
||||
Getting all Shared Drives for user@domain.com
|
||||
Got 4 Shared Drives for user@domain.com ...
|
||||
4
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam user user@domain.com print shareddrives showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam user user@domain.com print shareddrives showitemcountonly
|
||||
```
|
||||
## Display Shared Drive Organizers
|
||||
The following command can be used instead of the `GetTeamDriveOrganizers.py` script.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin]
|
||||
[(shareddriveadminquery|query <QuerySharedDrive>) |
|
||||
(shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)))]
|
||||
[orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>]
|
||||
[domainlist <DomainList>]
|
||||
[includetypes <OrganizerTypeList>]
|
||||
[oneorganizer [<Boolean>]]
|
||||
[shownorganizerdrives [false|true|only]]
|
||||
[includefileorganizers [<Boolean>]]
|
||||
[delimiter <Character>]
|
||||
```
|
||||
Options `shareddriveadminquery|query` and `shareddrives|teamdrives` are mutually exclusive.
|
||||
|
||||
Options `shareddriveadminquery|query` and `orgunit|org|ou` require `adminaccess|asadmin`.
|
||||
|
||||
By default, organizers for all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||
* `shareddrives|teamdrives <SharedDriveIDList>` - Select the Shared Drive IDs specified in `<SharedDriveIDList>`
|
||||
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Select the Shared Drive IDs specified in `<FileSelector>|<CSVFileSelector>`
|
||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||
|
||||
For multiple organizers:
|
||||
* `delimiter <Character>` - Separate `organizers` entries with `<Character>`; the default value is `csv_output_field_delimiter` from `gam.cfg`.
|
||||
|
||||
The command defaults do not match the script defaults, they are set for the most common use case:
|
||||
* `domainlist` - The workspace primary domain
|
||||
* `includetypes` - user
|
||||
* `oneorganizer` - True
|
||||
* `shownoorganizerdrives` - True
|
||||
* `includefileorganizers` - False
|
||||
|
||||
To select organizers from any domain, use: `domainlist ""`
|
||||
|
||||
For example, to get a single user organizer from your domain for all Shared Drives including no organizer drives:
|
||||
```
|
||||
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers
|
||||
```
|
||||
|
||||
## Manage Shared Drive access
|
||||
These commands must be issued by a user with Shared Drive permission role organizer.
|
||||
### Process single ACLs.
|
||||
@@ -428,14 +521,14 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
|
||||
## Display Shared Drive access for selected Shared Drives
|
||||
```
|
||||
gam <UserTypeEntity> show teamdriveacls
|
||||
gam <UserTypeEntity> show shareddriveacls
|
||||
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
@@ -458,7 +551,7 @@ By default, all ACLS are displayed; use the following options to select a subset
|
||||
* `role|roles <SharedDriveACLRoleList>` - Display ACLs for the specified roles only.
|
||||
* `<PermissionMatch>* [<PermissionMatchAction>]` - Use permission matching to display a subset of the ACLs for each Shared Drive; this only applies when `pmselect` is not specified
|
||||
|
||||
With `print teamdriveacls` or `show teamdrivecls formatjson`, the ACLs selected for display are all output on one row/line as a repeating item with the matching Shared Drive id.
|
||||
With `print shareddriveacls` or `show shareddrivecls formatjson`, the ACLs selected for display are all output on one row/line as a repeating item with the matching Shared Drive id.
|
||||
When `oneitemperrow` is specified, each ACL is output on a separate row/line with the matching Shared Drive id and name. This simplifies processing the CSV file with subsequent Gam commands.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
|
||||
213
wiki/Users-Tag-Manager.md
Normal file
213
wiki/Users-Tag-Manager.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# Users - Tag Manager
|
||||
- [API documentation](#api-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Definitions](#definitions)
|
||||
- [Display Tag Manager Accounts](#display-tag-manager-accounts)
|
||||
- [Display Tag Manager Containers](#display-tag-manager-containers)
|
||||
- [Display Tag Manager Workspaces](#display-tag-manager-workspaces)
|
||||
- [Display Tag Manager Tags](#display-tag-manager-tags)
|
||||
- [Display Tag Manager User Permissions](#display-tag-manager-user-permissions)
|
||||
- [Examples](#examples)
|
||||
|
||||
## API documentation
|
||||
* [Tag Manager API](https://developers.google.com/tag-manager/reference/rest)
|
||||
|
||||
## Notes
|
||||
To use these commands you must add the 'Tag Manager API' to your project and update your service account authorization.
|
||||
```
|
||||
gam update project
|
||||
gam user user@domain.com update serviceaccount
|
||||
|
||||
[*] 41) Tag Manager API - Accounts, Containers, Workspaces, Tags - read only
|
||||
[*] 42) Tag Manager API - Users
|
||||
|
||||
```
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
* [`<FileSelector> | <CSVFileSelector>`](Collections-of-Items)
|
||||
```
|
||||
<TagManagerAccountID> ::= <String>
|
||||
<TagManagerAccountPath> ::= accounts/<TagManagerAccountID>
|
||||
<TagManagerAccountPathList> ::= "<TagManagerAccountPath>(,<TagManagerAccountPath>)*"
|
||||
<TagManagerAccountPathEntity> ::=
|
||||
<TagManagerAccountPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
|
||||
<TagManagerContainerID> ::= <String>
|
||||
<TagManagerContainerPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>
|
||||
<TagManagerContainerPathList> ::= "<TagManagerContainerPath>(,<TagManagerContainerPath>)*"
|
||||
<TagManagerContainerPathEntity> ::=
|
||||
<TagManagerContainerPathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
|
||||
<TagManagerWorkspaceID> ::= <String>
|
||||
<TagManagerWorkspacePath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>
|
||||
<TagManagerWorkspacePathList> ::= "<TagManagerWorkspacePath>(,<TagManagerWorkspacePath>)*"
|
||||
<TagManagerWorkspacePathEntity> ::=
|
||||
<TagManagerWorkspacePathList> |
|
||||
(select <FileSelector>|<CSVFileSelector>) |
|
||||
|
||||
<TagManagerTagID> ::= <String>
|
||||
<TagManagerTagPath> ::= accounts/<TagManagerAccountID>/containers/<TagManagerContainerID>/workspaces/<TagManagerWorkspaceID>/tags/<TagManagerTagID>
|
||||
```
|
||||
## Display Tag Manager Accounts
|
||||
```
|
||||
gam <UserTypeEntity> show tagmanageraccounts
|
||||
[includegoogletags [<Boolean>]]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the accounts as an indented list of keys and values.
|
||||
* `formatjson` - Display the account in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print tagmanagerccounts [todrive <ToDriveAttribute>*]
|
||||
[includegoogletags [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the accounts as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Tag Manager Containers
|
||||
```
|
||||
gam <UserTypeEntity> show tagmanagercontainers <TagManagerAccountPathEntity>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the containers as an indented list of keys and values.
|
||||
* `formatjson` - Display the container in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print tagmanagercontainers <TagManagerAccountPathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the containers as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Tag Manager Workspaces
|
||||
```
|
||||
gam <UserTypeEntity> show tagmanagerworkspaces <TagManagerContainerPathEntity>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the workspaces as an indented list of keys and values.
|
||||
* `formatjson` - Display the workspace in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print tagmanagerworkspaces <TagManagerContainerPathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the workspaces as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Tag Manager Tags
|
||||
```
|
||||
gam <UserTypeEntity> show tagmanagertags <TagManagerWorkspacePathEntity>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the tags as an indented list of keys and values.
|
||||
* `formatjson` - Display the tag in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print tagmanagertags <TagManagerWorkspacePathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the tags as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Tag Manager User Permissions
|
||||
```
|
||||
gam <UserTypeEntity> show tagmanagerpermissions <TagManagerAccountPathEntity>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the permissions as an indented list of keys and values.
|
||||
* `formatjson` - Display the permission in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print tagmanagerpermissions <TagManagerAccountPathEntity> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the permissions as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
### Examples
|
||||
Single user - Get CSV data.
|
||||
```
|
||||
$ gam redirect csv ./tmaccounts.csv user taguser@domain.com print tagmanageraccounts
|
||||
|
||||
$ gam redirect csv ./tmcontainers.csv user taguser@domain.com print tagmanagercontainers select csvfile tmaccounts.csv:path
|
||||
|
||||
$ gam redirect csv ./tmworkspaces.csv user taguser@domain.com print tagmanagerworkspaces select csvfile tmcontainers.csv:path
|
||||
|
||||
$ gam redirect csv ./tmtags.csv user taguser@domain.com print tagmanagertags select csvfile tmworkspaces.csv:path
|
||||
|
||||
$ gam redirect csv ./tmpermissions.csv user taguser@domain.com print tagmanagerpermissions select csvfile tmaccounts.csv:path
|
||||
```
|
||||
|
||||
Single user - Get indented keys and values data from CSV data.
|
||||
```
|
||||
$ gam redirect stdout ./tmaccounts.txt user taguser@domain.com show tagmanageraccounts
|
||||
|
||||
$ gam redirect stdout ./tmcontainers.txt user taguser@domain.com show tagmanagercontainers select csvfile tmaccounts.csv:path
|
||||
|
||||
$ gam redirect stdout ./tmworkspaces.txt user taguser@domain.com show tagmanagerworkspaces select csvfile tmcontainers.csv:path
|
||||
|
||||
$ gam redirect stdout ./tmtags.txt user taguser@domain.com show tagmanagertags select csvfile tmworkspaces.csv:path
|
||||
|
||||
$ gam redirect stdout ./tmpermissions.txt user taguser@domain.com show tagmanagerpermissions select csvfile tmaccounts.csv:path
|
||||
```
|
||||
|
||||
Multiple users - Get CSV data.
|
||||
```
|
||||
$ gam redirect csv ./tmaccounts.csv multiprocess redirect stderr - multiprocess csv Users.csv gam user "~User" print tagmanageraccounts
|
||||
|
||||
$ gam redirect csv ./tmcontainers.csv multiprocess redirect stderr - multiprocess csv tmaccounts.csv gam user "~User" print tagmanagercontainers "~path"
|
||||
|
||||
$ gam redirect csv ./tmworkspaces.csv multiprocess redirect stderr - multiprocess csv tmcontainers.csv gam user "~User" print tagmanagerworkspaces "~path"
|
||||
|
||||
$ gam redirect csv ./tmtags.csv multiprocess redirect stderr - multiprocess csv tmworkspaces.csv gam user "~User" print tagmanagertags "~path"
|
||||
|
||||
$ gam redirect csv ./tmpermissions.csv multiprocess redirect stderr - multiprocess csv tmaccounts.csv gam user "~User" print tagmanagerpermissions "~path"
|
||||
```
|
||||
|
||||
Multiple users - Get indented keys and values data from CSV data.
|
||||
```
|
||||
$ gam redirect stdout ./tmaccounts.txt multiprocess redirect stderr - multiprocess csv Users.csv gam user "~User" show tagmanageraccounts
|
||||
|
||||
$ gam redirect stdout ./tmcontainers.txt multiprocess redirect stderr - multiprocess csv tmaccounts.csv gam user "~User" show tagmanagercontainers "~path"
|
||||
|
||||
$ gam redirect stdout ./tmworkspaces.txt multiprocess redirect stderr - multiprocess csv tmcontainers.csv gam user "~User" show tagmanagerworkspaces "~path"
|
||||
|
||||
$ gam redirect stdout ./tmtags.txt multiprocess redirect stderr - multiprocess csv tmworkspaces.csv gam user "~User" show tagmanagertags "~path"
|
||||
|
||||
$ gam redirect stdout ./tmpermissions.txt multiprocess redirect stderr - multiprocess csv tmaccounts.csv gam user "~User" show tagmanagerpermissions "~path"
|
||||
|
||||
```
|
||||
48
wiki/Users-Web-Resources-and-Sites.md
Normal file
48
wiki/Users-Web-Resources-and-Sites.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Users - Web Resources and Sites
|
||||
- [API documentation](#api-documentation)
|
||||
- [Introduction](#introduction)
|
||||
- [Definitions](#definitions)
|
||||
- [Display Web Resources](#display-web-resources)
|
||||
- [Display Web Master Sites](#display-web-master-sites)
|
||||
|
||||
## API documentation
|
||||
* [Web Resources](https://developers.google.com/site-verification/v1/webResource/list)
|
||||
* [Web Sites](https://developers.google.com/webmaster-tools/v1/sites/list)
|
||||
|
||||
|
||||
## Introduction
|
||||
These features were added in version 7.17.00.
|
||||
|
||||
To use these commands you add the 'Search Console API' to your project and update your service account authorization.
|
||||
```
|
||||
gam update project
|
||||
gam user user@domain.com update serviceaccount
|
||||
...
|
||||
[*] 39) Search Console API - read only
|
||||
[*] 42) Site Verification API
|
||||
|
||||
```
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
|
||||
## Display Web Resources
|
||||
```
|
||||
gam <UserItem> show webresources
|
||||
```
|
||||
Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam <UserItem> print webresources [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
Gam displays the information as columns of fields.
|
||||
|
||||
## Display Web Master Sites
|
||||
```
|
||||
gam <UserItem> show webmastersites
|
||||
```
|
||||
Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam <UserItem> print webmastersites [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
Gam displays the information as columns of fields.
|
||||
@@ -21,6 +21,7 @@
|
||||
- [Update a user's attributes with JSON data](#update-a-users-attributes-with-json-data)
|
||||
- [Update a user's OU based on group membership](#update-a-users-ou-based-on-group-membership)
|
||||
- [Do not update a user's OU if currently in a special purpose OU](#do-not-update-a-users-ou-if-currently-in-a-special-purpose-ou)
|
||||
- [Check a user's suspension status](#check-a-users-suspension-status)
|
||||
- [Delete or suspend users](#delete-or-suspend-users)
|
||||
- [Undelete or unsuspend users](#undelete-or-unsuspend-users)
|
||||
- [Display information about users](#display-information-about-users)
|
||||
@@ -38,7 +39,7 @@
|
||||
- [Print user counts by OrgUnit](#print-user-counts-by-orgunit)
|
||||
- [Print user list](#print-user-list)
|
||||
- [Display user counts](#display-user-counts)
|
||||
- [Verify domain membership]($verify-domain-membership)
|
||||
- [Verify domain membership](#verify-domain-membership)
|
||||
|
||||
## API documentation
|
||||
* [Directory API - Users](https://developers.google.com/admin-sdk/directory/reference/rest/v1/users)
|
||||
@@ -339,7 +340,7 @@ Here is how that data is represented in GAM:
|
||||
Locations:
|
||||
type: desk
|
||||
area: desk
|
||||
buildingId: Building-ID
|
||||
buildingId: Building id
|
||||
buildingName: Building name
|
||||
floorName: Floor name
|
||||
floorSection: Floor section
|
||||
@@ -359,13 +360,15 @@ External IDs:
|
||||
```
|
||||
These options will set those values:
|
||||
```
|
||||
location type desk area desk buildingid Building-ID floorname "Floor name" floorsection "Floor section" endlocation
|
||||
location type desk area desk buildingid "id:Building id" floorname "Floor name" floorsection "Floor section" endlocation
|
||||
organization customtype "" description "Type of employee" costcenter "Cost center" department "Department" title "Job Title" primary
|
||||
relation manager manageremail@domain.com
|
||||
externalid organization "Employee ID"
|
||||
```
|
||||
When setting `location buildingid <String>` Google expects a validated building ID, you can use a non-validated
|
||||
When setting `location buildingid id:<String>` Google expects a validated building ID, you can use a non-validated
|
||||
building ID by specifying `nv:` at the beginning of `<String>`; e.g., `nv:Building X` sets the building ID to `Building X`.
|
||||
You can also use `buildingid <String>`, i.e., no `'id:` or `nv:` prefix, `<String>` is then interpreted as a building name
|
||||
and GAM validates it to get the building id that is required by the API.
|
||||
|
||||
## Passwords
|
||||
To set a user's password, you specify a `<Password>` string and a hash method that specifies how to interpret the string
|
||||
@@ -896,6 +899,25 @@ gam csv SISdata.csv gam update user "~primaryEmail" suspended off firstname "~Fi
|
||||
ou "~OU" immutableous "'/Students/Lower School/Restricted,'/Students/Middle School/Restricted'"
|
||||
```
|
||||
|
||||
## Check a user's suspension status
|
||||
This command checks the suspension status of a single user
|
||||
and sets the return code to 0 if the user is not suspended or 26 if it is.
|
||||
```
|
||||
gam check suspended <UserItem>
|
||||
```
|
||||
Example.
|
||||
```
|
||||
$ gam check suspended testok@domain.com
|
||||
User: testok@domain.com, Account Suspended: False
|
||||
$ echo $?
|
||||
0
|
||||
|
||||
$ gam check suspended testsusp@domain.com
|
||||
User: testsusp@domain.com, Account Suspended: True, Suspension Reason: ADMIN
|
||||
$ echo $?
|
||||
26
|
||||
```
|
||||
|
||||
## Delete or suspend users
|
||||
These commands operate on a single user.
|
||||
```
|
||||
|
||||
@@ -1,19 +1,12 @@
|
||||
# Using GAM7 with a delegated admin service account
|
||||
- [Thanks](#thanks)
|
||||
- [Introduction](#introduction)
|
||||
- [Advantages](#advantages)
|
||||
- [Disadvantages](#disadvantages)
|
||||
- [Setup Steps](#setup-steps)
|
||||
|
||||
## Thanks
|
||||
|
||||
Thanks to Jay Lee for the original version of this document.
|
||||
|
||||
## Introduction
|
||||
Delegated admin service accounts (DASA) are regular [GCP service accounts](https://cloud.google.com/iam/docs/service-accounts#what_are_service_accounts) that are granted a Workspace [delegated admin role](https://support.google.com/a/answer/33325). Service accounts have an email address like `gam-project-xuw-sp1-c4b@gam-project-xuw-sp1-c4b.iam.gserviceaccount.com` and are not part of a Workspace or Cloud Identity domain even if they are owned by a project in the domain’s organization. Service accounts cannot login to Google web services interactively, they are only able to call Google APIs.
|
||||
|
||||
GAM7 version 6.50.00 or higher is required.
|
||||
|
||||
## Advantages
|
||||
* DASA accounts don’t require a Workspace or Cloud Identity license.
|
||||
* DASA accounts don’t have a password login that can be phished or captured, they use [RSA private keys](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) to sign authentication requests which makes them very secure. You should however [rotate the key](https://jaylee.us/qwm) on a regular basis and keep it safe and secured!
|
||||
@@ -23,7 +16,10 @@ GAM7 version 6.50.00 or higher is required.
|
||||
|
||||
## Disadvantages
|
||||
* DASA accounts can only be delegated admins. [If a task requires super admin rights to perform](https://support.google.com/a/answer/2405986#:~:text=Only%20super%20administrators%20can...), DASA accounts won’t be able to do it.
|
||||
Not all Google Admin APIs work with DASA right now. For example, Google Vault API calls will fail with a DASA account; Classroom API calls do not return data.
|
||||
Not all Google Admin APIs work with DASA right no:
|
||||
* Google Vault API calls will fail with a DASA account
|
||||
* Classroom API calls do not return data
|
||||
* Cloud Identity Policies are not available
|
||||
* DASA is a delegated admin and can make Workspace / Cloud Identity admin API calls, it does not replace domain-wide delegation (DwD) when using GAM7 commands that interact with Gmail, Drive and Calendar user data.
|
||||
* GAM7 support for DASA is still experimental and some things may fail. Please report your findings to the [GAM group](https://groups.google.com/g/google-apps-manager).
|
||||
|
||||
|
||||
@@ -243,7 +243,8 @@ gam create vaultexport|export matter <MatterItem> [name <String>] corpus calenda
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
||||
[responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*] [calendarversiondate <Date>|<Time>]
|
||||
[includeshareddrives <Boolean>] [driveversiondate <Date>|<Time>] [includeaccessinfo <Boolean>]
|
||||
[(includeshareddrives <Boolean>)|(shareddrivesoption included|included_if_account_is_not_a_member|not_included)]
|
||||
[driveversiondate <Date>|<Time>] [includeaccessinfo <Boolean>]
|
||||
[driveclientsideencryption any|encrypted|unencrypted]
|
||||
[includerooms <Boolean>]
|
||||
[excludedrafts <Boolean>] [mailclientsideencryption any|encrypted|unencrypted]
|
||||
@@ -315,8 +316,11 @@ For `corpus calendar`, you can specify the format of the exported data:
|
||||
|
||||
For `corpus drive`, you can specify advanced search options:
|
||||
* `driveversiondate <Date>|<Time>` - Search the versions of the Drive file as of the reference date. These timestamps are in GMT and rounded down to the given date.
|
||||
* `includeshareddrives False` - Do not include Shared Drives in the search, this is the default.
|
||||
* `includeshareddrives True` - Include Shared Drives in the search.
|
||||
* `includeshareddrives False` - Mapped to `sharedrivesoption included_if_account_is_not_a_member`
|
||||
* `includeshareddrives True` - Mapped to `sharedrivesoption included`
|
||||
* `sharedrivesoption included` - Resources in shared drives are included in the search
|
||||
* `sharedrivesoption included_if_account_is_not_a_member` - Resources in shared drives where account is not a member are included in the search, this is the default
|
||||
* `sharedrivesoption not_included` - Resources in shared drives are not included in the search
|
||||
* `driveclientsideencryption any` - Include both client-side encrypted and unencrypted content in search, this is the default.
|
||||
* `driveclientsideencryption encrypted` - Include client-side encrypted content only in search.
|
||||
* `driveclientsideencryption unencrypted` - Include client-side unencrypted content only in search.
|
||||
@@ -599,7 +603,7 @@ gam create vaulthold|hold matter <MatterItem> [name <String>] corpus calendar|dr
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[includerooms <Boolean>]
|
||||
[covereddata calllogs|textmessages|voicemails]
|
||||
[includeshareddrives|includeteamdrives <Boolean>]
|
||||
[includeshareddrives <Boolean>]
|
||||
[showdetails|returnidonly]
|
||||
```
|
||||
Specify the name of the hold:
|
||||
@@ -621,8 +625,8 @@ Specify the search method, this option is required:
|
||||
The `query <QueryVaultCorpus>` option can still be used but it is much simpler to use the following options.
|
||||
|
||||
For `corpus drive`, you can specify advanced search options:
|
||||
* `includeshareddrives False` - Do not include Shared Drives in the search, this is the default.
|
||||
* `includeshareddrives True` - Include Shared Drives in the search.
|
||||
* `includeshareddrives False` - Files in shared drives are not included in the hold, this is the default
|
||||
* `includeshareddrives True` - Files in shared drives are included in the hold
|
||||
|
||||
For `corpus mail`, you can specify search terms to limit the search.
|
||||
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||
@@ -652,12 +656,12 @@ gam update vaulthold|hold <HoldItem> matter <MatterItem>
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[includerooms <Boolean>]
|
||||
[covereddata calllogs|textmessages|voicemails]
|
||||
[includeshareddrives|includeteamdrives <Boolean>]
|
||||
[includeshareddrives <Boolean>]
|
||||
[showdetails]
|
||||
```
|
||||
For a hold with `corpus drive`, you can specify advanced search options:
|
||||
* `includeshareddrives False` - Do not include Shared Drives in the search, this is the default.
|
||||
* `includeshareddrives True` - Include Shared Drives in the search.
|
||||
* `includeshareddrives False` - Files in shared drives are not included in the hold, this is the default
|
||||
* `includeshareddrives True` - Files in shared drives are included in the hold
|
||||
|
||||
For a hold with `corpus mail`, you can specify search terms to limit the search.
|
||||
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
gam version
|
||||
GAM 7.07.08 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM 7.18.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM Team <google-apps-manager@googlegroups.com>
|
||||
Python 3.13.3 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.6 x86_64
|
||||
Path: /Users/Admin/bin/gam7
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
@@ -15,10 +15,10 @@ Time: 2023-06-02T21:10:00-07:00
|
||||
Print the current version of Gam with details and time offset information
|
||||
```
|
||||
gam version timeoffset
|
||||
GAM 7.07.08 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM 7.18.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM Team <google-apps-manager@googlegroups.com>
|
||||
Python 3.13.3 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.6 x86_64
|
||||
Path: /Users/Admin/bin/gam7
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Your system time differs from www.googleapis.com by less than 1 second
|
||||
@@ -27,15 +27,15 @@ Your system time differs from www.googleapis.com by less than 1 second
|
||||
Print the current version of Gam with extended details and SSL information
|
||||
```
|
||||
gam version extended
|
||||
GAM 7.07.08 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM 7.18.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||
GAM Team <google-apps-manager@googlegroups.com>
|
||||
Python 3.13.3 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.6 x86_64
|
||||
Path: /Users/Admin/bin/gam7
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
Your system time differs from admin.googleapis.com by less than 1 second
|
||||
OpenSSL 3.4.0 22 Oct Sep 2024
|
||||
OpenSSL 3.5.2 5 ASug 2025
|
||||
cryptography 43.0.3
|
||||
filelock 3.16.1
|
||||
google-api-python-client 2.149.0
|
||||
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
||||
Path: /Users/Admin/bin/gam7
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 7.07.08
|
||||
Latest: 7.18.03
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@@ -72,7 +72,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
7.07.08
|
||||
7.18.03
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@@ -82,10 +82,10 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
gam help
|
||||
GAM 7.07.08 - https://github.com/GAM-team/GAM
|
||||
GAM 7.18.03 - https://github.com/GAM-team/GAM
|
||||
GAM Team <google-apps-manager@googlegroups.com>
|
||||
Python 3.13.3 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.6 x86_64
|
||||
Path: /Users/Admin/bin/gam7
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
oUpdate History
|
||||
Update History
|
||||
* [GAM Updates](GamUpdates)
|
||||
|
||||
Installation
|
||||
@@ -66,6 +66,7 @@ Client Access
|
||||
* [Administrators](Administrators)
|
||||
* [Alert Center](Alert-Center)
|
||||
* [Aliases](Aliases)
|
||||
* [Business Account Management](Business-Account-Management)
|
||||
* [Calendars](Calendars)
|
||||
* [Calendars - Access](Calendars-Access)
|
||||
* [Calendars - Events](Calendars-Events)
|
||||
@@ -97,6 +98,7 @@ Client Access
|
||||
* [Domain Shared Contacts](Domain-SharedContacts)
|
||||
* [Email Audit Monitor](Email-Audit-Monitor)
|
||||
* [Find File Owner](Find-File-Owner)
|
||||
* [Global Address List](Global-Address-List)
|
||||
* [Google Data Transfers](Google-Data-Transfers)
|
||||
* [Groups](Groups)
|
||||
* [Groups - Membership](Groups-Membership)
|
||||
@@ -127,7 +129,7 @@ Client Access
|
||||
* [Version and Help](Version-and-Help)
|
||||
|
||||
Special Service Account Access
|
||||
* [Chat Bot](Chat-Bot)
|
||||
* [Chat Bot Setup and Use](Chat-Bot-Setup-Use)
|
||||
|
||||
Service Account Access
|
||||
* [Users - Analytics Admin](Users-Analytics-Admin)
|
||||
@@ -170,8 +172,10 @@ Service Account Access
|
||||
* [Users - Profile Photo](Users-Profile-Photo)
|
||||
* [Users - Shared Drives](Users-Shared-Drives)
|
||||
* [Users - Spreadsheets](Users-Spreadsheets)
|
||||
* [Users - Tag Manager](Users-Tag-Manager)
|
||||
* [Users - Tasks](Users-Tasks)
|
||||
* [Users - YouTube](Users-YouTube)
|
||||
* [Users - Web Resources and Sites](Users-Web-Resources-and-Sites)
|
||||
|
||||
GAM Tutorials
|
||||
* [Account Auditing](l-ExamplesAccountAuditing)
|
||||
|
||||
@@ -287,7 +287,7 @@ csv_output_users_audit
|
||||
Default: False
|
||||
customer_id
|
||||
Google Customer ID
|
||||
Default: Blank
|
||||
Default: my_customer
|
||||
Environment variable: CUSTOMER_ID
|
||||
debug_level
|
||||
If debug_level > 0, turn on API debugging output.
|
||||
@@ -321,13 +321,23 @@ drive_v3_native_names
|
||||
email_batch_size
|
||||
When archiving, printing, showing, trashing, untrashing, marking as spam Gmail messages.
|
||||
how many should be processed in each batch
|
||||
Default: 100
|
||||
Default: 50
|
||||
Range: 1 - 100
|
||||
enable_dasa
|
||||
Enable/disable Delegated Admin Service Account API Access
|
||||
admin_email, customer_id and domain must be set when enable_dasa is True,
|
||||
customer_id may not be set to my_customer
|
||||
Signal file: OldGamPath/enabledasa.txt
|
||||
enforce_expansive_access
|
||||
The default value for option `enforceexpansiveaccess` in all commands that delete or update drive file ACLs/permissions.
|
||||
gam <UserTypeEntity> delete permissions
|
||||
gam <UserTypeEntity> delete drivefileacl
|
||||
gam <UserTypeEntity> update drivefileacl
|
||||
gam <UserTypeEntity> copy drivefile
|
||||
gam <UserTypeEntity> move drivefile
|
||||
gam <UserTypeEntity> transfer ownership
|
||||
gam <UserTypeEntity> claim ownership
|
||||
Default: True
|
||||
event_max_results
|
||||
When retrieving lists of Calendar events from API,
|
||||
how many should be retrieved in each API call
|
||||
@@ -384,7 +394,7 @@ message_batch_size
|
||||
message_max_results
|
||||
When retrieving lists of Gmail messages from API,
|
||||
how many should be retrieved in each API call
|
||||
Default: 1000
|
||||
Default: 500
|
||||
Range: 1 - 10000
|
||||
mobile_max_results
|
||||
When retrieving lists of Mobile devices from API,
|
||||
@@ -402,9 +412,8 @@ never_time
|
||||
has the value "1970-01-01T00:00:00.000Z"
|
||||
Default: Never
|
||||
no_browser
|
||||
If no_browser is True, GAM won't open a browser if todrive is set
|
||||
when creating CSV files and GAM prints a link and waits for
|
||||
the verification code when oauth2.txt is being created
|
||||
If no_browser is True, GAM won't open a browser when it prints a link
|
||||
and waits for the verification code when oauth2.txt is being created/updated
|
||||
Signal file: OldGamPath/nobrowser.txt
|
||||
no_cache
|
||||
Disable GAM API caching
|
||||
@@ -416,8 +425,10 @@ no_short_urls
|
||||
the shortened URL redirects to the long URL.
|
||||
When True, the long scopes URLs in `gam oauth create` and
|
||||
`gam <UserTypeEntity> check|update serviceaccount` will be used as is.
|
||||
Default: True
|
||||
no_verify_ssl
|
||||
Disable SSL certificate validation
|
||||
Default: False
|
||||
num_tbatch_threads
|
||||
Number of threads for gam tbatch
|
||||
Default: 2
|
||||
@@ -982,6 +993,7 @@ gam update project
|
||||
gam oauth create
|
||||
gam info domain
|
||||
gam config customer_id <CustomerID> save
|
||||
gam user user@xxx.com update serviceaccount
|
||||
```
|
||||
|
||||
### New clients
|
||||
@@ -1003,7 +1015,7 @@ gam create project
|
||||
gam oauth create
|
||||
gam info domain
|
||||
gam config customer_id <CustomerID> save
|
||||
gam user user@foo.com check serviceaccount
|
||||
gam user user@foo.com update serviceaccount
|
||||
```
|
||||
|
||||
To get information about a client, select a section.
|
||||
|
||||
Reference in New Issue
Block a user