mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-28 01:41:36 +00:00
Compare commits
290 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
e2f0afe891 | ||
|
|
65cd2439d5 | ||
|
|
652ab1dc6d | ||
|
|
88cad201a5 | ||
|
|
9f8100dfbf | ||
|
|
7fbafb2ba0 | ||
|
|
2c631af66c | ||
|
|
3b900ca56f | ||
|
|
4a1e19a753 | ||
|
|
4a0e61a385 | ||
|
|
10b874e2aa | ||
|
|
4c3821766d | ||
|
|
5225a36cbd | ||
|
|
ee64202233 | ||
|
|
25add7034a | ||
|
|
ba042229a8 | ||
|
|
6233bd8d9c | ||
|
|
c7a6ab536f | ||
|
|
39181a4329 | ||
|
|
2d9cb44d47 | ||
|
|
ad17eb5e77 | ||
|
|
3a90f0d92d | ||
|
|
0c360b0e9c | ||
|
|
e572126c76 | ||
|
|
06f1d8d246 | ||
|
|
4b83d13e74 | ||
|
|
b57b10b536 | ||
|
|
b7bd74c6d7 | ||
|
|
3a307cae80 | ||
|
|
d571207cce | ||
|
|
9a79834a12 | ||
|
|
d2f048a773 | ||
|
|
db74a6e22a | ||
|
|
e147ebb253 | ||
|
|
5674c58b81 | ||
|
|
74b62c5cb9 | ||
|
|
1375bde65b | ||
|
|
936406b1b0 | ||
|
|
b39a0efd83 | ||
|
|
bcd327a7f4 | ||
|
|
81ae789acc | ||
|
|
b6ac91b97d | ||
|
|
e05b2a3843 | ||
|
|
d8e69ff50d | ||
|
|
c29f379386 | ||
|
|
f8743e1b7f | ||
|
|
24db5cc886 | ||
|
|
e95fcbaa38 | ||
|
|
a7b31550f3 | ||
|
|
ed19f877a5 | ||
|
|
0ab08c968e | ||
|
|
02a7a1a106 | ||
|
|
170a2e593b | ||
|
|
8339b92537 | ||
|
|
ce16aa252e | ||
|
|
8a70470281 | ||
|
|
981301a878 | ||
|
|
13cfb77811 | ||
|
|
458e08645d | ||
|
|
98d4d3c06f | ||
|
|
2204c35193 | ||
|
|
87827badb8 | ||
|
|
319bedd338 |
41
.github/workflows/build.yml
vendored
41
.github/workflows/build.yml
vendored
@@ -28,6 +28,8 @@ env:
|
|||||||
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
||||||
PYTHON_INSTALL_PATH: ${{ github.workspace }}/bin/python
|
PYTHON_INSTALL_PATH: ${{ github.workspace }}/bin/python
|
||||||
PYTHON_SOURCE_PATH: ${{ github.workspace }}/src/cpython
|
PYTHON_SOURCE_PATH: ${{ github.workspace }}/src/cpython
|
||||||
|
CRYPTOGRAPHY_BUILD_OPENSSL_NO_LEGACY: 1
|
||||||
|
CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -124,7 +126,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20250422
|
key: gam-${{ matrix.jid }}-20250701
|
||||||
|
|
||||||
- name: Untar Cache archive
|
- name: Untar Cache archive
|
||||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||||
@@ -197,7 +199,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "RUNNING: apt update..."
|
echo "RUNNING: apt update..."
|
||||||
sudo apt-get -qq --yes update
|
sudo apt-get -qq --yes update
|
||||||
sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev
|
sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev libffi-dev pkg-config
|
||||||
|
|
||||||
- name: MacOS install tools
|
- name: MacOS install tools
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
@@ -253,11 +255,9 @@ jobs:
|
|||||||
if [[ "$RUNNER_ARCH" == "ARM64" ]]; then
|
if [[ "$RUNNER_ARCH" == "ARM64" ]]; then
|
||||||
PYEXTERNALS_PATH="arm64"
|
PYEXTERNALS_PATH="arm64"
|
||||||
WIX_ARCH="arm64"
|
WIX_ARCH="arm64"
|
||||||
CHOC_OPS=""
|
|
||||||
elif [[ "$RUNNER_ARCH" == "X64" ]]; then
|
elif [[ "$RUNNER_ARCH" == "X64" ]]; then
|
||||||
PYEXTERNALS_PATH="amd64"
|
PYEXTERNALS_PATH="amd64"
|
||||||
WIX_ARCH="x64"
|
WIX_ARCH="x64"
|
||||||
CHOC_OPS=""
|
|
||||||
fi
|
fi
|
||||||
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PYTHON_SOURCE_PATH}/PCbuild/${PYEXTERNALS_PATH}"
|
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PYTHON_SOURCE_PATH}/PCbuild/${PYEXTERNALS_PATH}"
|
||||||
echo "PYTHON=${PYTHON_SOURCE_PATH}/PCbuild/${PYEXTERNALS_PATH}/python.exe" >> $GITHUB_ENV
|
echo "PYTHON=${PYTHON_SOURCE_PATH}/PCbuild/${PYEXTERNALS_PATH}/python.exe" >> $GITHUB_ENV
|
||||||
@@ -292,10 +292,10 @@ jobs:
|
|||||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
cd "${OPENSSL_SOURCE_PATH}"
|
cd "${OPENSSL_SOURCE_PATH}"
|
||||||
# TODO: remove this once https://github.com/openssl/openssl/issues/26239 is fixed.
|
#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
|
export CFLAGS=-DNO_INTERLOCKEDOR64
|
||||||
fi
|
#fi
|
||||||
# --libdir=lib is needed so Python can find OpenSSL libraries
|
# --libdir=lib is needed so Python can find OpenSSL libraries
|
||||||
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
||||||
|
|
||||||
@@ -449,26 +449,31 @@ jobs:
|
|||||||
"$PYTHON" get-pip.py
|
"$PYTHON" get-pip.py
|
||||||
"$PYTHON" -m pip install --upgrade pip
|
"$PYTHON" -m pip install --upgrade pip
|
||||||
"$PYTHON" -m pip install --upgrade wheel
|
"$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
|
||||||
|
|
||||||
- name: Custom wheels for Win arm64
|
- name: Custom wheels for Win arm64
|
||||||
if: runner.os == 'Windows' && runner.arch == 'ARM64'
|
if: runner.os == 'Windows' && runner.arch == 'ARM64'
|
||||||
run: |
|
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)
|
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}..."
|
echo "Downloading ${latest_crypt_whl}..."
|
||||||
curl -O -L "$latest_crypt_whl"
|
curl -O -L "$latest_crypt_whl"
|
||||||
"$PYTHON" -m pip install cryptography*.whl
|
"$PYTHON" -m pip install cryptography*.whl
|
||||||
|
|
||||||
|
#- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
|
||||||
|
# - name: Compile cryptography from source (no legacy)
|
||||||
|
# if: runner.os != 'Windows' || runner.arch != 'ARM64'
|
||||||
|
# run: |
|
||||||
|
# pip install --no-binary ":all:" --force cryptography
|
||||||
|
|
||||||
- name: Install pip requirements
|
- name: Install pip requirements
|
||||||
run: |
|
run: |
|
||||||
echo "before anything..."
|
echo "before anything..."
|
||||||
"$PYTHON" -m pip list
|
"$PYTHON" -m pip list
|
||||||
"$PYTHON" -m pip install --upgrade -r requirements.txt
|
"$PYTHON" -m pip install --upgrade ..[yubikey]
|
||||||
echo "after requirements..."
|
|
||||||
"$PYTHON" -m pip list
|
"$PYTHON" -m pip list
|
||||||
#"$PYTHON" -m pip install --force-reinstall --no-deps --upgrade cryptography
|
#"$PYTHON" -m pip install --force-reinstall --no-deps --upgrade cryptography
|
||||||
echo "after everything..."
|
echo "after everything..."
|
||||||
@@ -800,7 +805,7 @@ jobs:
|
|||||||
echo "Created shared drive ${driveid}"
|
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 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 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 get photo
|
||||||
$gam user $newuser delete photo
|
$gam user $newuser delete photo
|
||||||
$gam create alias $newalias user $newuser
|
$gam create alias $newalias user $newuser
|
||||||
@@ -847,7 +852,7 @@ jobs:
|
|||||||
$gam user $newuser show labels > labels.txt
|
$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 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 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 user $gam_user draftemail subject "GHA draft $newbase" message "Draft message test"
|
||||||
$gam csvfile sample.csv:email waitformailbox retries 20
|
$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)
|
$gam user $newuser delegate to "${newbase}-bulkuser-1" || if [ $? != 50 ]; then exit $?; fi # expect a 50 return code (delegation failed)
|
||||||
@@ -910,7 +915,7 @@ jobs:
|
|||||||
$gam config enable_dasa true save
|
$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 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 mobile
|
||||||
$gam print devices
|
$gam print devices clientstates
|
||||||
$gam print browsers
|
$gam print browsers
|
||||||
$gam print cros allfields orderby serialnumber
|
$gam print cros allfields orderby serialnumber
|
||||||
$gam show crostelemetry storagepercentonly
|
$gam show crostelemetry storagepercentonly
|
||||||
|
|||||||
2
.github/workflows/pushwiki.yml
vendored
2
.github/workflows/pushwiki.yml
vendored
@@ -5,6 +5,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'wiki/**'
|
- 'wiki/**'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pushwiki:
|
pushwiki:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ authors = [
|
|||||||
{ name="Jay Lee", email="jay0lee@gmail.com" },
|
{ name="Jay Lee", email="jay0lee@gmail.com" },
|
||||||
{ name="Ross Scroggs", email="Ross.Scroggs@gmail.com" },
|
{ name="Ross Scroggs", email="Ross.Scroggs@gmail.com" },
|
||||||
]
|
]
|
||||||
|
# notice that yubikey-manager remains optional further down since it is less command and adds
|
||||||
|
#significant compile dependencies.
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chardet>=5.2.0",
|
"chardet>=5.2.0",
|
||||||
"cryptography>=44.0.2",
|
"cryptography>=44.0.2",
|
||||||
@@ -17,10 +19,9 @@ dependencies = [
|
|||||||
"google-auth-oauthlib>=1.2.2",
|
"google-auth-oauthlib>=1.2.2",
|
||||||
"google-auth>=2.39.0",
|
"google-auth>=2.39.0",
|
||||||
"httplib2>=0.22.0",
|
"httplib2>=0.22.0",
|
||||||
"lxml",
|
"lxml>=5.4.0",
|
||||||
"passlib>=1.7.4",
|
"passlib>=1.7.4",
|
||||||
"pathvalidate>=3.2.3",
|
"pathvalidate>=3.2.3",
|
||||||
"pyscard==2.2.1",
|
|
||||||
"python-dateutil",
|
"python-dateutil",
|
||||||
]
|
]
|
||||||
description = "CLI tool to manage Google Workspace"
|
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 |
|
geminiedu | 1010470004 | Gemini Education |
|
||||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
geminient| duetai | 1010470001 | Gemini Enterprise |
|
||||||
|
geminiultra | 1010470008 | Google AI Ultra for Business |
|
||||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||||
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
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
|
domain:<DomainName>|domain|default
|
||||||
<CalendarItem> ::= <EmailAddress>
|
<CalendarItem> ::= <EmailAddress>
|
||||||
<ChannelCustomerID> ::= <String>
|
<ChannelCustomerID> ::= <String>
|
||||||
|
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||||
|
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||||
<ChatMember> ::= spaces/<String>/members/<String>
|
<ChatMember> ::= spaces/<String>/members/<String>
|
||||||
<ChatMessage> ::= spaces/<String>/messages/<String>
|
<ChatMessage> ::= spaces/<String>/messages/<String>
|
||||||
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
||||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||||
|
<ChromeProfilePermanentID> ::= <String>
|
||||||
|
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||||
|
<ChromeProfileCommandName> ::= <ChomeProfileName>/commands/<String>
|
||||||
<GIGroupAlias> ::= <EmailAddress>
|
<GIGroupAlias> ::= <EmailAddress>
|
||||||
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
||||||
<CIGroupMemberType> ::= cbcmbrowser|chromeosdevice|customer|group|other|serviceaccount|user
|
<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>
|
<ContactGroupItem> ::= <ContactGroupID>|<ContactGroupName>
|
||||||
<CorporaAttribute> ::= alldrives|allteamdrives|domain|onlyteamdrives|user
|
<CorporaAttribute> ::= alldrives|allteamdrives|domain|onlyteamdrives|user
|
||||||
<CourseAlias> ::= <String>
|
<CourseAlias> ::= <String>
|
||||||
|
<CourseAnnouncementContent> ::=
|
||||||
|
((text <String>)|
|
||||||
|
(textfile <FileName> [charset <Charset>])|
|
||||||
|
(gdoc <UserGoogleDoc>)|
|
||||||
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
<CourseAnnouncementID> ::= <Number>
|
<CourseAnnouncementID> ::= <Number>
|
||||||
<CourseAnnouncementState> ::= draft|published|deleted
|
<CourseAnnouncementState> ::= draft|published|deleted
|
||||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||||
@@ -611,6 +622,14 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
gs://<StorageBucketName>/<StorageObjectName>|
|
gs://<StorageBucketName>/<StorageObjectName>|
|
||||||
<StorageBucketName>/<StorageObjectName>
|
<StorageBucketName>/<StorageObjectName>
|
||||||
<Tag> ::= <String>
|
<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,-]*
|
<TakeoutBucketName> ::= takeout-export-[a-f,0-9,-]*
|
||||||
<TaskID> ::= <String>
|
<TaskID> ::= <String>
|
||||||
<TaskListID> ::= <String>
|
<TaskListID> ::= <String>
|
||||||
@@ -664,6 +683,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
(gdoc|ghtml <UserGoogleDoc>)|
|
(gdoc|ghtml <UserGoogleDoc>)|
|
||||||
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
||||||
<YouTubeChannelID> ::= <String>
|
<YouTubeChannelID> ::= <String>
|
||||||
|
|
||||||
## Lists of basic items
|
## Lists of basic items
|
||||||
|
|
||||||
<APIScopeURLList> ::= "<APIScopeURL>(,<APIScopeURL>)*"
|
<APIScopeURLList> ::= "<APIScopeURL>(,<APIScopeURL>)*"
|
||||||
@@ -672,9 +692,16 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||||
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
||||||
|
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||||
|
<ChromeProfileCommandNameList> ::= "<ChromeProfileCommandName>(,<ChromeProfileCommandName>)*"
|
||||||
<CIGroupAliasList> ::= "<CIGroupAlias>(,<CIGroupAlias>)*"
|
<CIGroupAliasList> ::= "<CIGroupAlias>(,<CIGroupAlias>)*"
|
||||||
<CIGroupMemberTypeList> ::= "<CIGroupMemberType>(,<CIGroupMemberType>)*"
|
<CIGroupMemberTypeList> ::= "<CIGroupMemberType>(,<CIGroupMemberType>)*"
|
||||||
<CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
|
<CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
|
||||||
|
<ClassificationLabelIDList> ::= "<ClassificationLabelID>(,<ClassificationLabelID>)*"
|
||||||
|
<ClassificationLabelNameList> ::= "<ClassificationLabelName>(,<ClassificationLabelName>)*"
|
||||||
|
<ClassificationLabelPermissionNameList> ::= "<ClassificationLabelPermissionName>(,<ClassificationLabelPermissionName>)*"
|
||||||
|
<ClassificationLabelFieldIDList> ::= "<ClassificationLabelFieldID>(,<ClassificationLabelFieldID>)*"
|
||||||
|
<ClassificationLabelSelectionIDList> ::= "<ClassificationLabelSelectionID>(,<ClassificationLabelSelectionID>)*"
|
||||||
<ClassroomInvitationIDList> ::= "<ClassroomInvitationID>(,<ClassroomInvitationID>)*"
|
<ClassroomInvitationIDList> ::= "<ClassroomInvitationID>(,<ClassroomInvitationID>)*"
|
||||||
<ContactGroupList> ::= "<ContactGroupItem>(,<ContactGroupItem>)*"
|
<ContactGroupList> ::= "<ContactGroupItem>(,<ContactGroupItem>)*"
|
||||||
<ContactIDList> ::= "<ContactID>(,<ContactID>)*"
|
<ContactIDList> ::= "<ContactID>(,<ContactID>)*"
|
||||||
@@ -752,6 +779,9 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
<SharedDriveACLRoleList> ::= "<SharedDriveACLRole>(,<SharedDriveACLRole>)*"
|
<SharedDriveACLRoleList> ::= "<SharedDriveACLRole>(,<SharedDriveACLRole>)*"
|
||||||
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
||||||
<StringList> ::= "<String>(,<String>)*"
|
<StringList> ::= "<String>(,<String>)*"
|
||||||
|
<TagManagerAccountPathList> ::= "<TagManagerAccountPath>(,<TagManagerAccountPath>)*"
|
||||||
|
<TagManagerContainerPathList> ::= "<TagManagerContainerPath>(,<TagManagerContainerPath>)*"
|
||||||
|
<TagManagerWorkspacePathList> ::= "<TagManagerWorkspacePath>(,<TagManagerWorkspacePath>)*"
|
||||||
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
||||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||||
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
||||||
@@ -1006,6 +1036,11 @@ Specify a collection of items by directly specifying them; the item type is dete
|
|||||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
<CalendarEntity> ::=
|
<CalendarEntity> ::=
|
||||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
<ChromeProfileNameEntity> ::=
|
||||||
|
<ChromeProfileNameList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
|
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||||
|
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||||
<CIPolicyNameEntity> ::=
|
<CIPolicyNameEntity> ::=
|
||||||
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
|
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
|
||||||
<ClassificationLabelNameEntity> ::=
|
<ClassificationLabelNameEntity> ::=
|
||||||
@@ -1208,6 +1243,15 @@ Specify a collection of items by directly specifying them; the item type is dete
|
|||||||
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
<SiteEntity> ::=
|
<SiteEntity> ::=
|
||||||
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
<TagManagerAccountPathEntity> ::=
|
||||||
|
<TagManagerAccountPathList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
|
<TagManagerContainerPathEntity> ::=
|
||||||
|
<TagManagerContainerPathList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
|
<TagManagerWorkspacePathEntity> ::=
|
||||||
|
<TagManagerWorkspacePathList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
<TasklistEntity> ::=
|
<TasklistEntity> ::=
|
||||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||||
<TasklistIDTaskIDEntity> ::=
|
<TasklistIDTaskIDEntity> ::=
|
||||||
@@ -1383,7 +1427,7 @@ gam show projects [[admin] <EmailAddress>] [all|<ProjectIDEntity>]
|
|||||||
[states all|active|deleterequested] [showiampolicies 0|1|3]
|
[states all|active|deleterequested] [showiampolicies 0|1|3]
|
||||||
gam print projects [[admin] <EmailAddress>] [all|<ProjectIDEntity>] [todrive <ToDriveAttribute>*]
|
gam print projects [[admin] <EmailAddress>] [all|<ProjectIDEntity>] [todrive <ToDriveAttribute>*]
|
||||||
[states all|active|deleterequested] [showiampolicies 0|1|3 [onememberperrow]]
|
[states all|active|deleterequested] [showiampolicies 0|1|3 [onememberperrow]]
|
||||||
[delimiter <Character>]] [[formatjson [quotechar <Character>]]
|
[delimiter <Character>] [[formatjson [quotechar <Character>]]
|
||||||
gam info currentprojectid
|
gam info currentprojectid
|
||||||
|
|
||||||
gam create|add svcacct [[admin] <EmailAddress>] [<ProjectIDEntity>]
|
gam create|add svcacct [[admin] <EmailAddress>] [<ProjectIDEntity>]
|
||||||
@@ -1461,16 +1505,21 @@ gam <UserTypeEntity> update serviceaccount (scope|scopes <APIScopeURLList>)*
|
|||||||
gam print privileges [todrive <ToDriveAttribute>*]
|
gam print privileges [todrive <ToDriveAttribute>*]
|
||||||
gam show privileges
|
gam show privileges
|
||||||
|
|
||||||
|
<Privilege> ::= <String>
|
||||||
|
<PrivilegeList> ::= "<Privilege>(,<Privilege)*"
|
||||||
<RoleAssignmentID> ::= <String>
|
<RoleAssignmentID> ::= <String>
|
||||||
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
||||||
|
|
||||||
gam create adminrole <String> privileges all|all_ou|<PrivilegesList> [description <String>]
|
gam create adminrole <String> [description <String>]
|
||||||
gam update adminrole <RoleItem> [name <String>] [privileges all|all_ou|<PrivilegesList>] [description <String>]
|
privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)
|
||||||
|
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
||||||
|
[privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)]
|
||||||
gam delete adminrole <RoleItem>
|
gam delete adminrole <RoleItem>
|
||||||
gam info adminrole <RoleItem> [privileges]
|
gam info adminrole <RoleItem> [privileges]
|
||||||
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
||||||
[privileges] [oneitemperrow]
|
[role <RoleItem>] [privileges] [oneitemperrow]
|
||||||
gam show adminroles|roles [privileges]
|
gam show adminroles|roles
|
||||||
|
[role <RoleItem>] [privileges]
|
||||||
|
|
||||||
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
||||||
[condition securitygroup|nonsecuritygroup]
|
[condition securitygroup|nonsecuritygroup]
|
||||||
@@ -1523,17 +1572,6 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
gam whatis <EmailItem> [noinfo] [noinivitablecheck]
|
gam whatis <EmailItem> [noinfo] [noinivitablecheck]
|
||||||
|
|
||||||
# Analytics UA
|
|
||||||
|
|
||||||
gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
|
|
||||||
accountid [accounts/]<String>
|
|
||||||
[maxresults <Integer>]
|
|
||||||
[formatjson [quotechar <Character>]]
|
|
||||||
gam <UserTypeEntity> show analyticuaproperties
|
|
||||||
accountid [accounts/]<String>
|
|
||||||
[maxresults <Integer>]
|
|
||||||
[formatjson]
|
|
||||||
|
|
||||||
# Analytics Admin
|
# Analytics Admin
|
||||||
|
|
||||||
gam <UserTypeEntity> print analyticaccounts [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print analyticaccounts [todrive <ToDriveAttribute>*]
|
||||||
@@ -1868,7 +1906,7 @@ gam calendar|calendars <CalendarEntity> show events [<EventEntity>] <EventDispla
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
gam calendar|calendars <CalendarEntity> print events [<EventEntity>] <EventDisplayProperty>*
|
gam calendar|calendars <CalendarEntity> print events [<EventEntity>] <EventDisplayProperty>*
|
||||||
[fields <EventFieldNameList>] [showdayofweek]
|
[fields <EventFieldNameList>] [showdayofweek]
|
||||||
[countsonly]
|
[countsonly [eventrowfilter]]
|
||||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
|
|
||||||
gam calendar <CalendarEntity> addevent <EventAttribute>+ [<EventNotificationAttribute>]
|
gam calendar <CalendarEntity> addevent <EventAttribute>+ [<EventNotificationAttribute>]
|
||||||
@@ -1882,7 +1920,7 @@ gam calendar <CalendarEntity> moveevent (id|eventid <EventID>)+ destination <Cal
|
|||||||
gam calendar <CalendarEntity> wipe
|
gam calendar <CalendarEntity> wipe
|
||||||
gam calendar <CalendarEntity> printevents <EventSelectProperty>* <EventDisplayProperty>*
|
gam calendar <CalendarEntity> printevents <EventSelectProperty>* <EventDisplayProperty>*
|
||||||
[fields <EventFieldNameList>] [showdayofweek]
|
[fields <EventFieldNameList>] [showdayofweek]
|
||||||
[countsonly]
|
[countsonly [eventrowfilter]]
|
||||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
|
|
||||||
<CalendarSettingsField> ::=
|
<CalendarSettingsField> ::=
|
||||||
@@ -2212,6 +2250,17 @@ gam show chromeneedsattn
|
|||||||
|
|
||||||
# Chrome Profile Management
|
# 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> ::=
|
<ChromeProfileFieldName> ::=
|
||||||
affiliationstate|
|
affiliationstate|
|
||||||
annotatedlocation|
|
annotatedlocation|
|
||||||
@@ -2262,15 +2311,27 @@ gam delete chromeprofile <ChromeProfileName>
|
|||||||
gam info chromeprofile <ChromeProfileName>
|
gam info chromeprofile <ChromeProfileName>
|
||||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||||
gam show chromeprofiles
|
gam show chromeprofiles
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam print chromeprofiles [todrive <ToDriveAttribute>*]
|
gam print chromeprofiles [todrive <ToDriveAttribute>*]
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
<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
|
# Chrome Versions Counts
|
||||||
|
|
||||||
@@ -2402,12 +2463,14 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
|||||||
autoupdatethrough|
|
autoupdatethrough|
|
||||||
backlightinfo|
|
backlightinfo|
|
||||||
bootmode|
|
bootmode|
|
||||||
|
chromeostype|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreports|
|
cpustatusreports|
|
||||||
deprovisionreason|
|
deprovisionreason|
|
||||||
devicefiles|
|
devicefiles|
|
||||||
deviceid|
|
deviceid|
|
||||||
devicelicensetype|
|
devicelicensetype|
|
||||||
|
diskspaceusage|
|
||||||
diskvolumereports|
|
diskvolumereports|
|
||||||
dockmacaddress|
|
dockmacaddress|
|
||||||
ethernetmacaddress|
|
ethernetmacaddress|
|
||||||
@@ -2415,6 +2478,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
|||||||
extendedsupporteligible|
|
extendedsupporteligible|
|
||||||
extendedsupportstart|
|
extendedsupportstart|
|
||||||
extendedsupportenabled|
|
extendedsupportenabled|
|
||||||
|
faninfo|
|
||||||
firmwareversion|
|
firmwareversion|
|
||||||
firstenrollmenttime|
|
firstenrollmenttime|
|
||||||
lastdeprovisiontimestamp|
|
lastdeprovisiontimestamp|
|
||||||
@@ -2728,6 +2792,7 @@ gam print chromschemas [todrive <ToDriveAttribute>*]
|
|||||||
<ChromePolicySchemaFieldName>* [fields <ChromePolicySchemaFieldNameList>]
|
<ChromePolicySchemaFieldName>* [fields <ChromePolicySchemaFieldNameList>]
|
||||||
[[formatjson [quotechar <Character>]]
|
[[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
|
gam info chromeschema std <SchemaName>
|
||||||
gam show chromeschemas std
|
gam show chromeschemas std
|
||||||
[filter <String>]
|
[filter <String>]
|
||||||
|
|
||||||
@@ -3118,8 +3183,21 @@ gam delete courses <CourseEntity> [archive|archived]
|
|||||||
gam course <CourseID> create|add alias <CourseAlias>
|
gam course <CourseID> create|add alias <CourseAlias>
|
||||||
gam course <CourseID> delete 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> create|add topic <CourseTopic>
|
||||||
gam course <CourseID> delete topic <CourseTopicID>
|
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 teachers [makefirstteacherowner] <UserItem>
|
||||||
gam course <CourseID> create|add students <UserItem>
|
gam course <CourseID> create|add students <UserItem>
|
||||||
@@ -3131,8 +3209,15 @@ gam course <CourseID> sync students [addonly|removeonly] <UserTypeEntity>
|
|||||||
gam courses <CourseEntity> create|add alias <CourseAliasEntity>
|
gam courses <CourseEntity> create|add alias <CourseAliasEntity>
|
||||||
gam courses <CourseEntity> delete 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> create|add topic <CourseTopicEntity>
|
||||||
gam courses <CourseEntity> delete topic <CourseTopicIDEntity>
|
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 teachers [makefirstteacherowner] <UserTypeEntity>
|
||||||
gam courses <CourseEntity> create|add students <UserTypeEntity>
|
gam courses <CourseEntity> create|add students <UserTypeEntity>
|
||||||
@@ -3385,8 +3470,7 @@ gam print|show transferapps
|
|||||||
|
|
||||||
<DataTransferService> ::=
|
<DataTransferService> ::=
|
||||||
calendar|
|
calendar|
|
||||||
currents|
|
datastudio|lookerstudio|"looker studio"|
|
||||||
datastudio|lookerstudio|"google data studio"|
|
|
||||||
googledrive|gdrive|drive|"drive and docs"
|
googledrive|gdrive|drive|"drive and docs"
|
||||||
<DataTransferServiceList> ::= "<DataTransferService>(,<DataTransferService>)*"
|
<DataTransferServiceList> ::= "<DataTransferService>(,<DataTransferService>)*"
|
||||||
|
|
||||||
@@ -3551,19 +3635,6 @@ gam print contacts [todrive <ToDriveAttribute>*] <ContactSelection>
|
|||||||
[fields <ContactFieldNameList>]
|
[fields <ContactFieldNameList>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
vgam info gal <ContactEntity>
|
|
||||||
[basic|full]
|
|
||||||
[fields <ContactFieldNameList>]
|
|
||||||
[formatjson]
|
|
||||||
gam show gal <ContactSelection>
|
|
||||||
[basic|full] [orderby <ContactOrderByFieldName> [ascending|descending]]
|
|
||||||
[fields <ContactFieldNameList>]
|
|
||||||
[formatjson]
|
|
||||||
gam print gal [todrive <ToDriveAttribute>*] <ContactSelection>
|
|
||||||
[basic|full] [orderby <ContactOrderByFieldName> [ascending|descending]]
|
|
||||||
[fields <ContactFieldNameList>]
|
|
||||||
[formatjson [quotechar <Character>]]
|
|
||||||
|
|
||||||
# Domain - People Contacts and Profiles
|
# Domain - People Contacts and Profiles
|
||||||
|
|
||||||
<PeopleSourceName> ::=
|
<PeopleSourceName> ::=
|
||||||
@@ -4135,7 +4206,8 @@ gam print devices [todrive <ToDriveAttribute>*]
|
|||||||
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
||||||
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
||||||
[all|company|personal|nocompanydevices|nopersonaldevices]
|
[all|company|personal|nocompanydevices|nopersonaldevices]
|
||||||
[nodeviceusers]
|
[nodeviceusers|oneuserperrow]
|
||||||
|
[clientstates]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -4447,19 +4519,18 @@ gam report usage customer [todrive <ToDriveAttribute>*]
|
|||||||
[convertmbtogb]
|
[convertmbtogb]
|
||||||
|
|
||||||
<ActivityApplicationName> ::=
|
<ActivityApplicationName> ::=
|
||||||
access|accesstransparency|
|
accesstransparency|access|
|
||||||
admin|
|
admin|
|
||||||
calendar|calendars|
|
calendar|calendars|
|
||||||
chat|
|
chat|
|
||||||
chrome|
|
chrome|
|
||||||
|
classroom|
|
||||||
contextawareaccess|
|
contextawareaccess|
|
||||||
currents|gplus|google+|
|
gplus|currents|google+|
|
||||||
datastudio|
|
datastudio|
|
||||||
devices|mobile|
|
|
||||||
domain|
|
|
||||||
drive|doc|docs|
|
drive|doc|docs|
|
||||||
gcp|
|
gcp|cloud|
|
||||||
gemini|geminiforworkspace|
|
geminiinworkspaceapps|gemini|geminiforworkspace|
|
||||||
groups|group|
|
groups|group|
|
||||||
groupsenterprise|enterprisegroups|
|
groupsenterprise|enterprisegroups|
|
||||||
jamboard|
|
jamboard|
|
||||||
@@ -4477,7 +4548,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
|||||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
||||||
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[filtertime.* <Time>] [filter|filters <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[event|events <EventNameList>] [ip <String>]
|
[event|events <EventNameList>] [ip <String>]
|
||||||
[groupidfilter <String>]
|
[groupidfilter <String>]
|
||||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||||
@@ -4524,7 +4595,7 @@ gam report users|user [todrive <ToDriveAttribute>*]
|
|||||||
[(date <Date>)|(range <Date> <Date>)|
|
[(date <Date>)|(range <Date> <Date>)|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
||||||
[filtertime.* <Time>] [filter|filters <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
||||||
[aggregatebydate|aggregatebyuser [Boolean]]
|
[aggregatebydate|aggregatebyuser [Boolean]]
|
||||||
[maxresults <Number>]
|
[maxresults <Number>]
|
||||||
@@ -4550,7 +4621,7 @@ gam update resoldcustomer <CustomerID> <ResoldCustomerAttribues>+
|
|||||||
gam info resoldcustomer <CustomerID> [formatjson]
|
gam info resoldcustomer <CustomerID> [formatjson]
|
||||||
|
|
||||||
gam create|add resoldsubscription <CustomerID> (sku <SKUID>)
|
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>]
|
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
||||||
gam update resoldsubscription <CustomerID> <SKUID>
|
gam update resoldsubscription <CustomerID> <SKUID>
|
||||||
activate|suspend|startpaidservice|
|
activate|suspend|startpaidservice|
|
||||||
@@ -4643,10 +4714,10 @@ gam delete building <BuildingID>
|
|||||||
gam info building <BuildingID>
|
gam info building <BuildingID>
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam show buildings
|
gam show buildings
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam print buildings [todrive <ToDriveAttribute>*]
|
gam print buildings [todrive <ToDriveAttribute>*]
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
gam create|add feature name <Name>
|
gam create|add feature name <Name>
|
||||||
@@ -4789,6 +4860,8 @@ gam <UserTypeEntity> sendemail from <EmailAddress>
|
|||||||
allowcontentmanagerstosharefolders|
|
allowcontentmanagerstosharefolders|
|
||||||
copyrequireswriterpermission|
|
copyrequireswriterpermission|
|
||||||
domainusersonly|
|
domainusersonly|
|
||||||
|
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||||
|
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||||
drivemembersonly|teammembersonly|
|
drivemembersonly|teammembersonly|
|
||||||
sharingfoldersrequiresorganizerpermission
|
sharingfoldersrequiresorganizerpermission
|
||||||
|
|
||||||
@@ -4805,7 +4878,7 @@ In these commands, the Google administrator named in oauth2.txt is used.
|
|||||||
gam show shareddrivethemes
|
gam show shareddrivethemes
|
||||||
gam create shareddrive <Name>
|
gam create shareddrive <Name>
|
||||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||||
[movetoorgunitdelay <Integer>]
|
[movetoorgunitdelay <Integer>]
|
||||||
@@ -4828,13 +4901,26 @@ gam print shareddrives [todrive <ToDriveAttribute>*]
|
|||||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||||
|
[showwebviewlink text|hyperlink]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam show shareddrives
|
gam show shareddrives
|
||||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||||
|
[showwebviewlink text|hyperlink]
|
||||||
[formatjson] [noorgunits [<Boolean>]]
|
[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>*]
|
gam print oushareddrives [todrive <ToDriveAttribute>*]
|
||||||
[ou|org|orgunit <OrgUnitPath>]
|
[ou|org|orgunit <OrgUnitPath>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
@@ -4846,7 +4932,7 @@ In these commands, you specify an administrator and then indicate that you want
|
|||||||
|
|
||||||
gam <UserTypeEntity> create shareddrive <Name> adminaccess
|
gam <UserTypeEntity> create shareddrive <Name> adminaccess
|
||||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||||
[movetoorgunitdelay <Integer>]
|
[movetoorgunitdelay <Integer>]
|
||||||
@@ -4880,7 +4966,7 @@ In these commands, you specify a user, administrator access is not used.
|
|||||||
|
|
||||||
gam <UserTypeEntity> create shareddrive <Name>
|
gam <UserTypeEntity> create shareddrive <Name>
|
||||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||||
[movetoorgunitdelay <Integer>]
|
[movetoorgunitdelay <Integer>]
|
||||||
@@ -4902,12 +4988,14 @@ gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
|||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
(role|roles <SharedDriveACLRoleList>)*
|
(role|roles <SharedDriveACLRoleList>)*
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
|
[showwebviewlink text|hyperlink]
|
||||||
[guiroles [<Boolean>]] [formatjson [quotechar <Character>]]
|
[guiroles [<Boolean>]] [formatjson [quotechar <Character>]]
|
||||||
gam <UserTypeEntity> show shareddrives
|
gam <UserTypeEntity> show shareddrives
|
||||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
(role|roles <SharedDriveACLRoleList>)*
|
(role|roles <SharedDriveACLRoleList>)*
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
|
[showwebviewlink text|hyperlink]
|
||||||
[guiroles [<Boolean>]] [formatjson]
|
[guiroles [<Boolean>]] [formatjson]
|
||||||
|
|
||||||
<PermissionMatch> ::=
|
<PermissionMatch> ::=
|
||||||
@@ -5035,18 +5123,18 @@ gam <UserTypeEntity> delete permissions <SharedDriveEntityAdmin> <DriveFilePermi
|
|||||||
|
|
||||||
In these commands, the Google administrator named in oauth2.txt is used.
|
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]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
gam sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
gam sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
|
|
||||||
gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
gam print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
@@ -5054,7 +5142,7 @@ gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
|||||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam show teamdriveacls
|
gam show shareddriveacls
|
||||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
@@ -5064,18 +5152,18 @@ gam show teamdriveacls
|
|||||||
|
|
||||||
In these commands, you specify an administrator and then indicate that you want domain administrator access with the adminaccess option.
|
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]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
gam <UserTypeEntity> sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
gam <UserTypeEntity> sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
|
|
||||||
gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
@@ -5084,7 +5172,7 @@ gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
|||||||
[shownopermissionsdrives false|true|only]
|
[shownopermissionsdrives false|true|only]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam <UserTypeEntity> show teamdriveacls
|
gam <UserTypeEntity> show shareddriveacls
|
||||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
@@ -5259,7 +5347,10 @@ gam show vaultmatters|matters [matterstate <MatterStateList>]
|
|||||||
|
|
||||||
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||||
matter <MatterItem> corpus mail|groups
|
matter <MatterItem> corpus mail|groups
|
||||||
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
[(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone]
|
||||||
|
[(shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(rooms (<ChatSpaceList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(sitesurl (<URLList>||(select <FileSelector>|<CSVFileSelector>)))]
|
||||||
[scope [all_data|held_data|unprocessed_data]]
|
[scope [all_data|held_data|unprocessed_data]]
|
||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||||
[excludedrafts <Boolean>]
|
[excludedrafts <Boolean>]
|
||||||
@@ -5269,12 +5360,15 @@ gam print vaultcounts [todrive <ToDriveAttributes>*]
|
|||||||
|
|
||||||
gam create vaultexport|export matter <MatterItem> [name <String>] corpus calendar|drive|gemini|groups|hangouts_chat|mail|voice
|
gam create vaultexport|export matter <MatterItem> [name <String>] corpus calendar|drive|gemini|groups|hangouts_chat|mail|voice
|
||||||
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
||||||
(shareddrives|teamdrives <SharedDriveIDList>) | (rooms <RoomList>) | (sitesurl <URLList>)
|
(shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(rooms (<ChatSpaceList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(sitesurl (<URLList>||(select <FileSelector>|<CSVFileSelector>)))
|
||||||
[scope all_data|held_data|unprocessed_data]
|
[scope all_data|held_data|unprocessed_data]
|
||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||||
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
||||||
[responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*] [calendarversiondate <Date>|<Time>]
|
[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]
|
[driveclientsideencryption any|encrypted|unencrypted]
|
||||||
[includerooms <Boolean>]
|
[includerooms <Boolean>]
|
||||||
[excludedrafts <Boolean>] [mailclientsideencryption any|encrypted|unencrypted]
|
[excludedrafts <Boolean>] [mailclientsideencryption any|encrypted|unencrypted]
|
||||||
@@ -5340,14 +5434,14 @@ gam create vaulthold|hold matter <MatterItem> [name <String>] corpus calendar|dr
|
|||||||
[query <QueryVaultCorpus>]
|
[query <QueryVaultCorpus>]
|
||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[includerooms <Boolean>] [covereddata calllogs|textmessages|voicemails]
|
[includerooms <Boolean>] [covereddata calllogs|textmessages|voicemails]
|
||||||
[includeshareddrives|includeteamdrives <Boolean>]
|
[includeshareddrives <Boolean>]
|
||||||
[showdetails|returnidonly]
|
[showdetails|returnidonly]
|
||||||
gam update vaulthold|hold <HoldItem> matter <MatterItem>
|
gam update vaulthold|hold <HoldItem> matter <MatterItem>
|
||||||
[([addaccounts|addgroups|addusers <EmailItemList>] [removeaccounts|removegroups|removeusers <EmailItemList>]) | (orgunit|org|ou <OrgUnit>)]
|
[([addaccounts|addgroups|addusers <EmailItemList>] [removeaccounts|removegroups|removeusers <EmailItemList>]) | (orgunit|org|ou <OrgUnit>)]
|
||||||
[query <QueryVaultCorpus>]
|
[query <QueryVaultCorpus>]
|
||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[includerooms <Boolean>] [covereddata calllogs|textmessages|voicemails]
|
[includerooms <Boolean>] [covereddata calllogs|textmessages|voicemails]
|
||||||
[includeshareddrives|includeteamdrives <Boolean>]
|
[includeshareddrives <Boolean>]
|
||||||
[showdetails]
|
[showdetails]
|
||||||
gam delete vaulthold|hold <HoldItem> matter <MatterItem>
|
gam delete vaulthold|hold <HoldItem> matter <MatterItem>
|
||||||
gam delete vaulthold|hold <MatterItem> <HoldItem>
|
gam delete vaulthold|hold <MatterItem> <HoldItem>
|
||||||
@@ -5604,6 +5698,7 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
|||||||
[logpassword <FileName>]
|
[logpassword <FileName>]
|
||||||
gam delete user <UserItem> [noactionifalias]
|
gam delete user <UserItem> [noactionifalias]
|
||||||
gam undelete user <UserItem> [ou|org|orgunit <OrgUnitPath>]
|
gam undelete user <UserItem> [ou|org|orgunit <OrgUnitPath>]
|
||||||
|
gam check suspended <UserItem>
|
||||||
gam suspend user <UserItem> [noactionifalias]
|
gam suspend user <UserItem> [noactionifalias]
|
||||||
gam unsuspend user <UserItem> [noactionifalias]
|
gam unsuspend user <UserItem> [noactionifalias]
|
||||||
gam info user [<UserItem>]
|
gam info user [<UserItem>]
|
||||||
@@ -6113,7 +6208,7 @@ gam <UserTypeEntity> show events <UserCalendarEntity> [<EventEntity>] <EventDisp
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
|
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
|
||||||
[fields <EventFieldNameList>] [showdayofweek]
|
[fields <EventFieldNameList>] [showdayofweek]
|
||||||
[countsonly]
|
[countsonly [eventrowfilter]]
|
||||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
|
|
||||||
gam <UserTypeEntity> update calattendees <UserCalendarEntity> <EventEntity> [anyorganizer]
|
gam <UserTypeEntity> update calattendees <UserCalendarEntity> <EventEntity> [anyorganizer]
|
||||||
@@ -6434,6 +6529,22 @@ gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
|||||||
filter <String>
|
filter <String>
|
||||||
[formatjson [quotechar <Character>]]
|
[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
|
# Users - Drive
|
||||||
|
|
||||||
<DriveFileOrderByFieldName> ::=
|
<DriveFileOrderByFieldName> ::=
|
||||||
@@ -6904,6 +7015,7 @@ gam <UserTypeEntity> collect orphans
|
|||||||
capabilities.canchangecopyrequireswriterpermission|
|
capabilities.canchangecopyrequireswriterpermission|
|
||||||
capabilities.canchangecopyrequireswriterpermissionrestriction|
|
capabilities.canchangecopyrequireswriterpermissionrestriction|
|
||||||
capabilities.canchangedomainusersonlyrestriction|
|
capabilities.canchangedomainusersonlyrestriction|
|
||||||
|
capabilities.canchangedownloadrestriction|
|
||||||
capabilities.canchangedrivebackground|
|
capabilities.canchangedrivebackground|
|
||||||
capabilities.canchangedrivemembersonlyrestriction|
|
capabilities.canchangedrivemembersonlyrestriction|
|
||||||
capabilities.canchangesecurityupdateenabled|
|
capabilities.canchangesecurityupdateenabled|
|
||||||
@@ -7202,7 +7314,8 @@ gam <UserTypeEntity> show filesharecounts
|
|||||||
owners|
|
owners|
|
||||||
parents|
|
parents|
|
||||||
size|
|
size|
|
||||||
trashed
|
trashed|
|
||||||
|
webviewlink
|
||||||
<FileTreeFieldNameList> ::= "<FileTreeFieldName>(,<FileTreeFieldName>)*"
|
<FileTreeFieldNameList> ::= "<FileTreeFieldName>(,<FileTreeFieldName>)*"
|
||||||
|
|
||||||
gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
||||||
@@ -7395,10 +7508,12 @@ gam <UserTypeEntity> print filters [labelidsonly] [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
gam <UserTypeEntity> create form
|
gam <UserTypeEntity> create form
|
||||||
title <String> [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
title <String> [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
||||||
|
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||||
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
||||||
[(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
[(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
||||||
gam <UserTypeEntity> update form <DriveFileEntity>
|
gam <UserTypeEntity> update form <DriveFileEntity>
|
||||||
[title <String>] [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
[title <String>] [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
||||||
|
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> print forms <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print forms <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
@@ -7408,10 +7523,10 @@ gam <UserTypeEntity> show forms <DriveFileEntity>
|
|||||||
|
|
||||||
gam <UserTypeEntity> print formresponses <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print formresponses <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[countsonly|(formatjson [quotechar <Character>])]
|
[countsonly|(formatjson [quotechar <Character>])]
|
||||||
gam <UserTypeEntity> show formresponses <DriveFileEntity>
|
gam <UserTypeEntity> show formresponses <DriveFileEntity>
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[countsonly|formatjson]
|
[countsonly|formatjson]
|
||||||
|
|
||||||
# Users - Gmail - Forwarding
|
# Users - Gmail - Forwarding
|
||||||
@@ -7590,48 +7705,61 @@ gam <UserTypeEntity> insert message
|
|||||||
|
|
||||||
gam <UserTypeEntity> archive messages <GroupItem>
|
gam <UserTypeEntity> archive messages <GroupItem>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> delete messages|threads
|
gam <UserTypeEntity> delete messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> modify messages|threads
|
gam <UserTypeEntity> modify messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
||||||
((addlabel <LabelName>)|(removelabel <LabelName>))+
|
((addlabel <LabelName>)|(removelabel <LabelName>))+
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> spam messages|threads
|
gam <UserTypeEntity> spam messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> trash messages|threads
|
gam <UserTypeEntity> trash messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> untrash messages|threads
|
gam <UserTypeEntity> untrash messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
|
|
||||||
gam <UserTypeEntity> export message|messages
|
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>]]
|
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||||
gam <UserTypeEntity> export thread|threads
|
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>]]
|
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||||
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
||||||
gam <UserTypeEntity> forward thread|thtreads recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward thread|thtreads recipient|to <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||||
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
||||||
|
|
||||||
gam <UserTypeEntity> show messages|threads
|
gam <UserTypeEntity> show messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||||
[countsonly|positivecountsonly] [useronly]
|
[countsonly|positivecountsonly] [useronly]
|
||||||
@@ -7644,6 +7772,7 @@ gam <UserTypeEntity> show messages|threads
|
|||||||
[uploadattachments [<DriveFileParentAttribute>]]]
|
[uploadattachments [<DriveFileParentAttribute>]]]
|
||||||
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||||
[countsonly|positivecountsonly] [useronly]
|
[countsonly|positivecountsonly] [useronly]
|
||||||
@@ -8231,6 +8360,59 @@ gam <UserTypeEntity> profile share|shared|unshare|unshared
|
|||||||
|
|
||||||
gam <UserTypeEntity> show profile
|
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
|
# Users - Tasks
|
||||||
|
|
||||||
<TaskAttribute> ::=
|
<TaskAttribute> ::=
|
||||||
@@ -8293,6 +8475,8 @@ gam <UserTypeEntity> print tasklists [todrive <ToDriveAttribute>*]
|
|||||||
allowcontentmanagerstosharefolders|
|
allowcontentmanagerstosharefolders|
|
||||||
copyrequireswriterpermission|
|
copyrequireswriterpermission|
|
||||||
domainusersonly|
|
domainusersonly|
|
||||||
|
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||||
|
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||||
drivemembersonly|teammembersonly|
|
drivemembersonly|teammembersonly|
|
||||||
sharingfoldersrequiresorganizerpermission
|
sharingfoldersrequiresorganizerpermission
|
||||||
|
|
||||||
@@ -8307,13 +8491,13 @@ sharingfoldersrequiresorganizerpermission true
|
|||||||
gam <UserTypeEntity> show shareddrivethemes
|
gam <UserTypeEntity> show shareddrivethemes
|
||||||
gam <UserTypeEntity> create shareddrive <Name>
|
gam <UserTypeEntity> create shareddrive <Name>
|
||||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>]
|
[hide|hidden <Boolean>]
|
||||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
||||||
gam <UserTypeEntity> update shareddrive <SharedDriveEntity> [name <Name>]
|
gam <UserTypeEntity> update shareddrive <SharedDriveEntity> [name <Name>]
|
||||||
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
[(theme|themeid <String>) | ([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>]
|
[hide|hidden <Boolean>]
|
||||||
gam <UserTypeEntity> delete shareddrive <SharedDriveEntity>
|
gam <UserTypeEntity> delete shareddrive <SharedDriveEntity>
|
||||||
[allowitemdeletion]
|
[allowitemdeletion]
|
||||||
@@ -8336,6 +8520,19 @@ gam <UserTypeEntity> show shareddrives
|
|||||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||||
[formatjson]
|
[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
|
# Users - Force Signout and Turn Off 2-Step Verification
|
||||||
|
|
||||||
gam <UserTypeEntity> signout
|
gam <UserTypeEntity> signout
|
||||||
|
|||||||
@@ -1,3 +1,521 @@
|
|||||||
|
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>`
|
||||||
|
to handle the following error:
|
||||||
|
```
|
||||||
|
gamlib.glgapi.serviceNotAvailable: Authentication backend unavailable.
|
||||||
|
```
|
||||||
|
|
||||||
|
7.07.08
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> print filelist ... countsonly` that issued an
|
||||||
|
incorrect warning message like the following when `redirect csv <FileName> multiprocess` was specified.
|
||||||
|
```
|
||||||
|
WARNING: csv_output_row_filter column "^name$" does not match any output columns
|
||||||
|
```
|
||||||
|
|
||||||
|
7.07.07
|
||||||
|
|
||||||
|
Fixed bug in `gam report <ActivityApplictionName> ... countsonly eventrowfilter` that issued an
|
||||||
|
incorrect warning message like the following when `redirect csv <FileName> multiprocess` was specified.
|
||||||
|
```
|
||||||
|
WARNING: csv_output_row_filter column "^doc_title$" does not match any output columns
|
||||||
|
```
|
||||||
|
|
||||||
|
7.07.06
|
||||||
|
|
||||||
|
Added option `eventrowfilter` to `gam calendars <CalendarEntity> print events ... countsonly`
|
||||||
|
and `gam <UserTypeEntity> print events <UserCalendarEntity> ... countsonly` that causes
|
||||||
|
GAM to apply `config csv_output_row_filter` to the event details rather than the event counts.
|
||||||
|
This will be useful when `<EventSelectProperty>` and `<EventMatchProperty>` do not have the
|
||||||
|
capabilty to select the events of interest; e.g., you want to filter based on the event `created` property.
|
||||||
|
|
||||||
|
Dropped the extraneous `id` column for `gam calendars <CalendarEntity> print events ... countsonly`
|
||||||
|
and `gam <UserTypeEntity> print events <UserCalendarEntity> ... countsonly`.
|
||||||
|
|
||||||
|
7.07.05
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> move drivefile` to recognize the API error: `ERROR: 400: shareOutWarning`.
|
||||||
|
|
||||||
|
7.07.04
|
||||||
|
|
||||||
|
Updated `gam create vaultexport ... rooms <ChatSpaceList>` to strip `spaces/` from the Chat Space IDs.
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> copy drivefile` to recognize the API error: `ERROR: 400: shareOutWarning`.
|
||||||
|
|
||||||
|
7.07.03
|
||||||
|
|
||||||
|
Updated `gam create vaultexport` to allow allow specifying a list of items in a search method
|
||||||
|
with `shareddrives|rooms|sitesurl select <FileSelector>|<CSVFileSelector>`.
|
||||||
|
|
||||||
|
7.07.02
|
||||||
|
|
||||||
|
Fixed bug in `redirect csv ... transpose` where a CSV file with multiple rows was not properly transposed.
|
||||||
|
|
||||||
|
7.07.01
|
||||||
|
|
||||||
|
Fixed bug in `gam print|show chromepolicies` that caused a trap. Made additional
|
||||||
|
updates to handle changes in the Chrome Policy API.
|
||||||
|
|
||||||
|
7.07.00
|
||||||
|
|
||||||
|
As of mid-October 2024, Google deprecated the API that retrieved the Global Address List.
|
||||||
|
|
||||||
|
The following commands have been eliminated.
|
||||||
|
```
|
||||||
|
gam info gal
|
||||||
|
gam print gal
|
||||||
|
gam show gal
|
||||||
|
```
|
||||||
|
|
||||||
|
These commands are a work-around for `gam print gal`.
|
||||||
|
```
|
||||||
|
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" redirect csv ./UserGAL.csv print users fields name,gal
|
||||||
|
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" batch_size 25 redirect csv ./GroupGAL.csv print groups fields name,gal
|
||||||
|
```
|
||||||
|
|
||||||
|
7.06.14
|
||||||
|
|
||||||
|
Updated `gam create|update adminrole` to allow specifying a collection of privileges
|
||||||
|
with `privileges select <FileSelector>|<CSVFileSelector>` which makes copying roles much simpler.
|
||||||
|
|
||||||
|
Added option `role <RoleItem>` to `gam print|show adminroles` to allow display of information
|
||||||
|
for a specific role.
|
||||||
|
|
||||||
|
7.06.13
|
||||||
|
|
||||||
|
Updated `gam print group-members ... recursive` and `gam print cigroup-members ... recursive`
|
||||||
|
to expand groups representing chat spaces.
|
||||||
|
|
||||||
|
7.06.12
|
||||||
|
|
||||||
|
Deleted commands to display Analytic UA properties; the API has been deprecated.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> print|show analyticuaproperties
|
||||||
|
```
|
||||||
|
|
||||||
|
7.06.11
|
||||||
|
|
||||||
|
Improved `gam checkconn`.
|
||||||
|
|
||||||
|
Updated `gam print group-members` and `gam print cigroup-members` to recognize members
|
||||||
|
that are groups representing chat spaces. For now, these groups are not expanded when
|
||||||
|
`recursive` is specified.
|
||||||
|
|
||||||
7.06.10
|
7.06.10
|
||||||
|
|
||||||
Added the following license SKU.
|
Added the following license SKU.
|
||||||
@@ -12382,7 +12900,7 @@ gam <UserTypeEntity> update teamdrive <TeamDriveEntity> [adminaccess|asadmin] [n
|
|||||||
Updated gam report users to support new orgUnitID argument in Reports API.
|
Updated gam report users to support new orgUnitID argument in Reports API.
|
||||||
|
|
||||||
gam report users|user [todrive <ToDriveAttribute>*] [date <Date>] [nodatechange | (fulldatarequired all|<ReportsAppList>)]
|
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>]
|
[maxactivities <Number>] [maxresults <Number>]
|
||||||
|
|
||||||
Select the users for whom information is desired.
|
Select the users for whom information is desired.
|
||||||
@@ -12973,15 +13491,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:
|
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
|
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.
|
Added filtertime<String> <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>.
|
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.
|
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>)]
|
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>]
|
[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>]
|
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>)]
|
[([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.
|
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<#filtertime#" filtertime -5y
|
||||||
@@ -13137,21 +13655,21 @@ Added units of years to <Date>, <DateTime> and <Time>; a year is 365 days. Added
|
|||||||
never|
|
never|
|
||||||
now|today
|
now|today
|
||||||
|
|
||||||
Added filtertime <Time> option to gam report to allow times, usually relative, to be substituted into the filter <String> option.
|
Added filtertime<String> <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>.
|
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>)]
|
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>]
|
[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>]
|
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>)]
|
[([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.
|
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.
|
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
|
4.60.14
|
||||||
|
|
||||||
|
|||||||
1
src/README.md
Symbolic link
1
src/README.md
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../README.md
|
||||||
@@ -1,33 +1,3 @@
|
|||||||
# Operating CA: DigiCert
|
|
||||||
# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
|
|
||||||
# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
|
|
||||||
# Label: "Baltimore CyberTrust Root"
|
|
||||||
# Serial: 33554617
|
|
||||||
# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
|
|
||||||
# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
|
|
||||||
# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
|
|
||||||
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
|
|
||||||
VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
|
|
||||||
DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
|
|
||||||
ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
|
|
||||||
VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
|
|
||||||
mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
|
|
||||||
IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
|
|
||||||
mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
|
|
||||||
XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
|
|
||||||
dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
|
|
||||||
jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
|
|
||||||
BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
|
|
||||||
DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
|
|
||||||
9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
|
|
||||||
jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
|
|
||||||
Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
|
|
||||||
ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
|
|
||||||
R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
# Operating CA: DigiCert
|
||||||
# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
||||||
# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ if __name__ == '__main__':
|
|||||||
# One time initialization
|
# One time initialization
|
||||||
if platform.system() != 'Linux':
|
if platform.system() != 'Linux':
|
||||||
multiprocessing.freeze_support()
|
multiprocessing.freeze_support()
|
||||||
multiprocessing.set_start_method('spawn')
|
multiprocessing.set_start_method('spawn', force=True)
|
||||||
initializeLogging()
|
initializeLogging()
|
||||||
#
|
#
|
||||||
CallGAMCommand(['gam', 'version'])
|
CallGAMCommand(['gam', 'version'])
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ from gam.__main__ import main
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if platform.system() != 'Linux':
|
if platform.system() != 'Linux':
|
||||||
multiprocessing.freeze_support()
|
multiprocessing.freeze_support()
|
||||||
multiprocessing.set_start_method('spawn')
|
multiprocessing.set_start_method('spawn', force=True)
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ hiddenimports = [
|
|||||||
'gam.gamlib.yubikey',
|
'gam.gamlib.yubikey',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
excludes = [
|
||||||
|
'pkg_resources',
|
||||||
|
]
|
||||||
|
|
||||||
runtime_hooks = []
|
runtime_hooks = []
|
||||||
a = Analysis(
|
a = Analysis(
|
||||||
['gam/__main__.py'],
|
['gam/__main__.py'],
|
||||||
@@ -48,7 +52,7 @@ a = Analysis(
|
|||||||
hookspath=[],
|
hookspath=[],
|
||||||
hooksconfig={},
|
hooksconfig={},
|
||||||
runtime_hooks=runtime_hooks,
|
runtime_hooks=runtime_hooks,
|
||||||
excludes=[],
|
excludes=excludes,
|
||||||
win_no_prefer_redirects=False,
|
win_no_prefer_redirects=False,
|
||||||
win_private_assemblies=False,
|
win_private_assemblies=False,
|
||||||
cipher=None,
|
cipher=None,
|
||||||
|
|||||||
4029
src/gam/__init__.py
4029
src/gam/__init__.py
File diff suppressed because it is too large
Load Diff
@@ -1,33 +1,3 @@
|
|||||||
# Operating CA: DigiCert
|
|
||||||
# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
|
|
||||||
# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
|
|
||||||
# Label: "Baltimore CyberTrust Root"
|
|
||||||
# Serial: 33554617
|
|
||||||
# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
|
|
||||||
# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
|
|
||||||
# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
|
|
||||||
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
|
|
||||||
VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
|
|
||||||
DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
|
|
||||||
ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
|
|
||||||
VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
|
|
||||||
mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
|
|
||||||
IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
|
|
||||||
mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
|
|
||||||
XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
|
|
||||||
dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
|
|
||||||
jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
|
|
||||||
BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
|
|
||||||
DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
|
|
||||||
9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
|
|
||||||
jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
|
|
||||||
Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
|
|
||||||
ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
|
|
||||||
R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
# Operating CA: DigiCert
|
||||||
# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
||||||
# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
||||||
@@ -273,257 +243,6 @@ r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1
|
|||||||
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
|
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
|
|
||||||
# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
|
|
||||||
# Label: "Entrust Root Certification Authority"
|
|
||||||
# Serial: 1164660820
|
|
||||||
# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4
|
|
||||||
# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9
|
|
||||||
# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
|
|
||||||
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
|
|
||||||
Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
|
|
||||||
KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
|
|
||||||
cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
|
|
||||||
NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
|
|
||||||
NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
|
|
||||||
ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
|
|
||||||
BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
|
|
||||||
KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
|
|
||||||
Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
|
|
||||||
4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
|
|
||||||
KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
|
|
||||||
rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
|
|
||||||
94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
|
|
||||||
sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
|
|
||||||
gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
|
|
||||||
kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
|
|
||||||
vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
|
||||||
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
|
|
||||||
O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
|
|
||||||
AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
|
|
||||||
9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
|
|
||||||
eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
|
|
||||||
0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only
|
|
||||||
# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only
|
|
||||||
# Label: "Entrust Root Certification Authority - EC1"
|
|
||||||
# Serial: 51543124481930649114116133369
|
|
||||||
# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc
|
|
||||||
# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47
|
|
||||||
# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
|
|
||||||
A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
|
|
||||||
d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
|
|
||||||
dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
|
|
||||||
RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
|
|
||||||
MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
|
|
||||||
VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
|
|
||||||
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
|
|
||||||
Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
|
|
||||||
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
|
|
||||||
A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
|
|
||||||
ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
|
|
||||||
Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
|
|
||||||
BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
|
|
||||||
R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
|
|
||||||
hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only
|
|
||||||
# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only
|
|
||||||
# Label: "Entrust Root Certification Authority - G2"
|
|
||||||
# Serial: 1246989352
|
|
||||||
# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2
|
|
||||||
# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4
|
|
||||||
# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
|
|
||||||
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
|
|
||||||
cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
|
|
||||||
IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
|
|
||||||
dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
|
|
||||||
NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
|
|
||||||
dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
|
|
||||||
dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
|
|
||||||
aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
|
|
||||||
YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
|
||||||
AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
|
|
||||||
RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
|
|
||||||
cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
|
|
||||||
wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
|
|
||||||
U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
|
|
||||||
jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
|
|
||||||
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
|
|
||||||
BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
|
|
||||||
jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
|
|
||||||
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
|
|
||||||
1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
|
|
||||||
nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
|
|
||||||
VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
|
||||||
# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
|
||||||
# Label: "Entrust.net Premium 2048 Secure Server CA"
|
|
||||||
# Serial: 946069240
|
|
||||||
# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90
|
|
||||||
# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31
|
|
||||||
# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
|
|
||||||
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
|
|
||||||
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
|
|
||||||
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
|
|
||||||
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
|
|
||||||
MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
|
|
||||||
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
|
|
||||||
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
|
|
||||||
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
|
|
||||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
|
|
||||||
K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
|
|
||||||
sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
|
|
||||||
MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
|
|
||||||
XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
|
|
||||||
HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
|
|
||||||
4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
|
|
||||||
HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
|
|
||||||
j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
|
|
||||||
U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
|
|
||||||
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
|
|
||||||
u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
|
|
||||||
bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
|
|
||||||
fF6adulZkMV8gzURZVE=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Commercial O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Commercial O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Commercial"
|
|
||||||
# Serial: 8608355977964138876
|
|
||||||
# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7
|
|
||||||
# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7
|
|
||||||
# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
|
|
||||||
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
|
|
||||||
dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
|
|
||||||
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
|
|
||||||
cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
|
||||||
AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
|
|
||||||
Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
|
|
||||||
ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
|
|
||||||
MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
|
|
||||||
yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
|
|
||||||
VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
|
|
||||||
nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
|
|
||||||
KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
|
|
||||||
XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
|
|
||||||
vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
|
|
||||||
Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
|
|
||||||
N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
|
|
||||||
nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Networking O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Networking O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Networking"
|
|
||||||
# Serial: 8957382827206547757
|
|
||||||
# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f
|
|
||||||
# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f
|
|
||||||
# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
|
|
||||||
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
|
|
||||||
dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
|
|
||||||
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
|
|
||||||
cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
|
||||||
AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
|
|
||||||
YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
|
|
||||||
kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
|
|
||||||
QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
|
|
||||||
6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
|
|
||||||
yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
|
|
||||||
QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
|
|
||||||
KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
|
|
||||||
tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
|
|
||||||
QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
|
|
||||||
Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
|
|
||||||
olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
|
|
||||||
x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Premium O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Premium O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Premium"
|
|
||||||
# Serial: 7893706540734352110
|
|
||||||
# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57
|
|
||||||
# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27
|
|
||||||
# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
|
|
||||||
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
|
|
||||||
dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
|
|
||||||
A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
|
|
||||||
cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
|
|
||||||
qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
|
|
||||||
JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
|
|
||||||
+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
|
|
||||||
s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
|
|
||||||
HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
|
|
||||||
70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
|
|
||||||
V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
|
|
||||||
qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
|
|
||||||
5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
|
|
||||||
C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
|
|
||||||
OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
|
|
||||||
FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
|
||||||
BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
|
|
||||||
KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
|
|
||||||
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
|
|
||||||
8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
|
|
||||||
MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
|
|
||||||
0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
|
|
||||||
u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
|
|
||||||
u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
|
|
||||||
YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
|
|
||||||
GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
|
|
||||||
RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
|
|
||||||
KeC2uAloGRwYQw==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Premium ECC"
|
|
||||||
# Serial: 8401224907861490260
|
|
||||||
# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d
|
|
||||||
# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb
|
|
||||||
# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
|
|
||||||
VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
|
|
||||||
cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
|
|
||||||
BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
|
|
||||||
VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
|
|
||||||
0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
|
|
||||||
ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
|
|
||||||
A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
|
|
||||||
A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
|
|
||||||
aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
|
|
||||||
flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: GlobalSign
|
# Operating CA: GlobalSign
|
||||||
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
||||||
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
||||||
@@ -818,16 +537,16 @@ smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
|||||||
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||||
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||||
# Label: "COMODO Certification Authority"
|
# Label: "COMODO Certification Authority"
|
||||||
# Serial: 104350513648249232941998508985834464573
|
# Serial: 43390818032842818540635488309124489234
|
||||||
# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75
|
# MD5 Fingerprint: 20:E7:4F:82:C2:7E:94:80:34:82:8A:13:A9:17:1D:97
|
||||||
# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b
|
# SHA1 Fingerprint EE:86:93:87:FF:FD:83:49:AB:5A:D1:43:22:58:87:89:A4:57:B0:12
|
||||||
# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66
|
# SHA256 Fingerprint: 1A:0D:20:44:5D:E5:BA:18:62:D1:9E:F8:80:85:8C:BC:E5:01:02:B3:6E:8F:0A:04:0C:3C:69:E7:45:22:FE:6E
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
|
MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
|
||||||
gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
|
gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
|
||||||
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
|
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
|
||||||
BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
|
BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
|
||||||
MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
|
MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
|
||||||
YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
|
YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
|
||||||
RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
|
RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
|
||||||
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
|
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
|
||||||
@@ -836,16 +555,14 @@ UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
|
|||||||
Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
|
Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
|
||||||
+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
|
+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
|
||||||
DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
|
DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
|
||||||
nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
|
nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
|
||||||
/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
|
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
||||||
PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
|
ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
|
||||||
QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
|
t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
|
||||||
SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
|
HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
|
||||||
IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
|
||||||
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
|
pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
|
||||||
zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
|
R1uUq27UlTMdphVx8fiUylQ5PsE=
|
||||||
BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
|
|
||||||
ZQ==
|
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: Sectigo
|
# Operating CA: Sectigo
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
# APIs
|
# APIs
|
||||||
ACCESSCONTEXTMANAGER = 'accesscontextmanager'
|
ACCESSCONTEXTMANAGER = 'accesscontextmanager'
|
||||||
ALERTCENTER = 'alertcenter'
|
ALERTCENTER = 'alertcenter'
|
||||||
ANALYTICS = 'analytics'
|
|
||||||
ANALYTICS_ADMIN = 'analyticsadmin'
|
ANALYTICS_ADMIN = 'analyticsadmin'
|
||||||
CALENDAR = 'calendar'
|
CALENDAR = 'calendar'
|
||||||
CBCM = 'cbcm'
|
CBCM = 'cbcm'
|
||||||
CHAT = 'chat'
|
CHAT = 'chat'
|
||||||
|
CHAT_CUSTOM_EMOJIS = 'chatcustomemojis'
|
||||||
CHAT_EVENTS = 'chatevents'
|
CHAT_EVENTS = 'chatevents'
|
||||||
CHAT_MEMBERSHIPS = 'chatmemberships'
|
CHAT_MEMBERSHIPS = 'chatmemberships'
|
||||||
CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
|
CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
|
||||||
@@ -94,6 +94,8 @@ SITEVERIFICATION = 'siteVerification'
|
|||||||
STORAGE = 'storage'
|
STORAGE = 'storage'
|
||||||
STORAGEREAD = 'storageread'
|
STORAGEREAD = 'storageread'
|
||||||
STORAGEWRITE = 'storagewrite'
|
STORAGEWRITE = 'storagewrite'
|
||||||
|
TAGMANAGER = 'tagmanager'
|
||||||
|
TAGMANAGER_USERS = 'tagmanagerusers'
|
||||||
TASKS = 'tasks'
|
TASKS = 'tasks'
|
||||||
VAULT = 'vault'
|
VAULT = 'vault'
|
||||||
YOUTUBE = 'youtube'
|
YOUTUBE = 'youtube'
|
||||||
@@ -119,6 +121,7 @@ JWT_APIS = {
|
|||||||
ACCESSCONTEXTMANAGER: [CLOUD_PLATFORM_SCOPE],
|
ACCESSCONTEXTMANAGER: [CLOUD_PLATFORM_SCOPE],
|
||||||
CHAT: ['https://www.googleapis.com/auth/chat.bot'],
|
CHAT: ['https://www.googleapis.com/auth/chat.bot'],
|
||||||
CLOUDRESOURCEMANAGER: [CLOUD_PLATFORM_SCOPE],
|
CLOUDRESOURCEMANAGER: [CLOUD_PLATFORM_SCOPE],
|
||||||
|
IAM: [IAM_SCOPE],
|
||||||
ORGPOLICY: [CLOUD_PLATFORM_SCOPE],
|
ORGPOLICY: [CLOUD_PLATFORM_SCOPE],
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
@@ -132,6 +135,12 @@ APIS_NEEDING_ACCESS_TOKEN = {
|
|||||||
CBCM: ['https://www.googleapis.com/auth/admin.directory.device.chromebrowsers']
|
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 = [
|
REFRESH_PERM_ERRORS = [
|
||||||
'invalid_grant: reauth related error (rapt_required)', # no way to reauth today
|
'invalid_grant: reauth related error (rapt_required)', # no way to reauth today
|
||||||
'invalid_grant: Token has been expired or revoked',
|
'invalid_grant: Token has been expired or revoked',
|
||||||
@@ -162,7 +171,6 @@ PROJECT_APIS = [
|
|||||||
'accesscontextmanager.googleapis.com',
|
'accesscontextmanager.googleapis.com',
|
||||||
'admin.googleapis.com',
|
'admin.googleapis.com',
|
||||||
'alertcenter.googleapis.com',
|
'alertcenter.googleapis.com',
|
||||||
'analytics.googleapis.com',
|
|
||||||
'analyticsadmin.googleapis.com',
|
'analyticsadmin.googleapis.com',
|
||||||
# 'audit.googleapis.com',
|
# 'audit.googleapis.com',
|
||||||
'calendar-json.googleapis.com',
|
'calendar-json.googleapis.com',
|
||||||
@@ -193,6 +201,7 @@ PROJECT_APIS = [
|
|||||||
'sheets.googleapis.com',
|
'sheets.googleapis.com',
|
||||||
'siteverification.googleapis.com',
|
'siteverification.googleapis.com',
|
||||||
'storage-api.googleapis.com',
|
'storage-api.googleapis.com',
|
||||||
|
'tagmanager.googleapis.com',
|
||||||
'tasks.googleapis.com',
|
'tasks.googleapis.com',
|
||||||
'vault.googleapis.com',
|
'vault.googleapis.com',
|
||||||
'youtube.googleapis.com',
|
'youtube.googleapis.com',
|
||||||
@@ -201,11 +210,11 @@ PROJECT_APIS = [
|
|||||||
_INFO = {
|
_INFO = {
|
||||||
ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
|
ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
|
||||||
ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
|
ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
|
||||||
ANALYTICS: {'name': 'Analytics API', 'version': 'v3', 'v2discovery': False},
|
|
||||||
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
||||||
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
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},
|
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
||||||
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': 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_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: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||||
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||||
@@ -220,15 +229,15 @@ _INFO = {
|
|||||||
CHROMEMANAGEMENT_TELEMETRY: {'name': 'Chrome Management API - Telemetry', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
|
CHROMEMANAGEMENT_TELEMETRY: {'name': 'Chrome Management API - Telemetry', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
|
||||||
CHROMEPOLICY: {'name': 'Chrome Policy API', 'version': 'v1', 'v2discovery': True},
|
CHROMEPOLICY: {'name': 'Chrome Policy API', 'version': 'v1', 'v2discovery': True},
|
||||||
CHROMEVERSIONHISTORY: {'name': 'Chrome Version History API', 'version': 'v1', 'v2discovery': True},
|
CHROMEVERSIONHISTORY: {'name': 'Chrome Version History API', 'version': 'v1', 'v2discovery': True},
|
||||||
CLOUDCHANNEL: {'name': 'Channel Channel API', 'version': 'v1', 'v2discovery': True},
|
CLOUDCHANNEL: {'name': 'Cloud Channel API', 'version': 'v1', 'v2discovery': True},
|
||||||
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity Devices API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity API - Devices', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDIDENTITY_GROUPS: {'name': 'Cloud Identity Groups API', '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 Groups API', 'version': 'v1beta1', '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 Inbound SSO API', 'version': 'v1', '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 OrgUnits API', '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 OrgUnits API', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity Policy API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity API - Policy', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDIDENTITY_USERINVITATIONS: {'name': 'Cloud Identity User Invitations API', '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},
|
CLOUDRESOURCEMANAGER: {'name': 'Cloud Resource Manager API v3', 'version': 'v3', 'v2discovery': True},
|
||||||
CONTACTS: {'name': 'Contacts API', 'version': 'v3', 'v2discovery': False},
|
CONTACTS: {'name': 'Contacts API', 'version': 'v3', 'v2discovery': False},
|
||||||
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||||
@@ -244,7 +253,7 @@ _INFO = {
|
|||||||
EMAIL_AUDIT: {'name': 'Email Audit API', 'version': 'v1', 'v2discovery': False},
|
EMAIL_AUDIT: {'name': 'Email Audit API', 'version': 'v1', 'v2discovery': False},
|
||||||
FORMS: {'name': 'Forms API', 'version': 'v1', 'v2discovery': True},
|
FORMS: {'name': 'Forms API', 'version': 'v1', 'v2discovery': True},
|
||||||
GMAIL: {'name': 'Gmail API', 'version': 'v1', 'v2discovery': True},
|
GMAIL: {'name': 'Gmail API', 'version': 'v1', 'v2discovery': True},
|
||||||
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': False},
|
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': True},
|
||||||
GROUPSSETTINGS: {'name': 'Groups Settings API', 'version': 'v1', 'v2discovery': True},
|
GROUPSSETTINGS: {'name': 'Groups Settings API', 'version': 'v1', 'v2discovery': True},
|
||||||
IAM: {'name': 'Identity and Access Management API', 'version': 'v1', 'v2discovery': True},
|
IAM: {'name': 'Identity and Access Management API', 'version': 'v1', 'v2discovery': True},
|
||||||
IAM_CREDENTIALS: {'name': 'Identity and Access Management Credentials API', 'version': 'v1', 'v2discovery': True},
|
IAM_CREDENTIALS: {'name': 'Identity and Access Management Credentials API', 'version': 'v1', 'v2discovery': True},
|
||||||
@@ -252,13 +261,13 @@ _INFO = {
|
|||||||
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
||||||
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||||
MEET: {'name': 'Meet API', 'version': 'v2', 'v2discovery': 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},
|
OAUTH2: {'name': 'OAuth2 API', 'version': 'v2', 'v2discovery': False},
|
||||||
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
||||||
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
||||||
PEOPLE_DIRECTORY: {'name': 'People Directory API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': PEOPLE},
|
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},
|
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},
|
PUBSUB: {'name': 'Pub / Sub API', 'version': 'v1', 'v2discovery': True},
|
||||||
REPORTS: {'name': 'Reports API', 'version': 'reports_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
REPORTS: {'name': 'Reports API', 'version': 'reports_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||||
RESELLER: {'name': 'Reseller API', 'version': 'v1', 'v2discovery': True},
|
RESELLER: {'name': 'Reseller API', 'version': 'v1', 'v2discovery': True},
|
||||||
@@ -271,6 +280,8 @@ _INFO = {
|
|||||||
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
||||||
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
||||||
STORAGEWRITE: {'name': 'Cloud Storage API - Write', '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},
|
TASKS: {'name': 'Tasks API', 'version': 'v1', 'v2discovery': True},
|
||||||
VAULT: {'name': 'Vault API', 'version': 'v1', 'v2discovery': True},
|
VAULT: {'name': 'Vault API', 'version': 'v1', 'v2discovery': True},
|
||||||
YOUTUBE: {'name': 'Youtube API', 'version': 'v3', 'v2discovery': True},
|
YOUTUBE: {'name': 'Youtube API', 'version': 'v3', 'v2discovery': True},
|
||||||
@@ -356,29 +367,29 @@ _CLIENT_SCOPES = [
|
|||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
||||||
{'name': 'Cloud Identity Groups API',
|
{'name': 'Cloud Identity API - Groups',
|
||||||
'api': CLOUDIDENTITY_GROUPS,
|
'api': CLOUDIDENTITY_GROUPS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
'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,
|
'api': CLOUDIDENTITY_GROUPS_BETA,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
'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,
|
'api': CLOUDIDENTITY_INBOUND_SSO,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.inboundsso'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.inboundsso'},
|
||||||
{'name': 'Cloud Identity OrgUnits API',
|
{'name': 'Cloud Identity API - OrgUnits Beta',
|
||||||
'api': CLOUDIDENTITY_ORGUNITS_BETA,
|
'api': CLOUDIDENTITY_ORGUNITS_BETA,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.orgunits'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.orgunits'},
|
||||||
{'name': 'Cloud Identity - Policy',
|
{'name': 'Cloud Identity API - Policy',
|
||||||
'api': CLOUDIDENTITY_POLICY,
|
'api': CLOUDIDENTITY_POLICY,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'roByDefault': True,
|
'roByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'
|
||||||
},
|
},
|
||||||
{'name': 'Cloud Identity User Invitations API',
|
{'name': 'Cloud Identity API - User Invitations',
|
||||||
'api': CLOUDIDENTITY_USERINVITATIONS,
|
'api': CLOUDIDENTITY_USERINVITATIONS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.userinvitations'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.userinvitations'},
|
||||||
@@ -532,10 +543,6 @@ _SVCACCT_SCOPES = [
|
|||||||
'api': ALERTCENTER,
|
'api': ALERTCENTER,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
||||||
{'name': 'Analytics API - read only',
|
|
||||||
'api': ANALYTICS,
|
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
|
|
||||||
{'name': 'Analytics Admin API - read only',
|
{'name': 'Analytics Admin API - read only',
|
||||||
'api': ANALYTICS_ADMIN,
|
'api': ANALYTICS_ADMIN,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
@@ -544,6 +551,10 @@ _SVCACCT_SCOPES = [
|
|||||||
'api': CALENDAR,
|
'api': CALENDAR,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/calendar'},
|
'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',
|
{'name': 'Chat API - Memberships',
|
||||||
'api': CHAT_MEMBERSHIPS,
|
'api': CHAT_MEMBERSHIPS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -603,7 +614,7 @@ _SVCACCT_SCOPES = [
|
|||||||
{'name': 'Cloud Identity Devices API',
|
{'name': 'Cloud Identity Devices API',
|
||||||
'api': CLOUDIDENTITY_DEVICES,
|
'api': CLOUDIDENTITY_DEVICES,
|
||||||
'subscopes': READONLY,
|
'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',
|
# {'name': 'Cloud Identity User Invitations API',
|
||||||
# 'api': CLOUDIDENTITY_USERINVITATIONS,
|
# 'api': CLOUDIDENTITY_USERINVITATIONS,
|
||||||
# 'subscopes': READONLY,
|
# 'subscopes': READONLY,
|
||||||
@@ -644,7 +655,7 @@ _SVCACCT_SCOPES = [
|
|||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.modify'},
|
'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,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
||||||
@@ -652,10 +663,11 @@ _SVCACCT_SCOPES = [
|
|||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
|
'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
|
||||||
{'name': 'Identity and Access Management API',
|
# {'name': 'Identity and Access Management API',
|
||||||
'api': IAM,
|
# 'api': IAM,
|
||||||
'subscopes': [],
|
# 'offByDefault': True,
|
||||||
'scope': CLOUD_PLATFORM_SCOPE},
|
# 'subscopes': [],
|
||||||
|
# 'scope': CLOUD_PLATFORM_SCOPE},
|
||||||
{'name': 'Keep API',
|
{'name': 'Keep API',
|
||||||
'api': KEEP,
|
'api': KEEP,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -689,6 +701,16 @@ _SVCACCT_SCOPES = [
|
|||||||
'api': SHEETS,
|
'api': SHEETS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
||||||
|
{'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',
|
{'name': 'Tasks API',
|
||||||
'api': TASKS,
|
'api': TASKS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -728,56 +750,6 @@ _USER_SVCACCT_ONLY_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
'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):
|
def getAPIName(api):
|
||||||
return _INFO[api]['name']
|
return _INFO[api]['name']
|
||||||
|
|
||||||
@@ -826,3 +798,27 @@ def getSvcAcctScopesList(userServiceAccountAccessOnly, svcAcctSpecialScopes):
|
|||||||
|
|
||||||
def hasLocalJSON(api):
|
def hasLocalJSON(api):
|
||||||
return _INFO[api].get('localjson', False)
|
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 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -155,14 +155,14 @@ DRIVE_DIR = 'drive_dir'
|
|||||||
DRIVE_MAX_RESULTS = 'drive_max_results'
|
DRIVE_MAX_RESULTS = 'drive_max_results'
|
||||||
# Use Drive V3 beta
|
# Use Drive V3 beta
|
||||||
DRIVE_V3_BETA = '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
|
# When processing email messages in batches, how many should be processed in each batch
|
||||||
EMAIL_BATCH_SIZE = 'email_batch_size'
|
EMAIL_BATCH_SIZE = 'email_batch_size'
|
||||||
# Enable Delegated Admin Service Account
|
# Enable Delegated Admin Service Account
|
||||||
ENABLE_DASA = 'enable_dasa'
|
ENABLE_DASA = 'enable_dasa'
|
||||||
# Enable Cloud Session Reauthentication by borrowing a RAPT token from gcloud command
|
# Enable Cloud Session Reauthentication by borrowing a RAPT token from gcloud command
|
||||||
ENABLE_GCLOUD_REAUTH = 'enable_gcloud_reauth'
|
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
|
# When retrieving lists of calendar events from API, how many should be retrieved in each chunk
|
||||||
EVENT_MAX_RESULTS = 'event_max_results'
|
EVENT_MAX_RESULTS = 'event_max_results'
|
||||||
# Path to extra_args.txt
|
# Path to extra_args.txt
|
||||||
@@ -260,12 +260,12 @@ SMTP_HOST = 'smtp_host'
|
|||||||
SMTP_USERNAME = 'smtp_username'
|
SMTP_USERNAME = 'smtp_username'
|
||||||
# SMTP password
|
# SMTP password
|
||||||
SMTP_PASSWORD = 'smtp_password'
|
SMTP_PASSWORD = 'smtp_password'
|
||||||
|
# Time Zone
|
||||||
|
TIMEZONE = 'timezone'
|
||||||
## Minimum TLS Version required for HTTPS connections
|
## Minimum TLS Version required for HTTPS connections
|
||||||
TLS_MIN_VERSION = 'tls_min_version'
|
TLS_MIN_VERSION = 'tls_min_version'
|
||||||
## Maximum TLS Version used for HTTPS connections
|
## Maximum TLS Version used for HTTPS connections
|
||||||
TLS_MAX_VERSION = 'tls_max_version'
|
TLS_MAX_VERSION = 'tls_max_version'
|
||||||
# Time Zone
|
|
||||||
TIMEZONE = 'timezone'
|
|
||||||
# Clear basic filter when updating an existing sheet
|
# Clear basic filter when updating an existing sheet
|
||||||
TODRIVE_CLEARFILTER = 'todrive_clearfilter'
|
TODRIVE_CLEARFILTER = 'todrive_clearfilter'
|
||||||
# Use client access for todrive
|
# Use client access for todrive
|
||||||
@@ -377,9 +377,9 @@ Defaults = {
|
|||||||
DEVICE_MAX_RESULTS: '200',
|
DEVICE_MAX_RESULTS: '200',
|
||||||
DOMAIN: '',
|
DOMAIN: '',
|
||||||
DRIVE_DIR: '',
|
DRIVE_DIR: '',
|
||||||
|
ENFORCE_EXPANSIVE_ACCESS: TRUE,
|
||||||
DRIVE_MAX_RESULTS: '1000',
|
DRIVE_MAX_RESULTS: '1000',
|
||||||
DRIVE_V3_BETA: FALSE,
|
DRIVE_V3_BETA: FALSE,
|
||||||
DRIVE_V3_NATIVE_NAMES: TRUE,
|
|
||||||
EMAIL_BATCH_SIZE: '50',
|
EMAIL_BATCH_SIZE: '50',
|
||||||
ENABLE_DASA: FALSE,
|
ENABLE_DASA: FALSE,
|
||||||
ENABLE_GCLOUD_REAUTH: FALSE,
|
ENABLE_GCLOUD_REAUTH: FALSE,
|
||||||
@@ -431,9 +431,9 @@ Defaults = {
|
|||||||
SMTP_HOST: '',
|
SMTP_HOST: '',
|
||||||
SMTP_USERNAME: '',
|
SMTP_USERNAME: '',
|
||||||
SMTP_PASSWORD: '',
|
SMTP_PASSWORD: '',
|
||||||
|
TIMEZONE: 'utc',
|
||||||
TLS_MIN_VERSION: 'TLSv1_3',
|
TLS_MIN_VERSION: 'TLSv1_3',
|
||||||
TLS_MAX_VERSION: '',
|
TLS_MAX_VERSION: '',
|
||||||
TIMEZONE: 'utc',
|
|
||||||
TODRIVE_CLEARFILTER: FALSE,
|
TODRIVE_CLEARFILTER: FALSE,
|
||||||
TODRIVE_CLIENTACCESS: FALSE,
|
TODRIVE_CLIENTACCESS: FALSE,
|
||||||
TODRIVE_CONVERSION: TRUE,
|
TODRIVE_CONVERSION: TRUE,
|
||||||
@@ -545,9 +545,9 @@ VAR_INFO = {
|
|||||||
DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
||||||
DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
|
DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
|
||||||
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
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_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
||||||
DRIVE_V3_BETA: {VAR_TYPE: TYPE_BOOLEAN},
|
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)},
|
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_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
||||||
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
@@ -599,9 +599,9 @@ VAR_INFO = {
|
|||||||
SMTP_HOST: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
SMTP_HOST: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
||||||
SMTP_USERNAME: {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)},
|
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_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},
|
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_CLEARFILTER: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
TODRIVE_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
TODRIVE_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
TODRIVE_CONVERSION: {VAR_TYPE: TYPE_BOOLEAN},
|
TODRIVE_CONVERSION: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -423,8 +423,6 @@ class GamCLArgs():
|
|||||||
ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
|
ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
|
||||||
ARG_ANALYTICPROPERTY = 'analyticproperty'
|
ARG_ANALYTICPROPERTY = 'analyticproperty'
|
||||||
ARG_ANALYTICPROPERTIES = 'analyticproperties'
|
ARG_ANALYTICPROPERTIES = 'analyticproperties'
|
||||||
ARG_ANALYTICUAPROPERTY = 'analyticuaproperty'
|
|
||||||
ARG_ANALYTICUAPROPERTIES = 'analyticuaproperties'
|
|
||||||
ARG_API = 'api'
|
ARG_API = 'api'
|
||||||
ARG_APIS = 'apis'
|
ARG_APIS = 'apis'
|
||||||
ARG_APIPROJECT = 'apiproject'
|
ARG_APIPROJECT = 'apiproject'
|
||||||
@@ -463,6 +461,8 @@ class GamCLArgs():
|
|||||||
ARG_CHANNELSKU = 'channelsku'
|
ARG_CHANNELSKU = 'channelsku'
|
||||||
ARG_CHANNELSKUS = 'channelskus'
|
ARG_CHANNELSKUS = 'channelskus'
|
||||||
ARG_CHAT = 'chat'
|
ARG_CHAT = 'chat'
|
||||||
|
ARG_CHATEMOJI = 'chatemoji'
|
||||||
|
ARG_CHATEMOJIS = 'chatemojis'
|
||||||
ARG_CHATEVENT = 'chatevent'
|
ARG_CHATEVENT = 'chatevent'
|
||||||
ARG_CHATEVENTS = 'chatevents'
|
ARG_CHATEVENTS = 'chatevents'
|
||||||
ARG_CHATMEMBER = 'chatmember'
|
ARG_CHATMEMBER = 'chatmember'
|
||||||
@@ -485,6 +485,8 @@ class GamCLArgs():
|
|||||||
ARG_CHROMEPOLICIES = 'chromepolicies'
|
ARG_CHROMEPOLICIES = 'chromepolicies'
|
||||||
ARG_CHROMEPROFILE = 'chromeprofile'
|
ARG_CHROMEPROFILE = 'chromeprofile'
|
||||||
ARG_CHROMEPROFILES = 'chromeprofiles'
|
ARG_CHROMEPROFILES = 'chromeprofiles'
|
||||||
|
ARG_CHROMEPROFILECOMMAND = 'chromeprofilecommand'
|
||||||
|
ARG_CHROMEPROFILECOMMANDS = 'chromeprofilecommands'
|
||||||
ARG_CHROMESCHEMA = 'chromeschema'
|
ARG_CHROMESCHEMA = 'chromeschema'
|
||||||
ARG_CHROMESCHEMAS = 'chromeschemas'
|
ARG_CHROMESCHEMAS = 'chromeschemas'
|
||||||
ARG_CHROMESNVALIDITY = 'chromesnvalidity'
|
ARG_CHROMESNVALIDITY = 'chromesnvalidity'
|
||||||
@@ -618,7 +620,6 @@ class GamCLArgs():
|
|||||||
ARG_FORWARDS = 'forwards'
|
ARG_FORWARDS = 'forwards'
|
||||||
ARG_FORWARDINGADDRESS = 'forwardingaddress'
|
ARG_FORWARDINGADDRESS = 'forwardingaddress'
|
||||||
ARG_FORWARDINGADDRESSES = 'forwardingaddresses'
|
ARG_FORWARDINGADDRESSES = 'forwardingaddresses'
|
||||||
ARG_GAL = 'gal'
|
|
||||||
ARG_GCPFOLDER = 'gcpfolder'
|
ARG_GCPFOLDER = 'gcpfolder'
|
||||||
ARG_GCPSERVICEACCOUNT = 'gcpserviceaccount'
|
ARG_GCPSERVICEACCOUNT = 'gcpserviceaccount'
|
||||||
ARG_GMAIL = 'gmail'
|
ARG_GMAIL = 'gmail'
|
||||||
@@ -758,6 +759,7 @@ class GamCLArgs():
|
|||||||
ARG_SHAREDDRIVES = 'shareddrives'
|
ARG_SHAREDDRIVES = 'shareddrives'
|
||||||
ARG_SHAREDDRIVEACLS = 'shareddriveacls'
|
ARG_SHAREDDRIVEACLS = 'shareddriveacls'
|
||||||
ARG_SHAREDDRIVEINFO = 'shareddriveinfo'
|
ARG_SHAREDDRIVEINFO = 'shareddriveinfo'
|
||||||
|
ARG_SHAREDDRIVEORGANIZERS = 'shareddriveorganizers'
|
||||||
ARG_SHAREDDRIVETHEMES = 'shareddrivethemes'
|
ARG_SHAREDDRIVETHEMES = 'shareddrivethemes'
|
||||||
ARG_SHEET = 'sheet'
|
ARG_SHEET = 'sheet'
|
||||||
ARG_SHEETS = 'sheets'
|
ARG_SHEETS = 'sheets'
|
||||||
@@ -777,8 +779,19 @@ class GamCLArgs():
|
|||||||
ARG_STORAGEBUCKETS = 'storagebuckets'
|
ARG_STORAGEBUCKETS = 'storagebuckets'
|
||||||
ARG_STORAGEFILE = 'storagefile'
|
ARG_STORAGEFILE = 'storagefile'
|
||||||
ARG_STORAGEFILES = 'storagefiles'
|
ARG_STORAGEFILES = 'storagefiles'
|
||||||
|
ARG_SUSPENDED = 'suspended'
|
||||||
ARG_SVCACCT = 'svcacct'
|
ARG_SVCACCT = 'svcacct'
|
||||||
ARG_SVCACCTS = 'svcaccts'
|
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_TASK = 'task'
|
||||||
ARG_TASKS = 'tasks'
|
ARG_TASKS = 'tasks'
|
||||||
ARG_TASKLIST = 'tasklist'
|
ARG_TASKLIST = 'tasklist'
|
||||||
@@ -787,6 +800,7 @@ class GamCLArgs():
|
|||||||
ARG_TEAMDRIVES = 'teamdrives'
|
ARG_TEAMDRIVES = 'teamdrives'
|
||||||
ARG_TEAMDRIVEACLS = 'teamdriveacls'
|
ARG_TEAMDRIVEACLS = 'teamdriveacls'
|
||||||
ARG_TEAMDRIVEINFO = 'teamdriveinfo'
|
ARG_TEAMDRIVEINFO = 'teamdriveinfo'
|
||||||
|
ARG_TEAMDRIVEORGANIZERS = 'teamdriveorganizers'
|
||||||
ARG_TEAMDRIVETHEMES = 'teamdrivethemes'
|
ARG_TEAMDRIVETHEMES = 'teamdrivethemes'
|
||||||
ARG_THREAD = 'thread'
|
ARG_THREAD = 'thread'
|
||||||
ARG_THREADS = 'threads'
|
ARG_THREADS = 'threads'
|
||||||
@@ -844,13 +858,19 @@ class GamCLArgs():
|
|||||||
OB_CHARACTER = 'Character'
|
OB_CHARACTER = 'Character'
|
||||||
OB_CHAR_SET = 'CharacterSet'
|
OB_CHAR_SET = 'CharacterSet'
|
||||||
OG_CHAT_ATTACHMENT = 'ChatAttachment'
|
OG_CHAT_ATTACHMENT = 'ChatAttachment'
|
||||||
|
OB_CHAT_EMOJI = 'ChatEmoji'
|
||||||
|
OB_CHAT_EMOJI_NAME = 'ChatEmojiName'
|
||||||
OB_CHAT_EVENT = 'ChatEvent'
|
OB_CHAT_EVENT = 'ChatEvent'
|
||||||
OB_CHAT_MEMBER = 'ChatMember'
|
OB_CHAT_MEMBER = 'ChatMember'
|
||||||
OB_CHAT_MESSAGE = 'ChatMessage'
|
OB_CHAT_MESSAGE = 'ChatMessage'
|
||||||
OB_CHAT_MESSAGE_ID = 'ChatMessageID'
|
OB_CHAT_MESSAGE_ID = 'ChatMessageID'
|
||||||
OB_CHAT_SPACE = 'ChatSpace'
|
OB_CHAT_SPACE = 'ChatSpace'
|
||||||
|
OB_CHAT_SPACE_LIST = 'ChatSpaceList'
|
||||||
OB_CHAT_THREAD = 'ChatThread'
|
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_CHROME_VERSION = 'ChromeVersion'
|
||||||
OB_CIDR_NETMASK = 'CIDRnetmask'
|
OB_CIDR_NETMASK = 'CIDRnetmask'
|
||||||
OB_CIGROUP_ALIAS_LIST = "CIGroupAliasList"
|
OB_CIGROUP_ALIAS_LIST = "CIGroupAliasList"
|
||||||
@@ -871,8 +891,11 @@ class GamCLArgs():
|
|||||||
OB_CONTACT_GROUP_ITEM = 'ContactGroupItem'
|
OB_CONTACT_GROUP_ITEM = 'ContactGroupItem'
|
||||||
OB_COURSE_ALIAS = 'CourseAlias'
|
OB_COURSE_ALIAS = 'CourseAlias'
|
||||||
OB_COURSE_ALIAS_ENTITY = 'CourseAliasEntity'
|
OB_COURSE_ALIAS_ENTITY = 'CourseAliasEntity'
|
||||||
|
OB_COURSE_ANNOUNCEMENT_ID = "CourseAnnouncementID"
|
||||||
OB_COURSE_ANNOUNCEMENT_ID_ENTITY = "CourseAnnouncementIDEntity"
|
OB_COURSE_ANNOUNCEMENT_ID_ENTITY = "CourseAnnouncementIDEntity"
|
||||||
OB_COURSE_ANNOUNCEMENT_STATE_LIST = "CourseAnnouncementStateList"
|
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_ENTITY = 'CourseEntity'
|
||||||
OB_COURSE_ID = 'CourseID'
|
OB_COURSE_ID = 'CourseID'
|
||||||
OB_COURSE_MATERIAL_ID_ENTITY = 'CourseMaterialIDEntity'
|
OB_COURSE_MATERIAL_ID_ENTITY = 'CourseMaterialIDEntity'
|
||||||
@@ -930,6 +953,7 @@ class GamCLArgs():
|
|||||||
OB_FILE_NAME = 'FileName'
|
OB_FILE_NAME = 'FileName'
|
||||||
OB_FILE_NAME_FIELD_NAME = OB_FILE_NAME+'(:'+OB_FIELD_NAME+')+'
|
OB_FILE_NAME_FIELD_NAME = OB_FILE_NAME+'(:'+OB_FIELD_NAME+')+'
|
||||||
OB_FILE_NAME_OR_URL = 'FileName|URL'
|
OB_FILE_NAME_OR_URL = 'FileName|URL'
|
||||||
|
OB_FILE_NAME_PATTERN = 'FileNamePattern'
|
||||||
OB_FILE_PATH = 'FilePath'
|
OB_FILE_PATH = 'FilePath'
|
||||||
OB_FILTER_ID_ENTITY = 'FilterIDEntity'
|
OB_FILTER_ID_ENTITY = 'FilterIDEntity'
|
||||||
OB_FORMAT_LIST = 'FormatList'
|
OB_FORMAT_LIST = 'FormatList'
|
||||||
@@ -966,6 +990,7 @@ class GamCLArgs():
|
|||||||
OB_MOBILE_ENTITY = 'MobileEntity'
|
OB_MOBILE_ENTITY = 'MobileEntity'
|
||||||
OB_NETWORK_ID = 'networkID'
|
OB_NETWORK_ID = 'networkID'
|
||||||
OB_NAME = 'Name'
|
OB_NAME = 'Name'
|
||||||
|
OB_ORGANIZER_TYPE_LIST = 'OrganizerTypeList'
|
||||||
OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
|
OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
|
||||||
OB_ORGUNIT_ITEM = 'OrgUnitItem'
|
OB_ORGUNIT_ITEM = 'OrgUnitItem'
|
||||||
OB_ORGUNIT_PATH = 'OrgUnitPath'
|
OB_ORGUNIT_PATH = 'OrgUnitPath'
|
||||||
@@ -974,7 +999,6 @@ class GamCLArgs():
|
|||||||
OB_PERMISSION_ID_LIST = 'PermissionIDList'
|
OB_PERMISSION_ID_LIST = 'PermissionIDList'
|
||||||
OB_PERMISSION_ROLE_LIST = 'PermissionRoleList'
|
OB_PERMISSION_ROLE_LIST = 'PermissionRoleList'
|
||||||
OB_PERMISSION_TYPE_LIST = 'PermissionTypeList'
|
OB_PERMISSION_TYPE_LIST = 'PermissionTypeList'
|
||||||
OB_PHOTO_FILENAME_PATTERN = 'FilenameNamePattern'
|
|
||||||
OB_PRINTER_ID = 'PrinterID'
|
OB_PRINTER_ID = 'PrinterID'
|
||||||
OB_PRIVILEGE_LIST = 'PrivilegeList'
|
OB_PRIVILEGE_LIST = 'PrivilegeList'
|
||||||
OB_PRODUCT_ID = 'ProductID'
|
OB_PRODUCT_ID = 'ProductID'
|
||||||
@@ -996,7 +1020,6 @@ class GamCLArgs():
|
|||||||
OB_ROLE_ASSIGNMENT_ID = 'RoleAssignmentID'
|
OB_ROLE_ASSIGNMENT_ID = 'RoleAssignmentID'
|
||||||
OB_ROLE_ITEM = 'RoleItem'
|
OB_ROLE_ITEM = 'RoleItem'
|
||||||
OB_ROLE_LIST = 'RoleList'
|
OB_ROLE_LIST = 'RoleList'
|
||||||
OB_ROOM_LIST = 'RoomList'
|
|
||||||
OB_SCHEMA_ENTITY = 'SchemaEntity'
|
OB_SCHEMA_ENTITY = 'SchemaEntity'
|
||||||
OB_SCHEMA_NAME = 'SchemaName'
|
OB_SCHEMA_NAME = 'SchemaName'
|
||||||
OB_SCHEMA_NAME_FIELD_NAME = 'SchemaName.FieldName'
|
OB_SCHEMA_NAME_FIELD_NAME = 'SchemaName.FieldName'
|
||||||
@@ -1026,6 +1049,7 @@ class GamCLArgs():
|
|||||||
OB_STRING_LIST = 'StringList'
|
OB_STRING_LIST = 'StringList'
|
||||||
OB_STUDENT_ITEM = 'StudentItem'
|
OB_STUDENT_ITEM = 'StudentItem'
|
||||||
OB_TAG = 'Tag'
|
OB_TAG = 'Tag'
|
||||||
|
OB_TAGMANAGER_PATH_LIST = 'TagManagerPathList'
|
||||||
OB_TASK_ID = 'TaskID'
|
OB_TASK_ID = 'TaskID'
|
||||||
OB_TASKLIST_ID = 'TaskListID'
|
OB_TASKLIST_ID = 'TaskListID'
|
||||||
OB_TASKLIST_ID_ENTITY = 'TaskListIDEntity'
|
OB_TASKLIST_ID_ENTITY = 'TaskListIDEntity'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -61,7 +61,6 @@ class GamEntity():
|
|||||||
ANALYTIC_ACCOUNT_SUMMARY = 'anas'
|
ANALYTIC_ACCOUNT_SUMMARY = 'anas'
|
||||||
ANALYTIC_DATASTREAM = 'anad'
|
ANALYTIC_DATASTREAM = 'anad'
|
||||||
ANALYTIC_PROPERTY = 'anap'
|
ANALYTIC_PROPERTY = 'anap'
|
||||||
ANALYTIC_UA_PROPERTY = 'anau'
|
|
||||||
API = 'api '
|
API = 'api '
|
||||||
APP_ACCESS_SETTINGS = 'apps'
|
APP_ACCESS_SETTINGS = 'apps'
|
||||||
APP_ID = 'appi'
|
APP_ID = 'appi'
|
||||||
@@ -87,6 +86,7 @@ class GamEntity():
|
|||||||
CHANNEL_SKU = 'chsk'
|
CHANNEL_SKU = 'chsk'
|
||||||
CHAT_BOT = 'chbo'
|
CHAT_BOT = 'chbo'
|
||||||
CHAT_ADMIN = 'chad'
|
CHAT_ADMIN = 'chad'
|
||||||
|
CHAT_EMOJI = 'chem'
|
||||||
CHAT_EVENT = 'chev'
|
CHAT_EVENT = 'chev'
|
||||||
CHAT_MANAGER_USER = 'chgu'
|
CHAT_MANAGER_USER = 'chgu'
|
||||||
CHAT_MEMBER = 'chme'
|
CHAT_MEMBER = 'chme'
|
||||||
@@ -111,6 +111,7 @@ class GamEntity():
|
|||||||
CHROME_POLICY_IMAGE = 'cpim'
|
CHROME_POLICY_IMAGE = 'cpim'
|
||||||
CHROME_POLICY_SCHEMA = 'cpsc'
|
CHROME_POLICY_SCHEMA = 'cpsc'
|
||||||
CHROME_PROFILE = 'cpro'
|
CHROME_PROFILE = 'cpro'
|
||||||
|
CHROME_PROFILE_COMMAND = 'cpcm'
|
||||||
CHROME_RELEASE = 'crel'
|
CHROME_RELEASE = 'crel'
|
||||||
CHROME_VERSION = 'cver'
|
CHROME_VERSION = 'cver'
|
||||||
CLASSIFICATION_LABEL = 'dlab'
|
CLASSIFICATION_LABEL = 'dlab'
|
||||||
@@ -357,7 +358,12 @@ class GamEntity():
|
|||||||
SUBSCRIPTION = 'subs'
|
SUBSCRIPTION = 'subs'
|
||||||
SVCACCT = 'svac'
|
SVCACCT = 'svac'
|
||||||
SVCACCT_KEY = 'svky'
|
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'
|
TASK = 'task'
|
||||||
TASKLIST = 'tali'
|
TASKLIST = 'tali'
|
||||||
TEACHER = 'teac'
|
TEACHER = 'teac'
|
||||||
@@ -412,7 +418,6 @@ class GamEntity():
|
|||||||
ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
|
ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
|
||||||
ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
|
ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
|
||||||
ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
|
ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
|
||||||
ANALYTIC_UA_PROPERTY: ['Analytic UA Properties', 'Analytic UA Property'],
|
|
||||||
API: ['APIs', 'API'],
|
API: ['APIs', 'API'],
|
||||||
APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
|
APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
|
||||||
APP_ID: ['Application IDs', 'Application ID'],
|
APP_ID: ['Application IDs', 'Application ID'],
|
||||||
@@ -438,6 +443,7 @@ class GamEntity():
|
|||||||
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
||||||
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
||||||
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
||||||
|
CHAT_EMOJI: ['Chat Emojis', 'Chat Emoji'],
|
||||||
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
||||||
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
||||||
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
||||||
@@ -462,6 +468,7 @@ class GamEntity():
|
|||||||
CHROME_POLICY_IMAGE: ['Chrome Policy Images', 'Chrome Policy Image'],
|
CHROME_POLICY_IMAGE: ['Chrome Policy Images', 'Chrome Policy Image'],
|
||||||
CHROME_POLICY_SCHEMA: ['Chrome Policy Schemas', 'Chrome Policy Schema'],
|
CHROME_POLICY_SCHEMA: ['Chrome Policy Schemas', 'Chrome Policy Schema'],
|
||||||
CHROME_PROFILE: ['Chrome Profiles', 'Chrome Profile'],
|
CHROME_PROFILE: ['Chrome Profiles', 'Chrome Profile'],
|
||||||
|
CHROME_PROFILE_COMMAND: ['Chrome Profile Commands', 'Chrome Profile Command'],
|
||||||
CHROME_RELEASE: ['Chrome Releases', 'Chrome Release'],
|
CHROME_RELEASE: ['Chrome Releases', 'Chrome Release'],
|
||||||
CHROME_VERSION: ['Chrome Versions', 'Chrome Version'],
|
CHROME_VERSION: ['Chrome Versions', 'Chrome Version'],
|
||||||
CLASSIFICATION_LABEL: ['Classification Labels', 'Classification Label'],
|
CLASSIFICATION_LABEL: ['Classification Labels', 'Classification Label'],
|
||||||
@@ -708,6 +715,11 @@ class GamEntity():
|
|||||||
SUBSCRIPTION: ['Subscriptions', 'Subscription'],
|
SUBSCRIPTION: ['Subscriptions', 'Subscription'],
|
||||||
SVCACCT: ['Service Accounts', 'Service Account'],
|
SVCACCT: ['Service Accounts', 'Service Account'],
|
||||||
SVCACCT_KEY: ['Service Account Keys', 'Service Account Key'],
|
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'],
|
TARGET_USER: ['Target Users', 'Target User'],
|
||||||
TASK: ['Tasks', 'Task'],
|
TASK: ['Tasks', 'Task'],
|
||||||
TASKLIST: ['Tasklists', 'Tasklist'],
|
TASKLIST: ['Tasklists', 'Tasklist'],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
ABORTED = 'aborted'
|
ABORTED = 'aborted'
|
||||||
ABUSIVE_CONTENT_RESTRICTION = 'abusiveContentRestriction'
|
ABUSIVE_CONTENT_RESTRICTION = 'abusiveContentRestriction'
|
||||||
ACCESS_NOT_CONFIGURED = 'accessNotConfigured'
|
ACCESS_NOT_CONFIGURED = 'accessNotConfigured'
|
||||||
|
ADMIN_CANNOT_UNSUSPEND = 'adminCannotUnsuspend'
|
||||||
ALREADY_EXISTS = 'alreadyExists'
|
ALREADY_EXISTS = 'alreadyExists'
|
||||||
APPLY_LABEL_FORBIDDEN = 'applyLabelForbidden'
|
APPLY_LABEL_FORBIDDEN = 'applyLabelForbidden'
|
||||||
AUTH_ERROR = 'authError'
|
AUTH_ERROR = 'authError'
|
||||||
@@ -41,6 +42,7 @@ CANNOT_DELETE_PERMISSION = 'cannotDeletePermission'
|
|||||||
CANNOT_DELETE_PRIMARY_CALENDAR = 'cannotDeletePrimaryCalendar'
|
CANNOT_DELETE_PRIMARY_CALENDAR = 'cannotDeletePrimaryCalendar'
|
||||||
CANNOT_DELETE_PRIMARY_SENDAS = 'cannotDeletePrimarySendAs'
|
CANNOT_DELETE_PRIMARY_SENDAS = 'cannotDeletePrimarySendAs'
|
||||||
CANNOT_DELETE_RESOURCE_WITH_CHILDREN = 'cannotDeleteResourceWithChildren'
|
CANNOT_DELETE_RESOURCE_WITH_CHILDREN = 'cannotDeleteResourceWithChildren'
|
||||||
|
CANNOT_MODIFY_INHERITED_PERMISSION = 'cannotModifyInheritedPermission'
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION = 'cannotModifyInheritedTeamDrivePermission'
|
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION = 'cannotModifyInheritedTeamDrivePermission'
|
||||||
CANNOT_MODIFY_RESTRICTED_LABEL = 'cannotModifyRestrictedLabel'
|
CANNOT_MODIFY_RESTRICTED_LABEL = 'cannotModifyRestrictedLabel'
|
||||||
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT = 'cannotModifyViewersCanCopyContent'
|
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT = 'cannotModifyViewersCanCopyContent'
|
||||||
@@ -72,6 +74,7 @@ DOMAIN_POLICY = 'domainPolicy'
|
|||||||
DOWNLOAD_QUOTA_EXCEEDED = 'downloadQuotaExceeded'
|
DOWNLOAD_QUOTA_EXCEEDED = 'downloadQuotaExceeded'
|
||||||
DUPLICATE = 'duplicate'
|
DUPLICATE = 'duplicate'
|
||||||
EVENT_DURATION_EXCEEDS_LIMIT = 'eventDurationExceedsLimit'
|
EVENT_DURATION_EXCEEDS_LIMIT = 'eventDurationExceedsLimit'
|
||||||
|
EVENT_TYPE_RESTRICTION = 'eventTypeRestriction'
|
||||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE = 'expirationDatesMustBeInTheFuture'
|
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE = 'expirationDatesMustBeInTheFuture'
|
||||||
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS = 'expirationDateNotAllowedForSharedDriveMembers'
|
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS = 'expirationDateNotAllowedForSharedDriveMembers'
|
||||||
FAILED_PRECONDITION = 'failedPrecondition'
|
FAILED_PRECONDITION = 'failedPrecondition'
|
||||||
@@ -132,6 +135,7 @@ OPERATION_NOT_SUPPORTED = 'operationNotSupported'
|
|||||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED = 'organizerOnNonTeamDriveNotSupported'
|
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED = 'organizerOnNonTeamDriveNotSupported'
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'organizerOnNonTeamDriveItemNotSupported'
|
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'organizerOnNonTeamDriveItemNotSupported'
|
||||||
ORGUNIT_NOT_FOUND = 'orgunitNotFound'
|
ORGUNIT_NOT_FOUND = 'orgunitNotFound'
|
||||||
|
OUTSIDE_DOMAIN_MEMBER_CANNOT_CHANGE_TEAMDRIVE_RESTRICTIONS = 'outsideDomainMemberCannotChangeTeamDriveRestrictions'
|
||||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'ownerOnTeamDriveItemNotSupported'
|
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'ownerOnTeamDriveItemNotSupported'
|
||||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED = 'ownershipChangeAcrossDomainNotPermitted'
|
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED = 'ownershipChangeAcrossDomainNotPermitted'
|
||||||
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE = 'participantIsNeitherOrganizerNorAttendee'
|
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE = 'participantIsNeitherOrganizerNorAttendee'
|
||||||
@@ -156,6 +160,7 @@ SERVICE_NOT_AVAILABLE = 'serviceNotAvailable'
|
|||||||
SHARE_IN_NOT_PERMITTED = 'shareInNotPermitted'
|
SHARE_IN_NOT_PERMITTED = 'shareInNotPermitted'
|
||||||
SHARE_OUT_NOT_PERMITTED = 'shareOutNotPermitted'
|
SHARE_OUT_NOT_PERMITTED = 'shareOutNotPermitted'
|
||||||
SHARE_OUT_NOT_PERMITTED_TO_USER = 'shareOutNotPermittedToUser'
|
SHARE_OUT_NOT_PERMITTED_TO_USER = 'shareOutNotPermittedToUser'
|
||||||
|
SHARE_OUT_WARNING = 'shareOutWarning'
|
||||||
SHARING_RATE_LIMIT_EXCEEDED = 'sharingRateLimitExceeded'
|
SHARING_RATE_LIMIT_EXCEEDED = 'sharingRateLimitExceeded'
|
||||||
SHORTCUT_TARGET_INVALID = 'shortcutTargetInvalid'
|
SHORTCUT_TARGET_INVALID = 'shortcutTargetInvalid'
|
||||||
STORAGE_QUOTA_EXCEEDED = 'storageQuotaExceeded'
|
STORAGE_QUOTA_EXCEEDED = 'storageQuotaExceeded'
|
||||||
@@ -226,6 +231,7 @@ DRIVE3_CREATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID, INVALID_SHARING_REQUEST
|
|||||||
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE,
|
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE,
|
||||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
||||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
||||||
|
CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||||
TEAMDRIVES_FOLDER_SHARING_NOT_SUPPORTED, INVALID_LINK_VISIBILITY, ABUSIVE_CONTENT_RESTRICTION]
|
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,
|
DRIVE3_GET_ACL_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
||||||
@@ -246,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_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
||||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
||||||
CANNOT_UPDATE_PERMISSION,
|
CANNOT_UPDATE_PERMISSION,
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION,
|
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||||
FIELD_NOT_WRITABLE, PERMISSION_NOT_FOUND]
|
FIELD_NOT_WRITABLE, PERMISSION_NOT_FOUND]
|
||||||
DRIVE3_DELETE_ACL_THROW_REASONS = [BAD_REQUEST, CANNOT_REMOVE_OWNER,
|
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,
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
||||||
NOT_FOUND, PERMISSION_NOT_FOUND, CANNOT_DELETE_PERMISSION]
|
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,
|
DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
||||||
@@ -271,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,
|
INVALID, INVALID_ARGUMENT, INVALID_PARAMETER, INVALID_ATTRIBUTE_VALUE, INVALID_INPUT,
|
||||||
SERVICE_LIMIT, SERVICE_NOT_AVAILABLE, AUTH_ERROR, REQUIRED]
|
SERVICE_LIMIT, SERVICE_NOT_AVAILABLE, AUTH_ERROR, REQUIRED]
|
||||||
GROUP_SETTINGS_RETRY_REASONS = [INVALID, SERVICE_LIMIT, SERVICE_NOT_AVAILABLE]
|
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]
|
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]
|
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]
|
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]
|
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]
|
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]
|
PEOPLE_ACCESS_THROW_REASONS = [SERVICE_NOT_AVAILABLE, FORBIDDEN, PERMISSION_DENIED, FAILED_PRECONDITION]
|
||||||
RESELLER_THROW_REASONS = [BAD_REQUEST, RESOURCE_NOT_FOUND, FORBIDDEN, INVALID]
|
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,
|
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]
|
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]
|
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]
|
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]
|
USER_GET_THROW_REASONS = [USER_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, SYSTEM_ERROR]
|
||||||
@@ -362,6 +369,8 @@ class abusiveContentRestriction(Exception):
|
|||||||
pass
|
pass
|
||||||
class accessNotConfigured(Exception):
|
class accessNotConfigured(Exception):
|
||||||
pass
|
pass
|
||||||
|
class adminCannotUnsuspend(Exception):
|
||||||
|
pass
|
||||||
class alreadyExists(Exception):
|
class alreadyExists(Exception):
|
||||||
pass
|
pass
|
||||||
class applyLabelForbidden(Exception):
|
class applyLabelForbidden(Exception):
|
||||||
@@ -396,6 +405,8 @@ class cannotDeletePrimarySendAs(Exception):
|
|||||||
pass
|
pass
|
||||||
class cannotDeleteResourceWithChildren(Exception):
|
class cannotDeleteResourceWithChildren(Exception):
|
||||||
pass
|
pass
|
||||||
|
class cannotModifyInheritedPermission(Exception):
|
||||||
|
pass
|
||||||
class cannotModifyInheritedTeamDrivePermission(Exception):
|
class cannotModifyInheritedTeamDrivePermission(Exception):
|
||||||
pass
|
pass
|
||||||
class cannotModifyRestrictedLabel(Exception):
|
class cannotModifyRestrictedLabel(Exception):
|
||||||
@@ -456,6 +467,8 @@ class duplicate(Exception):
|
|||||||
pass
|
pass
|
||||||
class eventDurationExceedsLimit(Exception):
|
class eventDurationExceedsLimit(Exception):
|
||||||
pass
|
pass
|
||||||
|
class eventTypeRestriction(Exception):
|
||||||
|
pass
|
||||||
class expirationDatesMustBeInTheFuture(Exception):
|
class expirationDatesMustBeInTheFuture(Exception):
|
||||||
pass
|
pass
|
||||||
class expirationDateNotAllowedForSharedDriveMembers(Exception):
|
class expirationDateNotAllowedForSharedDriveMembers(Exception):
|
||||||
@@ -570,6 +583,8 @@ class organizerOnNonTeamDriveItemNotSupported(Exception):
|
|||||||
pass
|
pass
|
||||||
class orgunitNotFound(Exception):
|
class orgunitNotFound(Exception):
|
||||||
pass
|
pass
|
||||||
|
class outsideDomainMemberCannotChangeTeamDriveRestrictions(Exception):
|
||||||
|
pass
|
||||||
class ownerOnTeamDriveItemNotSupported(Exception):
|
class ownerOnTeamDriveItemNotSupported(Exception):
|
||||||
pass
|
pass
|
||||||
class ownershipChangeAcrossDomainNotPermitted(Exception):
|
class ownershipChangeAcrossDomainNotPermitted(Exception):
|
||||||
@@ -618,6 +633,8 @@ class shareOutNotPermitted(Exception):
|
|||||||
pass
|
pass
|
||||||
class shareOutNotPermittedToUser(Exception):
|
class shareOutNotPermittedToUser(Exception):
|
||||||
pass
|
pass
|
||||||
|
class shareOutWarning(Exception):
|
||||||
|
pass
|
||||||
class sharingRateLimitExceeded(Exception):
|
class sharingRateLimitExceeded(Exception):
|
||||||
pass
|
pass
|
||||||
class shortcutTargetInvalid(Exception):
|
class shortcutTargetInvalid(Exception):
|
||||||
@@ -675,6 +692,7 @@ REASON_EXCEPTION_MAP = {
|
|||||||
ABORTED: aborted,
|
ABORTED: aborted,
|
||||||
ABUSIVE_CONTENT_RESTRICTION: abusiveContentRestriction,
|
ABUSIVE_CONTENT_RESTRICTION: abusiveContentRestriction,
|
||||||
ACCESS_NOT_CONFIGURED: accessNotConfigured,
|
ACCESS_NOT_CONFIGURED: accessNotConfigured,
|
||||||
|
ADMIN_CANNOT_UNSUSPEND: adminCannotUnsuspend,
|
||||||
ALREADY_EXISTS: alreadyExists,
|
ALREADY_EXISTS: alreadyExists,
|
||||||
APPLY_LABEL_FORBIDDEN: applyLabelForbidden,
|
APPLY_LABEL_FORBIDDEN: applyLabelForbidden,
|
||||||
AUTH_ERROR: authError,
|
AUTH_ERROR: authError,
|
||||||
@@ -692,6 +710,7 @@ REASON_EXCEPTION_MAP = {
|
|||||||
CANNOT_DELETE_PRIMARY_CALENDAR: cannotDeletePrimaryCalendar,
|
CANNOT_DELETE_PRIMARY_CALENDAR: cannotDeletePrimaryCalendar,
|
||||||
CANNOT_DELETE_PRIMARY_SENDAS: cannotDeletePrimarySendAs,
|
CANNOT_DELETE_PRIMARY_SENDAS: cannotDeletePrimarySendAs,
|
||||||
CANNOT_DELETE_RESOURCE_WITH_CHILDREN: cannotDeleteResourceWithChildren,
|
CANNOT_DELETE_RESOURCE_WITH_CHILDREN: cannotDeleteResourceWithChildren,
|
||||||
|
CANNOT_MODIFY_INHERITED_PERMISSION: cannotModifyInheritedPermission,
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION: cannotModifyInheritedTeamDrivePermission,
|
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION: cannotModifyInheritedTeamDrivePermission,
|
||||||
CANNOT_MODIFY_RESTRICTED_LABEL: cannotModifyRestrictedLabel,
|
CANNOT_MODIFY_RESTRICTED_LABEL: cannotModifyRestrictedLabel,
|
||||||
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT: cannotModifyViewersCanCopyContent,
|
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT: cannotModifyViewersCanCopyContent,
|
||||||
@@ -722,6 +741,7 @@ REASON_EXCEPTION_MAP = {
|
|||||||
DOWNLOAD_QUOTA_EXCEEDED: downloadQuotaExceeded,
|
DOWNLOAD_QUOTA_EXCEEDED: downloadQuotaExceeded,
|
||||||
DUPLICATE: duplicate,
|
DUPLICATE: duplicate,
|
||||||
EVENT_DURATION_EXCEEDS_LIMIT: eventDurationExceedsLimit,
|
EVENT_DURATION_EXCEEDS_LIMIT: eventDurationExceedsLimit,
|
||||||
|
EVENT_TYPE_RESTRICTION: eventTypeRestriction,
|
||||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE: expirationDatesMustBeInTheFuture,
|
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE: expirationDatesMustBeInTheFuture,
|
||||||
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS: expirationDateNotAllowedForSharedDriveMembers,
|
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS: expirationDateNotAllowedForSharedDriveMembers,
|
||||||
FAILED_PRECONDITION: failedPrecondition,
|
FAILED_PRECONDITION: failedPrecondition,
|
||||||
@@ -779,6 +799,7 @@ REASON_EXCEPTION_MAP = {
|
|||||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED: organizerOnNonTeamDriveNotSupported,
|
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED: organizerOnNonTeamDriveNotSupported,
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED: organizerOnNonTeamDriveItemNotSupported,
|
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED: organizerOnNonTeamDriveItemNotSupported,
|
||||||
ORGUNIT_NOT_FOUND: orgunitNotFound,
|
ORGUNIT_NOT_FOUND: orgunitNotFound,
|
||||||
|
OUTSIDE_DOMAIN_MEMBER_CANNOT_CHANGE_TEAMDRIVE_RESTRICTIONS: outsideDomainMemberCannotChangeTeamDriveRestrictions,
|
||||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED: ownerOnTeamDriveItemNotSupported,
|
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED: ownerOnTeamDriveItemNotSupported,
|
||||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED: ownershipChangeAcrossDomainNotPermitted,
|
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED: ownershipChangeAcrossDomainNotPermitted,
|
||||||
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE: participantIsNeitherOrganizerNorAttendee,
|
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE: participantIsNeitherOrganizerNorAttendee,
|
||||||
@@ -803,6 +824,7 @@ REASON_EXCEPTION_MAP = {
|
|||||||
SHARE_IN_NOT_PERMITTED: shareInNotPermitted,
|
SHARE_IN_NOT_PERMITTED: shareInNotPermitted,
|
||||||
SHARE_OUT_NOT_PERMITTED: shareOutNotPermitted,
|
SHARE_OUT_NOT_PERMITTED: shareOutNotPermitted,
|
||||||
SHARE_OUT_NOT_PERMITTED_TO_USER: shareOutNotPermittedToUser,
|
SHARE_OUT_NOT_PERMITTED_TO_USER: shareOutNotPermittedToUser,
|
||||||
|
SHARE_OUT_WARNING: shareOutWarning,
|
||||||
SHARING_RATE_LIMIT_EXCEEDED: sharingRateLimitExceeded,
|
SHARING_RATE_LIMIT_EXCEEDED: sharingRateLimitExceeded,
|
||||||
SHORTCUT_TARGET_INVALID: shortcutTargetInvalid,
|
SHORTCUT_TARGET_INVALID: shortcutTargetInvalid,
|
||||||
STORAGE_QUOTA_EXCEEDED: storageQuotaExceeded,
|
STORAGE_QUOTA_EXCEEDED: storageQuotaExceeded,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -25,8 +25,6 @@
|
|||||||
# Some commands want to set a non-zero return code but not bail
|
# Some commands want to set a non-zero return code but not bail
|
||||||
# GAM admin user from oauth2.txt or oauth2service.json
|
# GAM admin user from oauth2.txt or oauth2service.json
|
||||||
ADMIN = 'admn'
|
ADMIN = 'admn'
|
||||||
# Drive service for admin; used to look up Shared Drive Names
|
|
||||||
ADMIN_DRIVE = 'addr'
|
|
||||||
# Number/length of API call retries
|
# Number/length of API call retries
|
||||||
API_CALLS_RETRY_DATA = 'rtry'
|
API_CALLS_RETRY_DATA = 'rtry'
|
||||||
# GAM cache directory. If no_cache is True, this variable will be set to None
|
# GAM cache directory. If no_cache is True, this variable will be set to None
|
||||||
@@ -207,6 +205,7 @@ REDIRECT_WRITE_HEADER = 'rdwh'
|
|||||||
REDIRECT_MULTIPROCESS = 'rdmp'
|
REDIRECT_MULTIPROCESS = 'rdmp'
|
||||||
REDIRECT_QUEUE = 'rdq'
|
REDIRECT_QUEUE = 'rdq'
|
||||||
REDIRECT_QUEUE_NAME = 'name'
|
REDIRECT_QUEUE_NAME = 'name'
|
||||||
|
REDIRECT_QUEUE_CLEAR_ROW_FILTERS = 'clearRowFilters'
|
||||||
REDIRECT_QUEUE_TODRIVE = 'todrive'
|
REDIRECT_QUEUE_TODRIVE = 'todrive'
|
||||||
REDIRECT_QUEUE_CSVPF = 'csvpf'
|
REDIRECT_QUEUE_CSVPF = 'csvpf'
|
||||||
REDIRECT_QUEUE_DATA = 'rows'
|
REDIRECT_QUEUE_DATA = 'rows'
|
||||||
@@ -219,7 +218,6 @@ REDIRECT_QUEUE_EOF = 'eof'
|
|||||||
#
|
#
|
||||||
Globals = {
|
Globals = {
|
||||||
ADMIN: None,
|
ADMIN: None,
|
||||||
ADMIN_DRIVE: None,
|
|
||||||
API_CALLS_RETRY_DATA: {},
|
API_CALLS_RETRY_DATA: {},
|
||||||
CACHE_DIR: None,
|
CACHE_DIR: None,
|
||||||
CACHE_DISCOVERY_ONLY: True,
|
CACHE_DISCOVERY_ONLY: True,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# 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'
|
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'
|
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'
|
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!
|
SCOPE_AUTHORIZATION_PASSED = '''All scopes PASSED!
|
||||||
|
|
||||||
Service Account Client name: {0} is fully authorized.
|
Service Account Client name: {0} is fully authorized.
|
||||||
'''
|
'''
|
||||||
SCOPE_AUTHORIZATION_UPDATE_PASSED = '''All scopes PASSED!
|
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}
|
{0}
|
||||||
{1}
|
{1}
|
||||||
|
|
||||||
@@ -156,8 +157,8 @@ Click AUTHORIZE
|
|||||||
When the box closes you're done
|
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.
|
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!
|
SCOPE_AUTHORIZATION_FAILED = '''Some scopes FAILED or should be DISABLED!
|
||||||
To authorize them, please go to the following link in your browser:
|
To update authorization, please go to the following link in your browser:
|
||||||
{0}
|
{0}
|
||||||
{1}
|
{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'
|
ALREADY_EXISTS_USE_MERGE_ARGUMENT = 'Already exists; use the "merge" argument to merge the labels'
|
||||||
API_ACCESS_DENIED = 'API access Denied'
|
API_ACCESS_DENIED = 'API access Denied'
|
||||||
API_CALLS_RETRY_DATA = 'API calls retry data\n'
|
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_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:\n{1}\n\nRun: gam user {2} update serviceaccount\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'
|
API_ERROR_SETTINGS = 'API error, some settings not set'
|
||||||
ARE_BOTH_REQUIRED = 'Arguments {0} and {1} are both required'
|
ARE_BOTH_REQUIRED = 'Arguments {0} and {1} are both required'
|
||||||
ARE_MUTUALLY_EXCLUSIVE = 'Arguments {0} and {1} are mutually exclusive'
|
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_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
||||||
INVALID_CHARSET = 'Invalid charset "{0}"'
|
INVALID_CHARSET = 'Invalid charset "{0}"'
|
||||||
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
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_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_FILE_SELECTION_WITH_ADMIN_ACCESS = 'Invalid file selection with adminaccess|asadmin'
|
||||||
INVALID_GROUP = 'Invalid Group'
|
INVALID_GROUP = 'Invalid Group'
|
||||||
INVALID_HTTP_HEADER = 'Invalid http header data: {0}'
|
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_MESSAGES_WITH_LABEL = 'No Messages with Label'
|
||||||
NO_PARENTS_TO_CONVERT_TO_SHORTCUTS = 'No parents to convert to shortcuts'
|
NO_PARENTS_TO_CONVERT_TO_SHORTCUTS = 'No parents to convert to shortcuts'
|
||||||
NO_REPORT_AVAILABLE = 'No {0} report available.'
|
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_SERIAL_NUMBERS_SPECIFIED = 'No serial numbers specified'
|
||||||
NO_SSO_PROFILE_MATCHES = 'No SSO profile matches display name {0}'
|
NO_SSO_PROFILE_MATCHES = 'No SSO profile matches display name {0}'
|
||||||
NO_SSO_PROFILE_ASSIGNED = 'No SSO profile assigned to {0} {1}'
|
NO_SSO_PROFILE_ASSIGNED = 'No SSO profile assigned to {0} {1}'
|
||||||
@@ -504,13 +507,15 @@ TO = 'To'
|
|||||||
TO_LC = 'to'
|
TO_LC = 'to'
|
||||||
TO_MAXIMUM_OF = 'to maximum of'
|
TO_MAXIMUM_OF = 'to maximum of'
|
||||||
TO_SET_UP_GOOGLE_CHAT = """
|
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}
|
{0}
|
||||||
|
|
||||||
and follow the instructions at:
|
and follow the instructions at:
|
||||||
|
|
||||||
https://github.com/GAM-team/GAM/wiki/Chat-Bot#set-up-a-chat-bot
|
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}'
|
TOTAL_ITEMS_IN_ENTITY = 'Total {0} in {1}'
|
||||||
TRIMMED_MESSAGE_FROM_LENGTH_TO_MAXIMUM = 'Trimmed message of length {0} to maximum length {1}'
|
TRIMMED_MESSAGE_FROM_LENGTH_TO_MAXIMUM = 'Trimmed message of length {0} to maximum length {1}'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -107,6 +107,8 @@ _SKUS = {
|
|||||||
'product': '101047', 'aliases': ['aisecurity'], 'displayName': 'AI Security'},
|
'product': '101047', 'aliases': ['aisecurity'], 'displayName': 'AI Security'},
|
||||||
'1010470007': {
|
'1010470007': {
|
||||||
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
||||||
|
'1010470008': {
|
||||||
|
'product': '101047', 'aliases': ['geminiultra'], 'displayName': 'Google AI Ultra for Business'},
|
||||||
'1010490001': {
|
'1010490001': {
|
||||||
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
||||||
'1010500001': {
|
'1010500001': {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# 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
|
|
||||||
passlib>=1.7.4
|
|
||||||
pathvalidate>=3.2.3
|
|
||||||
pyscard==2.2.1
|
|
||||||
python-dateutil
|
|
||||||
yubikey-manager>=5.6.1
|
|
||||||
@@ -1,54 +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
|
|
||||||
License :: OSI Approved :: Apache License
|
|
||||||
|
|
||||||
[options]
|
|
||||||
packages = find:
|
|
||||||
python_requires = >= 3.8
|
|
||||||
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
|
|
||||||
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()
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@
|
|||||||
- [Python Regular Expressions](Python-Regular-Expressions)
|
- [Python Regular Expressions](Python-Regular-Expressions)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Manage Projects](#manage-projects)
|
- [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 Service Account Key Uploads](#authorize-service-account-key-uploads)
|
||||||
- [Authorize GAM to create projects](#authorize-gam-to-create-projects)
|
- [Authorize GAM to create projects](#authorize-gam-to-create-projects)
|
||||||
- [Create a new GCP project folder](#create-a-new-gcp-project-folder)
|
- [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
|
* If groups are used to authenticate access, make sure the super admin is in one of the groups
|
||||||
* Collapse "Service status"
|
* Collapse "Service status"
|
||||||
* Expand "Cloud Resource Manager API settings"
|
* 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
|
* Make sure that "Allow users to create projects" is checked
|
||||||
|
|
||||||
Verify that all scopes are available:
|
Verify that all scopes are available:
|
||||||
@@ -73,11 +74,6 @@ Verify that all scopes are available:
|
|||||||
* Select "ON for everyone"
|
* Select "ON for everyone"
|
||||||
* Click "SAVE"
|
* 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.
|
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
|
* Access the admin console and go to Apps -> Google Workspace - Classroom
|
||||||
* Expand "Data access"
|
* 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
|
* Access the admin console and go to Security -> Overview
|
||||||
* Scroll down and open Google Cloud session control section
|
* Scroll down and open Google Cloud session control section
|
||||||
* Select the OU containing the super admin
|
* 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 Require reauthentication is selected, you'll need either:
|
||||||
* If that sounds unappealing, check Exempt Trusted apps
|
* uncheck Google Cloud Storage and any other GCP APIs that you selected on `gam oauth create` (reauth is only necessary for GCP APIs)
|
||||||
* Click "OVERRIDE"
|
* enable "Exempt Trusted apps"
|
||||||
|
* rerun `gam oauth create` at whatever frequency is specified
|
||||||
|
|
||||||
Additional steps may be required if errors are encountered.
|
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 Service Account Key Uploads](#authorize-service-account-key-uploads)
|
||||||
* [Authorize GAM to create projects](#authorize-gam-to-create-projects)
|
* [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
|
gam print projects admin admin@domain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
## Authorize a super admin to create projects
|
## Authorize a user 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,
|
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.
|
perform these steps and then retry the create project command.
|
||||||
|
|
||||||
* Login as an existing super admin at console.cloud.google.com
|
* 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
|
* Click in the Select a role box
|
||||||
* Type project creator in the Filter box
|
* Type project creator in the Filter box
|
||||||
* Click Project Creator
|
* Click Project Creator
|
||||||
* Click + Add Another Role
|
|
||||||
* Type orgpolicy.policyAdmin in the Filter box
|
|
||||||
* Click Organization Policy Administrator
|
|
||||||
* Click Save
|
* Click Save
|
||||||
|
|
||||||
## Authorize Service Account Key Uploads
|
## 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`,
|
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.
|
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|
|
banana|basil|blueberry|flamingo|graphite|grape|
|
||||||
lavender|peacock|sage|tangerine|tomato
|
lavender|peacock|sage|tangerine|tomato
|
||||||
<FileFormat> ::=
|
<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|
|
pdf|png|ppt|pot|potx|pptx|rtf|svg|tsv|txt|xls|xlt|xlsx|xltx|zip|
|
||||||
ms|microsoft|openoffice|
|
ms|microsoft|openoffice|
|
||||||
<LabelColorHex> ::=
|
<LabelColorHex> ::=
|
||||||
@@ -278,10 +278,15 @@
|
|||||||
domain:<DomainName>|domain|default
|
domain:<DomainName>|domain|default
|
||||||
<CalendarItem> ::= <EmailAddress>
|
<CalendarItem> ::= <EmailAddress>
|
||||||
<ChannelCustomerID> ::= <String>
|
<ChannelCustomerID> ::= <String>
|
||||||
|
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||||
|
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||||
<ChatMember> ::= spaces/<String>/members/<String>
|
<ChatMember> ::= spaces/<String>/members/<String>
|
||||||
<ChatMessage> ::= spaces/<String>/messages/<String>
|
<ChatMessage> ::= spaces/<String>/messages/<String>
|
||||||
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
||||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||||
|
<ChromeProfilePermanentID> ::= <String>
|
||||||
|
<ChromeProfileName> ::= customers/<CustomerID>/profiles/<ChromeProfilePermanentID> | <ChromeProfilePermanentID>
|
||||||
|
<ChromeProfileCommandName> ::= <ChomeProfileName>/commands/<String>
|
||||||
<GIGroupAlias> ::= <EmailAddress>
|
<GIGroupAlias> ::= <EmailAddress>
|
||||||
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
||||||
<CIGroupMemberType> ::= cbcmbrowser|chromeosdevice|customer|group|other|serviceaccount|user
|
<CIGroupMemberType> ::= cbcmbrowser|chromeosdevice|customer|group|other|serviceaccount|user
|
||||||
@@ -300,6 +305,11 @@
|
|||||||
<ContactGroupItem> ::= <ContactGroupID>|<ContactGroupName>
|
<ContactGroupItem> ::= <ContactGroupID>|<ContactGroupName>
|
||||||
<CorporaAttribute> ::= alldrives|allteamdrives|domain|onlyteamdrives|user
|
<CorporaAttribute> ::= alldrives|allteamdrives|domain|onlyteamdrives|user
|
||||||
<CourseAlias> ::= <String>
|
<CourseAlias> ::= <String>
|
||||||
|
<CourseAnnouncementContent> ::=
|
||||||
|
((text <String>)|
|
||||||
|
(textfile <FileName> [charset <Charset>])|
|
||||||
|
(gdoc <UserGoogleDoc>)|
|
||||||
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
<CourseAnnouncementID> ::= <Number>
|
<CourseAnnouncementID> ::= <Number>
|
||||||
<CourseAnnouncementState> ::= draft|published|deleted
|
<CourseAnnouncementState> ::= draft|published|deleted
|
||||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||||
@@ -509,6 +519,14 @@
|
|||||||
gs://<StorageBucketName>/<StorageObjectName>|
|
gs://<StorageBucketName>/<StorageObjectName>|
|
||||||
<StorageBucketName>/<StorageObjectName>
|
<StorageBucketName>/<StorageObjectName>
|
||||||
<Tag> ::= <String>
|
<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,-]*
|
<TakeoutBucketName> ::= takeout-export-[a-f,0-9,-]*
|
||||||
<TaskID> ::= <String>
|
<TaskID> ::= <String>
|
||||||
<TaskListID> ::= <String>
|
<TaskListID> ::= <String>
|
||||||
|
|||||||
@@ -567,7 +567,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
```
|
```
|
||||||
gam calendar <CalendarEntity> show events [<EventEntity>] <EventDisplayProperty>*
|
gam calendar <CalendarEntity> show events [<EventEntity>] <EventDisplayProperty>*
|
||||||
[fields <EventFieldNameList>] [showdayofweek]
|
[fields <EventFieldNameList>] [showdayofweek]
|
||||||
[countsonly] [formatjson]
|
[countsly] [formatjson]
|
||||||
```
|
```
|
||||||
In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
|
In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
|
||||||
|
|
||||||
@@ -585,8 +585,9 @@ By default, Gam displays event details, use `countsonly` to display only the num
|
|||||||
|
|
||||||
```
|
```
|
||||||
gam calendar <CalendarEntity> print events [<EventEntity>] <EventDisplayProperty>*
|
gam calendar <CalendarEntity> print events [<EventEntity>] <EventDisplayProperty>*
|
||||||
[fields <EventFieldNameList>] [showdayofweek]
|
[fields <EventFieldNameList>] [showdayofweek]
|
||||||
[countsonly] [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
[countsonly [eventrowfilter]]
|
||||||
|
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
|
In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
|
||||||
|
|
||||||
@@ -602,6 +603,11 @@ By default, Gam displays the information as columns of fields; the following opt
|
|||||||
|
|
||||||
By default, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
By default, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
||||||
|
|
||||||
|
When `countsonly` is specified, the `eventrowfilter` option causes
|
||||||
|
GAM to apply `config csv_output_row_filter` to the event details rather than the event counts.
|
||||||
|
This will be useful when `<EventSelectProperty>` and `<EventMatchProperty>` do not have the
|
||||||
|
capabilty to select the events of interest; e.g., you want to filter based on the event `created` property.
|
||||||
|
|
||||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
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.
|
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.
|
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||||
@@ -627,6 +633,8 @@ gam calendar <CalendarEntity> deleteevent (id|eventid <EventID>)+ [doit] [<Event
|
|||||||
gam calendar <CalendarEntity> moveevent (id|eventid <EventID>)+ destination <CalendarItem> [<EventNotificationAttribute>]
|
gam calendar <CalendarEntity> moveevent (id|eventid <EventID>)+ destination <CalendarItem> [<EventNotificationAttribute>]
|
||||||
gam calendar <CalendarEntity> updateevent <EventID> <EventAttribute>+ [<EventNotificationAttribute>]
|
gam calendar <CalendarEntity> updateevent <EventID> <EventAttribute>+ [<EventNotificationAttribute>]
|
||||||
gam calendar <CalendarEntity> wipe
|
gam calendar <CalendarEntity> wipe
|
||||||
gam calendar <CalendarEntity> printevents <EventSelectProperty>* <EventDisplayProperty>* [fields <EventFieldNameList>]
|
gam calendar <CalendarEntity> printevents <EventSelectProperty>* <EventDisplayProperty>*
|
||||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
[fields <EventFieldNameList>]
|
||||||
|
[countsonly [eventrowfilter]]
|
||||||
|
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Chat Bot
|
# Chat Bot
|
||||||
|
- [Introduction](#introduction)
|
||||||
|
- [Set up a Chat Bot](#set-up-a-chat-bot)
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Definitions](#definitions)
|
- [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 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)
|
- [Display Members of a Room or Chat](#display-members-of-a-room-or-chat)
|
||||||
- [Create a Chat Message](#create-a-chat-message)
|
- [Create a Chat Message](#create-a-chat-message)
|
||||||
@@ -10,6 +10,44 @@
|
|||||||
- [Delete a Chat Message](#delete-a-chat-message)
|
- [Delete a Chat Message](#delete-a-chat-message)
|
||||||
- [Display a Chat Message](#display-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
|
## API documentation
|
||||||
* https://developers.google.com/chat/concepts
|
* https://developers.google.com/chat/concepts
|
||||||
* https://developers.google.com/chat/reference/rest
|
* https://developers.google.com/chat/reference/rest
|
||||||
@@ -102,19 +140,6 @@
|
|||||||
<ChatMessageFieldNameList> ::= "<ChatMessageFieldName>(,<ChatMessageFieldName>)*"
|
<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 Rooms and Chats to which your Bot belongs
|
||||||
Display the spaces to which your Chat Bot can send messages.
|
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.
|
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)
|
- [API documentation](#api-documentation)
|
||||||
- [Introduction](#introduction)
|
- [Introduction](#introduction)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Delete Chrome profiles](#delete-chrome-profiles)
|
- [Delete Chrome Profiles](#delete-chrome-profiles)
|
||||||
- [Display Chrome profiles](#display-chrome-profiles)
|
- [Display Chrome Profiles](#display-chrome-profiles)
|
||||||
- [Profile Query Searchable Fields](#profile-query-searchable-fields)
|
- [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
|
## Introduction
|
||||||
These features were added in version 7.01.00.
|
These features were added in version 7.01.00.
|
||||||
@@ -21,13 +24,24 @@ Follow instructions at: Turn on managed profile reporting
|
|||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Chrome Management API - Profiles](https://developers.google.com/chrome/management/reference/rest/v1/customers.profiles)
|
* [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)
|
* [Turn on Chrome Browser and Profile Reporting](https://support.google.com/chrome/a/answer/9301421)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
|
* [`<FileSelector> | <CSVFileSelector>`](Collections-of-Items)
|
||||||
|
|
||||||
```
|
```
|
||||||
<CustomerID> ::= <String>
|
<CustomerID> ::= <String>
|
||||||
<ChromeProfilePermanentID> ::= <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> ::=
|
<ChromeProfileFieldName> ::=
|
||||||
affiliationstate|
|
affiliationstate|
|
||||||
@@ -89,11 +103,11 @@ Select the fields to be displayed:
|
|||||||
* `<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]` - Display a selected list of fields
|
* `<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]` - Display a selected list of fields
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values:
|
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
|
gam show chromeprofiles
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
@@ -106,18 +120,18 @@ Select the fields to be displayed:
|
|||||||
* `<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]` - Display a selected list of fields
|
* `<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.
|
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.
|
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:
|
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>*]
|
gam print chromeprofiles [todrive <ToDriveAttribute>*]
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
[orderby <ChromeProfileOrderByFieldName> [ascending|descending]]
|
||||||
<ChromeProfileFieldName>* [fields <ChromeProfileFieldNameList>]
|
<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:
|
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.
|
Print information about Chrome profiles on Windows.
|
||||||
```
|
```
|
||||||
gam print chromeprofiles filter "osPlatformType=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|
|
autoupdatethrough|
|
||||||
backlightinfo|
|
backlightinfo|
|
||||||
bootmode|
|
bootmode|
|
||||||
|
chromeostype|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreports|
|
cpustatusreports|
|
||||||
deprovisionreason|
|
deprovisionreason|
|
||||||
devicefiles|
|
devicefiles|
|
||||||
deviceid|
|
deviceid|
|
||||||
devicelicensetype|
|
devicelicensetype|
|
||||||
|
diskspaceusage|
|
||||||
diskvolumereports|
|
diskvolumereports|
|
||||||
dockmacaddress|
|
dockmacaddress|
|
||||||
ethernetmacaddress|
|
ethernetmacaddress|
|
||||||
@@ -119,6 +121,7 @@ The second form is backwards compatible with Legacy GAM and selection with `<CrO
|
|||||||
extendedsupporteligible|
|
extendedsupporteligible|
|
||||||
extendedsupportstart|
|
extendedsupportstart|
|
||||||
extendedsupportenabled|
|
extendedsupportenabled|
|
||||||
|
faninfo|
|
||||||
firmwareversion|
|
firmwareversion|
|
||||||
firstenrollmenttime|
|
firstenrollmenttime|
|
||||||
lastdeprovisiontimestamp|
|
lastdeprovisiontimestamp|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
- [Create and update courses](#create-and-update-courses)
|
- [Create and update courses](#create-and-update-courses)
|
||||||
- [Delete courses](#delete-courses)
|
- [Delete courses](#delete-courses)
|
||||||
- [Manage course aliases](#manage-course-aliases)
|
- [Manage course aliases](#manage-course-aliases)
|
||||||
|
- [Manage course announcements](#manage-course-announcements)
|
||||||
- [Manage course topics](#manage-course-topics)
|
- [Manage course topics](#manage-course-topics)
|
||||||
- [Display courses](#display-courses)
|
- [Display courses](#display-courses)
|
||||||
- [Display course counts](#display-course-counts)
|
- [Display course counts](#display-course-counts)
|
||||||
@@ -55,6 +56,11 @@ gam user user@domain.com check|update serviceaccount
|
|||||||
<CourseAliasEntity> ::=
|
<CourseAliasEntity> ::=
|
||||||
<CourseAliasList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
<CourseAliasList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||||
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
||||||
|
<CourseAnnouncementContent> ::=
|
||||||
|
((text <String>)|
|
||||||
|
(textfile <FileName> [charset <Charset>])|
|
||||||
|
(gdoc <UserGoogleDoc>)|
|
||||||
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
<CourseAnnouncementID> ::= <Number>
|
<CourseAnnouncementID> ::= <Number>
|
||||||
<CourseAnnouncementIDList> ::= "<CourseAnnouncementID>(,<CourseAnnouncementID>)*"
|
<CourseAnnouncementIDList> ::= "<CourseAnnouncementID>(,<CourseAnnouncementID>)*"
|
||||||
<CourseAnnouncementIDEntity> ::=
|
<CourseAnnouncementIDEntity> ::=
|
||||||
@@ -389,17 +395,40 @@ These commands can process multiple courses.
|
|||||||
gam courses <CourseEntity> add alias <CourseAliasEntity>
|
gam courses <CourseEntity> add alias <CourseAliasEntity>
|
||||||
gam courses <CourseEntity> delete 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
|
## Manage course topics
|
||||||
These commands can process a single course.
|
These commands can process a single course.
|
||||||
```
|
```
|
||||||
gam course <CourseID> add topic <CourseTopic>
|
gam course <CourseID> add topic <CourseTopic>
|
||||||
gam course <CourseID> delete topic <CourseTopicID>
|
gam course <CourseID> delete topic <CourseTopicID>
|
||||||
|
gam course <CourseID> update topic <CourseTopicID> <CourseTopic>
|
||||||
|
|
||||||
```
|
```
|
||||||
These commands can process multiple courses.
|
These commands can process multiple courses.
|
||||||
```
|
```
|
||||||
gam courses <CourseEntity> add topic <CourseTopicEntity>
|
gam courses <CourseEntity> add topic <CourseTopicEntity>
|
||||||
gam courses <CourseEntity> delete topic <CourseTopicIDEntity>
|
gam courses <CourseEntity> delete topic <CourseTopicIDEntity>
|
||||||
|
gam courses <CourseEntity> update topic <CourseTopicIDEntity> <CourseTopic>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Display courses
|
## Display courses
|
||||||
```
|
```
|
||||||
gam info course <CourseID> [owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
gam info course <CourseID> [owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# Cloud Identity Devices
|
# Cloud Identity Devices
|
||||||
|
- [Notes](#notes)
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Query documentation](#query-documentation)
|
- [Query documentation](#query-documentation)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
@@ -20,6 +21,15 @@
|
|||||||
- [Display device user client state](#display-device-user-client-state)
|
- [Display device user client state](#display-device-user-client-state)
|
||||||
- [Update device user client state](#update-device-user-client-state)
|
- [Update device user client state](#update-device-user-client-state)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
These commands use service account access with `admin_email` (if defined) from `gam.cfg` or
|
||||||
|
the admin from `oauth2.txt` (specified in `gam oauth create`).
|
||||||
|
|
||||||
|
Use `gam user user@domain.com update serviceaccount` and make sure that the following is specified:
|
||||||
|
```
|
||||||
|
[*] 17) Cloud Identity Devices API (supports readonly)
|
||||||
|
```
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Cloud Identity API - Devices](https://cloud.google.com/identity/docs/reference/rest/v1/devices)
|
* [Cloud Identity API - Devices](https://cloud.google.com/identity/docs/reference/rest/v1/devices)
|
||||||
* [Cloud Identity API - Device Users](https://cloud.google.com/identity/docs/reference/rest/v1/devices.deviceUsers)
|
* [Cloud Identity API - Device Users](https://cloud.google.com/identity/docs/reference/rest/v1/devices.deviceUsers)
|
||||||
@@ -200,7 +210,8 @@ gam print devices [todrive <ToDriveAttribute>*]
|
|||||||
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
||||||
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
||||||
[all|company|personal|nocompanydevices|nopersonaldevices]
|
[all|company|personal|nocompanydevices|nopersonaldevices]
|
||||||
[nodeviceusers]
|
[nodeviceusers|oneuserperrow]
|
||||||
|
[clientstates]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, all devices are displayed; use the query options to limit the display.
|
By default, all devices are displayed; use the query options to limit the display.
|
||||||
@@ -221,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;
|
By default, Gam makes additional API calls to display the device users for the devices;
|
||||||
use `nodeviceuser` to suppress making the additional calls.
|
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,
|
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.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
# Cloud Identity Groups - Membership
|
# Cloud Identity Groups - Membership
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Query documentation](#query-documentation)
|
|
||||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Notes](#Notes)
|
- [Notes](#Notes)
|
||||||
@@ -22,10 +21,6 @@
|
|||||||
* [Cloud Identity Groups](https://gsuiteupdates.googleblog.com/2020/08/new-api-cloud-identity-groups-google.html)
|
* [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)
|
* [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
|
## Notes
|
||||||
|
|
||||||
In the Admin Directory API a group has the following characteristics:
|
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
|
* 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;
|
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
|
* 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)
|
* [Security Groups](https://gsuiteupdates.googleblog.com/2020/09/security-groups-beta.html)
|
||||||
|
|
||||||
## Query documentation
|
## Query documentation
|
||||||
* [Cloud Identity Groups API - Search Dynamic Groups](https://cloud.google.com/identity/docs/reference/rest/v1/groups#dynamicgroupquery)
|
* [Cloud Identity Groups API - Search](https://cloud.google.com/identity/docs/reference/rest/v1/groups/search)
|
||||||
* [Member REstrictions](https://cloud.google.com/identity/docs/reference/rest/v1/SecuritySettings#MemberRestriction)
|
* [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
|
## Notes
|
||||||
|
|
||||||
@@ -50,7 +52,7 @@ Dynamic Groups require Cloud Identity Premium accounts.
|
|||||||
* https://cloud.google.com/identity/docs/how-to/create-dynamic-groups
|
* 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;
|
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
|
* https://cloud.google.com/identity/docs/reference/rest/v1/groups.memberships/searchTransitiveGroups
|
||||||
|
|
||||||
|
|||||||
@@ -12,14 +12,28 @@
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
To use these commands you must update your client access authentication.
|
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.
|
with authentication.
|
||||||
```
|
```
|
||||||
gam oauth delete
|
gam oauth delete
|
||||||
gam oauth create
|
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
|
## Definitions
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -144,6 +144,11 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
<CalendarEntity> ::=
|
<CalendarEntity> ::=
|
||||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
<ChromeProfileNameEntity> ::=
|
||||||
|
<ChromeProfileNameList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
|
(filter <String> (filtertime<String> <Time>)* [orderby <ChromeProfileOrderByFieldName> [ascending|descending]]) |
|
||||||
|
(commands <ChromeProfileCommandNameList>|<FileSelector>|<CSVFileSelector>)
|
||||||
<CIPolicyNameEntity> ::=
|
<CIPolicyNameEntity> ::=
|
||||||
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
|
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
|
||||||
<ClassificationLabelNameEntity> ::=
|
<ClassificationLabelNameEntity> ::=
|
||||||
@@ -206,6 +211,7 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
all_shortcuts |
|
all_shortcuts |
|
||||||
all_3p_shortcuts |
|
all_3p_shortcuts |
|
||||||
all_items |
|
all_items |
|
||||||
|
my_commentable_items |
|
||||||
my_docs |
|
my_docs |
|
||||||
my_files |
|
my_files |
|
||||||
my_folders |
|
my_folders |
|
||||||
@@ -231,6 +237,7 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
others_3p_shortcuts |
|
others_3p_shortcuts |
|
||||||
others_items |
|
others_items |
|
||||||
writable_files
|
writable_files
|
||||||
|
|
||||||
<DriveFileEntityShortcut> ::=
|
<DriveFileEntityShortcut> ::=
|
||||||
alldrives |
|
alldrives |
|
||||||
mydrive_any |
|
mydrive_any |
|
||||||
@@ -246,6 +253,7 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
sharedwithme_all |
|
sharedwithme_all |
|
||||||
sharedwithme_mydrive |
|
sharedwithme_mydrive |
|
||||||
sharedwithme_notmydrive
|
sharedwithme_notmydrive
|
||||||
|
|
||||||
<DriveFileEntity> ::=
|
<DriveFileEntity> ::=
|
||||||
<DriveFileIDEntity> |
|
<DriveFileIDEntity> |
|
||||||
<DriveFileNameEntity> |
|
<DriveFileNameEntity> |
|
||||||
@@ -343,6 +351,15 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
<SiteEntity> ::=
|
<SiteEntity> ::=
|
||||||
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
<TagManagerAccountPathEntity> ::=
|
||||||
|
<TagManagerAccountPathList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
|
<TagManagerContainerPathEntity> ::=
|
||||||
|
<TagManagerContainerPathList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
|
<TagManagerWorkspacePathEntity> ::=
|
||||||
|
<TagManagerWorkspacePathList> |
|
||||||
|
(select <FileSelector>|<CSVFileSelector>) |
|
||||||
<TasklistEntity> ::=
|
<TasklistEntity> ::=
|
||||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||||
<TasklistIDTaskIDEntity> ::=
|
<TasklistIDTaskIDEntity> ::=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Domain Shared Contacts - Global Address List
|
# Domain Shared Contacts
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
@@ -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.
|
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.
|
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.
|
`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
|
|
||||||
```
|
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
You can download and install the current GAM7 release from the [GitHub Releases](https://github.com/GAM-team/GAM/releases/latest) page.
|
You can download and install the current GAM7 release from the [GitHub Releases](https://github.com/GAM-team/GAM/releases/latest) page.
|
||||||
Choose one of the following:
|
Choose one of the following:
|
||||||
|
|
||||||
|
## Executable, Automatic
|
||||||
|
|
||||||
* Executable Archive, Automatic, Linux/Mac OS/Google Cloud Shell/Raspberry Pi/ChromeOS
|
* Executable Archive, Automatic, Linux/Mac OS/Google Cloud Shell/Raspberry Pi/ChromeOS
|
||||||
- Start a terminal session and execute one of the following commands:
|
- Start a terminal session and execute one of the following commands:
|
||||||
- New install, default path `$HOME/bin`
|
- New install, default path `$HOME/bin`
|
||||||
@@ -16,6 +18,12 @@ Choose one of the following:
|
|||||||
By default, a folder, `gam7`, is created in the default or specified path and the files are downloaded into that folder.
|
By default, a folder, `gam7`, is created in the default or specified path and the files are downloaded into that folder.
|
||||||
Add the `-s` option to the end of the above commands to suppress creating the `gam7` folder; the files are downloaded directly into the default or specified path.
|
Add the `-s` option to the end of the above commands to suppress creating the `gam7` folder; the files are downloaded directly into the default or specified path.
|
||||||
|
|
||||||
|
If, when executing one of the above commands, you get an error message stating that Python is not installed,
|
||||||
|
go here [Python](https://www.python.org/downloads/) and download/install Python. When the installation is complete,
|
||||||
|
start a new terminal session and reissue the command from above.
|
||||||
|
|
||||||
|
## Executable, Manual
|
||||||
|
|
||||||
* Executable Archive, Manual, Linux/Google Cloud Shell
|
* Executable Archive, Manual, Linux/Google Cloud Shell
|
||||||
- `gam-7.wx.yz-linux-x86_64-glibc2.35.tar.xz`
|
- `gam-7.wx.yz-linux-x86_64-glibc2.35.tar.xz`
|
||||||
- `gam-7.wx.yz-linux-x86_64-glibc2.39.tar.xz`
|
- `gam-7.wx.yz-linux-x86_64-glibc2.39.tar.xz`
|
||||||
@@ -65,6 +73,8 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
- Download the installer and run it.
|
- Download the installer and run it.
|
||||||
- Start a Command Prompt/PowerShell session.
|
- Start a Command Prompt/PowerShell session.
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
* Source, all platforms
|
* Source, all platforms
|
||||||
- `Source code(zip)`
|
- `Source code(zip)`
|
||||||
- `Source code(tar.gz)`
|
- `Source code(tar.gz)`
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ ENTITY_IS_A_GROUP_RC = 22
|
|||||||
ENTITY_IS_A_GROUP_ALIAS_RC = 23
|
ENTITY_IS_A_GROUP_ALIAS_RC = 23
|
||||||
ENTITY_IS_AN_UNMANAGED_ACCOUNT_RC = 24
|
ENTITY_IS_AN_UNMANAGED_ACCOUNT_RC = 24
|
||||||
ORGUNIT_NOT_EMPTY_RC = 25
|
ORGUNIT_NOT_EMPTY_RC = 25
|
||||||
|
USER_SUSPENDED_RC = 26
|
||||||
CHECK_USER_GROUPS_ERROR_RC = 29
|
CHECK_USER_GROUPS_ERROR_RC = 29
|
||||||
ORPHANS_COLLECTED_RC = 30
|
ORPHANS_COLLECTED_RC = 30
|
||||||
# Warnings/Errors
|
# Warnings/Errors
|
||||||
|
|||||||
@@ -10,6 +10,521 @@ 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
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 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
|
||||||
|
incorrect warning message like the following when `redirect csv <FileName> multiprocess` was specified.
|
||||||
|
```
|
||||||
|
WARNING: csv_output_row_filter column "^name$" does not match any output columns
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.07.07
|
||||||
|
|
||||||
|
Fixed bug in `gam report <ActivityApplictionName> ... countsonly eventrowfilter` that issued an
|
||||||
|
incorrect warning message like the following when `redirect csv <FileName> multiprocess` was specified.
|
||||||
|
```
|
||||||
|
WARNING: csv_output_row_filter column "^doc_title$" does not match any output columns
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.07.06
|
||||||
|
|
||||||
|
Added option `eventrowfilter` to `gam calendars <CalendarEntity> print events ... countsonly`
|
||||||
|
and `gam <UserTypeEntity> print events <UserCalendarEntity> ... countsonly` that causes
|
||||||
|
GAM to apply `config csv_output_row_filter` to the event details rather than the event counts.
|
||||||
|
This will be useful when `<EventSelectProperty>` and `<EventMatchProperty>` do not have the
|
||||||
|
capabilty to select the events of interest; e.g., you want to filter based on the event `created` property.
|
||||||
|
|
||||||
|
Dropped the extraneous `id` column for `gam calendars <CalendarEntity> print events ... countsonly`
|
||||||
|
and `gam <UserTypeEntity> print events <UserCalendarEntity> ... countsonly`.
|
||||||
|
|
||||||
|
### 7.07.05
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> move drivefile` to recognize the API error: `ERROR: 400: shareOutWarning`.
|
||||||
|
|
||||||
|
### 7.07.04
|
||||||
|
|
||||||
|
Updated `gam create vaultexport ... rooms <ChatSpaceList>` to strip `spaces/` from the Chat Space IDs.
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> copy drivefile` to recognize the API error: `ERROR: 400: shareOutWarning`.
|
||||||
|
|
||||||
|
### 7.07.03
|
||||||
|
|
||||||
|
Updated `gam create vaultexport` to allow allow specifying a list of items in a search method
|
||||||
|
with `shareddrives|rooms|sitesurl select <FileSelector>|<CSVFileSelector>`.
|
||||||
|
|
||||||
|
### 7.07.02
|
||||||
|
|
||||||
|
Fixed bug in `redirect csv ... transpose` where a CSV file with multiple rows was not properly transposed.
|
||||||
|
|
||||||
|
### 7.07.01
|
||||||
|
|
||||||
|
Fixed bug in `gam print|show chromepolicies` that caused a trap. Made additional
|
||||||
|
updates to handle changes in the Chrome Policy API.
|
||||||
|
|
||||||
|
### 7.07.00
|
||||||
|
|
||||||
|
As of mid-October 2024, Google deprecated the API that retrieved the Global Address List.
|
||||||
|
|
||||||
|
The following commands have been eliminated.
|
||||||
|
```
|
||||||
|
gam info gal
|
||||||
|
gam print gal
|
||||||
|
gam show gal
|
||||||
|
```
|
||||||
|
|
||||||
|
These commands are a work-around for `gam print gal`.
|
||||||
|
```
|
||||||
|
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" redirect csv ./UserGAL.csv print users fields name,gal
|
||||||
|
gam config csv_output_row_filter "includeInGlobalAddressList:boolean:true" batch_size 25 redirect csv ./GroupGAL.csv print groups fields name,gal
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.06.14
|
||||||
|
|
||||||
|
Updated `create|update adminrole` to allow specifying a collection of privileges
|
||||||
|
with `privileges select <FileSelector>|<CSVFileSelector>` which makes copying roles much simpler.
|
||||||
|
|
||||||
|
Added option `role <RoleItem>` to `gam print|show adminroles` to allow display of information
|
||||||
|
for a specific role.
|
||||||
|
|
||||||
|
### 7.06.13
|
||||||
|
|
||||||
|
Updated `gam print group-members ... recursive` and `gam print cigroup-members ... recursive`
|
||||||
|
to expand groups representing chat spaces.
|
||||||
|
|
||||||
|
### 7.06.12
|
||||||
|
|
||||||
|
Deleted commands to display Analytic UA properties; the API has been deprecated.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> print|show analyticuaproperties
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.06.11
|
||||||
|
|
||||||
|
Improved `gam checkconn`.
|
||||||
|
|
||||||
|
Updated `gam print group-members` and `gam print cigroup-members` to recognize members
|
||||||
|
that are groups representing chat spaces. For now, these groups are not expanded when
|
||||||
|
`recursive` is specified.
|
||||||
|
|
||||||
### 7.06.10
|
### 7.06.10
|
||||||
|
|
||||||
Added the following license SKU.
|
Added the following license SKU.
|
||||||
|
|||||||
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> ::=
|
<DataTransferService> ::=
|
||||||
calendar|
|
calendar|
|
||||||
currents|
|
datastudio|lookerstudio|"looker studio"|
|
||||||
datastudio|lookerstudio|"google data studio"|
|
|
||||||
drive|gdrive|googledrive|"drive and docs"
|
drive|gdrive|googledrive|"drive and docs"
|
||||||
<DataTransferServiceList> ::= "<DataTransferService>(,<DataTransferService>)*"
|
<DataTransferServiceList> ::= "<DataTransferService>(,<DataTransferService>)*"
|
||||||
|
|
||||||
@@ -38,7 +37,7 @@ gam create|add datatransfer|transfer <OldOwnerID> <DataTransferServiceList> <New
|
|||||||
(<ParameterKey> <ParameterValue>)*
|
(<ParameterKey> <ParameterValue>)*
|
||||||
[wait <Integer> <Integer>]
|
[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
|
* `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**
|
* `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
|
* `all` or `privacy_level private,shared` - Transfer all files
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ gam update group|groups <GroupEntity> create|add [<GroupRole>]
|
|||||||
[preview] [actioncsv]
|
[preview] [actioncsv]
|
||||||
<UserItem>|<UserTypeEntity>
|
<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
|
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.
|
`<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
|
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
|
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
|
## Manage groups
|
||||||
|
|
||||||
These commands allow you to create, update and delete groups.
|
These commands allow you to create, update and delete groups.
|
||||||
|
|||||||
@@ -251,10 +251,10 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin$ gam version
|
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
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||||
GAM 7.06.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.15.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.3 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.4.1 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
Path: /Users/admin/bin/gam7
|
Path: /Users/admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|
||||||
@@ -989,9 +989,9 @@ writes the credentials into the file oauth2.txt.
|
|||||||
C:\>del C:\GAMConfig\oauth2.txt
|
C:\>del C:\GAMConfig\oauth2.txt
|
||||||
C:\>gam version
|
C:\>gam version
|
||||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||||
GAM 7.06.10 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.15.01 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
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
|
Windows-10-10.0.17134 AMD64
|
||||||
Path: C:\GAM7
|
Path: C:\GAM7
|
||||||
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|||||||
@@ -1,20 +1,14 @@
|
|||||||
# Install GAM as Python Library
|
# 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.
|
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:
|
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:
|
Or a pyproject.toml file:
|
||||||
@@ -23,13 +17,13 @@ Or a pyproject.toml file:
|
|||||||
name = "your-project"
|
name = "your-project"
|
||||||
# ...
|
# ...
|
||||||
dependencies = [
|
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
|
## Using the library
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
- [Synchronize licenses](#synchronize-licenses)
|
- [Synchronize licenses](#synchronize-licenses)
|
||||||
|
|
||||||
## API documentation
|
## 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
|
## License Products and SKUs
|
||||||
* [Product and SKU IDs](https://developers.google.com/admin-sdk/licensing/v1/how-tos/products)
|
* [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 | 1010470004 | geminiedu |
|
||||||
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
||||||
| Gemini Enterprise | 1010470001 | geminient | duetai |
|
| Gemini Enterprise | 1010470001 | geminient | duetai |
|
||||||
|
| Google AI Ultra for Business | 1010470008 | geminiultra |
|
||||||
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
||||||
| Google Chrome Device Management | Google-Chrome-Device-Management | cdm |
|
| Google Chrome Device Management | Google-Chrome-Device-Management | cdm |
|
||||||
| Google Drive Storage 16TB | Google-Drive-storage-16TB | 16tb |
|
| Google Drive Storage 16TB | Google-Drive-storage-16TB | 16tb |
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||||
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
||||||
|
<ChromeProfileNameList> ::= "<ChromeProfileName>(,<ChromeProfileName>)*"
|
||||||
|
<ChromeProfileCommandNameList> ::= "<ChromeProfileCommandName>(,<ChromeProfileCommandName>)*"
|
||||||
<CIGroupAliasList> ::= "<CIGroupAlias>(,<CIGroupAlias>)*"
|
<CIGroupAliasList> ::= "<CIGroupAlias>(,<CIGroupAlias>)*"
|
||||||
<CIGroupMemberTypeList> ::= "<CIGroupMemberType>(,<CIGroupMemberType>)*"
|
<CIGroupMemberTypeList> ::= "<CIGroupMemberType>(,<CIGroupMemberType>)*"
|
||||||
<CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
|
<CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
|
||||||
@@ -96,6 +98,9 @@
|
|||||||
<SharedDriveACLRoleList> ::= "<SharedDriveACLRole>(,<SharedDriveACLRole>)*"
|
<SharedDriveACLRoleList> ::= "<SharedDriveACLRole>(,<SharedDriveACLRole>)*"
|
||||||
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
||||||
<StringList> ::= "<String>(,<String>)*"
|
<StringList> ::= "<String>(,<String>)*"
|
||||||
|
<TagManagerAccountPathList> ::= "<TagManagerAccountPath>(,<TagManagerAccountPath>)*"
|
||||||
|
<TagManagerContainerPathList> ::= "<TagManagerContainerPath>(,<TagManagerContainerPath>)*"
|
||||||
|
<TagManagerWorkspacePathList> ::= "<TagManagerWorkspacePath>(,<TagManagerWorkspacePath>)*"
|
||||||
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
||||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||||
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
||||||
|
|||||||
@@ -39,19 +39,18 @@ config csv_output_row_filter "'\"accounts:used_quota_in_mb\":count>15000'"
|
|||||||
## Activity reports
|
## Activity reports
|
||||||
```
|
```
|
||||||
<ActivityApplicationName> ::=
|
<ActivityApplicationName> ::=
|
||||||
access|accesstransparency|
|
accesstransparency|access|
|
||||||
admin|
|
admin|
|
||||||
calendar|calendars|
|
calendar|calendars|
|
||||||
chat|
|
chat|
|
||||||
chrome|
|
chrome|
|
||||||
|
classroom|
|
||||||
contextawareaccess|
|
contextawareaccess|
|
||||||
currents|gplus|google+|
|
gplus|currents|google+|
|
||||||
datastudio|
|
datastudio|
|
||||||
devices|mobile|
|
|
||||||
domain|
|
|
||||||
drive|doc|docs|
|
drive|doc|docs|
|
||||||
gcp|
|
gcp|cloud|
|
||||||
gemini|geminiforworkspace|
|
geminiinworkspaceapps|gemini|geminiforworkspace|
|
||||||
groups|group|
|
groups|group|
|
||||||
groupsenterprise|enterprisegroups|
|
groupsenterprise|enterprisegroups|
|
||||||
jamboard|
|
jamboard|
|
||||||
@@ -69,7 +68,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
|||||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
||||||
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[filtertime<String> <Time>] [filter|filters <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[event|events <EventNameList>] [ip <String>]
|
[event|events <EventNameList>] [ip <String>]
|
||||||
[groupidfilter <String>]
|
[groupidfilter <String>]
|
||||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||||
@@ -364,7 +363,7 @@ gam report users|user [todrive <ToDriveAttribute>*]
|
|||||||
[(date <Date>)|(range <Date> <Date>)|
|
[(date <Date>)|(range <Date> <Date>)|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
||||||
[filtertime<String> <Time>] [filter|filters <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
||||||
[aggregatebydate|aggregatebyuser [Boolean]]
|
[aggregatebydate|aggregatebyuser [Boolean]]
|
||||||
[maxresults <Number>]
|
[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.
|
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.
|
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
|
## Manage Resold Subscriptions
|
||||||
```
|
```
|
||||||
gam create resoldsubscription <CustomerID> (sku <SKUID>)
|
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>)
|
(seats <Number>)
|
||||||
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
||||||
gam update resoldsubscription <CustomerID> <SKUID>
|
gam update resoldsubscription <CustomerID> <SKUID>
|
||||||
|
|||||||
@@ -390,14 +390,14 @@ gam delete building <BuildingID>
|
|||||||
gam info building <BuildingID>
|
gam info building <BuildingID>
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam show buildings
|
gam show buildings
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
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 buildings [todrive <ToDriveAttribute>*]
|
gam print buildings [todrive <ToDriveAttribute>*]
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
[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,
|
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)
|
- [Delete a Shared Drive](#delete-a-shared-drive)
|
||||||
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
||||||
- [Display Shared Drives](#display-shared-drives)
|
- [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 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 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 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)
|
- [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 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)
|
- [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)
|
- [Clean up scammed Shared Drives](#clean-up-scammed-shared-drives)
|
||||||
|
- [Delete old empty Shared Drives](#delete-old-empty-shared-drives)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Drive API - Drives](https://developers.google.com/drive/api/reference/rest/v3/drives)
|
* [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)
|
* [Shared Drives Search](https://developers.google.com/drive/api/guides/search-shareddrives)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
|
* [`<FileSelector> | <CSVFileSelector>`](Collections-of-Items)
|
||||||
|
|
||||||
```
|
```
|
||||||
<ColorHex> ::= "#<Hex><Hex><Hex><Hex><Hex><Hex>"
|
<ColorHex> ::= "#<Hex><Hex><Hex><Hex><Hex><Hex>"
|
||||||
<ColorNameGoogle> ::=
|
<ColorNameGoogle> ::=
|
||||||
@@ -76,6 +81,9 @@
|
|||||||
```
|
```
|
||||||
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||||
|
|
||||||
|
<OrganizerType> ::= user|group
|
||||||
|
<OrganizerTypeList> ::= "<OrganizerType>(,<OrganizerType>)*"
|
||||||
|
|
||||||
<OrgUnitID> ::= id:<String>
|
<OrgUnitID> ::= id:<String>
|
||||||
<OrgUnitPath> ::= /|(/<String>)+
|
<OrgUnitPath> ::= /|(/<String>)+
|
||||||
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
||||||
@@ -174,6 +182,7 @@
|
|||||||
createdtime|
|
createdtime|
|
||||||
id|
|
id|
|
||||||
name|
|
name|
|
||||||
|
restrictions|
|
||||||
themeid
|
themeid
|
||||||
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
||||||
|
|
||||||
@@ -194,6 +203,8 @@
|
|||||||
allowcontentmanagerstosharefolders|
|
allowcontentmanagerstosharefolders|
|
||||||
copyrequireswriterpermission|
|
copyrequireswriterpermission|
|
||||||
domainusersonly|
|
domainusersonly|
|
||||||
|
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||||
|
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||||
drivemembersonly|teammembersonly|
|
drivemembersonly|teammembersonly|
|
||||||
sharingfoldersrequiresorganizerpermission
|
sharingfoldersrequiresorganizerpermission
|
||||||
|
|
||||||
@@ -226,29 +237,29 @@ Three forms of the commands are available:
|
|||||||
|
|
||||||
## Display Shared Drive themes
|
## Display Shared Drive themes
|
||||||
```
|
```
|
||||||
gam show teamdrivethemes
|
gam show shareddrivethemes
|
||||||
```
|
```
|
||||||
## Manage Shared Drives
|
## Manage Shared Drives
|
||||||
|
|
||||||
## Create a Shared Drive
|
## Create a Shared Drive
|
||||||
The user that creates a Shared Drive is given the permission role organizer for the 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>)|
|
[(theme|themeid <String>)|
|
||||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[hide <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
||||||
[adminaccess|asadmin]
|
[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
|
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||||
* `<Float>` - X coordinate, typically 0.0
|
* `<Float>` - X coordinate, typically 0.0
|
||||||
* `<Float>` - Y coordinate, typically 0.0
|
* `<Float>` - Y coordinate, typically 0.0
|
||||||
* `<Float>` - width, typically 1.0
|
* `<Float>` - width, typically 1.0
|
||||||
* `color` - set the Shared Drive color
|
* `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
|
* `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.
|
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`:
|
To retrieve the Shared Drive ID with `returnidonly`:
|
||||||
```
|
```
|
||||||
Linux/MacOS
|
Linux/MacOS
|
||||||
teamDriveId=$(gam create teamdrive ... returnidonly)
|
teamDriveId=$(gam create shareddrive ... returnidonly)
|
||||||
Windows PowerShell
|
Windows PowerShell
|
||||||
$teamDriveId = & gam create teamdrive ... returnidonly
|
$teamDriveId = & gam create shareddrive ... returnidonly
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bulk Create Shared Drives
|
## 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.
|
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
|
This will create a three column CSV file SharedDrivesCreated.csv with columns: User,name,id
|
||||||
* There will be a row for each Shared Drive.
|
* 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.
|
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]
|
[adminaccess|asadmin]
|
||||||
[(theme|themeid <String>)|
|
[(theme|themeid <String>)|
|
||||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[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
|
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||||
* `color` - set the Shared Drive color
|
* `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
|
* `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
|
* `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
|
## Delete a Shared Drive
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] delete teamdrive <SharedDriveEntity>
|
gam [<UserTypeEntity>] delete shareddrive <SharedDriveEntity>
|
||||||
[adminaccess|asadmin] [allowitemdeletion]
|
[adminaccess|asadmin] [allowitemdeletion]
|
||||||
```
|
```
|
||||||
By default, deleting a Shared Drive that contains any files/folders will fail.
|
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
|
## Change Shared Drive visibility
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] hide teamdrive <SharedDriveEntity>
|
gam [<UserTypeEntity>] hide shareddrive <SharedDriveEntity>
|
||||||
gam [<UserTypeEntity>] unhide teamdrive <SharedDriveEntity>
|
gam [<UserTypeEntity>] unhide shareddrive <SharedDriveEntity>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Display Shared Drives
|
## Display Shared Drives
|
||||||
These commands are used to get information about Shared Drives themselves, not the files/folders on the 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]
|
[adminaccess|asadmin]
|
||||||
[fields <SharedDriveFieldNameList>] [formatjson]
|
[fields <SharedDriveFieldNameList>] [formatjson]
|
||||||
gam [<UserTypeEntity>] show teamdriveinfo <SharedDriveEntity>
|
gam [<UserTypeEntity>] show shareddriveinfo <SharedDriveEntity>
|
||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[fields <SharedDriveFieldNameList>] [formatjson]
|
[fields <SharedDriveFieldNameList>] [formatjson]
|
||||||
```
|
```
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
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 [<UserTypeEntity>] show teamdrives
|
gam [<UserTypeEntity>] show shareddrives
|
||||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[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:
|
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
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `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
|
* `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.
|
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 [<UserTypeEntity>] print teamdrives [todrive <ToDriveAttribute>*]
|
gam [<UserTypeEntity>] print shareddrives [todrive <ToDriveAttribute>*]
|
||||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[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:
|
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
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `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
|
* `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,
|
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.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
@@ -398,50 +421,116 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
### Examples
|
### Examples
|
||||||
Print information about all Shared Drives in the organization.
|
Print information about all Shared Drives in the organization.
|
||||||
```
|
```
|
||||||
gam print teamdrives
|
gam print shareddrives
|
||||||
gam user admin@domain.com print teamdrives adminaccess
|
gam user admin@domain.com print shareddrives adminaccess
|
||||||
```
|
```
|
||||||
Print information about Shared Drives that have admin@domain.com as a member.
|
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
|
## 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
|
## 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
|
## Display all Shared Drives with a specific organizer
|
||||||
Substitute actual email address for `organizer@domain.com`.
|
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
|
## Display all Shared Drives without a specific organizer
|
||||||
Substitute actual email address for `organizer@domain.com`.
|
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
|
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 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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Display List of Shared Drives in an Organizational Unit
|
## 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.
|
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 shareddrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||||
gam show teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
gam print shareddrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||||
gam print teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
|
||||||
```
|
```
|
||||||
Alternative method; `<OrgUnitPath>` defaults to `/`.
|
Alternative method; `<OrgUnitPath>` defaults to `/`.
|
||||||
```
|
```
|
||||||
@@ -453,6 +542,31 @@ gam print oushareddrives [todrive <ToDriveAttribute>*]
|
|||||||
[formatjson [quotechar <Character>]]
|
[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
|
## Manage Shared Drive access
|
||||||
These commands are used to manage the ACLs on Shared Drives themselves, not the files/folders on the Shared Drives.
|
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.
|
* `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.
|
* `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>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
gam [<UserTypeEntity>] sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
gam [<UserTypeEntity>] sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
@@ -547,7 +661,7 @@ gam [<UserTypeEntity>] print drivefileacls <SharedDriveEntityAdmin> [todrive <To
|
|||||||
### Examples:
|
### Examples:
|
||||||
Find all the organizers and file organizers on the Golgafrincham shared drive in CSV form.
|
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.
|
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
|
## Display Shared Drive access for selected Shared Drives
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] show teamdriveacls
|
gam [<UserTypeEntity>] show shareddriveacls
|
||||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
@@ -587,7 +701,7 @@ gam [<UserTypeEntity>] show teamdriveacls
|
|||||||
[shownopermissionsdrives false|true|only]
|
[shownopermissionsdrives false|true|only]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
gam [<UserTypeEntity>] print teamdriveacls [todrive <ToDriveAttribute>*]
|
gam [<UserTypeEntity>] print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[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.
|
* `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
|
* `<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.
|
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
|
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
|
### Examples
|
||||||
Find all organizers and viewers on the shared drive Heart of Gold in CSV form.
|
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.
|
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.
|
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.
|
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
|
## Display ACLs for Shared Drives with no organizers
|
||||||
### For all Shared Drives
|
### For all Shared Drives
|
||||||
```
|
```
|
||||||
One row per Shared Drive, all ACLs on the same row
|
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
|
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
|
### 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
|
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
|
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
|
### For all Shared Drives
|
||||||
```
|
```
|
||||||
One row per Shared Drive, all ACLs on the same row
|
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
|
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
|
### 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
|
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
|
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).
|
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
|
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
|
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
|
### 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).
|
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
|
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
|
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
|
### Add an organizer from your domain
|
||||||
Sustitute an appropriate value for `admin@domain.com`.
|
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
|
### 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.
|
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
|
### 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.
|
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"
|
||||||
|
```
|
||||||
@@ -6,14 +6,13 @@
|
|||||||
- [Display Analytic Account Summaries](#display-analytic-account-summaries)
|
- [Display Analytic Account Summaries](#display-analytic-account-summaries)
|
||||||
- [Display Analytic Properties](#display-analytic-properties)
|
- [Display Analytic Properties](#display-analytic-properties)
|
||||||
- [Display Analytic Datastreams](#display-analytic-datastreams)
|
- [Display Analytic Datastreams](#display-analytic-datastreams)
|
||||||
- [Display Analytic UA Properties](#display-analytic-ua-properties)
|
|
||||||
- [Examples](#examples)
|
- [Examples](#examples)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Analytics Admin API](https://developers.google.com/analytics/devguides/config/admin/v1/rest)
|
* [Analytics Admin API](https://developers.google.com/analytics/devguides/config/admin/v1/rest)
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
To use these commands you must add 'Analytics API' and 'Analytics Admin API' to your project and update your service account authorization.
|
To use these commands you must add 'Analytics Admin API' to your project and update your service account authorization.
|
||||||
```
|
```
|
||||||
gam update project
|
gam update project
|
||||||
gam user user@domain.com update serviceaccount
|
gam user user@domain.com update serviceaccount
|
||||||
@@ -142,37 +141,6 @@ 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.
|
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.
|
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||||
|
|
||||||
## Display Analytic UA Properties
|
|
||||||
```
|
|
||||||
gam <UserTypeEntity> show analyticuaproperties
|
|
||||||
accountid [accounts/]<String>
|
|
||||||
[maxresults <Integer>]
|
|
||||||
[formatjson]
|
|
||||||
```
|
|
||||||
The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
|
|
||||||
|
|
||||||
By default, GAM asks the API for 50 properties per page of results,
|
|
||||||
* `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
|
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
|
||||||
* `formatjson` - Display the fields in JSON format.
|
|
||||||
```
|
|
||||||
gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
|
|
||||||
accountid [accounts/]<String>
|
|
||||||
[maxresults <Integer>]
|
|
||||||
[formatjson [quotechar <Character>]]
|
|
||||||
```
|
|
||||||
The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
|
|
||||||
|
|
||||||
By default, GAM asks the API for 50 properties per page of results,
|
|
||||||
* `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
|
|
||||||
|
|
||||||
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
|
## Examples
|
||||||
Get all analytic accounts
|
Get all analytic accounts
|
||||||
@@ -189,8 +157,3 @@ Get all analytic account properties (GA4)
|
|||||||
```
|
```
|
||||||
gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./GA4AnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticproperties filter "parent:~~name~~"
|
gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./GA4AnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticproperties filter "parent:~~name~~"
|
||||||
```
|
```
|
||||||
|
|
||||||
Get all analytic account properties (UA)
|
|
||||||
```
|
|
||||||
gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./UAAnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticuaproperties accountid "~~name~~"
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -671,8 +671,9 @@ By default, Gam displays event details, use `countsonly` to display only the num
|
|||||||
|
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
|
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
|
||||||
[fields <EventFieldNameList>] [showdayofweek]
|
[fields <EventFieldNameList>] [showdayofweek]
|
||||||
[countsonly] [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
[countsonly]
|
||||||
|
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
|
In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
|
||||||
|
|
||||||
@@ -688,6 +689,11 @@ By default, Gam displays the information as columns of fields; the following opt
|
|||||||
|
|
||||||
By default, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
By default, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
||||||
|
|
||||||
|
When `countsonly` is specified, the `eventrowfilter` option causes
|
||||||
|
GAM to apply `config csv_output_row_filter` to the event details rather than the event counts.
|
||||||
|
This will be useful when `<EventSelectProperty>` and `<EventMatchProperty>` do not have the
|
||||||
|
capabilty to select the events of interest; e.g., you want to filter based on the event `created` property.
|
||||||
|
|
||||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
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.
|
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.
|
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||||
|
|||||||
@@ -12,15 +12,16 @@
|
|||||||
- [Manage Chat Messages](#manage-chat-messages)
|
- [Manage Chat Messages](#manage-chat-messages)
|
||||||
- [Display Chat Messages](#display-chat-messages)
|
- [Display Chat Messages](#display-chat-messages)
|
||||||
- [Display Chat Events](#display-chat-events)
|
- [Display Chat Events](#display-chat-events)
|
||||||
|
- [Manage Chat Emojis](#manage-chat-emojis)
|
||||||
|
- [Display Chat Emojis](#display-chat-emojis)
|
||||||
- [Bulk Operations](#bulk-operations)
|
- [Bulk Operations](#bulk-operations)
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
These features were added in version 6.60.00.
|
|
||||||
|
|
||||||
To use these commands you must update your service account authorization.
|
To use these commands you must update your service account authorization.
|
||||||
```
|
```
|
||||||
gam user user@domain.com update serviceaccount
|
gam user user@domain.com update serviceaccount
|
||||||
|
|
||||||
|
[*] 3) Chat API - Custom Emojis (supports readonly)
|
||||||
[*] 4) Chat API - Memberships (supports readonly)
|
[*] 4) Chat API - Memberships (supports readonly)
|
||||||
[*] 5) Chat API - Memberships Admin (supports readonly)
|
[*] 5) Chat API - Memberships Admin (supports readonly)
|
||||||
[*] 6) Chat API - Messages (supports readonly)
|
[*] 6) Chat API - Messages (supports readonly)
|
||||||
@@ -42,21 +43,23 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
|
|
||||||
## Set up a Chat Bot
|
## Set up a Chat Bot
|
||||||
|
|
||||||
* Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot; this is required to use the Chat API.
|
* 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.
|
* 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.
|
* 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 Functionality, uncheck both "Receive 1:1 messages" and "Join spaces and group conversations"
|
||||||
* In Connection settings, choose "Cloud Pub/Sub" and enter "no-topic" for the topic name. GAM doesn't yet listen to pub/sub so this option is not used.
|
* 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 Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
|
||||||
* Click Save.
|
* Click Save.
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Overview](https://developers.google.com/workspace/chat/overview)
|
* [Overview](https://developers.google.com/workspace/chat/overview)
|
||||||
* [Chat API](https://developers.google.com/workspace/chat/api/reference/rest)
|
* [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 - 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 - 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)
|
* [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)
|
* [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)
|
* [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)
|
* [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>)|
|
(gdoc <UserGoogleDoc>)|
|
||||||
(gcsdoc <StorageBucketObjectName>))
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
|
|
||||||
|
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
||||||
|
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
||||||
<ChatEvent> ::= spaces/<String>/spaceEvents/<String>
|
<ChatEvent> ::= spaces/<String>/spaceEvents/<String>
|
||||||
<ChatMember> ::= spaces/<String>/members/<String>
|
<ChatMember> ::= spaces/<String>/members/<String>
|
||||||
<ChatMemberList> ::= "<ChatMember>(,<ChatMember>)*"
|
<ChatMemberList> ::= "<ChatMember>(,<ChatMember>)*"
|
||||||
@@ -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\"'
|
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
|
## Bulk Operations
|
||||||
### Display information about all chat spaces for a collection of users
|
### Display information about all chat spaces for a collection of users
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
- [Copy content of My Drive to a Shared Drive](#copy-content-of-my-drive-to-a-shared-drive)
|
- [Copy content of My Drive to a Shared Drive](#copy-content-of-my-drive-to-a-shared-drive)
|
||||||
- [Copy content of a Shared Drive to another Shared Drive](#copy-content-of-a-shared-drive-to-another-shared-drive)
|
- [Copy content of a Shared Drive to another Shared Drive](#copy-content-of-a-shared-drive-to-another-shared-drive)
|
||||||
- [Move files and folders](#move-files-and-folders)
|
- [Move files and folders](#move-files-and-folders)
|
||||||
|
- [Move My Drive folder to Shared Drive](#move-my-drive-folder-to-shared-drive)
|
||||||
- [Simple moves by changing parents](#simple-moves-by-changing-parents)
|
- [Simple moves by changing parents](#simple-moves-by-changing-parents)
|
||||||
- [Move with ownership change](#move-with-ownership-change)
|
- [Move with ownership change](#move-with-ownership-change)
|
||||||
- [Complex moves](#complex-moves)
|
- [Complex moves](#complex-moves)
|
||||||
@@ -17,6 +18,7 @@
|
|||||||
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
||||||
* [Move content to Shared Drives](https://support.google.com/a/answer/7374057)
|
* [Move content to Shared Drives](https://support.google.com/a/answer/7374057)
|
||||||
* [Shared Drive Limits](https://support.google.com/a/users/answer/7338880)
|
* [Shared Drive Limits](https://support.google.com/a/users/answer/7338880)
|
||||||
|
* [Limited and Expansive Access](https://developers.google.com/workspace/drive/api/guides/limited-expansive-access)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||||
@@ -114,6 +116,7 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
|||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
[sendemailifrequired [<Boolean>]]
|
[sendemailifrequired [<Boolean>]]
|
||||||
[verifyorganizer [<Boolean>]]
|
[verifyorganizer [<Boolean>]]
|
||||||
|
[enforceexpansiveaccess [<Boolean>]]
|
||||||
```
|
```
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being copied.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being copied.
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being copied recursively, the files/folders that it contains are referred as `sub`.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being copied recursively, the files/folders that it contains are referred as `sub`.
|
||||||
@@ -428,6 +431,18 @@ gam user user@domain.com copy drivefile teamdriveid 0AC_1AB teamdriveparentid 0A
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Move files and folders
|
## Move files and folders
|
||||||
|
## Move My Drive folder to Shared Drive
|
||||||
|
There are two methods for moving a folder from a My Drive to a Shared Drive:
|
||||||
|
* Drive UI - You can simple drag and drop the folder from the My Drive to the Shared Drive
|
||||||
|
* Google inspects the content of the folder and may not perform the move if:
|
||||||
|
* Files and folders within the selected folder are owned by users outside of your domain
|
||||||
|
* Files and folders within the selected folder are owned by other users inside of your domain but the owner of the original folder has only read access
|
||||||
|
* All folder and files IDs are preserved
|
||||||
|
* GAM
|
||||||
|
* The Drive API doesn't allow moving a folder from a My Drive to a Shared Drive; GAM has to recreate the folders on the Shared Drive, thus changing their IDs
|
||||||
|
* Files are simply moved from their existing My Drive folder to the recreated Shared Drive folder; their IDs do not change
|
||||||
|
* Files owmed by users outside of your domain can't be moved
|
||||||
|
|
||||||
## Simple moves by changing parents
|
## Simple moves by changing parents
|
||||||
Use this command in the following cases:
|
Use this command in the following cases:
|
||||||
* Move a file or folder from one location to another on My Drive
|
* Move a file or folder from one location to another on My Drive
|
||||||
@@ -486,6 +501,7 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
|||||||
[retainsourcefolders [<Boolean>]]
|
[retainsourcefolders [<Boolean>]]
|
||||||
[sendemailifrequired [<Boolean>]]
|
[sendemailifrequired [<Boolean>]]
|
||||||
[verifyorganizer [<Boolean>]]
|
[verifyorganizer [<Boolean>]]
|
||||||
|
[enforceexpansiveaccess [<Boolean>]]
|
||||||
```
|
```
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being moved.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being moved.
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being moved, the files/folders that it contains are referred as `sub`.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being moved, the files/folders that it contains are referred as `sub`.
|
||||||
@@ -646,7 +662,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
|
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.
|
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.
|
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.
|
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.
|
||||||
@@ -660,3 +676,19 @@ If you want the source Shared Drive with ID 0AC_1AB to be contained in a top lev
|
|||||||
```
|
```
|
||||||
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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 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
|
||||||
|
|||||||
@@ -628,10 +628,15 @@ querytime5years -5y query "modifiedTime<'#querytime5years#'"
|
|||||||
|
|
||||||
## File selection of Shared Drive
|
## File selection of Shared Drive
|
||||||
You can limit the selection for files on a specific Shared drive.
|
You can limit the selection for files on a specific Shared drive.
|
||||||
Any query will be applied to the Shared drive.
|
|
||||||
```
|
```
|
||||||
select <SharedDriveEntity>
|
select <SharedDriveEntity>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To apply a query to that Shared Drive.
|
||||||
|
```
|
||||||
|
select <SharedDriveEntity> shareddrivequery "xxx"
|
||||||
|
```
|
||||||
|
|
||||||
## File selection by corpora
|
## File selection by corpora
|
||||||
Select files by corpora.
|
Select files by corpora.
|
||||||
|
|
||||||
@@ -963,7 +968,8 @@ Display a list of file/folder names indented to show structure.
|
|||||||
owners|
|
owners|
|
||||||
parents|
|
parents|
|
||||||
size|
|
size|
|
||||||
trashed
|
trashed|
|
||||||
|
webviewlink
|
||||||
<FileTreeFieldNameList> ::= "<FileTreeFieldName>(,<FileTreeFieldName>)*"
|
<FileTreeFieldNameList> ::= "<FileTreeFieldName>(,<FileTreeFieldName>)*"
|
||||||
|
|
||||||
gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
||||||
@@ -1717,9 +1723,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,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
|
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
|
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,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,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
|
user@domain.com,Trash,Trash,True,True,1,1024,0,1,1024,0,-1,Trash
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
* [Shared Drive Limits](https://support.google.com/a/users/answer/7338880)
|
* [Shared Drive Limits](https://support.google.com/a/users/answer/7338880)
|
||||||
* [My Drive Shared Drive API differences](https://developers.google.com/drive/api/v3/shared-drives-diffs)
|
* [My Drive Shared Drive API differences](https://developers.google.com/drive/api/v3/shared-drives-diffs)
|
||||||
* [Google Docs API](https://developers.google.com/docs/api/reference/rest)
|
* [Google Docs API](https://developers.google.com/docs/api/reference/rest)
|
||||||
* [Limited Access](https://workspaceupdates.googleblog.com/2025/02/updating-access-experience-in-google-drive.html)
|
* [Limited and Expansive Access](https://developers.google.com/workspace/drive/api/guides/limited-expansive-access)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
||||||
|
* [Limited and Expansive Access](https://developers.google.com/workspace/drive/api/guides/limited-expansive-access)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||||
@@ -60,6 +61,7 @@ Use [Users - Drive - Transfer](Users-Drive-Transfer) for more complex ownership
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> transfer ownership <DriveFileEntity> <UserItem>
|
gam <UserTypeEntity> transfer ownership <DriveFileEntity> <UserItem>
|
||||||
[<DriveFileParentAttribute>] [includetrashed] [norecursion [<Boolean>]]
|
[<DriveFileParentAttribute>] [includetrashed] [norecursion [<Boolean>]]
|
||||||
|
[enforceexpansiveaccess [<Boolean>]]
|
||||||
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
@@ -99,6 +101,7 @@ gam <UserTypeEntity> claim ownership <DriveFileEntity>
|
|||||||
[skipids <DriveFileEntity>] [onlyusers|skipusers <UserTypeEntity>] [subdomains <DomainNameEntity>]
|
[skipids <DriveFileEntity>] [onlyusers|skipusers <UserTypeEntity>] [subdomains <DomainNameEntity>]
|
||||||
[restricted [<Boolean>]] [writerscanshare|writerscantshare [<Boolean>]]
|
[restricted [<Boolean>]] [writerscanshare|writerscantshare [<Boolean>]]
|
||||||
[keepuser | (retainrole reader|commenter|writer|editor|none)] [noretentionmessages]
|
[keepuser | (retainrole reader|commenter|writer|editor|none)] [noretentionmessages]
|
||||||
|
[enforceexpansiveaccess [<Boolean>]]
|
||||||
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -7,12 +7,14 @@
|
|||||||
- [Manage file permissions/sharing](#manage-file-permissionssharing)
|
- [Manage file permissions/sharing](#manage-file-permissionssharing)
|
||||||
- [Display file permissions/sharing](#display-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 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)
|
- [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)
|
- [Map All ACLs from an old domain to a new domain](#map-all-acls-from-an-old-domain-to-a-new-domain)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Drive API - Permissions](https://developers.google.com/drive/api/v3/reference/permissions)
|
* [Drive API - Permissions](https://developers.google.com/drive/api/v3/reference/permissions)
|
||||||
* [Shortcuts](https://developers.google.com/drive/api/guides/shortcuts)
|
* [Shortcuts](https://developers.google.com/drive/api/guides/shortcuts)
|
||||||
|
* [Limited and Expansive Access](https://developers.google.com/workspace/drive/api/guides/limited-expansive-access)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||||
@@ -196,7 +198,7 @@ By default, when an ACL is created, GAM outputs details of the ACL as indented k
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
(role <DriveFileACLRole>) [expiration <Time>] [removeexpiration [<Boolean>]]
|
(role <DriveFileACLRole>) [expiration <Time>] [removeexpiration [<Boolean>]]
|
||||||
[updatesheetprotectedranges [<Boolean>]]
|
[updatesheetprotectedranges [<Boolean>]] [enforceexpansiveaccess [<Boolean>]]
|
||||||
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
||||||
```
|
```
|
||||||
There is no change of parents when a new user is updated to be a file's owner.
|
There is no change of parents when a new user is updated to be a file's owner.
|
||||||
@@ -212,6 +214,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 reader or commenter will be removed from existing protected ranges
|
||||||
* ACLs with role writer or higher will be added to 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`
|
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.
|
option; this requires an additional API call per file.
|
||||||
|
|
||||||
@@ -222,7 +230,7 @@ By default, when an ACL is updated, GAM outputs details of the ACL as indented k
|
|||||||
### Delete
|
### Delete
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> delete|del drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> delete|del drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
[updatesheetprotectedranges [<Boolean>]]
|
[updatesheetprotectedranges [<Boolean>]] [enforceexpansiveaccess [<Boolean>]]
|
||||||
[showtitles]
|
[showtitles]
|
||||||
```
|
```
|
||||||
The option `updatesheetprotectedranges` only applies to items in `<DriveFileEntity>` that are Google Sheets.
|
The option `updatesheetprotectedranges` only applies to items in `<DriveFileEntity>` that are Google Sheets.
|
||||||
@@ -232,6 +240,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.
|
* 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
|
* 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`
|
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.
|
option; this requires an additional API call per file.
|
||||||
|
|
||||||
@@ -262,7 +275,13 @@ When adding permissions from JSON data, permissions with `deleted` true are neve
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionIDEntity>
|
gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionIDEntity>
|
||||||
<PermissionMatch>* [<PermissionMatchAction>]
|
<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.
|
When deleting permissions from JSON data, permissions with role `owner` true are never processed.
|
||||||
|
|
||||||
## Display file permissions/sharing
|
## Display file permissions/sharing
|
||||||
@@ -316,13 +335,23 @@ gam redirect csv ./TeamDriveACLs.csv multiprocess csv ./TeamDrives.csv gam print
|
|||||||
## Delete all ACLs except owner from a file
|
## Delete all ACLs except owner from a file
|
||||||
Get the current ACLs.
|
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.
|
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~~"
|
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
|
## Change shares to User1 to shares to User2
|
||||||
```
|
```
|
||||||
# Get files shared to User1
|
# Get files shared to User1
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
||||||
* [Shortcuts](https://developers.google.com/drive/api/guides/shortcuts)
|
* [Shortcuts](https://developers.google.com/drive/api/guides/shortcuts)
|
||||||
* [Prepare account for transfer](https://support.google.com/a/answer/1247799)
|
* [Prepare account for transfer](https://support.google.com/a/answer/1247799)
|
||||||
|
* [Limited and Expansive Access](https://developers.google.com/workspace/drive/api/guides/limited-expansive-access)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||||
@@ -47,6 +48,7 @@ gam <UserTypeEntity> transfer drive <UserItem> [select <DriveFileEntity>]
|
|||||||
[noretentionmessages]
|
[noretentionmessages]
|
||||||
[nonowner_retainrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none]
|
[nonowner_retainrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none]
|
||||||
[nonowner_targetrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none|source]
|
[nonowner_targetrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none|source]
|
||||||
|
[enforceexpansiveaccess [<Boolean>]]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [todrive <ToDriveAttribute>*]
|
[preview] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -49,10 +49,19 @@ gam user user@domain.com update serviceaccount
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> create form
|
gam <UserTypeEntity> create form
|
||||||
title <String> [description <String>] [isquiz [Boolean>]] [<JSONData>]
|
title <String> [description <String>] [isquiz [Boolean>]] [<JSONData>]
|
||||||
|
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
||||||
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
||||||
[(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
[(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.
|
`<JSONData>` is a list of form update requests.
|
||||||
|
|
||||||
* See: https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate
|
* 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>
|
gam <UserTypeEntity> update form <DriveFileEntity>
|
||||||
[title <String>] [description <String>] [isquiz [Boolean>]] [<JSONData>]
|
[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.
|
`<JSONData>` is a list of form update requests.
|
||||||
|
|
||||||
* See: https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate
|
* See: https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate
|
||||||
|
|
||||||
## Extended Example
|
## 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.
|
concerning student classtoom attendance.
|
||||||
The form has two items: Absences and Notes.
|
The form has two items: Absences and Notes.
|
||||||
In `Absences`, the teacher can check `All present.` or check individual student absences.
|
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
|
* `my_forms` - Display responses for all forms owned by the user
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show formresponses <DriveFileEntity>
|
gam <UserTypeEntity> show formresponses <DriveFileEntity>
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[countsonly|formatjson]
|
[countsonly|formatjson]
|
||||||
```
|
```
|
||||||
By default, GAM displays form response details, use the `countsonly` option to get the number of responses but no response details.
|
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:
|
For example, to get the form responses submitted since the beginning of the year:
|
||||||
* `filter timestamp >= 2022-01-01T00:00:00Z`
|
* `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.
|
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:
|
For example, to get the responses submitted in the last four hours:
|
||||||
* `filtertime4h -4h filter "timestamp >= #filtertime4h#`
|
* `filter "timestamp >= #filtertime4h#" filtertime4h -4h`
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
* `formatjson` - Display the form response in JSON format
|
* `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>*]
|
gam <UserTypeEntity> print formresponses <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
[filtertime.* <Time>] [filter <String>]
|
[filter <String> (filtertime<String> <Time>)*]
|
||||||
[countsonly|(formatjson [quotechar <Character>])]
|
[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.
|
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:
|
For example, to get the form responses submitted since the beginning of the year:
|
||||||
* `filter timestamp >= 2022-01-01T00:00:00Z`
|
* `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.
|
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:
|
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
|
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.
|
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
|
# Users - Gmail - Delegates
|
||||||
|
- [Notes](#notes)
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Aliases](#aliases)
|
- [Aliases](#aliases)
|
||||||
@@ -8,6 +9,11 @@
|
|||||||
- [Display Gmail delegates](#display-gmail-delegates)
|
- [Display Gmail delegates](#display-gmail-delegates)
|
||||||
- [Delete all delegates for a user](#delete-all-delegates-for-a-user)
|
- [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
|
## API documentation
|
||||||
* [Gmail API - Delegates](https://developers.google.com/gmail/api/v1/reference/users.settings.delegates)
|
* [Gmail API - Delegates](https://developers.google.com/gmail/api/v1/reference/users.settings.delegates)
|
||||||
* [Delegation Notes](https://support.google.com/a/answer/7223765)
|
* [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.
|
* `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`,
|
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 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 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.
|
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.
|
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>
|
<EmailAddress> ::= <String>@<DomainName>
|
||||||
<UniqueID> ::= id:<String>
|
<UniqueID> ::= id:<String>
|
||||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||||
|
<LabelID> ::= <String>
|
||||||
|
<LabelIDList> ::= "<LabelID>(,<LabelID)*"
|
||||||
<LabelName> ::= <String>
|
<LabelName> ::= <String>
|
||||||
<QueryGmail> ::= <String> See: https://support.google.com/mail/answer/7190
|
<QueryGmail> ::= <String> See: https://support.google.com/mail/answer/7190
|
||||||
<Time> ::=
|
<Time> ::=
|
||||||
@@ -179,7 +181,7 @@ This table and other suggestions came from:
|
|||||||
x400-trace
|
x400-trace
|
||||||
<SMTPHeaderList> ::= "<SMTPDateHeader|SMTPHeader>(,<SMTPDateHeader|SMTPHeader>)*"
|
<SMTPHeaderList> ::= "<SMTPDateHeader|SMTPHeader>(,<SMTPDateHeader|SMTPHeader>)*"
|
||||||
|
|
||||||
<MessageID> ::= <String>
|
<MessageID> ::= <String> # This is the Google internal message ID, not the RFC822 message ID
|
||||||
<MessageIDList> ::= "<MessageID>(,<MessageID>)*"
|
<MessageIDList> ::= "<MessageID>(,<MessageID>)*"
|
||||||
<MessageIDEntity> ::=
|
<MessageIDEntity> ::=
|
||||||
<MessageIDList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<MessageIDList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
@@ -389,6 +391,7 @@ Your command line will have: `embedimage file1.jpg image1` embedimage file2.jpg
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> archive messages <GroupItem>
|
gam <UserTypeEntity> archive messages <GroupItem>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
```
|
```
|
||||||
@@ -400,6 +403,7 @@ Messages are archived to the group specified by `<GroupItem>`.
|
|||||||
|
|
||||||
### Archive a selected set of messages
|
### Archive a selected set of messages
|
||||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select 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
|
* `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.
|
* `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.
|
Export messages in EML format.
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> export message|messages
|
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>]]
|
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||||
gam <UserTypeEntity> export thread|threads
|
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>]]
|
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -459,10 +467,12 @@ See below for message selection.
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||||
[subject <String>] [addorigfieldstosubject]
|
[subject <String>] [addorigfieldstosubject]
|
||||||
gam <UserTypeEntity> forward thread|threads recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward thread|threads recipient|to <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||||
[subject <String>] [addorigfieldstosubject]
|
[subject <String>] [addorigfieldstosubject]
|
||||||
```
|
```
|
||||||
@@ -482,23 +492,28 @@ See below for message selection.
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> delete messages|threads
|
gam <UserTypeEntity> delete messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> modify messages|threads
|
gam <UserTypeEntity> modify messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
||||||
((addlabel <LabelName>)|(removelabel <LabelName>))+
|
((addlabel <LabelName>)|(removelabel <LabelName>))+
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> spam messages|threads
|
gam <UserTypeEntity> spam messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> trash messages|threads
|
gam <UserTypeEntity> trash messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
gam <UserTypeEntity> untrash messages|threads
|
gam <UserTypeEntity> untrash messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
||||||
[csv [todrive <ToDriveAttribute>*]]
|
[csv [todrive <ToDriveAttribute>*]]
|
||||||
```
|
```
|
||||||
@@ -522,6 +537,7 @@ user@domain.com,18e9fc58c5491f4c,Deleted,
|
|||||||
|
|
||||||
### Manage a selected set of messages
|
### Manage a selected set of messages
|
||||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select 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
|
* `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.
|
* `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
|
gam <UserTypeEntity> show messages|threads
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||||
[countsonly|positivecountsonly] [useronly]
|
[countsonly|positivecountsonly] [useronly]
|
||||||
@@ -581,6 +598,7 @@ gam <UserTypeEntity> show messages|threads
|
|||||||
[targetfolder <FilePath>] [overwrite [<Boolean>]]
|
[targetfolder <FilePath>] [overwrite [<Boolean>]]
|
||||||
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||||
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||||
[countsonly|positivecountsonly] [useronly]
|
[countsonly|positivecountsonly] [useronly]
|
||||||
@@ -607,6 +625,7 @@ gam user user@domain.com print|show threads maxmessagesperthread 1
|
|||||||
|
|
||||||
## Display a selected set of messages
|
## Display a selected set of messages
|
||||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select 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
|
* `max_to_xxx` - Limit the number of messages that will be displayed
|
||||||
* `includespamtrash` - Include messages in the Spam and Trash folders
|
* `includespamtrash` - Include messages in the Spam and Trash folders
|
||||||
* `labelmatchpattern <REMatchPattern>` - Only display messages with some label that matches `<REMatchPattern>`
|
* `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```
|
``` gam user paul add sendas marketing@example.com "Paul from Example" replyto paul```
|
||||||
|
|
||||||
## Display sendas
|
## 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> info sendas <EmailAddressEntity> [compact|format|html]
|
||||||
gam <UserTypeEntity> show sendas [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.
|
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]
|
gam <UserTypeEntity> print sendas [compact]
|
||||||
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
[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.
|
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 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]
|
gam <UserTypeEntity> show signature|sig [compact|format|html]
|
||||||
[primary|default] [verifyonly]
|
[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.
|
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]
|
gam <UserTypeEntity> print signature [compact]
|
||||||
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
- [Delete a Shared Drive](#delete-a-shared-drive)
|
- [Delete a Shared Drive](#delete-a-shared-drive)
|
||||||
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
||||||
- [Display Shared Drives](#display-shared-drives)
|
- [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)
|
- [Manage Shared Drive access](#manage-shared-drive-access)
|
||||||
- [Display Shared Drive access](#display-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)
|
- [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>]) |
|
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||||
|
|
||||||
|
<OrganizerType> ::= user|group
|
||||||
|
<OrganizerTypeList> ::= "<OrganizerType>(,<OrganizerType>)*"
|
||||||
|
|
||||||
<OrgUnitID> ::= id:<String>
|
<OrgUnitID> ::= id:<String>
|
||||||
<OrgUnitPath> ::= /|(/<String>)+
|
<OrgUnitPath> ::= /|(/<String>)+
|
||||||
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
||||||
@@ -153,6 +158,7 @@
|
|||||||
createdtime|
|
createdtime|
|
||||||
id|
|
id|
|
||||||
name|
|
name|
|
||||||
|
restrictions|
|
||||||
themeid
|
themeid
|
||||||
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
||||||
|
|
||||||
@@ -175,6 +181,8 @@
|
|||||||
allowcontentmanagerstosharefolders|
|
allowcontentmanagerstosharefolders|
|
||||||
copyrequireswriterpermission|
|
copyrequireswriterpermission|
|
||||||
domainusersonly|
|
domainusersonly|
|
||||||
|
downloadrestrictedforreaders|downloadrestrictions.restrictedforreaders|
|
||||||
|
downloadrestrictedforwriters|downloadrestrictions.restrictedforwriters|
|
||||||
drivemembersonly|teammembersonly|
|
drivemembersonly|teammembersonly|
|
||||||
sharingfoldersrequiresorganizerpermission
|
sharingfoldersrequiresorganizerpermission
|
||||||
|
|
||||||
@@ -199,28 +207,28 @@ sharingfoldersrequiresorganizerpermission true
|
|||||||
|
|
||||||
## Display Shared Drive themes
|
## Display Shared Drive themes
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show teamdrivethemes
|
gam <UserTypeEntity> show shareddrivethemes
|
||||||
```
|
```
|
||||||
## Manage Shared Drives
|
## Manage Shared Drives
|
||||||
|
|
||||||
## Create a Shared Drive
|
## Create a Shared Drive
|
||||||
The user that creates a Shared Drive is given the permission role organizer for the 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>)|
|
[(theme|themeid <String>)|
|
||||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[hide <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
||||||
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
[errorretries <Integer>] [updateinitialdelay <Integer>] [updateretrydelay <Integer>]
|
||||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) | returnidonly]
|
[(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
|
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||||
* `<Float>` - X coordinate, typically 0.0
|
* `<Float>` - X coordinate, typically 0.0
|
||||||
* `<Float>` - Y coordinate, typically 0.0
|
* `<Float>` - Y coordinate, typically 0.0
|
||||||
* `<Float>` - width, typically 1.0
|
* `<Float>` - width, typically 1.0
|
||||||
* `color` - set the Shared Drive color
|
* `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
|
* `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.
|
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`:
|
To retrieve the Shared Drive ID with `returnidonly`:
|
||||||
```
|
```
|
||||||
Linux/MacOS
|
Linux/MacOS
|
||||||
teamDriveId=$(gam user user@domain.com create teamdrive ... returnidonly)
|
teamDriveId=$(gam user user@domain.com create shareddrive ... returnidonly)
|
||||||
Windows PowerShell
|
Windows PowerShell
|
||||||
$teamDriveId = & gam user user@domain.com create teamdrive ... returnidonly
|
$teamDriveId = & gam user user@domain.com create shareddrive ... returnidonly
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bulk Create Shared Drives
|
## 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.
|
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
|
This will create a three column CSV file SharedDriveNamesIDs.csv with columns: User,name,id
|
||||||
* There will be a row for each Shared Drive.
|
* 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.
|
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>)|
|
[(theme|themeid <String>)|
|
||||||
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
([customtheme <DriveFileID> <Float> <Float> <Float>] [color <ColorValue>])]
|
||||||
(<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
([restrictions.]<SharedDriveRestrictionsSubfieldName> <Boolean>)*
|
||||||
[hide|hidden <Boolean>] [ou|org|orgunit <OrgUnitItem>]
|
[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
|
* `customtheme` - set the backgroundImageFile property described here: https://developers.google.com/drive/v3/reference/teamdrives
|
||||||
* `color` - set the Shared Drive color
|
* `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
|
* `hidden <Boolean>` - Set Shared Drive visibility
|
||||||
|
|
||||||
This option is only available when the command is run as an administrator.
|
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
|
## 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.
|
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.
|
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
|
## Change Shared Drive visibility
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> hide teamdrive <SharedDriveEntity>
|
gam <UserTypeEntity> hide shareddrive <SharedDriveEntity>
|
||||||
gam <UserTypeEntity> unhide teamdrive <SharedDriveEntity>
|
gam <UserTypeEntity> unhide shareddrive <SharedDriveEntity>
|
||||||
```
|
```
|
||||||
## Display Shared Drives
|
## Display Shared Drives
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show teamdriveinfo <SharedDriveEntity>
|
gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity>
|
||||||
gam <UserTypeEntity> info teamdrive <SharedDriveEntity>
|
gam <UserTypeEntity> info shareddrive <SharedDriveEntity>
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
[guiroles [<Boolean>] [formatjson]
|
[guiroles [<Boolean>] [formatjson]
|
||||||
gam <UserTypeEntity> show teamdriveinfo <SharedDriveEntity>
|
gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity>
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
[guiroles [<Boolean>] [formatjson]
|
[guiroles [<Boolean>] [formatjson]
|
||||||
gam <UserTypeEntity> show teamdrives
|
gam <UserTypeEntity> show shareddrives
|
||||||
[matchname <REMatchPattern>] (role|roles <SharedDriveACLRoleList>)*
|
[matchname <REMatchPattern>] (role|roles <SharedDriveACLRoleList>)*
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
|
[showwebviewlink text|hyperlink]
|
||||||
[guiroles [<Boolean>] [formatjson]
|
[guiroles [<Boolean>] [formatjson]
|
||||||
```
|
```
|
||||||
By default, Gam displays all Teams Drives accessible by the user.
|
By default, Gam displays all Teams Drives accessible by the user.
|
||||||
* `matchname <REMatchPattern>` - Display Shared Drives with names that match a pattern.
|
* `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.
|
* `(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.
|
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 <UserTypeEntity> print teamdrives [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||||
[matchname <REMatchPattern>] (role|roles <SharedDriveACLRoleList>)*
|
[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.
|
By default, Gam displays all Teams Drives accessible by the user.
|
||||||
* `matchname <REMatchPattern>` - Display Shared Drives with names that match a pattern.
|
* `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.
|
* `(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:
|
The Google Drive API does not list roles for Shared Drives so GAM generates a role from the capabilities:
|
||||||
* `commenter - canComment: True, canEdit: False`
|
* `commenter - canComment: True, canEdit: False`
|
||||||
* `reader - canComment: False, 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.
|
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.
|
`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
|
## Manage Shared Drive access
|
||||||
These commands must be issued by a user with Shared Drive permission role organizer.
|
These commands must be issued by a user with Shared Drive permission role organizer.
|
||||||
### Process single ACLs.
|
### 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
|
## Display Shared Drive access for selected Shared Drives
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show teamdriveacls
|
gam <UserTypeEntity> show shareddriveacls
|
||||||
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[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.
|
* `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
|
* `<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.
|
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
|
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"
|
||||||
|
|
||||||
|
```
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
- [Update a user's attributes with JSON data](#update-a-users-attributes-with-json-data)
|
- [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)
|
- [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)
|
- [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)
|
- [Delete or suspend users](#delete-or-suspend-users)
|
||||||
- [Undelete or unsuspend users](#undelete-or-unsuspend-users)
|
- [Undelete or unsuspend users](#undelete-or-unsuspend-users)
|
||||||
- [Display information about users](#display-information-about-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 counts by OrgUnit](#print-user-counts-by-orgunit)
|
||||||
- [Print user list](#print-user-list)
|
- [Print user list](#print-user-list)
|
||||||
- [Display user counts](#display-user-counts)
|
- [Display user counts](#display-user-counts)
|
||||||
- [Verify domain membership]($verify-domain-membership)
|
- [Verify domain membership](#verify-domain-membership)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Directory API - Users](https://developers.google.com/admin-sdk/directory/reference/rest/v1/users)
|
* [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:
|
Locations:
|
||||||
type: desk
|
type: desk
|
||||||
area: desk
|
area: desk
|
||||||
buildingId: Building-ID
|
buildingId: Building id
|
||||||
buildingName: Building name
|
buildingName: Building name
|
||||||
floorName: Floor name
|
floorName: Floor name
|
||||||
floorSection: Floor section
|
floorSection: Floor section
|
||||||
@@ -359,13 +360,15 @@ External IDs:
|
|||||||
```
|
```
|
||||||
These options will set those values:
|
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
|
organization customtype "" description "Type of employee" costcenter "Cost center" department "Department" title "Job Title" primary
|
||||||
relation manager manageremail@domain.com
|
relation manager manageremail@domain.com
|
||||||
externalid organization "Employee ID"
|
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`.
|
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
|
## Passwords
|
||||||
To set a user's password, you specify a `<Password>` string and a hash method that specifies how to interpret the string
|
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'"
|
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
|
## Delete or suspend users
|
||||||
These commands operate on a single user.
|
These commands operate on a single user.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,19 +1,12 @@
|
|||||||
# Using GAM7 with a delegated admin service account
|
# Using GAM7 with a delegated admin service account
|
||||||
- [Thanks](#thanks)
|
|
||||||
- [Introduction](#introduction)
|
- [Introduction](#introduction)
|
||||||
- [Advantages](#advantages)
|
- [Advantages](#advantages)
|
||||||
- [Disadvantages](#disadvantages)
|
- [Disadvantages](#disadvantages)
|
||||||
- [Setup Steps](#setup-steps)
|
- [Setup Steps](#setup-steps)
|
||||||
|
|
||||||
## Thanks
|
|
||||||
|
|
||||||
Thanks to Jay Lee for the original version of this document.
|
|
||||||
|
|
||||||
## Introduction
|
## 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.
|
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
|
## Advantages
|
||||||
* DASA accounts don’t require a Workspace or Cloud Identity license.
|
* 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!
|
* 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,7 @@ GAM7 version 6.50.00 or higher is required.
|
|||||||
|
|
||||||
## Disadvantages
|
## 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.
|
* 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.
|
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.
|
||||||
* 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.
|
* 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).
|
* 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).
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
* https://support.google.com/vault/answer/2474474
|
* https://support.google.com/vault/answer/2474474
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
|
[Collections of Items](Collections-of-Items)
|
||||||
```
|
```
|
||||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||||
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
|
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||||
@@ -53,6 +54,8 @@
|
|||||||
<RESearchPattern> ::= <RegularExpression>
|
<RESearchPattern> ::= <RegularExpression>
|
||||||
<RESubstitution> ::= <String>>
|
<RESubstitution> ::= <String>>
|
||||||
|
|
||||||
|
<ChatSpace> ::= spaces/<String> | space/<String> | <String>
|
||||||
|
<ChatSpaceList> ::= "<ChatSpace>(,<ChatSpace>)*"
|
||||||
<ExportItem> ::= <UniqueID>|<String>
|
<ExportItem> ::= <UniqueID>|<String>
|
||||||
<ExportStatus> ::= completed|failed|inprogrsss
|
<ExportStatus> ::= completed|failed|inprogrsss
|
||||||
<ExportStatusList> ::= "<ExportStatus>(,<ExportStatus>)*"
|
<ExportStatusList> ::= "<ExportStatus>(,<ExportStatus>)*"
|
||||||
@@ -60,6 +63,9 @@
|
|||||||
<MatterItem> ::= <UniqueID>|<String>
|
<MatterItem> ::= <UniqueID>|<String>
|
||||||
<MatterState> ::= open|closed|deleted
|
<MatterState> ::= open|closed|deleted
|
||||||
<MatterStateList> ::= "<MatterState>(,<MatterState>)*"
|
<MatterStateList> ::= "<MatterState>(,<MatterState>)*"
|
||||||
|
<SharedDriveID> ::= <String>
|
||||||
|
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
||||||
|
<URL> ::= <String>
|
||||||
<URLList> ::= "<URL>(,<URL>)*"
|
<URLList> ::= "<URL>(,<URL>)*"
|
||||||
|
|
||||||
<QueryVaultCorpus> ::= <String>
|
<QueryVaultCorpus> ::= <String>
|
||||||
@@ -199,11 +205,25 @@ This command can be useful for discovering legacy former employee accounts which
|
|||||||
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||||
matter <MatterItem> corpus mail|groups
|
matter <MatterItem> corpus mail|groups
|
||||||
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
||||||
|
[(shareddrives|teamdrives (<TeamDriveIDList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(rooms (<ChatSpaceList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(sitesurl (<URLList>||(select <FileSelector>|<CSVFileSelector>)))]
|
||||||
[scope <all_data|held_data|unprocessed_data>]
|
[scope <all_data|held_data|unprocessed_data>]
|
||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||||
[excludedrafts <Boolean>]
|
[excludedrafts <Boolean>]
|
||||||
[wait <Integer>]
|
[wait <Integer>]
|
||||||
```
|
```
|
||||||
|
Specify the search method, this is optional:
|
||||||
|
* `accounts <EmailAddressEntity>` - Search all accounts specified in `<EmailAddressEntity>`
|
||||||
|
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
||||||
|
* `everyone` - Search for all accounts in the organization
|
||||||
|
* `shareddrives|teamdrives <SharedDriveIDList>` - Search for all accounts in the Shared Drives specified in `<SharedDriveIDList>`
|
||||||
|
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Search for all accounts in the Shared Drives specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
|
* `rooms <ChatSpaceList>` - Search in the Room specified in the chat rooms specified in `<ChatSpaceList>`
|
||||||
|
* `rooms <ChatSpaceList>` - Search in the Room specified in the chat rooms specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
|
* `sitesurl <URLList>` - Search the published site URLs of new Google Sites in `<URLList>`
|
||||||
|
* `sitesurl <URLList>` - Search the published site URLs of new Google Sites specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
|
|
||||||
Check the status of a previous count operation with the name from a previous command.
|
Check the status of a previous count operation with the name from a previous command.
|
||||||
```
|
```
|
||||||
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||||
@@ -216,12 +236,15 @@ Create a Google Vault export request.
|
|||||||
```
|
```
|
||||||
gam create vaultexport|export matter <MatterItem> [name <String>] corpus calendar|drive|gemini|groups|hangouts_chat|mail|voice
|
gam create vaultexport|export matter <MatterItem> [name <String>] corpus calendar|drive|gemini|groups|hangouts_chat|mail|voice
|
||||||
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
||||||
(shareddrives|teamdrives <SharedDriveIDList>) | (rooms <RoomList>) | (sitesurl <URLList>)
|
(shareddrives|teamdrives (<TeamDriveIDList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(rooms (<ChatSpaceList>|(select <FileSelector>|<CSVFileSelector>))) |
|
||||||
|
(sitesurl (<URLList>||(select <FileSelector>|<CSVFileSelector>)))
|
||||||
[scope all_data|held_data|unprocessed_data]
|
[scope all_data|held_data|unprocessed_data]
|
||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||||
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
||||||
[responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*] [calendarversiondate <Date>|<Time>]
|
[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]
|
[driveclientsideencryption any|encrypted|unencrypted]
|
||||||
[includerooms <Boolean>]
|
[includerooms <Boolean>]
|
||||||
[excludedrafts <Boolean>] [mailclientsideencryption any|encrypted|unencrypted]
|
[excludedrafts <Boolean>] [mailclientsideencryption any|encrypted|unencrypted]
|
||||||
@@ -250,8 +273,11 @@ Specify the search method, this option is required:
|
|||||||
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
||||||
* `everyone` - Search for all accounts in the organization
|
* `everyone` - Search for all accounts in the organization
|
||||||
* `shareddrives|teamdrives <SharedDriveIDList>` - Search for all accounts in the Shared Drives specified in `<SharedDriveIDList>`
|
* `shareddrives|teamdrives <SharedDriveIDList>` - Search for all accounts in the Shared Drives specified in `<SharedDriveIDList>`
|
||||||
* `rooms <RoomList>` - Search in the Room specified in the chat rooms specified in `<RoomList>`
|
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Search for all accounts in the Shared Drives specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
* `sitesurl <URLList>` - Search the published site URLs of new Google Sites
|
* `rooms <ChatSpaceList>` - Search in the Room specified in the chat rooms specified in `<ChatSpaceList>`
|
||||||
|
* `rooms <ChatSpaceList>` - Search in the Room specified in the chat rooms specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
|
* `sitesurl <URLList>` - Search the published site URLs of new Google Sites in `<URLList>`
|
||||||
|
* `sitesurl <URLList>` - Search the published site URLs of new Google Sites specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
|
|
||||||
Specify the scope of data to include in the export:
|
Specify the scope of data to include in the export:
|
||||||
* `all_data` - All available data; this is the default
|
* `all_data` - All available data; this is the default
|
||||||
@@ -290,8 +316,11 @@ For `corpus calendar`, you can specify the format of the exported data:
|
|||||||
|
|
||||||
For `corpus drive`, you can specify advanced search options:
|
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.
|
* `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 False` - Mapped to `sharedrivesoption included_if_account_is_not_a_member`
|
||||||
* `includeshareddrives True` - Include Shared Drives in the search.
|
* `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 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 encrypted` - Include client-side encrypted content only in search.
|
||||||
* `driveclientsideencryption unencrypted` - Include client-side unencrypted content only in search.
|
* `driveclientsideencryption unencrypted` - Include client-side unencrypted content only in search.
|
||||||
@@ -574,7 +603,7 @@ gam create vaulthold|hold matter <MatterItem> [name <String>] corpus calendar|dr
|
|||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[includerooms <Boolean>]
|
[includerooms <Boolean>]
|
||||||
[covereddata calllogs|textmessages|voicemails]
|
[covereddata calllogs|textmessages|voicemails]
|
||||||
[includeshareddrives|includeteamdrives <Boolean>]
|
[includeshareddrives <Boolean>]
|
||||||
[showdetails|returnidonly]
|
[showdetails|returnidonly]
|
||||||
```
|
```
|
||||||
Specify the name of the hold:
|
Specify the name of the hold:
|
||||||
@@ -596,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.
|
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:
|
For `corpus drive`, you can specify advanced search options:
|
||||||
* `includeshareddrives False` - Do not include Shared Drives in the search, this is the default.
|
* `includeshareddrives False` - Files in shared drives are not included in the hold, this is the default
|
||||||
* `includeshareddrives True` - Include Shared Drives in the search.
|
* `includeshareddrives True` - Files in shared drives are included in the hold
|
||||||
|
|
||||||
For `corpus mail`, you can specify search terms to limit the search.
|
For `corpus mail`, you can specify search terms to limit the search.
|
||||||
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||||
@@ -627,12 +656,12 @@ gam update vaulthold|hold <HoldItem> matter <MatterItem>
|
|||||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[includerooms <Boolean>]
|
[includerooms <Boolean>]
|
||||||
[covereddata calllogs|textmessages|voicemails]
|
[covereddata calllogs|textmessages|voicemails]
|
||||||
[includeshareddrives|includeteamdrives <Boolean>]
|
[includeshareddrives <Boolean>]
|
||||||
[showdetails]
|
[showdetails]
|
||||||
```
|
```
|
||||||
For a hold with `corpus drive`, you can specify advanced search options:
|
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 False` - Files in shared drives are not included in the hold, this is the default
|
||||||
* `includeshareddrives True` - Include Shared Drives in the search.
|
* `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.
|
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)
|
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ k
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.06.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.15.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.3 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.4.1 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2023-06-02T21:10:00-07:00
|
Time: 2023-06-02T21:10:00-07:00
|
||||||
@@ -16,10 +16,10 @@ Time: 2023-06-02T21:10:00-07:00
|
|||||||
Print the current version of Gam with details and time offset information
|
Print the current version of Gam with details and time offset information
|
||||||
```
|
```
|
||||||
gam version timeoffset
|
gam version timeoffset
|
||||||
GAM 7.06.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.15.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.3 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.4.1 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
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
|
Your system time differs from www.googleapis.com by less than 1 second
|
||||||
@@ -28,10 +28,10 @@ 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
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAM 7.06.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.15.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.3 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.4.1 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2023-06-02T21:10:00-07:00
|
Time: 2023-06-02T21:10:00-07:00
|
||||||
@@ -65,7 +65,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.06.10
|
Latest: 7.15.01
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -73,7 +73,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.06.10
|
7.15.01
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -83,10 +83,10 @@ echo $VER
|
|||||||
Print the current version of Gam and address of this Wiki
|
Print the current version of Gam and address of this Wiki
|
||||||
```
|
```
|
||||||
gam help
|
gam help
|
||||||
GAM 7.06.10 - https://github.com/GAM-team/GAM
|
GAM 7.15.01 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.3 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.4.1 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2023-06-02T21:10:00-07:00
|
Time: 2023-06-02T21:10:00-07:00
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
oUpdate History
|
Update History
|
||||||
* [GAM Updates](GamUpdates)
|
* [GAM Updates](GamUpdates)
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
@@ -94,9 +94,10 @@ Client Access
|
|||||||
* [Domains](Domains)
|
* [Domains](Domains)
|
||||||
* [Domains - Verification](Domains-Verification)
|
* [Domains - Verification](Domains-Verification)
|
||||||
* [Domain People - Contacts & Profiles](Domain-People-Contacts-Profiles)
|
* [Domain People - Contacts & Profiles](Domain-People-Contacts-Profiles)
|
||||||
* [Domain Shared Contacts - Global Address List](Domain-SharedContacts-GAL)
|
* [Domain Shared Contacts](Domain-SharedContacts)
|
||||||
* [Email Audit Monitor](Email-Audit-Monitor)
|
* [Email Audit Monitor](Email-Audit-Monitor)
|
||||||
* [Find File Owner](Find-File-Owner)
|
* [Find File Owner](Find-File-Owner)
|
||||||
|
* [Global Address List](Global-Address-List)
|
||||||
* [Google Data Transfers](Google-Data-Transfers)
|
* [Google Data Transfers](Google-Data-Transfers)
|
||||||
* [Groups](Groups)
|
* [Groups](Groups)
|
||||||
* [Groups - Membership](Groups-Membership)
|
* [Groups - Membership](Groups-Membership)
|
||||||
@@ -170,6 +171,7 @@ Service Account Access
|
|||||||
* [Users - Profile Photo](Users-Profile-Photo)
|
* [Users - Profile Photo](Users-Profile-Photo)
|
||||||
* [Users - Shared Drives](Users-Shared-Drives)
|
* [Users - Shared Drives](Users-Shared-Drives)
|
||||||
* [Users - Spreadsheets](Users-Spreadsheets)
|
* [Users - Spreadsheets](Users-Spreadsheets)
|
||||||
|
* [Users - Tag Manager](Users-Tag-Manager)
|
||||||
* [Users - Tasks](Users-Tasks)
|
* [Users - Tasks](Users-Tasks)
|
||||||
* [Users - YouTube](Users-YouTube)
|
* [Users - YouTube](Users-YouTube)
|
||||||
|
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ csv_output_users_audit
|
|||||||
Default: False
|
Default: False
|
||||||
customer_id
|
customer_id
|
||||||
Google Customer ID
|
Google Customer ID
|
||||||
Default: Blank
|
Default: my_customer
|
||||||
Environment variable: CUSTOMER_ID
|
Environment variable: CUSTOMER_ID
|
||||||
debug_level
|
debug_level
|
||||||
If debug_level > 0, turn on API debugging output.
|
If debug_level > 0, turn on API debugging output.
|
||||||
@@ -321,13 +321,23 @@ drive_v3_native_names
|
|||||||
email_batch_size
|
email_batch_size
|
||||||
When archiving, printing, showing, trashing, untrashing, marking as spam Gmail messages.
|
When archiving, printing, showing, trashing, untrashing, marking as spam Gmail messages.
|
||||||
how many should be processed in each batch
|
how many should be processed in each batch
|
||||||
Default: 100
|
Default: 50
|
||||||
Range: 1 - 100
|
Range: 1 - 100
|
||||||
enable_dasa
|
enable_dasa
|
||||||
Enable/disable Delegated Admin Service Account API Access
|
Enable/disable Delegated Admin Service Account API Access
|
||||||
admin_email, customer_id and domain must be set when enable_dasa is True,
|
admin_email, customer_id and domain must be set when enable_dasa is True,
|
||||||
customer_id may not be set to my_customer
|
customer_id may not be set to my_customer
|
||||||
Signal file: OldGamPath/enabledasa.txt
|
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
|
event_max_results
|
||||||
When retrieving lists of Calendar events from API,
|
When retrieving lists of Calendar events from API,
|
||||||
how many should be retrieved in each API call
|
how many should be retrieved in each API call
|
||||||
@@ -384,7 +394,7 @@ message_batch_size
|
|||||||
message_max_results
|
message_max_results
|
||||||
When retrieving lists of Gmail messages from API,
|
When retrieving lists of Gmail messages from API,
|
||||||
how many should be retrieved in each API call
|
how many should be retrieved in each API call
|
||||||
Default: 1000
|
Default: 500
|
||||||
Range: 1 - 10000
|
Range: 1 - 10000
|
||||||
mobile_max_results
|
mobile_max_results
|
||||||
When retrieving lists of Mobile devices from API,
|
When retrieving lists of Mobile devices from API,
|
||||||
@@ -402,9 +412,8 @@ never_time
|
|||||||
has the value "1970-01-01T00:00:00.000Z"
|
has the value "1970-01-01T00:00:00.000Z"
|
||||||
Default: Never
|
Default: Never
|
||||||
no_browser
|
no_browser
|
||||||
If no_browser is True, GAM won't open a browser if todrive is set
|
If no_browser is True, GAM won't open a browser when it prints a link
|
||||||
when creating CSV files and GAM prints a link and waits for
|
and waits for the verification code when oauth2.txt is being created/updated
|
||||||
the verification code when oauth2.txt is being created
|
|
||||||
Signal file: OldGamPath/nobrowser.txt
|
Signal file: OldGamPath/nobrowser.txt
|
||||||
no_cache
|
no_cache
|
||||||
Disable GAM API caching
|
Disable GAM API caching
|
||||||
@@ -416,8 +425,10 @@ no_short_urls
|
|||||||
the shortened URL redirects to the long URL.
|
the shortened URL redirects to the long URL.
|
||||||
When True, the long scopes URLs in `gam oauth create` and
|
When True, the long scopes URLs in `gam oauth create` and
|
||||||
`gam <UserTypeEntity> check|update serviceaccount` will be used as is.
|
`gam <UserTypeEntity> check|update serviceaccount` will be used as is.
|
||||||
|
Default: True
|
||||||
no_verify_ssl
|
no_verify_ssl
|
||||||
Disable SSL certificate validation
|
Disable SSL certificate validation
|
||||||
|
Default: False
|
||||||
num_tbatch_threads
|
num_tbatch_threads
|
||||||
Number of threads for gam tbatch
|
Number of threads for gam tbatch
|
||||||
Default: 2
|
Default: 2
|
||||||
@@ -982,6 +993,7 @@ gam update project
|
|||||||
gam oauth create
|
gam oauth create
|
||||||
gam info domain
|
gam info domain
|
||||||
gam config customer_id <CustomerID> save
|
gam config customer_id <CustomerID> save
|
||||||
|
gam user user@xxx.com update serviceaccount
|
||||||
```
|
```
|
||||||
|
|
||||||
### New clients
|
### New clients
|
||||||
@@ -1003,7 +1015,7 @@ gam create project
|
|||||||
gam oauth create
|
gam oauth create
|
||||||
gam info domain
|
gam info domain
|
||||||
gam config customer_id <CustomerID> save
|
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.
|
To get information about a client, select a section.
|
||||||
|
|||||||
Reference in New Issue
Block a user