mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-28 09:51:36 +00:00
Compare commits
82 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ca3b4d7da | ||
|
|
22d70ca2c3 | ||
|
|
b3acdf5955 | ||
|
|
c13a5215fe | ||
|
|
45750b591a | ||
|
|
c76f1b2128 | ||
|
|
e85e7f6868 | ||
|
|
055c74ed2e | ||
|
|
4ba9385c23 | ||
|
|
9d8442c7ad | ||
|
|
cc19878ba4 | ||
|
|
23ed20a298 | ||
|
|
5b32bc31c7 | ||
|
|
e1260dbd95 | ||
|
|
ea41edbfcb | ||
|
|
869eb3a0c2 | ||
|
|
61735701b3 | ||
|
|
c60ef582be | ||
|
|
cd8c43a0cc | ||
|
|
7582c42eff | ||
|
|
d9a75af87c | ||
|
|
6c443fa0c6 | ||
|
|
b6a9229a67 | ||
|
|
84175ba80d | ||
|
|
56c2b77f25 | ||
|
|
dfe01e5272 | ||
|
|
e25c302616 | ||
|
|
1ca5b1a610 | ||
|
|
b9c81e2e24 | ||
|
|
9766fa42e7 | ||
|
|
7bd150e5bf | ||
|
|
063e0876b9 | ||
|
|
4743d12ea8 | ||
|
|
ad548cbe33 | ||
|
|
bb9d5b3cdc | ||
|
|
ee3bb42d19 | ||
|
|
7e8042a2f8 | ||
|
|
5ed0b9ffd2 | ||
|
|
db2a37f358 | ||
|
|
77ebeddaac | ||
|
|
f00e7ecdbb | ||
|
|
f75d7d78f6 | ||
|
|
75929117aa | ||
|
|
a06348c1c5 | ||
|
|
425286482f | ||
|
|
a162cf870b | ||
|
|
28a1048f57 | ||
|
|
def54f1513 | ||
|
|
4d86d44ec1 | ||
|
|
2c0136834b | ||
|
|
9cca97b12e | ||
|
|
f69d0b1427 | ||
|
|
abd39176d8 | ||
|
|
782eee45cc | ||
|
|
6450fb0c3d | ||
|
|
523bd45fa0 | ||
|
|
9e6122769a | ||
|
|
9dc427c47b | ||
|
|
023c81de93 | ||
|
|
a570e1f300 | ||
|
|
86881b58f4 | ||
|
|
1b8793df9b | ||
|
|
dfdc03ba28 | ||
|
|
0cafde359e | ||
|
|
9b2ca0dedd | ||
|
|
741a2e3b79 | ||
|
|
760963889d | ||
|
|
b0b572a5b2 | ||
|
|
ae9e329169 | ||
|
|
d997900955 | ||
|
|
699d95d7d7 | ||
|
|
0274c27dd6 | ||
|
|
cb41cd4abf | ||
|
|
a971ea37ae | ||
|
|
c2192674ff | ||
|
|
1b7e736caf | ||
|
|
2a49e1ebe2 | ||
|
|
4075bef468 | ||
|
|
00cccbe920 | ||
|
|
0f50ce18b3 | ||
|
|
1475e7a1d2 | ||
|
|
573a0dc6f1 |
70
.github/workflows/build.yml
vendored
70
.github/workflows/build.yml
vendored
@@ -165,7 +165,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20260416
|
key: gam-${{ matrix.jid }}-20260523
|
||||||
|
|
||||||
- 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'
|
||||||
@@ -200,6 +200,9 @@ jobs:
|
|||||||
echo "arch=${RUNNER_ARCH}" >> $GITHUB_ENV
|
echo "arch=${RUNNER_ARCH}" >> $GITHUB_ENV
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
# calculate with python because date on MacOS is just stupid
|
||||||
|
DEPS_CUTOFF=$(python3 -c "from datetime import datetime, timedelta, timezone; print((datetime.now(timezone.utc) - timedelta(days=14)).strftime('%Y-%m-%dT00:00:00Z'))")
|
||||||
|
echo "DEPS_CUTOFF=${DEPS_CUTOFF}" >> $GITHUB_ENV
|
||||||
echo "JID=${JID}" >> $GITHUB_ENV
|
echo "JID=${JID}" >> $GITHUB_ENV
|
||||||
echo "freethreaded=${freethreaded}" >> $GITHUB_ENV
|
echo "freethreaded=${freethreaded}" >> $GITHUB_ENV
|
||||||
if "$freethreaded"; then
|
if "$freethreaded"; then
|
||||||
@@ -506,19 +509,19 @@ jobs:
|
|||||||
"${PYTHON}" -VV
|
"${PYTHON}" -VV
|
||||||
"${PYTHON}" -c "import ssl; print(f'Using {ssl.OPENSSL_VERSION}')"
|
"${PYTHON}" -c "import ssl; print(f'Using {ssl.OPENSSL_VERSION}')"
|
||||||
|
|
||||||
- name: Create and use Python venv
|
- name: Create and use Python .venv
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE"
|
cd "$GITHUB_WORKSPACE"
|
||||||
curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py
|
curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py
|
||||||
"$PYTHON" get-pip.py
|
"$PYTHON" get-pip.py
|
||||||
"$PYTHON" -m venv venv
|
"$PYTHON" -m venv .venv
|
||||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||||
# pyscard seems to build outside venv but not in it.
|
# pyscard seems to build outside venv but not in it.
|
||||||
# build it so it's cached.
|
# build it so it's cached.
|
||||||
"$PYTHON" -m pip install --upgrade --force-reinstall pyscard
|
"$PYTHON" -m pip install --upgrade pyscard
|
||||||
export PYTHON="${GITHUB_WORKSPACE}/venv/scripts/python.exe"
|
export PYTHON="${GITHUB_WORKSPACE}/.venv/scripts/python.exe"
|
||||||
else
|
else
|
||||||
export PYTHON="${GITHUB_WORKSPACE}/venv/bin/python3"
|
export PYTHON="${GITHUB_WORKSPACE}/.venv/bin/python3"
|
||||||
fi
|
fi
|
||||||
echo "PYTHON=${PYTHON}" >> $GITHUB_ENV
|
echo "PYTHON=${PYTHON}" >> $GITHUB_ENV
|
||||||
if [[ "$ACTIONS_GOAL" == "test" ]]; then
|
if [[ "$ACTIONS_GOAL" == "test" ]]; then
|
||||||
@@ -526,31 +529,22 @@ jobs:
|
|||||||
echo "gam=${gam}" >> $GITHUB_ENV
|
echo "gam=${gam}" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upgrade pip, wheel, etc
|
#- name: Upgrade pip, wheel, etc
|
||||||
run: |
|
# run: |
|
||||||
curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
|
# curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
|
||||||
"$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 --upgrade setuptools
|
||||||
"$PYTHON" -m pip install --upgrade importlib-metadata
|
# "$PYTHON" -m pip install --upgrade importlib-metadata
|
||||||
"$PYTHON" -m pip install --upgrade setuptools-scm
|
# "$PYTHON" -m pip install --upgrade setuptools-scm
|
||||||
"$PYTHON" -m pip install --upgrade packaging
|
# "$PYTHON" -m pip install --upgrade packaging
|
||||||
"$PYTHON" -m pip list
|
# "$PYTHON" -m pip list
|
||||||
|
|
||||||
- name: Install pip requirements
|
- name: Install pip requirements
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
echo "before anything..."
|
|
||||||
"$PYTHON" -m pip list
|
|
||||||
echo "--info--"
|
|
||||||
"$PYTHON" -m pip cache info
|
|
||||||
echo "--list--"
|
|
||||||
"$PYTHON" -m pip cache list
|
|
||||||
echo "--pip debug verbose--"
|
|
||||||
"$PYTHON" -m pip debug --verbose
|
|
||||||
echo "--------"
|
|
||||||
if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
||||||
# custom cryptography wheel for win arm64 since the project doesn't provide one:
|
# custom cryptography wheel for win arm64 since the project doesn't provide one:
|
||||||
# https://github.com/pyca/cryptography/issues/14293
|
# https://github.com/pyca/cryptography/issues/14293
|
||||||
@@ -558,24 +552,12 @@ jobs:
|
|||||||
"$PYTHON" -m pip install cryptography-*.whl
|
"$PYTHON" -m pip install cryptography-*.whl
|
||||||
fi
|
fi
|
||||||
"$PYTHON" -m pip install -vvv --upgrade ..[yubikey]
|
"$PYTHON" -m pip install -vvv --upgrade ..[yubikey]
|
||||||
echo "after everything..."
|
|
||||||
"$PYTHON" -m pip list
|
|
||||||
|
|
||||||
- name: Install PyInstaller
|
- name: Install PyInstaller
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
run: |
|
run: |
|
||||||
#git clone https://github.com/pyinstaller/pyinstaller.git
|
# Install latest version of PyInstaller *that's 2 weeks old*
|
||||||
#cd pyinstaller
|
# Calculate the exact timestamp for 14 days ago
|
||||||
#export latest_release=$(git tag --list | grep -v dev | grep -v rc | sort -Vr | head -n1)
|
|
||||||
#git checkout "${latest_release}"
|
|
||||||
# git checkout "v6.9.0"
|
|
||||||
# remove pre-compiled bootloaders so we fail if bootloader compile fails
|
|
||||||
#rm -rvf PyInstaller/bootloader/*-*/*
|
|
||||||
#cd bootloader
|
|
||||||
#"${PYTHON}" ./waf all
|
|
||||||
#cd ..
|
|
||||||
#echo "---- Installing PyInstaller ----"
|
|
||||||
#"${PYTHON}" -m pip install .
|
|
||||||
"$PYTHON" -m pip install --upgrade pyinstaller
|
"$PYTHON" -m pip install --upgrade pyinstaller
|
||||||
|
|
||||||
- name: Build GAM with PyInstaller
|
- name: Build GAM with PyInstaller
|
||||||
@@ -642,11 +624,9 @@ jobs:
|
|||||||
sudo apt-get -qq --yes update
|
sudo apt-get -qq --yes update
|
||||||
# arm64 needs to build a wheel and needs scons to build
|
# arm64 needs to build a wheel and needs scons to build
|
||||||
sudo apt-get -qq --yes install scons
|
sudo apt-get -qq --yes install scons
|
||||||
"${PYTHON}" -m pip install --upgrade patchelf-wrapper
|
"$PYTHON" -m pip install --upgrade patchelf-wrapper
|
||||||
"${PYTHON}" -m pip install --upgrade typing_extensions
|
"$PYTHON" -m pip install --upgrade typing_extensions
|
||||||
# "${PYTHON}" -m pip install --upgrade staticx
|
"$PYTHON" -m pip install --upgrade staticx
|
||||||
# install latest github src for staticx
|
|
||||||
"${PYTHON}" -m pip install --upgrade "git+https://github.com/JonathonReinhart/staticx"
|
|
||||||
|
|
||||||
- name: Make StaticX GAM build
|
- name: Make StaticX GAM build
|
||||||
if: matrix.staticx == 'yes'
|
if: matrix.staticx == 'yes'
|
||||||
|
|||||||
144
.github/workflows/upgrade_deps.yml
vendored
Normal file
144
.github/workflows/upgrade_deps.yml
vendored
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
name: Daily Dependency Pinning (2-Week Buffer)
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Runs every day at midnight UTC
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
workflow_dispatch: # Allows you to trigger it manually from the UI
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pin-deps:
|
||||||
|
runs-on: ubuntu-slim
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
||||||
|
with:
|
||||||
|
python-version: '3.14'
|
||||||
|
|
||||||
|
- name: Calculate and pin two-week old stable versions
|
||||||
|
shell: python
|
||||||
|
run: |
|
||||||
|
import json
|
||||||
|
import urllib.request
|
||||||
|
import re
|
||||||
|
import tomllib
|
||||||
|
from datetime import datetime, timedelta, timezone
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
toml_path = Path("pyproject.toml")
|
||||||
|
if not toml_path.exists():
|
||||||
|
print("pyproject.toml not found!")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
content = toml_path.read_text(encoding="utf-8")
|
||||||
|
parsed_toml = tomllib.loads(content)
|
||||||
|
|
||||||
|
target_deps = set()
|
||||||
|
|
||||||
|
# Standard [project.dependencies]
|
||||||
|
target_deps.update(parsed_toml.get("project", {}).get("dependencies", []))
|
||||||
|
|
||||||
|
# Optional [project.optional-dependencies]
|
||||||
|
for deps in parsed_toml.get("project", {}).get("optional-dependencies", {}).values():
|
||||||
|
target_deps.update(deps)
|
||||||
|
|
||||||
|
# Dev [dependency-groups] (uv / PEP 735 standard)
|
||||||
|
for deps in parsed_toml.get("dependency-groups", {}).values():
|
||||||
|
if isinstance(deps, list):
|
||||||
|
for d in deps:
|
||||||
|
if isinstance(d, str):
|
||||||
|
target_deps.add(d)
|
||||||
|
|
||||||
|
if not target_deps:
|
||||||
|
print("No dependencies found to process.")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
updates = {}
|
||||||
|
two_weeks_ago = datetime.now(timezone.utc) - timedelta(days=14)
|
||||||
|
print(f"Evaluating dependencies against cutoff date: {two_weeks_ago.isoformat()}")
|
||||||
|
|
||||||
|
for dep in target_deps:
|
||||||
|
# Isolate base package name (e.g., "yubikey-manager>=5.6.1" -> "yubikey-manager")
|
||||||
|
pkg_name = re.split(r'[<>=!~;\s]', dep)[0].strip()
|
||||||
|
|
||||||
|
# Preserve environment markers if they exist
|
||||||
|
marker = ""
|
||||||
|
if ";" in dep:
|
||||||
|
marker = " ; " + dep.split(";", 1)[1].strip()
|
||||||
|
|
||||||
|
print(f"Fetching PyPI data for: {pkg_name}")
|
||||||
|
try:
|
||||||
|
url = f"https://pypi.org/pypi/{pkg_name}/json"
|
||||||
|
req = urllib.request.Request(url, headers={'User-Agent': 'GAM-CI-Script'})
|
||||||
|
with urllib.request.urlopen(req) as response:
|
||||||
|
data = json.loads(response.read().decode())
|
||||||
|
|
||||||
|
valid_versions = []
|
||||||
|
for ver, files in data.get("releases", {}).items():
|
||||||
|
if not files:
|
||||||
|
continue
|
||||||
|
|
||||||
|
upload_time_str = files[0].get("upload_time_iso_8601")
|
||||||
|
if not upload_time_str:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if upload_time_str.endswith('Z'):
|
||||||
|
upload_time_str = upload_time_str[:-1] + '+00:00'
|
||||||
|
|
||||||
|
upload_time = datetime.fromisoformat(upload_time_str)
|
||||||
|
|
||||||
|
# Filter: Must be older than 2 weeks and not a pre-release
|
||||||
|
if upload_time <= two_weeks_ago and not any(x in ver.lower() for x in ['a', 'b', 'rc', 'dev']):
|
||||||
|
valid_versions.append((upload_time, ver))
|
||||||
|
|
||||||
|
if valid_versions:
|
||||||
|
# Sort by upload time descending to get the newest valid option
|
||||||
|
valid_versions.sort(key=lambda x: x[0], reverse=True)
|
||||||
|
target_version = valid_versions[0][1]
|
||||||
|
|
||||||
|
pinned_dep = f"{pkg_name}=={target_version}{marker}"
|
||||||
|
if pinned_dep != dep:
|
||||||
|
updates[dep] = pinned_dep
|
||||||
|
print(f" -> Pinning: '{dep}' => '{pinned_dep}'")
|
||||||
|
else:
|
||||||
|
print(f" -> Already pinned correctly to {target_version}")
|
||||||
|
else:
|
||||||
|
print(f" -> No valid historical versions found.")
|
||||||
|
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
print(f" -> Package not found on PyPI or HTTP error: {e}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f" -> Error processing {pkg_name}: {e}")
|
||||||
|
|
||||||
|
# 3. Replace the strings safely in the original file content
|
||||||
|
new_content = content
|
||||||
|
for old_dep, new_dep in updates.items():
|
||||||
|
# Regex targets the exact string inside either single or double quotes
|
||||||
|
# Using a lambda replacement ensures we don't trip over escape sequences in the new string
|
||||||
|
escaped_old = re.escape(old_dep)
|
||||||
|
pattern = r'([\'"])' + escaped_old + r'\1'
|
||||||
|
new_content = re.sub(pattern, lambda m: m.group(1) + new_dep + m.group(1), new_content)
|
||||||
|
|
||||||
|
# Write changes back to pyproject.toml
|
||||||
|
if content != new_content:
|
||||||
|
toml_path.write_text(new_content, encoding="utf-8")
|
||||||
|
print("\npyproject.toml updated successfully.")
|
||||||
|
else:
|
||||||
|
print("\nNo updates required.")
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
commit-message: "chore: upgrade PyPi deps"
|
||||||
|
title: "Upgrade PyPi deps"
|
||||||
|
body: "Automated scan checking PyPI for package versions at least 2 weeks old."
|
||||||
|
branch: sys-deps-upgrade
|
||||||
|
force: false # Standard push, plays nice with rulesets
|
||||||
6
dep-overrides.txt
Normal file
6
dep-overrides.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# overrides uv.lock to force newer dependencies
|
||||||
|
# when old deps are vulnerable. These should be set
|
||||||
|
# to expire after 2 weeks when the fixed version will
|
||||||
|
# be automatically picked up anyway.
|
||||||
|
# Format: package_requirement | MM/DD/YYYY
|
||||||
|
urllib3>=2.7.0 | 05/22/2026
|
||||||
@@ -4,26 +4,24 @@ dynamic = [
|
|||||||
"version",
|
"version",
|
||||||
]
|
]
|
||||||
authors = [
|
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 = [
|
||||||
"arrow>=1.3.0",
|
"arrow==1.4.0",
|
||||||
"chardet==5.2.0",
|
"chardet==7.4.3",
|
||||||
"cryptography>=46.0.5",
|
"cryptography==48.0.0",
|
||||||
"distro; sys_platform=='linux'",
|
"distro==1.9.0 ; sys_platform=='linux'",
|
||||||
"filelock>=3.18.0",
|
"filelock==3.29.0",
|
||||||
"google-api-python-client>=2.167.0",
|
"google-api-python-client==2.196.0",
|
||||||
"google-auth-httplib2>=0.2.0",
|
"google-auth-httplib2==0.4.0",
|
||||||
"google-auth-oauthlib>=1.2.2",
|
"google-auth-oauthlib==1.4.0",
|
||||||
"google-auth>=2.39.0",
|
"google-auth==2.53.0",
|
||||||
"httplib2>=0.31.0",
|
"httplib2==0.31.2",
|
||||||
"lxml>=5.4.0",
|
"lxml==6.1.0",
|
||||||
"passlib>=1.7.4",
|
"passlib==1.7.4",
|
||||||
"pathvalidate>=3.2.3",
|
"pathvalidate==3.3.1",
|
||||||
"pysocks>=1.7.1",
|
"pysocks==1.7.1",
|
||||||
]
|
]
|
||||||
description = "CLI tool to manage Google Workspace"
|
description = "CLI tool to manage Google Workspace"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -38,11 +36,17 @@ classifiers = [
|
|||||||
"Programming Language :: Python :: 3.14",
|
"Programming Language :: Python :: 3.14",
|
||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
]
|
]
|
||||||
license = {text = "Apache License (2.0)"}
|
license-files = [
|
||||||
license-files = ["LICEN[CS]E*"]
|
"LICEN[CS]E*",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.license]
|
||||||
|
text = "Apache License (2.0)"
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
yubikey = ["yubikey-manager>=5.6.1"]
|
yubikey = [
|
||||||
|
"yubikey-manager==5.9.1",
|
||||||
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
gam = "gam.__main__:main"
|
gam = "gam.__main__:main"
|
||||||
@@ -57,7 +61,9 @@ Chat = "https://git.io/gam-chat"
|
|||||||
path = "src/gam/__init__.py"
|
path = "src/gam/__init__.py"
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
[tool.hatch.build.targets.wheel]
|
||||||
packages = ["src/gam"]
|
packages = [
|
||||||
|
"src/gam",
|
||||||
|
]
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = [
|
requires = [
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
cloudidentityfree | cloudidentity | identity | 1010010001 | Cloud Identity Free |
|
||||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||||
cloudsearch | 1010350001 | Cloud Search |
|
cloudsearch | 1010350001 | Cloud Search |
|
||||||
colabpro | 1010500001 | Colab Pro |
|
colabpro | 1010500001 | Colab Pro |
|
||||||
@@ -560,9 +560,9 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
||||||
<QueryContact> ::= <String>
|
<QueryContact> ::= <String>
|
||||||
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
||||||
<QueryCrOS> ::= <String>
|
<QueryCrOS> ::= <String>:<String>
|
||||||
See: https://support.google.com/chrome/a/answer/1698333
|
See: https://support.google.com/chrome/a/answer/1698333
|
||||||
<QueryDevice> ::= <String>
|
<QueryDevice> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryDriveFile> ::= <String>
|
<QueryDriveFile> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-files
|
See: https://developers.google.com/drive/api/v3/search-files
|
||||||
@@ -575,7 +575,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
<QueryItem> ::= <UniqueID>|<String>
|
<QueryItem> ::= <UniqueID>|<String>
|
||||||
<QueryMemberRestrictions> ::= <String>
|
<QueryMemberRestrictions> ::= <String>
|
||||||
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
||||||
<QueryMobile> ::= <String>
|
<QueryMobile> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryTeamDrive> ::= <String>
|
<QueryTeamDrive> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-parameters
|
See: https://developers.google.com/drive/api/v3/search-parameters
|
||||||
@@ -916,6 +916,8 @@ Specify a collection of Users by directly specifying them or by specifying items
|
|||||||
|
|
||||||
<UserTypeEntity> ::=
|
<UserTypeEntity> ::=
|
||||||
(all users|users_na|users_arch|users_ns|users_susp|users_arch_or_susp|users_na_ns|users_ns_susp)|
|
(all users|users_na|users_arch|users_ns|users_susp|users_arch_or_susp|users_na_ns|users_ns_susp)|
|
||||||
|
(all guests|guests_ns|guests_susp|guests_ns_susp)|
|
||||||
|
(all users_and_guests|users_and_guests_ns|users_and_guests_susp|users_and_guests_ns_susp)|
|
||||||
(user <UserItem>)|
|
(user <UserItem>)|
|
||||||
(users <UserList>)|
|
(users <UserList>)|
|
||||||
(oauthuser)
|
(oauthuser)
|
||||||
@@ -1351,9 +1353,12 @@ verify
|
|||||||
## File Redirection
|
## File Redirection
|
||||||
|
|
||||||
If the pattern {{Section}} appears in <FileName>, it will be replaced with the name of the current section.
|
If the pattern {{Section}} appears in <FileName>, it will be replaced with the name of the current section.
|
||||||
For redirect csv, the optional arguments must appear in the order shown.
|
|
||||||
|
For redirect csv, the optional arguments can be specfified in any order but `todrive <ToDriveAttribute>*`
|
||||||
|
must be last.
|
||||||
|
|
||||||
<Redirect> ::=
|
<Redirect> ::=
|
||||||
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
redirect csv <FileName> [delayopen] multiprocess] [append] [noheader] [charset <Charset>]
|
||||||
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
||||||
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Bopolean>]]
|
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Bopolean>]]
|
||||||
[todrive <ToDriveAttribute>*] |
|
[todrive <ToDriveAttribute>*] |
|
||||||
@@ -1715,6 +1720,7 @@ gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
<EventMatchProperty> ::=
|
<EventMatchProperty> ::=
|
||||||
(matchfield attendees <EmailAddressEntity>)|
|
(matchfield attendees <EmailAddressEntity>)|
|
||||||
|
(matchfield attendeesorganizer <Boolean> <EmailAddressEntity>)|
|
||||||
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesdomainlist <DomainNameList>)|
|
(matchfield attendeesdomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
||||||
@@ -2463,9 +2469,9 @@ gam print chromehistory releases [todrive <ToDriveAttribute>*]
|
|||||||
pre_provisioned_reenable
|
pre_provisioned_reenable
|
||||||
|
|
||||||
gam update cros <CrOSEntity> action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam update cros <CrOSEntity> action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>] [maxtodeprov <Integer>]
|
||||||
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>] [maxtodeprov <Integer>]
|
||||||
|
|
||||||
<CrOSCommand>
|
<CrOSCommand>
|
||||||
reboot|
|
reboot|
|
||||||
@@ -2719,25 +2725,30 @@ gam <CrOSTypeEntity> get devicefile [select <DeviceFileEntity>] [targetfolder <F
|
|||||||
Print telemetry data for specified CrOS devices.
|
Print telemetry data for specified CrOS devices.
|
||||||
|
|
||||||
<CrOSTelemetryFieldName> ::=
|
<CrOSTelemetryFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
batteryinfo|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootPerformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
customer|
|
customer|
|
||||||
deviceid|
|
deviceid|
|
||||||
graphicsinfo|
|
graphicsinfo|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memoryinfo|
|
memoryinfo|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
name|
|
name|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkinfo|
|
networkinfo|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
orgunitid|
|
orgunitid|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
|
runtimecountersreport|
|
||||||
serialnumber|
|
serialnumber|
|
||||||
storageinfo|
|
storageinfo|
|
||||||
storagestatusreport|
|
storagestatusreport|
|
||||||
@@ -2745,20 +2756,22 @@ Print telemetry data for specified CrOS devices.
|
|||||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryListFieldName> ::=
|
<CrOSTelemetryListFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootperformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
storagestatusreport|
|
runtimecountersreport|
|
||||||
thunderboltinfo
|
storagestatusreport
|
||||||
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
||||||
|
|
||||||
gam info crostelemetry <SerialNumber>
|
gam info crostelemetry <SerialNumber>
|
||||||
@@ -2775,7 +2788,7 @@ gam show crostelemetry
|
|||||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
@@ -5494,6 +5507,7 @@ gam print vaultcounts [todrive <ToDriveAttributes>*]
|
|||||||
[excludedrafts <Boolean>]
|
[excludedrafts <Boolean>]
|
||||||
[<JSONData>]
|
[<JSONData>]
|
||||||
[wait <Integer>]
|
[wait <Integer>]
|
||||||
|
[include_suspended_zeros [<Boolean>]]
|
||||||
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||||
matter <MatterItem> operation <String> [wait <Integer>]
|
matter <MatterItem> operation <String> [wait <Integer>]
|
||||||
|
|
||||||
@@ -6761,13 +6775,41 @@ gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> show chatmessages
|
gam <UserTypeEntity> show chatmessages
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
|
gam <UserTypeEntity> show chatsearchmessages
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson]
|
||||||
|
gam <UserTypeEntity> print chatsearchmessages [todrive <ToDriveAttribute>*]
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> info chatevent name <ChatEvent>
|
gam <UserTypeEntity> info chatevent name <ChatEvent>
|
||||||
@@ -7027,7 +7069,7 @@ gam <UserTypeEntity> untrash drivefile <DriveFileEntity> [shortcutandtarget [<Bo
|
|||||||
|
|
||||||
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[includepermissionsforview published]
|
[includepermissionsforview published]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
@@ -7508,7 +7550,7 @@ gam <UserTypeEntity> collect orphans
|
|||||||
|
|
||||||
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[includepermissionsforview published]
|
[includepermissionsforview published]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
@@ -7522,12 +7564,12 @@ gam <UserTypeEntity> show filepath <DriveFileEntity>
|
|||||||
[returnpathonly]
|
[returnpathonly]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname]
|
[stripcrsfromname]
|
||||||
[fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname] [oneitemperrow]
|
[stripcrsfromname] [oneitemperrow]
|
||||||
[fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
||||||
@@ -7630,7 +7672,7 @@ gam <UserTypeEntity> print filelist [todrive <ToDriveAttribute>*]
|
|||||||
[countsonly [summary none|only|plus] [summaryuser <String>]
|
[countsonly [summary none|only|plus] [summaryuser <String>]
|
||||||
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
||||||
[countsrowfilter]
|
[countsrowfilter]
|
||||||
[filepath|fullpath [folderpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
[filepath|fullpath [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
||||||
@@ -7668,7 +7710,7 @@ gam <UserTypeEntity> print driveactivity [todrive <ToDriveAttribute>*]
|
|||||||
(drivefilename <DriveFileName>) | (drivefoldername <DriveFolderName>) | (query <QueryDriveFile>)]
|
(drivefilename <DriveFileName>) | (drivefoldername <DriveFolderName>) | (query <QueryDriveFile>)]
|
||||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>)|<Time>|
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>)|<Time>|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[action|actions [not] <DriveActivityActionList>]
|
[action|actions [not] <DriveActivityActionList>] [maxactivities <Number>]
|
||||||
[consolidationstrategy legacy|none]
|
[consolidationstrategy legacy|none]
|
||||||
[idmapfile <CSVFileInput> endcsv]
|
[idmapfile <CSVFileInput> endcsv]
|
||||||
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
||||||
@@ -8024,12 +8066,12 @@ gam <UserTypeEntity> export thread|threads
|
|||||||
[quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
[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>]
|
[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>]
|
[labelids <LabelIDList>]
|
||||||
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||||
|
|||||||
@@ -1,3 +1,124 @@
|
|||||||
|
7.44.01
|
||||||
|
|
||||||
|
Added option `oneitemperrow` to `gam print crostelemetry` to have each of a device's
|
||||||
|
report field entries displayed on a separate row with all of the other device fields.
|
||||||
|
|
||||||
|
Added additional fields to `<CrOSTelemetryFieldName>`and `<CrOSTelemetryListFieldName>`:
|
||||||
|
```
|
||||||
|
appreport
|
||||||
|
heartbeatstatusreport
|
||||||
|
kioskappstatusreport
|
||||||
|
networkbandwidthreport
|
||||||
|
runtimecountersreport
|
||||||
|
```
|
||||||
|
|
||||||
|
7.44.00
|
||||||
|
|
||||||
|
Added support for User data `archivalTime` and `suspensionTime` that is available
|
||||||
|
when fields `archived` and `suspended` are requested in `gam info user` and `gam print users`.
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> show chatmessages` to simplify specifying a filter.
|
||||||
|
```
|
||||||
|
start|starttime <Date>|<Time>
|
||||||
|
end|endtime <Date>|<Time>
|
||||||
|
range <Date>|<Time> <Date>|<Time>
|
||||||
|
thread <ChatThread>
|
||||||
|
```
|
||||||
|
|
||||||
|
Added commands to search for and display chat messages.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-messages-by-searching
|
||||||
|
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
|
```
|
||||||
|
developer_preview_apis = chat
|
||||||
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
|
```
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.5.
|
||||||
|
|
||||||
|
7.43.10
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity>` to not forward messages
|
||||||
|
to the `Bcc` recipients of the original message.
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity> addorigfieldstosubject`
|
||||||
|
where the recipient of the forwarded message was added to the subject line instead of the recipient of the original message.
|
||||||
|
|
||||||
|
7.43.09
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> print filelist` that caused a trap.
|
||||||
|
|
||||||
|
7.43.08
|
||||||
|
|
||||||
|
Fixed bug and formatting issues in `gam info device <DeviceEntity>`.
|
||||||
|
|
||||||
|
7.43.07
|
||||||
|
|
||||||
|
Improved validation of `<QueryCrOS>`, `<QueryDevice>` and `<QueryMobile>`.
|
||||||
|
|
||||||
|
7.43.06
|
||||||
|
|
||||||
|
Updated commands that use `<QueryCrOS>`, `<QueryDevice>` or `<QueryMobile>` to validate
|
||||||
|
that it is of the form `field:value` and that `value` does not contain a '?'.
|
||||||
|
Without validation, Google can return many more devices than are expected.
|
||||||
|
|
||||||
|
7.43.05
|
||||||
|
|
||||||
|
Added option `matchfield attendeesorganizer <Boolean> <EmailAddressEntity>` to `<EventMatchProperty>`
|
||||||
|
that is used in commands that process events. The match is true if all of the addresses in `<EmailAddressEntity>`
|
||||||
|
are present as attendees in the event and are an organizer or not based on `<Boolean>`.
|
||||||
|
|
||||||
|
Added option `max_to_deprov <Integer>` to `gam update cros <CrOSEntity> action <CrOSAction>`
|
||||||
|
that is used when `<CrOSAction>` is any of the following:
|
||||||
|
```
|
||||||
|
deprovision_different_model_replace|
|
||||||
|
deprovision_different_model_replacement|
|
||||||
|
deprovision_retiring_device|
|
||||||
|
deprovision_same_model_replace|
|
||||||
|
deprovision_same_model_replacement|
|
||||||
|
deprovision_upgrade_transfer
|
||||||
|
```
|
||||||
|
`max_to_deprov <Integer>` - No deprovisions are processed if the number of devices in `<CrOSEntity>` exceeds `<Integer>`;
|
||||||
|
the default value is one; set `<Integer>` to 0 for no limit.
|
||||||
|
|
||||||
|
7.43.04
|
||||||
|
|
||||||
|
Added option `include_suspended_zeros [<Boolean>]` to `gam print vaultcounts` that causes
|
||||||
|
GAM to generate zero count lines for suspended users with zero items as well as non-suspended users.
|
||||||
|
|
||||||
|
7.43.03
|
||||||
|
|
||||||
|
Added option `parentpathonly [<Boolean>]` to the following commands that causes GAM
|
||||||
|
to display only the parent folder names when displaying the path to a file.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> info drivefile ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> show fileinfo ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> print|show filepath
|
||||||
|
gam <UserTypeEntity> print filelist ... filepath|fullpath
|
||||||
|
```
|
||||||
|
|
||||||
|
7.43.02
|
||||||
|
|
||||||
|
Added option `maxactivities <Integer>` to `gam <UserTypeEntity> print driveactivity` to limit
|
||||||
|
the number of activities displayed; the default is 0, no limit.
|
||||||
|
|
||||||
|
7.43.01
|
||||||
|
|
||||||
|
Updated `gam info user` and `gam print users` to display guest user attributes: `isGuestUser, guestAccountInfo`
|
||||||
|
|
||||||
|
Expanded `<UserTypeEntity>` to allow specification of guest users.
|
||||||
|
* See [Collections of Users](Collections-of-Users)
|
||||||
|
|
||||||
|
7.42.00
|
||||||
|
|
||||||
|
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`
|
||||||
|
until all processing was complete; if `<FileName>` was not accessible, an error was generated
|
||||||
|
and no results were saved. Now, `<FileName>` is opened initially to verify accessiblity
|
||||||
|
and then written when processing is complete.
|
||||||
|
|
||||||
|
In the unlikely event that this causes issues, you can do `redirect csv <FileName> delayopen`
|
||||||
|
to get the previous behavior.
|
||||||
|
|
||||||
7.41.03
|
7.41.03
|
||||||
|
|
||||||
Fixed bug in the following:
|
Fixed bug in the following:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -53,6 +53,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH = 'domains_arch'
|
ENTITY_DOMAINS_ARCH = 'domains_arch'
|
||||||
ENTITY_DOMAINS_NS = 'domains_ns'
|
ENTITY_DOMAINS_NS = 'domains_ns'
|
||||||
ENTITY_DOMAINS_SUSP = 'domains_susp'
|
ENTITY_DOMAINS_SUSP = 'domains_susp'
|
||||||
|
ENTITY_DOMAINS_NS_SUSP = 'domains_ns_susp'
|
||||||
ENTITY_DOMAINS_NA_NS = 'domains_na_ns'
|
ENTITY_DOMAINS_NA_NS = 'domains_na_ns'
|
||||||
ENTITY_GROUP = 'group'
|
ENTITY_GROUP = 'group'
|
||||||
ENTITY_GROUP_INDE = 'group_inde'
|
ENTITY_GROUP_INDE = 'group_inde'
|
||||||
@@ -60,6 +61,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_ARCH = 'group_arch'
|
ENTITY_GROUP_ARCH = 'group_arch'
|
||||||
ENTITY_GROUP_NS = 'group_ns'
|
ENTITY_GROUP_NS = 'group_ns'
|
||||||
ENTITY_GROUP_SUSP = 'group_susp'
|
ENTITY_GROUP_SUSP = 'group_susp'
|
||||||
|
ENTITY_GROUP_NS_SUSP = 'group_ns_susp'
|
||||||
ENTITY_GROUP_NA_NS = 'group_na_ns'
|
ENTITY_GROUP_NA_NS = 'group_na_ns'
|
||||||
ENTITY_GROUPS = 'groups'
|
ENTITY_GROUPS = 'groups'
|
||||||
ENTITY_GROUPS_INDE = 'groups_inde'
|
ENTITY_GROUPS_INDE = 'groups_inde'
|
||||||
@@ -67,12 +69,14 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH = 'groups_arch'
|
ENTITY_GROUPS_ARCH = 'groups_arch'
|
||||||
ENTITY_GROUPS_NS = 'groups_ns'
|
ENTITY_GROUPS_NS = 'groups_ns'
|
||||||
ENTITY_GROUPS_SUSP = 'groups_susp'
|
ENTITY_GROUPS_SUSP = 'groups_susp'
|
||||||
|
ENTITY_GROUPS_NS_SUSP = 'groups_ns_susp'
|
||||||
ENTITY_GROUPS_NA_NS = 'groups_na_ns'
|
ENTITY_GROUPS_NA_NS = 'groups_na_ns'
|
||||||
ENTITY_GROUP_USERS = 'group_users'
|
ENTITY_GROUP_USERS = 'group_users'
|
||||||
ENTITY_GROUP_USERS_NA = 'group_users_na'
|
ENTITY_GROUP_USERS_NA = 'group_users_na'
|
||||||
ENTITY_GROUP_USERS_ARCH = 'group_users_arch'
|
ENTITY_GROUP_USERS_ARCH = 'group_users_arch'
|
||||||
ENTITY_GROUP_USERS_NS = 'group_users_ns'
|
ENTITY_GROUP_USERS_NS = 'group_users_ns'
|
||||||
ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
|
ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP = 'group_users_ns_susp'
|
||||||
ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns'
|
ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns'
|
||||||
ENTITY_GROUP_USERS_SELECT = 'group_users_select'
|
ENTITY_GROUP_USERS_SELECT = 'group_users_select'
|
||||||
ENTITY_LICENSES = 'licenses'
|
ENTITY_LICENSES = 'licenses'
|
||||||
@@ -82,24 +86,28 @@ class GamCLArgs():
|
|||||||
ENTITY_OU_ARCH = 'ou_arch'
|
ENTITY_OU_ARCH = 'ou_arch'
|
||||||
ENTITY_OU_NS = 'ou_ns'
|
ENTITY_OU_NS = 'ou_ns'
|
||||||
ENTITY_OU_SUSP = 'ou_susp'
|
ENTITY_OU_SUSP = 'ou_susp'
|
||||||
|
ENTITY_OU_NS_SUSP = 'ou_ns_susp'
|
||||||
ENTITY_OU_NA_NS = 'ou_na_ns'
|
ENTITY_OU_NA_NS = 'ou_na_ns'
|
||||||
ENTITY_OU_AND_CHILDREN = 'ou_and_children'
|
ENTITY_OU_AND_CHILDREN = 'ou_and_children'
|
||||||
ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na'
|
ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na'
|
||||||
ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch'
|
ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch'
|
||||||
ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
|
ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
|
ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP = 'ou_and_children_ns_susp'
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns'
|
ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns'
|
||||||
ENTITY_OUS = 'ous'
|
ENTITY_OUS = 'ous'
|
||||||
ENTITY_OUS_NA = 'ous_na'
|
ENTITY_OUS_NA = 'ous_na'
|
||||||
ENTITY_OUS_ARCH = 'ous_arch'
|
ENTITY_OUS_ARCH = 'ous_arch'
|
||||||
ENTITY_OUS_NS = 'ous_ns'
|
ENTITY_OUS_NS = 'ous_ns'
|
||||||
ENTITY_OUS_SUSP = 'ous_susp'
|
ENTITY_OUS_SUSP = 'ous_susp'
|
||||||
|
ENTITY_OUS_NS_SUSP = 'ous_ns_susp'
|
||||||
ENTITY_OUS_NA_NS = 'ous_na_ns'
|
ENTITY_OUS_NA_NS = 'ous_na_ns'
|
||||||
ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
|
ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
|
||||||
ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na'
|
ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na'
|
||||||
ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch'
|
ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch'
|
||||||
ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
|
ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
|
ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP = 'ous_and_children_ns_susp'
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns'
|
ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns'
|
||||||
ENTITY_QUERIES = 'queries'
|
ENTITY_QUERIES = 'queries'
|
||||||
ENTITY_QUERY = 'query'
|
ENTITY_QUERY = 'query'
|
||||||
@@ -111,9 +119,17 @@ class GamCLArgs():
|
|||||||
ENTITY_USERS_ARCH = 'users_arch'
|
ENTITY_USERS_ARCH = 'users_arch'
|
||||||
ENTITY_USERS_NS = 'users_ns'
|
ENTITY_USERS_NS = 'users_ns'
|
||||||
ENTITY_USERS_SUSP = 'users_susp'
|
ENTITY_USERS_SUSP = 'users_susp'
|
||||||
|
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
|
||||||
ENTITY_USERS_NA_NS = 'users_na_ns'
|
ENTITY_USERS_NA_NS = 'users_na_ns'
|
||||||
ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
|
ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
|
||||||
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
|
ENTITY_USERS_AND_GUESTS = 'users_and_guests'
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS = 'users_and_guests_ns'
|
||||||
|
ENTITY_USERS_AND_GUESTS_SUSP = 'users_and_guests_susp'
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS_SUSP = 'users_and_guests_ns_susp'
|
||||||
|
ENTITY_GUESTS = 'guests'
|
||||||
|
ENTITY_GUESTS_NS = 'guests_ns'
|
||||||
|
ENTITY_GUESTS_SUSP = 'guests_susp'
|
||||||
|
ENTITY_GUESTS_NS_SUSP = 'guests_ns_susp'
|
||||||
#
|
#
|
||||||
BROWSER_ENTITIES = [
|
BROWSER_ENTITIES = [
|
||||||
ENTITY_BROWSER,
|
ENTITY_BROWSER,
|
||||||
@@ -150,6 +166,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH,
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NS_SUSP,
|
||||||
ENTITY_DOMAINS_NA_NS,
|
ENTITY_DOMAINS_NA_NS,
|
||||||
ENTITY_GROUP,
|
ENTITY_GROUP,
|
||||||
ENTITY_GROUP_INDE,
|
ENTITY_GROUP_INDE,
|
||||||
@@ -157,6 +174,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_ARCH,
|
ENTITY_GROUP_ARCH,
|
||||||
ENTITY_GROUP_NS,
|
ENTITY_GROUP_NS,
|
||||||
ENTITY_GROUP_SUSP,
|
ENTITY_GROUP_SUSP,
|
||||||
|
ENTITY_GROUP_NS_SUSP,
|
||||||
ENTITY_GROUP_NA_NS,
|
ENTITY_GROUP_NA_NS,
|
||||||
ENTITY_GROUPS,
|
ENTITY_GROUPS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
@@ -164,12 +182,14 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH,
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NS_SUSP,
|
||||||
ENTITY_GROUPS_NA_NS,
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUP_USERS,
|
ENTITY_GROUP_USERS,
|
||||||
ENTITY_GROUP_USERS_NA,
|
ENTITY_GROUP_USERS_NA,
|
||||||
ENTITY_GROUP_USERS_ARCH,
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP,
|
||||||
ENTITY_GROUP_USERS_NA_NS,
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
ENTITY_LICENSES,
|
ENTITY_LICENSES,
|
||||||
@@ -179,24 +199,28 @@ class GamCLArgs():
|
|||||||
ENTITY_OU_ARCH,
|
ENTITY_OU_ARCH,
|
||||||
ENTITY_OU_NS,
|
ENTITY_OU_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
|
ENTITY_OU_NS_SUSP,
|
||||||
ENTITY_OU_NA_NS,
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OU_AND_CHILDREN,
|
ENTITY_OU_AND_CHILDREN,
|
||||||
ENTITY_OU_AND_CHILDREN_NA,
|
ENTITY_OU_AND_CHILDREN_NA,
|
||||||
ENTITY_OU_AND_CHILDREN_ARCH,
|
ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OU_AND_CHILDREN_NS,
|
ENTITY_OU_AND_CHILDREN_NS,
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP,
|
ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS,
|
ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_OUS,
|
ENTITY_OUS,
|
||||||
ENTITY_OUS_NA,
|
ENTITY_OUS_NA,
|
||||||
ENTITY_OUS_ARCH,
|
ENTITY_OUS_ARCH,
|
||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN,
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA,
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
ENTITY_OUS_AND_CHILDREN_ARCH,
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_QUERIES,
|
ENTITY_QUERIES,
|
||||||
ENTITY_QUERY,
|
ENTITY_QUERY,
|
||||||
@@ -278,48 +302,56 @@ class GamCLArgs():
|
|||||||
'org_arch': ENTITY_OU_ARCH,
|
'org_arch': ENTITY_OU_ARCH,
|
||||||
'org_ns': ENTITY_OU_NS,
|
'org_ns': ENTITY_OU_NS,
|
||||||
'org_susp': ENTITY_OU_SUSP,
|
'org_susp': ENTITY_OU_SUSP,
|
||||||
|
'org_ns_susp': ENTITY_OU_NS_SUSP,
|
||||||
'org_na_ns': ENTITY_OU_NA_NS,
|
'org_na_ns': ENTITY_OU_NA_NS,
|
||||||
'org_and_child': ENTITY_OU_AND_CHILDREN,
|
'org_and_child': ENTITY_OU_AND_CHILDREN,
|
||||||
'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'org_and_child_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'org_and_children': ENTITY_OU_AND_CHILDREN,
|
'org_and_children': ENTITY_OU_AND_CHILDREN,
|
||||||
'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA,
|
'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'org_and_children_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'orgs': ENTITY_OUS,
|
'orgs': ENTITY_OUS,
|
||||||
'orgs_na': ENTITY_OUS_NA,
|
'orgs_na': ENTITY_OUS_NA,
|
||||||
'orgs_arch': ENTITY_OUS_ARCH,
|
'orgs_arch': ENTITY_OUS_ARCH,
|
||||||
'orgs_ns': ENTITY_OUS_NS,
|
'orgs_ns': ENTITY_OUS_NS,
|
||||||
'orgs_susp': ENTITY_OUS_SUSP,
|
'orgs_susp': ENTITY_OUS_SUSP,
|
||||||
|
'orgs_ns_susp': ENTITY_OUS_NS_SUSP,
|
||||||
'orgs_na_ns': ENTITY_OUS_NA_NS,
|
'orgs_na_ns': ENTITY_OUS_NA_NS,
|
||||||
'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
|
'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
|
||||||
'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'orgs_and_child_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
|
'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
|
||||||
'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA,
|
'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'orgs_and_children_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
'ou_and_child': ENTITY_OU_AND_CHILDREN,
|
'ou_and_child': ENTITY_OU_AND_CHILDREN,
|
||||||
'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'ou_and_child_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'ous_and_child': ENTITY_OUS_AND_CHILDREN,
|
'ous_and_child': ENTITY_OUS_AND_CHILDREN,
|
||||||
'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'ous_and_child_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
# CL entity source selectors
|
# CL entity source selectors
|
||||||
@@ -395,9 +427,17 @@ class GamCLArgs():
|
|||||||
ENTITY_USERS_ARCH,
|
ENTITY_USERS_ARCH,
|
||||||
ENTITY_USERS_NS,
|
ENTITY_USERS_NS,
|
||||||
ENTITY_USERS_SUSP,
|
ENTITY_USERS_SUSP,
|
||||||
|
ENTITY_USERS_NS_SUSP,
|
||||||
ENTITY_USERS_ARCH_OR_SUSP,
|
ENTITY_USERS_ARCH_OR_SUSP,
|
||||||
ENTITY_USERS_NA_NS,
|
ENTITY_USERS_NA_NS,
|
||||||
ENTITY_USERS_NS_SUSP,
|
ENTITY_USERS_AND_GUESTS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_SUSP,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS_SUSP,
|
||||||
|
ENTITY_GUESTS,
|
||||||
|
ENTITY_GUESTS_NS,
|
||||||
|
ENTITY_GUESTS_SUSP,
|
||||||
|
ENTITY_GUESTS_NS_SUSP,
|
||||||
]
|
]
|
||||||
#
|
#
|
||||||
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
|
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
|
||||||
@@ -406,9 +446,17 @@ class GamCLArgs():
|
|||||||
ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH
|
ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH
|
||||||
ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
|
ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
|
||||||
ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
|
ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
|
||||||
|
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
|
||||||
ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
|
ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
|
||||||
ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
|
ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
|
||||||
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
|
ENTITY_ALL_USERS_AND_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_SUSP
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS_SUSP
|
||||||
|
ENTITY_ALL_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS
|
||||||
|
ENTITY_ALL_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_NS
|
||||||
|
ENTITY_ALL_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_SUSP
|
||||||
|
ENTITY_ALL_GUESTS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_NS_SUSP
|
||||||
#
|
#
|
||||||
ALL_USER_ENTITY_TYPES = {
|
ALL_USER_ENTITY_TYPES = {
|
||||||
ENTITY_ALL_USERS,
|
ENTITY_ALL_USERS,
|
||||||
@@ -416,8 +464,16 @@ class GamCLArgs():
|
|||||||
ENTITY_ALL_USERS_ARCH,
|
ENTITY_ALL_USERS_ARCH,
|
||||||
ENTITY_ALL_USERS_NS,
|
ENTITY_ALL_USERS_NS,
|
||||||
ENTITY_ALL_USERS_SUSP,
|
ENTITY_ALL_USERS_SUSP,
|
||||||
ENTITY_ALL_USERS_NA_NS,
|
|
||||||
ENTITY_ALL_USERS_NS_SUSP,
|
ENTITY_ALL_USERS_NS_SUSP,
|
||||||
|
ENTITY_ALL_USERS_NA_NS,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_SUSP,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP,
|
||||||
|
ENTITY_ALL_GUESTS,
|
||||||
|
ENTITY_ALL_GUESTS_NS,
|
||||||
|
ENTITY_ALL_GUESTS_SUSP,
|
||||||
|
ENTITY_ALL_GUESTS_NS_SUSP,
|
||||||
}
|
}
|
||||||
DOMAIN_ENTITY_TYPES = {
|
DOMAIN_ENTITY_TYPES = {
|
||||||
ENTITY_DOMAINS,
|
ENTITY_DOMAINS,
|
||||||
@@ -425,6 +481,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH,
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NS_SUSP,
|
||||||
ENTITY_DOMAINS_NA_NS,
|
ENTITY_DOMAINS_NA_NS,
|
||||||
}
|
}
|
||||||
GROUP_ENTITY_TYPES = {
|
GROUP_ENTITY_TYPES = {
|
||||||
@@ -433,6 +490,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_ARCH,
|
ENTITY_GROUP_ARCH,
|
||||||
ENTITY_GROUP_NS,
|
ENTITY_GROUP_NS,
|
||||||
ENTITY_GROUP_SUSP,
|
ENTITY_GROUP_SUSP,
|
||||||
|
ENTITY_GROUP_NS_SUSP,
|
||||||
ENTITY_GROUP_NA_NS,
|
ENTITY_GROUP_NA_NS,
|
||||||
ENTITY_GROUP_INDE,
|
ENTITY_GROUP_INDE,
|
||||||
}
|
}
|
||||||
@@ -442,6 +500,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH,
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NS_SUSP,
|
||||||
ENTITY_GROUPS_NA_NS,
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
}
|
}
|
||||||
@@ -451,6 +510,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_USERS_ARCH,
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP,
|
||||||
ENTITY_GROUP_USERS_NA_NS,
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
}
|
}
|
||||||
@@ -465,6 +525,8 @@ class GamCLArgs():
|
|||||||
ENTITY_OU_AND_CHILDREN_NS,
|
ENTITY_OU_AND_CHILDREN_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP,
|
ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OU_NS_SUSP,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OU_NA_NS,
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS,
|
ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
@@ -479,6 +541,8 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
@@ -493,6 +557,8 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OU_NS_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
ENTITY_OU_NA_NS,
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
}
|
}
|
||||||
@@ -534,13 +600,21 @@ class GamCLArgs():
|
|||||||
}
|
}
|
||||||
#
|
#
|
||||||
ALL_USERS_QUERY_MAP = {
|
ALL_USERS_QUERY_MAP = {
|
||||||
ENTITY_ALL_USERS: 'isSuspended=False',
|
ENTITY_ALL_USERS: 'isSuspended=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_NA: 'isArchived=False',
|
ENTITY_ALL_USERS_NA: 'isArchived=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_ARCH: 'isArchived=True',
|
ENTITY_ALL_USERS_ARCH: 'isArchived=True isGuest=False',
|
||||||
ENTITY_ALL_USERS_NS: 'isSuspended=False',
|
ENTITY_ALL_USERS_NS: 'isSuspended=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
|
ENTITY_ALL_USERS_SUSP: 'isSuspended=True isGuest=False',
|
||||||
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False',
|
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_NS_SUSP: None,
|
ENTITY_ALL_USERS_NS_SUSP: 'isGuest=False',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS: 'isSuspended=False',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS: 'isSuspended=False',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_SUSP: 'isSuspended=True',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP: None,
|
||||||
|
ENTITY_ALL_GUESTS: 'isSuspended=False isGuest=True',
|
||||||
|
ENTITY_ALL_GUESTS_NS: 'isSuspended=False isGuest=True',
|
||||||
|
ENTITY_ALL_GUESTS_SUSP: 'isSuspended=True isGuest=True',
|
||||||
|
ENTITY_ALL_GUESTS_NS_SUSP: 'isGuest=True',
|
||||||
}
|
}
|
||||||
DOMAINS_QUERY_MAP = {
|
DOMAINS_QUERY_MAP = {
|
||||||
ENTITY_DOMAINS: None,
|
ENTITY_DOMAINS: None,
|
||||||
@@ -548,6 +622,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH: 'isArchived=True',
|
ENTITY_DOMAINS_ARCH: 'isArchived=True',
|
||||||
ENTITY_DOMAINS_NS: 'isSuspended=False',
|
ENTITY_DOMAINS_NS: 'isSuspended=False',
|
||||||
ENTITY_DOMAINS_SUSP: 'isSuspended=True',
|
ENTITY_DOMAINS_SUSP: 'isSuspended=True',
|
||||||
|
ENTITY_DOMAINS_NS_SUSP: None,
|
||||||
ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False',
|
ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False',
|
||||||
}
|
}
|
||||||
GROUPS_QUERY_MAP = { #(isArchived, isSuspended)
|
GROUPS_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
@@ -559,6 +634,8 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_NS: (None, False),
|
ENTITY_GROUPS_NS: (None, False),
|
||||||
ENTITY_GROUP_SUSP: (None, True),
|
ENTITY_GROUP_SUSP: (None, True),
|
||||||
ENTITY_GROUPS_SUSP: (None, True),
|
ENTITY_GROUPS_SUSP: (None, True),
|
||||||
|
ENTITY_GROUP_NS_SUSP: (None, None),
|
||||||
|
ENTITY_GROUPS_NS_SUSP: (None, None),
|
||||||
ENTITY_GROUP_NA_NS: (False, False),
|
ENTITY_GROUP_NA_NS: (False, False),
|
||||||
ENTITY_GROUPS_NA_NS: (False, False),
|
ENTITY_GROUPS_NA_NS: (False, False),
|
||||||
}
|
}
|
||||||
@@ -567,6 +644,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_USERS_ARCH: (True, None),
|
ENTITY_GROUP_USERS_ARCH: (True, None),
|
||||||
ENTITY_GROUP_USERS_NS: (None, False),
|
ENTITY_GROUP_USERS_NS: (None, False),
|
||||||
ENTITY_GROUP_USERS_SUSP: (None, True),
|
ENTITY_GROUP_USERS_SUSP: (None, True),
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP: (None, None),
|
||||||
ENTITY_GROUP_USERS_NA_NS: (False, False),
|
ENTITY_GROUP_USERS_NA_NS: (False, False),
|
||||||
}
|
}
|
||||||
OU_QUERY_MAP = { #(isArchived, isSuspended)
|
OU_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
@@ -586,6 +664,10 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_SUSP: (None, True),
|
ENTITY_OUS_SUSP: (None, True),
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP: (None, True),
|
ENTITY_OU_AND_CHILDREN_SUSP: (None, True),
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP: (None, True),
|
ENTITY_OUS_AND_CHILDREN_SUSP: (None, True),
|
||||||
|
ENTITY_OU_NS_SUSP: (None, None),
|
||||||
|
ENTITY_OUS_NS_SUSP: (None, None),
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP: (None, None),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP: (None, None),
|
||||||
ENTITY_OU_NA_NS: (False, False),
|
ENTITY_OU_NA_NS: (False, False),
|
||||||
ENTITY_OUS_NA_NS: (False, False),
|
ENTITY_OUS_NA_NS: (False, False),
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS: (False, False),
|
ENTITY_OU_AND_CHILDREN_NA_NS: (False, False),
|
||||||
@@ -602,6 +684,14 @@ class GamCLArgs():
|
|||||||
ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
|
ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
|
||||||
ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
|
ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
|
||||||
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
|
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
|
||||||
|
ENTITY_USERS_AND_GUESTS: ENTITY_ALL_USERS_AND_GUESTS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS: ENTITY_ALL_USERS_AND_GUESTS_NS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_SUSP: ENTITY_ALL_USERS_AND_GUESTS_SUSP,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS_SUSP: ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP,
|
||||||
|
ENTITY_GUESTS: ENTITY_ALL_GUESTS,
|
||||||
|
ENTITY_GUESTS_NS: ENTITY_ALL_GUESTS_NS,
|
||||||
|
ENTITY_GUESTS_SUSP: ENTITY_ALL_GUESTS_SUSP,
|
||||||
|
ENTITY_GUESTS_NS_SUSP: ENTITY_ALL_GUESTS_NS_SUSP,
|
||||||
}
|
}
|
||||||
# Allowed values for CL source selector datafile, csvkmd
|
# Allowed values for CL source selector datafile, csvkmd
|
||||||
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
|
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
|
||||||
@@ -619,6 +709,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH,
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NS_SUSP,
|
||||||
ENTITY_DOMAINS_NA_NS,
|
ENTITY_DOMAINS_NA_NS,
|
||||||
ENTITY_GROUPS,
|
ENTITY_GROUPS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
@@ -626,12 +717,14 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH,
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NS_SUSP,
|
||||||
ENTITY_GROUPS_NA_NS,
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUP_USERS,
|
ENTITY_GROUP_USERS,
|
||||||
ENTITY_GROUP_USERS_NA,
|
ENTITY_GROUP_USERS_NA,
|
||||||
ENTITY_GROUP_USERS_ARCH,
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP,
|
||||||
ENTITY_GROUP_USERS_NA_NS,
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
ENTITY_OUS,
|
ENTITY_OUS,
|
||||||
@@ -639,12 +732,14 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_ARCH,
|
ENTITY_OUS_ARCH,
|
||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN,
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA,
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
ENTITY_OUS_AND_CHILDREN_ARCH,
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_COURSEPARTICIPANTS,
|
ENTITY_COURSEPARTICIPANTS,
|
||||||
ENTITY_STUDENTS,
|
ENTITY_STUDENTS,
|
||||||
@@ -751,6 +846,8 @@ class GamCLArgs():
|
|||||||
ARG_CHATMEMBERS = 'chatmembers'
|
ARG_CHATMEMBERS = 'chatmembers'
|
||||||
ARG_CHATMESSAGE = 'chatmessage'
|
ARG_CHATMESSAGE = 'chatmessage'
|
||||||
ARG_CHATMESSAGES = 'chatmessages'
|
ARG_CHATMESSAGES = 'chatmessages'
|
||||||
|
ARG_CHATSEARCHMESSAGE = 'chatsearchmessage'
|
||||||
|
ARG_CHATSEARCHMESSAGES = 'chatsearchmessages'
|
||||||
ARG_CHATSECTION = 'chatsection'
|
ARG_CHATSECTION = 'chatsection'
|
||||||
ARG_CHATSECTIONS = 'chatsections'
|
ARG_CHATSECTIONS = 'chatsections'
|
||||||
ARG_CHATSECTIONITEM = 'chatsectionitem'
|
ARG_CHATSECTIONITEM = 'chatsectionitem'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -312,6 +312,7 @@ 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_DEVICE_QUERY = 'Invalid {0} query "{1}"; it must be if the form "field:value" and must not contain a "?"'
|
||||||
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
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_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
||||||
@@ -474,6 +475,7 @@ REASON_ONLY_VALID_WITH_CONTENTRESTRICTIONS_READONLY_TRUE = 'reason only valid wi
|
|||||||
REAUTHENTICATION_IS_NEEDED = 'Reauthentication is needed, please run\n\ngam oauth create'
|
REAUTHENTICATION_IS_NEEDED = 'Reauthentication is needed, please run\n\ngam oauth create'
|
||||||
RECOMMEND_RUNNING_GAM_ROTATE_SAKEY = 'Recommend running "gam rotate sakey" to get a new key\n'
|
RECOMMEND_RUNNING_GAM_ROTATE_SAKEY = 'Recommend running "gam rotate sakey" to get a new key\n'
|
||||||
REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because acknowledge_device_touch_requirement not specified.\nDeprovisioning a device means the device will have to be physically wiped and re-enrolled to be managed by your domain again.\nThis requires physical access to the device and is very time consuming to perform for each device.\nPlease add "acknowledge_device_touch_requirement" to the GAM command if you understand this and wish to proceed with the deprovision.\nPlease also be aware that deprovisioning can have an effect on your device license count.\nSee https://support.google.com/chrome/a/answer/3523633 for full details.'
|
REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because acknowledge_device_touch_requirement not specified.\nDeprovisioning a device means the device will have to be physically wiped and re-enrolled to be managed by your domain again.\nThis requires physical access to the device and is very time consuming to perform for each device.\nPlease add "acknowledge_device_touch_requirement" to the GAM command if you understand this and wish to proceed with the deprovision.\nPlease also be aware that deprovisioning can have an effect on your device license count.\nSee https://support.google.com/chrome/a/answer/3523633 for full details.'
|
||||||
|
REFUSING_TO_DEPROVISION_N_DEVICES = 'Refusing to deprovision {0} devices due to maxtodepov {1}.\nSpecify "maxtodeprov 0" to deprovision all {0} devices'
|
||||||
REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
|
REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
|
||||||
REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
|
REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
|
||||||
REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
|
REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
# Products/SKUs
|
# Products/SKUs
|
||||||
_PRODUCTS = {
|
_PRODUCTS = {
|
||||||
'101001': 'Cloud Identity',
|
'101001': 'Cloud Identity Free',
|
||||||
'101005': 'Cloud Identity Premium',
|
'101005': 'Cloud Identity Premium',
|
||||||
'101031': 'Google Workspace for Education',
|
'101031': 'Google Workspace for Education',
|
||||||
'101033': 'Google Voice',
|
'101033': 'Google Voice',
|
||||||
@@ -44,7 +44,7 @@ _PRODUCTS = {
|
|||||||
}
|
}
|
||||||
_SKUS = {
|
_SKUS = {
|
||||||
'1010010001': {
|
'1010010001': {
|
||||||
'product': '101001', 'aliases': ['identity', 'cloudidentity'], 'displayName': 'Cloud Identity'},
|
'product': '101001', 'aliases': ['identity', 'cloudidentity', 'cloudidentityfree'], 'displayName': 'Cloud Identity Free'},
|
||||||
'1010050001': {
|
'1010050001': {
|
||||||
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
||||||
'1010070001': {
|
'1010070001': {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -117,6 +117,8 @@ PROPERTIES = {
|
|||||||
{CLASS: PC_STRING, TITLE: 'Full Name',},
|
{CLASS: PC_STRING, TITLE: 'Full Name',},
|
||||||
'displayName':
|
'displayName':
|
||||||
{CLASS: PC_STRING, TITLE: 'Display Name',},
|
{CLASS: PC_STRING, TITLE: 'Display Name',},
|
||||||
|
'primaryGuestEmail':
|
||||||
|
{CLASS: PC_STRING, TITLE: 'Primary Guest Email',},
|
||||||
'languages':
|
'languages':
|
||||||
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
|
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
|
||||||
'languageCode':
|
'languageCode':
|
||||||
@@ -131,6 +133,8 @@ PROPERTIES = {
|
|||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is a Super Admin',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Is a Super Admin',},
|
||||||
'isDelegatedAdmin':
|
'isDelegatedAdmin':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is Delegated Admin',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Is Delegated Admin',},
|
||||||
|
'isGuestUser':
|
||||||
|
{CLASS: PC_BOOLEAN, TITLE: 'Is a Guest User',},
|
||||||
'isEnrolledIn2Sv':
|
'isEnrolledIn2Sv':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: '2-step enrolled',},
|
{CLASS: PC_BOOLEAN, TITLE: '2-step enrolled',},
|
||||||
'isEnforcedIn2Sv':
|
'isEnforcedIn2Sv':
|
||||||
@@ -141,10 +145,14 @@ PROPERTIES = {
|
|||||||
{CLASS: PC_BOOLEAN, TITLE: 'IP Whitelisted',},
|
{CLASS: PC_BOOLEAN, TITLE: 'IP Whitelisted',},
|
||||||
'archived':
|
'archived':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is Archived',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Is Archived',},
|
||||||
|
'archivalTime':
|
||||||
|
{CLASS: PC_TIME, TITLE: 'Archival Time',},
|
||||||
'suspended':
|
'suspended':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Account Suspended',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Account Suspended',},
|
||||||
'suspensionReason':
|
'suspensionReason':
|
||||||
{CLASS: PC_STRING, TITLE: 'Suspension Reason',},
|
{CLASS: PC_STRING, TITLE: 'Suspension Reason',},
|
||||||
|
'suspensionTime':
|
||||||
|
{CLASS: PC_TIME, TITLE: 'Suspension Time',},
|
||||||
'changePasswordAtNextLogin':
|
'changePasswordAtNextLogin':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Must Change Password',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Must Change Password',},
|
||||||
'recoveryEmail':
|
'recoveryEmail':
|
||||||
|
|||||||
@@ -315,6 +315,9 @@ You can optionally specify the type of service account key with `algorithm|local
|
|||||||
Use `nokey` if you do not want a service account key created for the project.
|
Use `nokey` if you do not want a service account key created for the project.
|
||||||
|
|
||||||
## Use an existing project for GAM authorization
|
## Use an existing project for GAM authorization
|
||||||
|
|
||||||
|
To use the same GAM project on multiple computers, see: [GAM Configuration](Multiple-Computers)
|
||||||
|
|
||||||
Use an existing project to create and download two files: `client_secrets.json` for the Client and `oauth2service.json` for the Service Account.
|
Use an existing project to create and download two files: `client_secrets.json` for the Client and `oauth2service.json` for the Service Account.
|
||||||
|
|
||||||
### Default values
|
### Default values
|
||||||
|
|||||||
@@ -456,9 +456,9 @@
|
|||||||
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
||||||
<QueryContact> ::= <String>
|
<QueryContact> ::= <String>
|
||||||
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
||||||
<QueryCrOS> ::= <String>
|
<QueryCrOS> ::= <String>:<String>
|
||||||
See: https://support.google.com/chrome/a/answer/1698333
|
See: https://support.google.com/chrome/a/answer/1698333
|
||||||
<QueryDevice> ::= <String>
|
<QueryDevice> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryDriveFile> ::= <String>
|
<QueryDriveFile> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-files
|
See: https://developers.google.com/drive/api/v3/search-files
|
||||||
@@ -471,7 +471,7 @@
|
|||||||
<QueryItem> ::= <UniqueID>|<String>
|
<QueryItem> ::= <UniqueID>|<String>
|
||||||
<QueryMemberRestrictions> ::= <String>
|
<QueryMemberRestrictions> ::= <String>
|
||||||
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
||||||
<QueryMobile> ::= <String>
|
<QueryMobile> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryTeamDrive> ::= <String>
|
<QueryTeamDrive> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-parameters
|
See: https://developers.google.com/drive/api/v3/search-parameters
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ gam oauth create
|
|||||||
|
|
||||||
```
|
```
|
||||||
<OrgUnitPath> ::= /|(/<String)+
|
<OrgUnitPath> ::= /|(/<String)+
|
||||||
<QueryCrOS> ::= <String> See: https://support.google.com/chrome/a/answer/1698333
|
<QueryCrOS> ::= <String>:<String>
|
||||||
|
See: https://support.google.com/chrome/a/answer/1698333
|
||||||
<CommandID> ::= <String>
|
<CommandID> ::= <String>
|
||||||
<CrOSID> ::= <String>
|
<CrOSID> ::= <String>
|
||||||
<CrOSIDList> ::= "<CrOSID>(,<CrOSID>)*"
|
<CrOSIDList> ::= "<CrOSID>(,<CrOSID>)*"
|
||||||
@@ -409,11 +410,13 @@ gam update ou csvkmd cros.csv keyfield OU datafield deviceId add croscsvdata dev
|
|||||||
reenable
|
reenable
|
||||||
|
|
||||||
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>] [maxtodeprov <Integer>]
|
||||||
```
|
```
|
||||||
ChromeOS devices are now processed in batches.
|
ChromeOS devices are now processed in batches.
|
||||||
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
||||||
|
|
||||||
|
### Deprovisioning
|
||||||
|
|
||||||
As deprovisioning ChromeOS devices is not reversible, you must enter `acknowledge_device_touch_requirement`
|
As deprovisioning ChromeOS devices is not reversible, you must enter `acknowledge_device_touch_requirement`
|
||||||
when `<CrOSAction>` is `deprovision_same_model_replace`, `deprovision_different_model_replace`,
|
when `<CrOSAction>` is `deprovision_same_model_replace`, `deprovision_different_model_replace`,
|
||||||
`deprovision_retiring_device` or `deprovision_upgrade_transfer`.
|
`deprovision_retiring_device` or `deprovision_upgrade_transfer`.
|
||||||
@@ -424,6 +427,20 @@ each device. Please also be aware that deprovisioning can have an effect on your
|
|||||||
|
|
||||||
See https://support.google.com/chrome/a/answer/3523633 for full details.
|
See https://support.google.com/chrome/a/answer/3523633 for full details.
|
||||||
|
|
||||||
|
Prior to version 7.43.05, all devices in `<CrOSEntity>` would be deprovisioned. When `<CrOSEntity>`
|
||||||
|
was derived from an OU, this was desirable. However, if `<CrOSEntity>` was derived from a query,
|
||||||
|
more devices than desired may have been deprovisioned. In version 7.43.05 and higher,
|
||||||
|
GAM defaults to not deprovisioning devices if the number of devices exceeds one.
|
||||||
|
|
||||||
|
The option `max_to_deprov <Integer>` can be used to verify the number of devices to be deprovisioned;
|
||||||
|
no deprovisions are processed if the number of devices in `<CrOSEntity>` exceeds `<Integer>`;
|
||||||
|
the default value is one; set `<Number>` to 0 for no limit.
|
||||||
|
|
||||||
|
When `<CrOSEntity>` is derived from an OU, set `max_to_deprov 0` and all devices will be deprovisioned.
|
||||||
|
|
||||||
|
When `<CrOSEntity>` is derived from a query, e.g., `cros_sn <SerialNumber>`, the default `max_to_deprov 1`
|
||||||
|
protects you from accidentally deprovisioning more devices than desired.
|
||||||
|
|
||||||
## Send remote commands to ChromeOS devices
|
## Send remote commands to ChromeOS devices
|
||||||
Thanks to Jay for most of the following.
|
Thanks to Jay for most of the following.
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ Use this table to filter/query for specific device types:
|
|||||||
```
|
```
|
||||||
<AssetTag> ::= <String>
|
<AssetTag> ::= <String>
|
||||||
<AssetTagList> ::= "<AssetTag>(,<AssetTag>)*"
|
<AssetTagList> ::= "<AssetTag>(,<AssetTag>)*"
|
||||||
<QueryDevice> ::= <String>
|
<QueryDevice> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryDeviceList> ::= "<QueryDevice>(,<QueryDevice>)*"
|
<QueryDeviceList> ::= "<QueryDevice>(,<QueryDevice>)*"
|
||||||
<DeviceID> ::= devices/<String>
|
<DeviceID> ::= devices/<String>
|
||||||
@@ -133,6 +133,8 @@ Use this table to filter/query for specific device types:
|
|||||||
|
|
||||||
```
|
```
|
||||||
## Create a company device
|
## Create a company device
|
||||||
|
This method is available only to customers who have one of the following SKUs: Enterprise Standard, Enterprise Plus, Enterprise for Education, and Cloud Identity Premium.
|
||||||
|
|
||||||
Adds a new device to the Google company-owned inventory. Once a user is assigned and enrolled on the device the device will be considered company-owned for management purposes.
|
Adds a new device to the Google company-owned inventory. Once a user is assigned and enrolled on the device the device will be considered company-owned for management purposes.
|
||||||
The device will also register as company-owned with Google services like [Context-Aware Access (CAA)](https://support.google.com/a/answer/9275380).
|
The device will also register as company-owned with Google services like [Context-Aware Access (CAA)](https://support.google.com/a/answer/9275380).
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,9 +3,19 @@
|
|||||||
- [Notes](#notes)
|
- [Notes](#notes)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [User Type Entity](#user-type-entity)
|
- [User Type Entity](#user-type-entity)
|
||||||
|
- [All non-archived Users](#all-non-archived-users)
|
||||||
|
- [All archived Users](#all-archived-Users)
|
||||||
- [All non-suspended Users](#all-non-suspended-users)
|
- [All non-suspended Users](#all-non-suspended-users)
|
||||||
- [All suspended Users](#all-suspended-Users)
|
- [All suspended Users](#all-suspended-Users)
|
||||||
|
- [All archived or suspended Users](#all-archived-or-suspended-users)
|
||||||
|
- [All non-archived and non-suspended Users](#all-non-archived-and-non-suspended-users)
|
||||||
- [All non-suspended and suspended Users](#all-non-suspended-and-suspended-users)
|
- [All non-suspended and suspended Users](#all-non-suspended-and-suspended-users)
|
||||||
|
- [All non-suspended Guests](#all-non-suspended-guests)
|
||||||
|
- [All suspended Guests](#all-suspended-Guests)
|
||||||
|
- [All non-suspended and suspended Guests](#all-non-suspended-and-suspended-guests)
|
||||||
|
- [All non-suspended Users and Guests](#all-non-suspended-users-and-guests)
|
||||||
|
- [All suspended Users and Guests](#all-suspended-users-and-guests)
|
||||||
|
- [All non-suspended and suspended Users and Guests](#all-non-suspended-and-suspended-users-and-guests)
|
||||||
- [A single User](#a-single-user)
|
- [A single User](#a-single-user)
|
||||||
- [A list of Users](#a-list-of-users)
|
- [A list of Users](#a-list-of-users)
|
||||||
- [The admin user referenced in oauth2.txt](#the-admin-user-referenced-in-oauth2txt)
|
- [The admin user referenced in oauth2.txt](#the-admin-user-referenced-in-oauth2txt)
|
||||||
@@ -40,6 +50,18 @@
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
The following items referencing guest users were added to `<UserTypeEntity>` in version 7.43.00.
|
||||||
|
```
|
||||||
|
all_guests
|
||||||
|
all_guests_ns
|
||||||
|
all_guests_susp
|
||||||
|
all_guests_ns_susp
|
||||||
|
all_users_and_guests
|
||||||
|
all_users_and_guests_ns
|
||||||
|
all_users_and_guests_susp
|
||||||
|
all_users_and_guests_ns_susp
|
||||||
|
```
|
||||||
|
|
||||||
The followig items referencing non-archived/archived users were added to `<UserTypeEntity>` in version 7.22.00.
|
The followig items referencing non-archived/archived users were added to `<UserTypeEntity>` in version 7.22.00.
|
||||||
```
|
```
|
||||||
all users_na
|
all users_na
|
||||||
@@ -123,6 +145,8 @@ ous_and_children_na_ns
|
|||||||
|
|
||||||
<UserTypeEntity> ::=
|
<UserTypeEntity> ::=
|
||||||
(all users|users_na|users_arch|users_ns|users_susp|users_ns_susp|users_arch_or_susp|users_na_ns)|
|
(all users|users_na|users_arch|users_ns|users_susp|users_ns_susp|users_arch_or_susp|users_na_ns)|
|
||||||
|
(all guests|guests_ns|guests_susp|guests_ns_susp)|
|
||||||
|
(all users_and_guests|users_and_guests_ns|users_and_guests_susp|users_and_guests_ns_susp)|
|
||||||
(user <UserItem>)|
|
(user <UserItem>)|
|
||||||
(users <UserList>)|
|
(users <UserList>)|
|
||||||
(oauthuser)
|
(oauthuser)
|
||||||
@@ -232,6 +256,26 @@ Use these options to select users for GAM commands.
|
|||||||
## All non-suspended and suspended Users
|
## All non-suspended and suspended Users
|
||||||
* `all users_ns_susp`
|
* `all users_ns_susp`
|
||||||
|
|
||||||
|
## All non-suspended Guests
|
||||||
|
* `all guests`
|
||||||
|
* `all guests_ns`
|
||||||
|
|
||||||
|
## All suspended Guests
|
||||||
|
* `all guests_susp`
|
||||||
|
|
||||||
|
## All non-suspended and suspended Guests
|
||||||
|
* `all guests_ns_susp`
|
||||||
|
|
||||||
|
## All non-suspended Users and Guests
|
||||||
|
* `all users_and_guests`
|
||||||
|
* `all users_and_guests_ns`
|
||||||
|
|
||||||
|
## All suspended Users and Guests
|
||||||
|
* `all users_and_guests_susp`
|
||||||
|
|
||||||
|
## All non-suspended and suspended Users and Guests
|
||||||
|
* `all users_and_guests_ns_susp`
|
||||||
|
|
||||||
## A single User
|
## A single User
|
||||||
* `user <UserItem>`
|
* `user <UserItem>`
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ In zsh, if an argument contains a `~`, `|`, `!`, `>`, or `<`, you must enclose t
|
|||||||
|
|
||||||
To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
||||||
|
|
||||||
|
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
||||||
|
|
||||||
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
||||||
|
|
||||||
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
||||||
|
|
||||||
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
|
||||||
|
|
||||||
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
||||||
|
|
||||||
## Windows Command Prompt
|
## Windows Command Prompt
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ gam info domain [<DomainName>]
|
|||||||
gam show domains
|
gam show domains
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
For `info`, if `<DomainName>` is omitted, information about the primary domain will be displayed.
|
For `info`, if `<DomainName>` is omitted, customer information about the primary domain will be displayed.
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
@@ -10,6 +10,124 @@ 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.44.00
|
||||||
|
|
||||||
|
Added support for User data `archivalTime` and `suspensionTime` that is available
|
||||||
|
when fields `archived` and `suspended` are requested in `gam info user` and `gam print users`.
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> show chatmessages` to simplify specifying a filter.
|
||||||
|
```
|
||||||
|
start|starttime <Date>|<Time>
|
||||||
|
end|endtime <Date>|<Time>
|
||||||
|
range <Date>|<Time> <Date>|<Time>
|
||||||
|
thread <ChatThread>
|
||||||
|
```
|
||||||
|
|
||||||
|
Added commands to search for and display chat messages.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-messages-by-searching
|
||||||
|
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
|
```
|
||||||
|
developer_preview_apis = chat
|
||||||
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
|
```
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.5.
|
||||||
|
|
||||||
|
### 7.43.10
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity>` to not forward messages
|
||||||
|
to the `Bcc` recipients of the original message.
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity> addorigfieldstosubject`
|
||||||
|
where the recipient of the forwarded message was added to the subject line instead of the recipient of the original message.
|
||||||
|
|
||||||
|
### 7.43.09
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> print filelist` that caused a trap.
|
||||||
|
|
||||||
|
### 7.43.08
|
||||||
|
|
||||||
|
Fixed bug and formatting issues in `gam info device <DeviceEntity>`.
|
||||||
|
|
||||||
|
### 7.43.07
|
||||||
|
|
||||||
|
Improved validation of `<QueryCrOS>`, `<QueryDevice>` and `<QueryMobile>`.
|
||||||
|
|
||||||
|
### 7.43.06
|
||||||
|
|
||||||
|
Updated commands that use `<QueryCrOS>`, `<QueryDevice>` or `<QueryMobile>` to validate
|
||||||
|
that it is of the form `field:value` and that `value` does not contain a '?'.
|
||||||
|
Without validation, Google can return many more devices than are expected.
|
||||||
|
|
||||||
|
### 7.43.05
|
||||||
|
|
||||||
|
Added option `matchfield attendeesorganizer <Boolean> <EmailAddressEntity>` to `<EventMatchProperty>`
|
||||||
|
that is used in commands that process events. The match is true if all of the addresses in `<EmailAddressEntity>`
|
||||||
|
are present as attendees in the event and are an organizer or not based on `<Boolean>`.
|
||||||
|
|
||||||
|
Added option `max_to_deprov <Integer>` to `gam update cros <CrOSEntity> action <CrOSAction>`
|
||||||
|
that is used when `<CrOSAction>` is any of the following:
|
||||||
|
```
|
||||||
|
deprovision_different_model_replace|
|
||||||
|
deprovision_different_model_replacement|
|
||||||
|
deprovision_retiring_device|
|
||||||
|
deprovision_same_model_replace|
|
||||||
|
deprovision_same_model_replacement|
|
||||||
|
deprovision_upgrade_transfer
|
||||||
|
```
|
||||||
|
`max_to_deprov <Integer>` - No deprovisions are processed if the number of devices in `<CrOSEntity>` exceeds `<Integer>`;
|
||||||
|
the default value is one; set `<Integer>` to 0 for no limit.
|
||||||
|
|
||||||
|
### 7.43.04
|
||||||
|
|
||||||
|
Added option `include_suspended_zeros [<Boolean>]` to `gam print vaultcounts` that causes
|
||||||
|
GAM to generate zero count lines for suspended users with zero items as well as non-suspended users.
|
||||||
|
|
||||||
|
### 7.43.03
|
||||||
|
|
||||||
|
Added option `parentpathonly [<Boolean>]` to the following commands that causes GAM
|
||||||
|
to display only the parent folder names when displaying the path to a file.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> info drivefile ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> show fileinfo ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> print|show filepath
|
||||||
|
gam <UserTypeEntity> print filelist ... filepath|fullpath
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.43.02
|
||||||
|
|
||||||
|
Added option `maxactivities <Integer>` to `gam <UserTypeEntity> print driveactivity` to limit
|
||||||
|
the number of activities displayed; the default is 0, no limit.
|
||||||
|
|
||||||
|
### 7.43.01
|
||||||
|
|
||||||
|
Updated `gam info user` and `gam print users` to display guest user attributes: `isGuestUser, guestAccountInfo`
|
||||||
|
|
||||||
|
Expanded `<UserTypeEntity>` to allow specification of guest users.
|
||||||
|
* See [Collections of Users](Collections-of-Users)
|
||||||
|
|
||||||
|
### 7.42.00
|
||||||
|
|
||||||
|
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`
|
||||||
|
until all processing was complete; if `<FileName>` was not accessible, an error was generated
|
||||||
|
and no results were saved. Now, `<FileName>` is opened initially to verify accessiblity
|
||||||
|
and then written when processing is complete.
|
||||||
|
|
||||||
|
In the unlikely event that this causes issues, you can do `redirect csv <FileName> delayopen`
|
||||||
|
to get the previous behavior.
|
||||||
|
|
||||||
|
### 7.41.03
|
||||||
|
|
||||||
|
Fixed bug in the following:
|
||||||
|
Added the following to `<RowValueFilter>` used in CSV input/output row filtering; these are
|
||||||
|
synonyms for `count` and `countrange`.
|
||||||
|
```
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
|
```
|
||||||
|
|
||||||
### 7.41.02
|
### 7.41.02
|
||||||
|
|
||||||
Added option `ownername` to `gam info|print courses` to have GAM display the course owners full name;
|
Added option `ownername` to `gam info|print courses` to have GAM display the course owners full name;
|
||||||
|
|||||||
@@ -251,10 +251,10 @@ writes the credentials into the file oauth2.txt.
|
|||||||
```
|
```
|
||||||
gamteam@server:/Users/gamteam$ rm -f /Users/gamteam/GAMConfig/oauth2.txt
|
gamteam@server:/Users/gamteam$ rm -f /Users/gamteam/GAMConfig/oauth2.txt
|
||||||
gamteam@server:/Users/gamteam$ gam version
|
gamteam@server:/Users/gamteam$ gam version
|
||||||
GAM 7.41.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|
||||||
@@ -1034,9 +1034,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
|
||||||
GAM 7.41.02 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.44.00 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
Windows 11 10.0.26200 AMD64
|
Windows 11 10.0.26200 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
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
| Assured Controls | 1010390001 | assuredcontrols |
|
| Assured Controls | 1010390001 | assuredcontrols |
|
||||||
| Assured Controls Plus | 1010390002 | assuredcontrolsplus |
|
| Assured Controls Plus | 1010390002 | assuredcontrolsplus |
|
||||||
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
||||||
| Cloud Identity | 1010010001 | cloudidentity |
|
| Cloud Identity Free | 1010010001 | cloudidentity |
|
||||||
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
||||||
| Cloud Search | 1010350001 | cloudsearch |
|
| Cloud Search | 1010350001 | cloudsearch |
|
||||||
| Colab Pro | 1010500001 | colabpro |
|
| Colab Pro | 1010500001 | colabpro |
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
cloudidentityfree| cloudidentity | identity | 1010010001 | Cloud Identity Free |
|
||||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||||
cloudsearch | 1010350001 | Cloud Search |
|
cloudsearch | 1010350001 | Cloud Search |
|
||||||
colabpro | 1010500001 | Colab Pro |
|
colabpro | 1010500001 | Colab Pro |
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ You can redirect CSV file output and stdout/stderr output to files. By using red
|
|||||||
You can redirect stdout and stderr to null and stderr can be redirected to stdout.
|
You can redirect stdout and stderr to null and stderr can be redirected to stdout.
|
||||||
```
|
```
|
||||||
<Redirect> ::=
|
<Redirect> ::=
|
||||||
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
redirect csv <FileName> [delayopen] [multiprocess] [append] [noheader] [charset <Charset>]
|
||||||
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
||||||
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
|
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
|
||||||
[todrive <ToDriveAttribute>*] |
|
[todrive <ToDriveAttribute>*] |
|
||||||
@@ -129,12 +129,20 @@ You can redirect stdout and stderr to null and stderr can be redirected to stdou
|
|||||||
redirect stderr null [multiprocess] |
|
redirect stderr null [multiprocess] |
|
||||||
redirect stderr stdout [multiprocess]
|
redirect stderr stdout [multiprocess]
|
||||||
```
|
```
|
||||||
For `redirect`, the optional subarguments must appear in the order shown.
|
In versions prior to 7.42.00`, the `redirect csv` optional subarguments had to be specified in the order shown.
|
||||||
|
Now the arguments can be specified in any order except that `todrive <ToDriveAttribute>*` must still be last.
|
||||||
|
|
||||||
If `<FileName>` specifies a relative path, the file will be put in the directory specified by `drive_dir` in gam.cfg.
|
If `<FileName>` specifies a relative path, the file will be put in the directory specified by `drive_dir` in gam.cfg.
|
||||||
If `<FileName>` specifies an absolute path, the file will be put in the directory specified.
|
If `<FileName>` specifies an absolute path, the file will be put in the directory specified.
|
||||||
Specify `./<FileName>` to put the file in your current working directory.
|
Specify `./<FileName>` to put the file in your current working directory.
|
||||||
|
|
||||||
|
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`
|
||||||
|
until all processing was complete; if `<FileName>` was not accessible, an error was generated and no results were saved.
|
||||||
|
Now, `<FileName>` is opened initially to verify accessiblity and then written when processing is complete.
|
||||||
|
|
||||||
|
In the unlikely event that this causes issues, you can do `redirect csv <FileName> delayopen`
|
||||||
|
to get the previous behavior.
|
||||||
|
|
||||||
The `multiprocess` subargument allows the multiple subprocesses started by `gam csv` to write intelligently
|
The `multiprocess` subargument allows the multiple subprocesses started by `gam csv` to write intelligently
|
||||||
to a single redirected CSV/stdout/stderr file. If you don't specify `multiprocess`, each subprocess
|
to a single redirected CSV/stdout/stderr file. If you don't specify `multiprocess`, each subprocess
|
||||||
writes `<FileName>` independently; you end up with a single file written by the last subprocess.
|
writes `<FileName>` independently; you end up with a single file written by the last subprocess.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
```
|
```
|
||||||
<QueryMobile> ::= <String>
|
<QueryMobile> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryMobileList> ::= "<QueryMobile>(,<QueryMobile>)*"
|
<QueryMobileList> ::= "<QueryMobile>(,<QueryMobile>)*"
|
||||||
<ResourceID> ::= <String>
|
<ResourceID> ::= <String>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Thank you.
|
|||||||
* James Seymour - https://sites.google.com/view/gam--commands/
|
* James Seymour - https://sites.google.com/view/gam--commands/
|
||||||
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
||||||
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist-now-turbocharged-with-gam7
|
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist-now-turbocharged-with-gam7
|
||||||
|
* Paul Ogier (Taming.Tech) - GAM Scripts https://github.com/PaulOgier/GAMScripts
|
||||||
* Paul Ogier (Taming.Tech) - GAM7 Course on Udemy https://taming.tech/GAMCourse
|
* Paul Ogier (Taming.Tech) - GAM7 Course on Udemy https://taming.tech/GAMCourse
|
||||||
* Paul Ogier (Taming.Tech) - GAM7 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
* Paul Ogier (Taming.Tech) - GAM7 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
||||||
* Paul Ogier (Taming.Tech) - Installation videos
|
* Paul Ogier (Taming.Tech) - Installation videos
|
||||||
|
|||||||
@@ -277,6 +277,7 @@
|
|||||||
|
|
||||||
<EventMatchProperty> ::=
|
<EventMatchProperty> ::=
|
||||||
(matchfield attendees <EmailAddressEntity>)|
|
(matchfield attendees <EmailAddressEntity>)|
|
||||||
|
(matchfield attendeesorganizer <Boolean> <EmailAddressEntity>)|
|
||||||
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesdomainlist <DomainNameList>)|
|
(matchfield attendeesdomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
||||||
@@ -460,8 +461,11 @@ The Google Calendar API processes `<EventSelectProperty>*`; you may specify none
|
|||||||
* `singleevents` - Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves
|
* `singleevents` - Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves
|
||||||
* `updatedmin <Time>` - Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showdeletedevents
|
* `updatedmin <Time>` - Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showdeletedevents
|
||||||
|
|
||||||
GAM processes `<EventMatchProperty>*`; you may specify none or multiple properties.
|
GAM processes `<EventMatchProperty>*`
|
||||||
* `matchfield attendees <EmailAddressEntity>` - All of the attendees in `<EmailAddressEntity>` must be present
|
; you may specify none or multiple properties.
|
||||||
|
* `matchfield attendees <EmailAddressEntity>` - All of the addresses in `<EmailAddressEntity>` must be present as attendees
|
||||||
|
* `matchfield attendeesorganizer <Boolean> <EmailAddressEntity>` - All of the addressed in `<EmailAddressEntity>` must be present
|
||||||
|
as attendees and are an organizer or not based on `<Boolean>`
|
||||||
* `matchfield attendeesonlydomainlist <DomainNameList>` - All attendee's email addresses must be in a domain in `<DomainNameList>`
|
* `matchfield attendeesonlydomainlist <DomainNameList>` - All attendee's email addresses must be in a domain in `<DomainNameList>`
|
||||||
* For example, this lets you look for events with all attendees in your internal domains. You should include `resource.calendar.google.com`
|
* For example, this lets you look for events with all attendees in your internal domains. You should include `resource.calendar.google.com`
|
||||||
in `<DomainNameList>` if the events use resources.
|
in `<DomainNameList>` if the events use resources.
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
- [Display Chat Members](#display-chat-members)
|
- [Display Chat Members](#display-chat-members)
|
||||||
- [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 Messages by Searching](#display-chat-messages-by-searching)
|
||||||
- [Display Chat Events](#display-chat-events)
|
- [Display Chat Events](#display-chat-events)
|
||||||
- [Manage Chat Emojis](#manage-chat-emojis)
|
- [Manage Chat Emojis](#manage-chat-emojis)
|
||||||
- [Display Chat Emojis](#display-chat-emojis)
|
- [Display Chat Emojis](#display-chat-emojis)
|
||||||
@@ -65,6 +66,7 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
* [Chat API - Custom Emojis](https://developers.google.com/workspace/chat/api/reference/rest/v1/customEmojis)
|
* [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 - Search Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/search)
|
||||||
* [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)
|
||||||
* [Chat API - User Sections](https://developers.google.com/workspace/chat/api/reference/rest/v1/users.sections)
|
* [Chat API - User Sections](https://developers.google.com/workspace/chat/api/reference/rest/v1/users.sections)
|
||||||
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
||||||
@@ -109,8 +111,8 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||||
<ChatSpaceType> ::=
|
<ChatSpaceType> ::=
|
||||||
space|
|
space|
|
||||||
groupchat|
|
groupchat|
|
||||||
directmessage
|
directmessage
|
||||||
<ChatSpaceTypeList> ::= "<ChatSpaceType>(,<ChatSpaceType>)*"
|
<ChatSpaceTypeList> ::= "<ChatSpaceType>(,<ChatSpaceType>)*"
|
||||||
<ChatMessageID> ::= client-<String>
|
<ChatMessageID> ::= client-<String>
|
||||||
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
||||||
@@ -908,7 +910,7 @@ gam user user@domain.com delete chatmessage name spaces/AAAADi-pvqc/messages/PKJ
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Display Chat Messages
|
## Display Chat Messages
|
||||||
Display a specific Chat message.
|
Display a specific chat message.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
||||||
@@ -923,12 +925,15 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx90ooIU.PKJrx90ooIU
|
gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx90ooIU.PKJrx90ooIU
|
||||||
```
|
```
|
||||||
|
|
||||||
### Display information about all chat messages in a chat space
|
### Display information about chat messages in a chat space
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show chatmessages
|
gam <UserTypeEntity> show chatmessages
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[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.
|
||||||
@@ -937,8 +942,11 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson [quotechar <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,
|
||||||
@@ -952,38 +960,76 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
By default, deleted messages are not displayed; use `showdeleted` to also display deleted messages.
|
By default, deleted messages are not displayed; use `showdeleted` to also display deleted messages.
|
||||||
|
|
||||||
Use `filter <String>` to filter messages by `createTime` and `thread.name`.
|
To filter messages by the time they were created:
|
||||||
|
* `start|starttime <Date>|<Time>` - Display messages created on or after the `<Date>|<Time>`
|
||||||
|
* `end|endtime <Date>|<Time>` - Display messages created before the `<Date>|<Time>`
|
||||||
|
* `range <Date>|<Time> <Date>|<Time>` - Display messages created on or after the first `<Date>|<Time>` and before the second `<Date>|<Time>`
|
||||||
|
|
||||||
To filter messages by the date they were created, specify the createTime with a timestamp in RFC-3339 format and double quotation marks. For example, "2023-04-21T11:30:00-04:00".
|
Use `thread <String>` to filter messages by their thread name, e.g., `spaces/AAAAAAAAAAA/threads/123`.
|
||||||
* Use the greater than operator `>` to list messages that were created after a timestamp.
|
|
||||||
* Use the less than operator `<` to list messages that were created before a timestamp.
|
|
||||||
* To filter messages within a time interval, use the AND operator between two timestamps.
|
|
||||||
* To filter by thread, specify the thread.name, formatted as spaces/{space}/threads/{thread}. You can only specify one thread.name per query.
|
|
||||||
* To filter by both thread and date, use the AND operator in your query.
|
|
||||||
|
|
||||||
For example, the following queries are valid on Linux/MacOS:
|
## Display Chat Messages by Searching
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
```
|
```
|
||||||
filter 'createTime > "2012-04-21T11:30:00-04:00"'
|
developer_preview_apis = chat
|
||||||
filter 'createTime > "2012-04-21T11:30:00-04:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
filter 'createTime > "2012-04-21T11:30:00+00:00" AND createTime < "2013-01-01T00:00:00+00:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
|
||||||
filter 'thread.name = spaces/AAAAAAAAAAA/threads/123'
|
|
||||||
```
|
```
|
||||||
|
See the following for search option details:
|
||||||
|
https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/search
|
||||||
|
|
||||||
For example, the following queries are valid on Windows Command Prompt:
|
You must specify `keywords <StringList>`; messages that match any word|phrase in `<StringList>` are displayed.
|
||||||
```
|
Phrases must be enclosed in `"`.
|
||||||
filter "createTime > \"2012-04-21T11:30:00-04:00\""
|
* Linux, macOS, Windows Command Prompt - `keywords "\"things to do\" urgent"`
|
||||||
filter "createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
* Windows Power Shell - ```keywords "`"things to do`" urgent"```
|
||||||
filter "createTime > \"2012-04-21T11:30:00+00:00\" AND createTime < \"2013-01-01T00:00:00+00:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
|
||||||
filter "thread.name = spaces/AAAAAAAAAAA/threads/123"
|
|
||||||
```
|
|
||||||
|
|
||||||
For example, the following queries are valid on Windows PowerShell:
|
By default, all spaces the user has access to are searched; use the following options to limit the search.
|
||||||
|
* `<ChatSpace>*` - Specific chat spaces
|
||||||
|
* `displaynames [all|any] <StringList>` - Spaces with display names with partial matches of `all|any` of the words in `<StringList>`
|
||||||
|
|
||||||
|
Use the following to limit the search to messages with specific characteristics.
|
||||||
|
* `senders <EmailAddressEntity>` - Messages with any sender in `<EmailAddressEntity>`
|
||||||
|
* `usermentions [all|any] <EmailAddressEntity>` - Messages with mentions of `all|any` users in `<EmailAddressEntity>`
|
||||||
|
* `start|starttime <Date>|<Time>` - Messages created on or after the `<Date>|<Time>`
|
||||||
|
* `end|endtime <Date>|<Time>` - Messages created before the `<Date>|<Time>`
|
||||||
|
* `range <Date>|<Time> <Date>|<Time>` - Messages created on or after the first `<Date>|<Time>` and before the second `<Date>|<Time>`
|
||||||
|
* `hasattachment` - Messages with at least one attachment
|
||||||
```
|
```
|
||||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\"'
|
gam <UserTypeEntity> show chatsearchmessages
|
||||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"'
|
keywords <StringList>
|
||||||
filter 'createTime > \"2012-04-21T11:30:00+00:00\" AND createTime < \"2013-01-01T00:00:00+00:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
<ChatSpace>*
|
||||||
filter 'thread.name = spaces/AAAAAAAAAAA/threads/123'
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson]
|
||||||
```
|
```
|
||||||
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> print chatsearchmessages [todrive <ToDriveAttribute>*]
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[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.
|
||||||
|
|
||||||
|
|
||||||
## Display Chat Events
|
## Display Chat Events
|
||||||
Display a specific Chat event.
|
Display a specific Chat event.
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ gam <UserTypeEntity> print driveactivity [todrive <ToDriveAttributes>*]
|
|||||||
(query <QueryDriveFile>)]
|
(query <QueryDriveFile>)]
|
||||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date)|<Time>|
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date)|<Time>|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[action|actions [not] <DriveActivityActionList>]
|
[action|actions [not] <DriveActivityActionList>] [maxactivities <Number>]
|
||||||
[consolidationstrategy legacy|none]
|
[consolidationstrategy legacy|none]
|
||||||
[idmapfile <FileName>|(gsheet <UserGoogleSheet>) [charset <String>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]]
|
[idmapfile <FileName>|(gsheet <UserGoogleSheet>) [charset <String>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]]
|
||||||
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
||||||
@@ -99,6 +99,8 @@ Google does the filtering.
|
|||||||
* `action|actions <DriveActivityActionList>` - Only display activities with the specified actions; by default, all actions are displayed
|
* `action|actions <DriveActivityActionList>` - Only display activities with the specified actions; by default, all actions are displayed
|
||||||
* `action|actions not <DriveActivityActionList>` - Only display activities without the specified actions; by default, all actions are displayed
|
* `action|actions not <DriveActivityActionList>` - Only display activities without the specified actions; by default, all actions are displayed
|
||||||
|
|
||||||
|
You can limit the number of activities displayed with the `maxactivities <Number>; the default is 0, no limit.
|
||||||
|
|
||||||
The API only returns a permissionId and user name for each event but no user email address. To get an email address perform the
|
The API only returns a permissionId and user name for each event but no user email address. To get an email address perform the
|
||||||
following command to generate a file that contains the email address and permissionId for all users. You can substitute for `all users` if desired.
|
following command to generate a file that contains the email address and permissionId for all users. You can substitute for `all users` if desired.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ There are two methods for moving a folder from a My Drive to a Shared Drive:
|
|||||||
* GAM
|
* 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
|
* 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 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
|
* Files owned 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:
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ Display file details in indented keyword: value format. The two forms are equiva
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
@@ -436,7 +436,7 @@ gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
@@ -455,6 +455,7 @@ Use `fullpath` to add additional path information indicating that a file is an O
|
|||||||
By default, the path to a file includes the file name as the last element of the path.
|
By default, the path to a file includes the file name as the last element of the path.
|
||||||
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
||||||
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
||||||
|
Use `parentpathonly` to display only the parent folder names when displaying the path to a file.
|
||||||
|
|
||||||
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
||||||
|
|
||||||
@@ -517,12 +518,12 @@ gam <UserTypeEntity> show filepath <DriveFileEntity>
|
|||||||
[returnpathonly]
|
[returnpathonly]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname]
|
[stripcrsfromname]
|
||||||
[folderpathonly [<Boolean>]] [fullpath] [pathdelimiter <Character>]
|
[folderpathonly|parentpathonly [<Boolean>]] [fullpath] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname] [oneitemperrow]
|
[stripcrsfromname] [oneitemperrow]
|
||||||
[fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
```
|
```
|
||||||
Use `returnpathonly` to display just the file path of the files in `<DriveFileEntity>`.
|
Use `returnpathonly` to display just the file path of the files in `<DriveFileEntity>`.
|
||||||
@@ -532,6 +533,7 @@ Use `fullpath` to add additional path information indicating that a file is an O
|
|||||||
By default, the path to a file includes the file name as the last element of the path.
|
By default, the path to a file includes the file name as the last element of the path.
|
||||||
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
||||||
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
||||||
|
Use `parentpathonly` to display only the parent folder names when displaying the path to a file.
|
||||||
|
|
||||||
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
||||||
|
|
||||||
@@ -1106,7 +1108,7 @@ gam <UserTypeEntity> print|show filelist [todrive <ToDriveAttribute>*]
|
|||||||
[countsonly [summary none|only|plus] [summaryuser <String>]
|
[countsonly [summary none|only|plus] [summaryuser <String>]
|
||||||
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
||||||
[countsrowfilter]
|
[countsrowfilter]
|
||||||
[filepath|fullpath [folderpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
[filepath|fullpath [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
||||||
@@ -1239,6 +1241,7 @@ JSON data rather than as additional columns
|
|||||||
By default, the path to a file includes the file name as the last element of the path.
|
By default, the path to a file includes the file name as the last element of the path.
|
||||||
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
||||||
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
||||||
|
Use `parentpathonly` to display only the parent folder names when displaying the path to a file.
|
||||||
|
|
||||||
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
||||||
|
|
||||||
|
|||||||
@@ -477,12 +477,12 @@ When `matchlabel <LabelName>` is specified, the following characters are replace
|
|||||||
|
|
||||||
## Forward messages/threads
|
## Forward messages/threads
|
||||||
```
|
```
|
||||||
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>]
|
[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>]
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||||
|
|||||||
@@ -91,8 +91,8 @@ gam <UserItem> show meetconferences
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
||||||
* `space <MeetSpaceName>` - Display conferences for a specifc space by giving its name
|
* `space <MeetSpaceName>` - Display conferences for a specific space by giving its name
|
||||||
* `code <String>` - Display conferences for a specifc space by giving its code
|
* `code <String>` - Display conferences for a specific space by giving its code
|
||||||
|
|
||||||
By default, Gam displays the information about the meet conferences as an indented list of keys and values.
|
By default, Gam displays the information about the meet conferences as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
@@ -103,8 +103,8 @@ gam <UserItem> print meetconferences [todrive <ToDriveAttribute>*]
|
|||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
||||||
* `space <MeetSpaceName>` - Display conferences for a specifc space by giving its name
|
* `space <MeetSpaceName>` - Display conferences for a specific space by giving its name
|
||||||
* `code <String>` - Display conferences for a specifc space by giving its code
|
* `code <String>` - Display conferences for a specific space by giving its code
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
@@ -257,11 +257,17 @@ gam print vaultcounts [todrive <ToDriveAttributes>*]
|
|||||||
[excludedrafts <Boolean>]
|
[excludedrafts <Boolean>]
|
||||||
[<JSONData>]
|
[<JSONData>]
|
||||||
[wait <Integer>]
|
[wait <Integer>]
|
||||||
|
[include_suspended_zeros [<Boolean>]]
|
||||||
```
|
```
|
||||||
Specify the search method, this is optional:
|
Specify the search method, this is optional:
|
||||||
* `accounts <EmailAddressEntity>` - Search all accounts specified in `<EmailAddressEntity>`
|
* `accounts <EmailAddressEntity>` - Search all accounts specified in `<EmailAddressEntity>`
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
||||||
* `everyone|entireorg` - Search for all accounts in the organization
|
* `everyone|entireorg` - Search all accounts in the organization
|
||||||
|
|
||||||
|
By default, the Vault API doesn't return accounts with zero items; GAM
|
||||||
|
generates a zero count line for non-suspended accounts with zero items.
|
||||||
|
The `include_suspended_zeros` option causes GAM to generate a zero count line
|
||||||
|
for suspended accounts with zero items.
|
||||||
|
|
||||||
For `corpus mail|group`, you can specify search terms to limit the search.
|
For `corpus mail|group`, 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)
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.41.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2026-02-15T07:51:00-08:00
|
Time: 2026-02-15T07:51:00-08:00
|
||||||
@@ -15,10 +15,10 @@ Time: 2026-02-15T07:51:00-08: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.41.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/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
|
||||||
@@ -27,10 +27,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.41.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2026-02-15T07:51:00-08:00
|
Time: 2026-02-15T07:51:00-08:00
|
||||||
@@ -68,7 +68,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.41.02
|
Latest: 7.44.00
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -76,7 +76,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.41.02
|
7.44.00
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -86,10 +86,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.41.02 - https://github.com/GAM-team/GAM
|
GAM 7.44.00 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2026-02-15T07:51:00-08:00
|
Time: 2026-02-15T07:51:00-08:00
|
||||||
|
|||||||
Reference in New Issue
Block a user