mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-10 09:11:37 +00:00
Compare commits
119 Commits
20240909.0
...
v7.00.08
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46d05e37d0 | ||
|
|
9dc87a060d | ||
|
|
3e638dd35e | ||
|
|
e4ad4fb26c | ||
|
|
cc63aee62c | ||
|
|
31806438a9 | ||
|
|
74ac351aa4 | ||
|
|
7e157dab42 | ||
|
|
8b2586ead2 | ||
|
|
ebcfd18457 | ||
|
|
cbb496e491 | ||
|
|
1ff93b1051 | ||
|
|
2fdb6156e7 | ||
|
|
f7c13a3063 | ||
|
|
c0470c35a9 | ||
|
|
304a897290 | ||
|
|
af2499a0ea | ||
|
|
52ccd735ca | ||
|
|
ffcb1c4ddf | ||
|
|
0dd74e226c | ||
|
|
bd5149d3f8 | ||
|
|
7c6649b24f | ||
|
|
cfd9447f39 | ||
|
|
820698d9d4 | ||
|
|
7645edee6b | ||
|
|
7e6f7b8bab | ||
|
|
ee77ae8319 | ||
|
|
0f2eba580d | ||
|
|
1cdf160b35 | ||
|
|
7e68c108c1 | ||
|
|
8ecbe67054 | ||
|
|
a6016825ff | ||
|
|
15221a1a20 | ||
|
|
6718938c1a | ||
|
|
acd1a9ad91 | ||
|
|
cce2894dac | ||
|
|
877ea0cc19 | ||
|
|
cd4c1fc7ac | ||
|
|
09292fd28b | ||
|
|
ccef86d2a0 | ||
|
|
ba34ef4494 | ||
|
|
26eca09bb9 | ||
|
|
64d4cc00e4 | ||
|
|
33b4de86a9 | ||
|
|
f33da85518 | ||
|
|
93ecbf479e | ||
|
|
ca2d6541ce | ||
|
|
db7154dca9 | ||
|
|
72bba3d948 | ||
|
|
07bbf4d4ea | ||
|
|
7aafbbe58e | ||
|
|
c2058211fe | ||
|
|
08a6cbb270 | ||
|
|
c5da8963d4 | ||
|
|
89b854ea57 | ||
|
|
42fd8cd1e8 | ||
|
|
0e0f49c540 | ||
|
|
f0b1b62e79 | ||
|
|
7606a40a58 | ||
|
|
ac5098522b | ||
|
|
d84ff8d392 | ||
|
|
4a0687cfe9 | ||
|
|
19e386ed21 | ||
|
|
8165c72606 | ||
|
|
5267992e31 | ||
|
|
1949b3346c | ||
|
|
38375b1710 | ||
|
|
281e790260 | ||
|
|
2b8b2521d1 | ||
|
|
52601edb35 | ||
|
|
5475f281eb | ||
|
|
b1f8893783 | ||
|
|
640cb322d7 | ||
|
|
c4f15cbf3a | ||
|
|
bef392cf7a | ||
|
|
abb49ed336 | ||
|
|
fe5bc5569d | ||
|
|
18615f246d | ||
|
|
7958632046 | ||
|
|
3e8bff23c4 | ||
|
|
0221781a05 | ||
|
|
e6ced7fff6 | ||
|
|
484238ece2 | ||
|
|
ee32bb87f0 | ||
|
|
73803acb89 | ||
|
|
a40df40f9b | ||
|
|
a33b89788c | ||
|
|
54f815e503 | ||
|
|
e54d3d274a | ||
|
|
b7a20ceb4f | ||
|
|
bbc965d38f | ||
|
|
8935cf7041 | ||
|
|
4583f6d996 | ||
|
|
92282fb493 | ||
|
|
65ea328f2a | ||
|
|
2da4833a0d | ||
|
|
631ce68126 | ||
|
|
480aca680d | ||
|
|
6e3ab6700d | ||
|
|
61319fa08e | ||
|
|
673e9f88ad | ||
|
|
f2b8200a3b | ||
|
|
0383624c72 | ||
|
|
cb03b8d9d4 | ||
|
|
e7e821ca3d | ||
|
|
6b21fdbcc6 | ||
|
|
ee326c6fe3 | ||
|
|
8945fd163c | ||
|
|
4dab0bd4bb | ||
|
|
49ec0c6df4 | ||
|
|
f3d29c47e2 | ||
|
|
41b4577665 | ||
|
|
2ca813f209 | ||
|
|
66734f07fa | ||
|
|
90844effa7 | ||
|
|
4765c6e186 | ||
|
|
d2f52fd7bf | ||
|
|
85c55c5aa8 | ||
|
|
6043411825 |
13
.github/actions/entitlements.plist
vendored
Normal file
13
.github/actions/entitlements.plist
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- These are required for binaries built by PyInstaller -->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
1
.github/actions/package_exclusions.txt
vendored
1
.github/actions/package_exclusions.txt
vendored
@@ -2,6 +2,5 @@ oauth2.txt
|
||||
nobrowser.txt
|
||||
enabledasa.txt
|
||||
lastupdatecheck.txt
|
||||
*.json
|
||||
*.lck
|
||||
*.csv
|
||||
|
||||
280
.github/workflows/build.yml
vendored
280
.github/workflows/build.yml
vendored
@@ -31,68 +31,68 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: ubuntu-20.04
|
||||
- os: ubuntu-22.04
|
||||
jid: 1
|
||||
goal: build
|
||||
arch: x86_64
|
||||
openssl_archs: linux-x86_64
|
||||
- os: [self-hosted, linux, arm64]
|
||||
- os: ubuntu-20.04
|
||||
jid: 2
|
||||
goal: build
|
||||
arch: x86_64
|
||||
openssl_archs: linux-x86_64
|
||||
- os: [self-hosted, linux, arm64]
|
||||
jid: 3
|
||||
goal: build
|
||||
arch: aarch64
|
||||
openssl_archs: linux-aarch64
|
||||
- os: ubuntu-20.04
|
||||
jid: 3
|
||||
jid: 4
|
||||
goal: build
|
||||
arch: x86_64
|
||||
openssl_archs: linux-x86_64
|
||||
staticx: yes
|
||||
- os: [self-hosted, linux, arm64]
|
||||
jid: 4
|
||||
jid: 5
|
||||
goal: build
|
||||
arch: aarch64
|
||||
openssl_archs: linux-aarch64
|
||||
staticx: yes
|
||||
- os: macos-12
|
||||
jid: 5
|
||||
- os: macos-13
|
||||
jid: 6
|
||||
goal: build
|
||||
arch: x86_64
|
||||
openssl_archs: darwin64-x86_64
|
||||
- os: macos-14
|
||||
jid: 6
|
||||
jid: 7
|
||||
goal: build
|
||||
arch: aarch64
|
||||
openssl_archs: darwin64-arm64
|
||||
- os: macos-14
|
||||
jid: 7
|
||||
goal: build
|
||||
arch: universal2
|
||||
openssl_archs: darwin64-arm64 darwin64-x86_64
|
||||
- os: windows-2022
|
||||
jid: 8
|
||||
jid: 9
|
||||
goal: build
|
||||
arch: Win64
|
||||
openssl_archs: VC-WIN64A
|
||||
- os: ubuntu-22.04
|
||||
goal: test
|
||||
python: "3.8"
|
||||
jid: 9
|
||||
arch: x86_64
|
||||
- os: ubuntu-22.04
|
||||
goal: test
|
||||
python: "3.9"
|
||||
python: "3.13"
|
||||
jid: 10
|
||||
arch: x86_64
|
||||
- os: ubuntu-22.04
|
||||
goal: test
|
||||
python: "3.10"
|
||||
python: "3.9"
|
||||
jid: 11
|
||||
arch: x86_64
|
||||
- os: ubuntu-22.04
|
||||
goal: test
|
||||
python: "3.11"
|
||||
python: "3.10"
|
||||
jid: 12
|
||||
arch: x86_64
|
||||
- os: ubuntu-22.04
|
||||
goal: test
|
||||
python: "3.11"
|
||||
jid: 8
|
||||
arch: x86_64
|
||||
|
||||
steps:
|
||||
|
||||
@@ -115,7 +115,7 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
cache.tar.xz
|
||||
key: gam-${{ matrix.jid }}-20240903
|
||||
key: gam-${{ matrix.jid }}-20240918
|
||||
|
||||
- name: Untar Cache archive
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||
@@ -201,6 +201,14 @@ jobs:
|
||||
#brew install swig
|
||||
#brew install ncurses
|
||||
|
||||
- name: MacOS import developer certificates for signing
|
||||
if: runner.os == 'macOS'
|
||||
uses: apple-actions/import-codesign-certs@v3
|
||||
with:
|
||||
keychain: signing_temp
|
||||
p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
|
||||
p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
|
||||
|
||||
- name: Windows Configure VCode
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
if: runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
@@ -293,7 +301,8 @@ jobs:
|
||||
- name: Rename GNU link on Windows
|
||||
if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
shell: bash
|
||||
run: mv /usr/bin/link /usr/bin/gnulink
|
||||
run: |
|
||||
mv -v /usr/bin/link /usr/bin/gnulink
|
||||
|
||||
- name: Make OpenSSL
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
@@ -311,7 +320,7 @@ jobs:
|
||||
cd "${GITHUB_WORKSPACE}/src/openssl-${openssl_arch}"
|
||||
# install_sw saves us ages processing man pages :-)
|
||||
$MAKE install_sw
|
||||
mv "${OPENSSL_INSTALL_PATH}" "${GITHUB_WORKSPACE}/bin/ssl-${openssl_arch}"
|
||||
mv -v "${OPENSSL_INSTALL_PATH}" "${GITHUB_WORKSPACE}/bin/ssl-${openssl_arch}"
|
||||
done
|
||||
mkdir -vp "${OPENSSL_INSTALL_PATH}/lib"
|
||||
mkdir -vp "${OPENSSL_INSTALL_PATH}/bin"
|
||||
@@ -521,61 +530,59 @@ jobs:
|
||||
- name: Build GAM with PyInstaller
|
||||
if: matrix.goal != 'test'
|
||||
run: |
|
||||
if [[ "${staticx}" == "yes" ]]; then
|
||||
export distpath="./dist/gam"
|
||||
export gampath="${distpath}"
|
||||
else
|
||||
export distpath="./dist"
|
||||
export gampath="${distpath}/gam"
|
||||
fi
|
||||
mkdir -p -v "${gampath}"
|
||||
export distpath="./dist/gam"
|
||||
mkdir -p -v "${distpath}"
|
||||
if [[ "${RUNNER_OS}" == "macOS" ]]; then
|
||||
# brew OpenSSL gets picked up by PyInstaller breaking our self-compiled version
|
||||
# Tell our gam.spec to use our code sign certificate
|
||||
export codesign_identity="Jay Lee"
|
||||
# brew OpenSSL gets picked up by PyInstaller
|
||||
# breaking our self-compiled version
|
||||
brew uninstall --ignore-dependencies openssl
|
||||
export gampath=$($PYTHON -c "import os; print(os.path.realpath('$gampath'))")
|
||||
elif [[ "${RUNNER_OS}" == "Windows" ]]; then
|
||||
# Work around issue where PyInstaller picks up python3.dll from other Python versions
|
||||
# https://github.com/pyinstaller/pyinstaller/issues/7102
|
||||
export PATH="$(dirname ${PYTHON}):/usr/bin"
|
||||
else
|
||||
export gampath=$(realpath "${gampath}")
|
||||
fi
|
||||
export gam="${gampath}/gam"
|
||||
echo "gampath=${gampath}" >> $GITHUB_ENV
|
||||
# TEMP force everything back to one file.
|
||||
export PYINSTALLER_BUILD_ONEFILE="yes"
|
||||
export distpath="./dist/gam"
|
||||
export gampath="${distpath}"
|
||||
if ([ "${staticx}" != "yes" ] && [ "$RUNNER_OS" != "Windows" ]); then
|
||||
export PYINSTALLER_BUILD_ONEDIR=yes
|
||||
fi
|
||||
"${PYTHON}" -m PyInstaller --clean --noconfirm --distpath="${distpath}" gam.spec
|
||||
echo "WARNINGS FROM build/gam/warn-gam.txt"
|
||||
cat build/gam/warn-gam.txt
|
||||
echo "Analysis FROM build/gam/Analysis-00.toc"
|
||||
cat build/gam/Analysis-00.toc
|
||||
echo "EXE data FROM build/gam/EXE-00.toc"
|
||||
cat build/gam/EXE-00.toc
|
||||
if [ -x "$(command -v realpath)" ]; then
|
||||
realpath=realpath
|
||||
if [[ "$PYINSTALLER_BUILD_ONEDIR" == "yes" ]]; then
|
||||
mv -v "${distpath}/gam" "${distpath}/gam7"
|
||||
export gampath="${distpath}/gam7"
|
||||
else
|
||||
brew install coreutils
|
||||
realpath=grealpath
|
||||
mv -v "$distpath" "${distpath}7"
|
||||
export gampath="${distpath}7"
|
||||
fi
|
||||
export gam=$(realpath "$gam")
|
||||
export gampath=$(realpath "$gampath")
|
||||
echo "gampath ${gampath} results:"
|
||||
ls -alRF "$gampath"
|
||||
echo "---- WARNINGS FROM build/gam/warn-gam.txt"
|
||||
cat build/gam/warn-gam.txt
|
||||
echo "---- Analysis FROM build/gam/Analysis-00.toc"
|
||||
cat build/gam/Analysis-00.toc
|
||||
echo "---- EXE data FROM build/gam/EXE-00.toc"
|
||||
cat build/gam/EXE-00.toc
|
||||
export gam="${gampath}/gam"
|
||||
if [[ "${RUNNER_OS}" == "Windows" ]]; then
|
||||
export gam=$(cygpath -w "$gam")
|
||||
echo "GAM on Windows at ${gam}"
|
||||
else
|
||||
export gam=$(realpath "$gam")
|
||||
fi
|
||||
echo "gampath=${gampath}" >> $GITHUB_ENV
|
||||
echo "gam=${gam}" >> $GITHUB_ENV
|
||||
echo -e "GAM: ${gam}\nGAMPATH: ${gampath}"
|
||||
|
||||
- name: Copy extra package files
|
||||
if: matrix.goal == 'build'
|
||||
run: |
|
||||
cp -v cacerts.pem $gampath
|
||||
cp -v LICENSE $gampath
|
||||
cp -v GamCommands.txt $gampath
|
||||
cp -v GamUpdate.txt $gampath
|
||||
cp -v cacerts.pem "$gampath"
|
||||
cp -v LICENSE "$gampath"
|
||||
cp -v GamCommands.txt "$gampath"
|
||||
cp -v GamUpdate.txt "$gampath"
|
||||
if [[ "${RUNNER_OS}" == "Windows" ]]; then
|
||||
cp -v gam-setup.bat $gampath
|
||||
cp -v gam-setup.bat "$gampath"
|
||||
fi
|
||||
|
||||
- name: Install StaticX
|
||||
@@ -596,9 +603,21 @@ jobs:
|
||||
;;
|
||||
esac
|
||||
echo "ldlib=${ldlib}"
|
||||
$PYTHON -m staticx -l "${ldlib}" "${gam}" "${gam}-staticx"
|
||||
rm -v "${gam}"
|
||||
mv -v "${gam}-staticx" "${gam}"
|
||||
$PYTHON -m staticx -l "${ldlib}" "$gam" "${gam}-staticx"
|
||||
rm -v "$gam"
|
||||
mv -v "${gam}-staticx" "$gam"
|
||||
|
||||
- name: MacOS send GAM binary for Apple notarization
|
||||
if: runner.os == 'macOS'
|
||||
env:
|
||||
ASP_NOTARIZE: ${{ secrets.ASP_NOTARIZE }}
|
||||
run: |
|
||||
# Apple wants some kind of "package" submitted so just add gam to a .zip
|
||||
# name it something we can track and link in Apple's notarize process
|
||||
zipfilename="./gam-${RUNNER_ARCH}-${GITHUB_RUN_ID}-${GITHUB_RUN_NUMBER}.zip"
|
||||
zip -r "$zipfilename" "$gampath"
|
||||
xcrun notarytool submit --apple-id "jay0lee@gmail.com" --password "$ASP_NOTARIZE" --team-id GZ85H2DRLM "$zipfilename"
|
||||
rm -v "$zipfilename"
|
||||
|
||||
- name: Basic Tests all jobs
|
||||
id: basictests
|
||||
@@ -609,7 +628,45 @@ jobs:
|
||||
echo "GAM Version ${GAMVERSION}"
|
||||
echo "GAMVERSION=${GAMVERSION}" >> $GITHUB_ENV
|
||||
|
||||
- name: Attest Binary Provenance
|
||||
- name: Configure service account auth
|
||||
id: configserviceaccount
|
||||
env:
|
||||
PASSCODE: ${{ secrets.PASSCODE }}
|
||||
run: |
|
||||
source ../.github/actions/decrypt.sh ../.github/actions/creds.tar.xz.gpg creds.tar.xz "${GAMCFGDIR}"
|
||||
mv -v "${GAMCFGDIR}/oauth2.txt-gam-gha-${JID}" "${GAMCFGDIR}/oauth2.txt"
|
||||
rm -v $GAMCFGDIR/oauth2.txt-gam*
|
||||
$gam create signjwtserviceaccount
|
||||
|
||||
- name: Upload gam.exe Windows for signing
|
||||
if: runner.os == 'Windows' && matrix.goal != 'test'
|
||||
run: |
|
||||
export folder_number=$(date +%s)
|
||||
export folder_id=$($gam user gam-win-signer@pdl.jaylee.us add drivefile drivefilename "UPLOADING_FOR_SIGN ${folder_number}" parentid "1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp" mimetype gfolder returnidonly)
|
||||
$gam user gam-win-signer@pdl.jaylee.us add drivefile localfile "$gam" parentid "$folder_id"
|
||||
$gam user gam-win-signer@pdl.jaylee.us update drivefile "$folder_id" newfilename "READYTOSIGN ${folder_number}"
|
||||
export signed_folder="SIGNED ${folder_number}"
|
||||
zero_results="gam-win-signer@pdl.jaylee.us,0"
|
||||
while true; do
|
||||
result_counts=$($gam user gam-win-signer print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" countsonly)
|
||||
echo "$result_counts"
|
||||
if [[ ! "$result_counts" =~ "$zero_results" ]]; then
|
||||
echo "looks like we have results"
|
||||
break
|
||||
fi
|
||||
echo "no results, sleeping 10..."
|
||||
sleep 10
|
||||
done
|
||||
# download signed gam.exe
|
||||
$gam user gam-win-signer print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us print filelist query "'~~id~~' in parents and name = 'gam.exe'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us get drivefile ~id targetfolder "$gampath" targetname "signed-gam.exe" overwrite true acknowledgeabuse true
|
||||
# delete signed folder on drive
|
||||
$gam user gam-win-signer print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us trash drivefile "~id"
|
||||
# remove unsigned gam.exe and rename signed-gam.exe
|
||||
rm -v -f "${gampath}/gam.exe"
|
||||
mv -v -f "${gampath}/signed-gam.exe" "${gampath}/gam.exe"
|
||||
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$gam"
|
||||
|
||||
- name: Attest gam executable was generated from this Action
|
||||
uses: actions/attest-build-provenance@v1
|
||||
if: matrix.goal == 'build'
|
||||
with:
|
||||
@@ -619,28 +676,80 @@ jobs:
|
||||
if: runner.os != 'Windows' && matrix.goal == 'build'
|
||||
run: |
|
||||
if [[ "${RUNNER_OS}" == "macOS" ]]; then
|
||||
GAM_ARCHIVE="gam-${GAMVERSION}-macos-${arch}.tar.xz"
|
||||
GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-macos-${arch}.tar.xz"
|
||||
elif [[ "${RUNNER_OS}" == "Linux" ]]; then
|
||||
if [[ "${staticx}" == "yes" ]]; then
|
||||
libver="legacy"
|
||||
else
|
||||
libver="glibc$(ldd --version | awk '/ldd/{print $NF}')"
|
||||
fi
|
||||
GAM_ARCHIVE="gam-${GAMVERSION}-linux-$(arch)-${libver}.tar.xz"
|
||||
GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-linux-$(arch)-${libver}.tar.xz"
|
||||
fi
|
||||
echo "GAM Archive ${GAM_ARCHIVE}"
|
||||
tar -C dist/ --create --verbose --exclude-from "${GITHUB_WORKSPACE}/.github/actions/package_exclusions.txt" --file $GAM_ARCHIVE --xz gam
|
||||
tar -C "${gampath}/.." --create --verbose --exclude-from "${GITHUB_WORKSPACE}/.github/actions/package_exclusions.txt" --file $GAM_ARCHIVE --xz gam7
|
||||
|
||||
- name: Windows package
|
||||
if: runner.os == 'Windows' && matrix.goal != 'test'
|
||||
run: |
|
||||
cd dist/
|
||||
GAM_ARCHIVE="../gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.zip"
|
||||
/c/Program\ Files/7-Zip/7z.exe a -tzip $GAM_ARCHIVE gam "-xr@${GITHUB_WORKSPACE}/.github/actions/package_exclusions.txt" -bb3
|
||||
cd "${gampath}/.."
|
||||
GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.zip"
|
||||
/c/Program\ Files/7-Zip/7z.exe a -tzip "$GAM_ARCHIVE" gam7 "-xr@${GITHUB_WORKSPACE}/.github/actions/package_exclusions.txt" -bb3
|
||||
cd ..
|
||||
export MSI_FILENAME="gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.msi"
|
||||
/c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/candle.exe -arch "${WIX_ARCH}" gam.wxs
|
||||
/c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/light.exe -ext /c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/WixUIExtension.dll gam.wixobj -o "gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.msi" || true;
|
||||
/c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/light.exe -ext /c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/WixUIExtension.dll gam.wixobj -o "$MSI_FILENAME" || true;
|
||||
rm -v -f *.wixpdb
|
||||
export folder_number=$(date +%s)
|
||||
export folder_id=$($gam user gam-win-signer@pdl.jaylee.us add drivefile drivefilename "UPLOADING_FOR_SIGN ${folder_number}" parentid "1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp" mimetype gfolder returnidonly)
|
||||
$gam user gam-win-signer@pdl.jaylee.us add drivefile localfile "$MSI_FILENAME" parentid "$folder_id"
|
||||
$gam user gam-win-signer@pdl.jaylee.us update drivefile "$folder_id" newfilename "READYTOSIGN ${folder_number}"
|
||||
echo "MSI_FILENAME=${MSI_FILENAME}" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload gam MSI Windows for signing
|
||||
if: runner.os == 'Windows' && matrix.goal != 'test'
|
||||
run: |
|
||||
export folder_number=$(date +%s)
|
||||
export folder_id=$($gam user gam-win-signer@pdl.jaylee.us add drivefile drivefilename "UPLOADING_FOR_SIGN ${folder_number}" parentid "1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp" mimetype gfolder returnidonly)
|
||||
$gam user gam-win-signer@pdl.jaylee.us add drivefile localfile "$MSI_FILENAME" parentid "$folder_id"
|
||||
rm -f -v "$MSI_FILENAME"
|
||||
$gam user gam-win-signer@pdl.jaylee.us update drivefile "$folder_id" newfilename "READYTOSIGN ${folder_number}"
|
||||
export signed_folder="SIGNED ${folder_number}"
|
||||
zero_results="gam-win-signer@pdl.jaylee.us,0"
|
||||
while true; do
|
||||
result_counts=$($gam user gam-win-signer print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" countsonly)
|
||||
echo "$result_counts"
|
||||
if [[ ! "$result_counts" =~ "$zero_results" ]]; then
|
||||
echo "looks like we have results"
|
||||
break
|
||||
fi
|
||||
echo "no results, sleeping 10..."
|
||||
sleep 10
|
||||
done
|
||||
# download signed package
|
||||
$gam user gam-win-signer print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us print filelist query "'~~id~~' in parents and name = '$MSI_FILENAME'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us get drivefile ~id targetfolder "$GITHUB_WORKSPACE" targetname "$MSI_FILENAME" overwrite true acknowledgeabuse true
|
||||
# delete signed folder from drive
|
||||
# delete signed folder on drive
|
||||
$gam user gam-win-signer print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us trash drivefile "~id"
|
||||
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$MSI_FILENAME"
|
||||
|
||||
- name: Attest that gam package files were generated from this Action
|
||||
uses: actions/attest-build-provenance@v1
|
||||
if: (github.event_name == 'push' || github.event_name == 'schedule') && matrix.goal == 'build'
|
||||
with:
|
||||
subject-path: |
|
||||
gam*.tar.xz
|
||||
gam*.zip
|
||||
gam*.msi
|
||||
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: (github.event_name == 'push' || github.event_name == 'schedule') && matrix.goal != 'test'
|
||||
with:
|
||||
name: gam-binaries-${{ env.GAMOS }}-${{ env.arch }}-${{ matrix.jid }}
|
||||
path: |
|
||||
gam*.tar.xz
|
||||
gam*.zip
|
||||
gam*.msi
|
||||
|
||||
- name: Basic Tests build jobs only
|
||||
if: matrix.goal != 'test' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
@@ -664,12 +773,7 @@ jobs:
|
||||
|
||||
- name: Live API tests push only
|
||||
if: (github.event_name == 'push' || github.event_name == 'schedule')
|
||||
env:
|
||||
PASSCODE: ${{ secrets.PASSCODE }}
|
||||
run: |
|
||||
source ../.github/actions/decrypt.sh ../.github/actions/creds.tar.xz.gpg creds.tar.xz "${GAMCFGDIR}"
|
||||
mv -v "${GAMCFGDIR}/oauth2.txt-gam-gha-${JID}" "${GAMCFGDIR}/oauth2.txt"
|
||||
rm -v $GAMCFGDIR/oauth2.txt-gam*
|
||||
export gam_user="gam-gha-${JID}@pdl.jaylee.us"
|
||||
echo "gam_user=${gam_user}" >> $GITHUB_ENV
|
||||
$gam config customer_id "C03uzfv2s" save
|
||||
@@ -679,7 +783,6 @@ jobs:
|
||||
$gam oauth info
|
||||
$gam oauth refresh
|
||||
$gam config enable_dasa true save
|
||||
$gam create signjwtserviceaccount
|
||||
$gam checkconn
|
||||
$gam user "$gam_user" check serviceaccount
|
||||
$gam info domain
|
||||
@@ -715,7 +818,8 @@ jobs:
|
||||
done
|
||||
driveid=$($gam user $gam_user add shareddrive "${newbase}" returnidonly)
|
||||
echo "Created shared drive ${driveid}"
|
||||
$gam create user $newuser firstname GHA lastname $JID displayname "Github Actions ${JID}" password random ou "${newou}" recoveryphone 12125121110 recoveryemail jay0lee@gmail.com gha.jid $JID languages en+,en-GB-
|
||||
# 9/17/24 - temp create in root due to Google API issues creating users in new OUs
|
||||
$gam create user $newuser firstname GHA lastname $JID displayname "Github Actions ${JID}" password random recoveryphone 12125121110 recoveryemail jay0lee@gmail.com gha.jid $JID languages en+,en-GB- # ou "${newou}"
|
||||
$gam user $newuser update photo https://dummyimage.com/400x600/000/fff
|
||||
$gam user $newuser get photo
|
||||
$gam user $newuser delete photo
|
||||
@@ -734,7 +838,8 @@ jobs:
|
||||
$gam update group $newgroup add owner $gam_user
|
||||
$gam update group $newgroup add member $newuser
|
||||
$gam config enable_dasa false save
|
||||
$gam create admin $newuser _GROUPS_EDITOR_ROLE CUSTOMER # condition nonsecuritygroup
|
||||
# 9/17/24 temp disable due to Google API sluggishness to see new users for admin commands
|
||||
# $gam create admin $newuser _GROUPS_EDITOR_ROLE CUSTOMER # condition nonsecuritygroup
|
||||
$gam create admin $newgroup _HELP_DESK_ADMIN_ROLE org_unit "${newou}"
|
||||
$gam config csv_output_row_filter "assignedToUser:regex:${newuser}" print admins | $gam csv - gam delete admin "~roleAssignmentId"
|
||||
$gam config csv_output_row_filter "assignedToGroup:regex:${newgroup}" print admins | $gam csv - gam delete admin "~roleAssignmentId"
|
||||
@@ -858,7 +963,7 @@ jobs:
|
||||
echo "printer model count:"
|
||||
$gam print printermodels | wc -l
|
||||
$gam print printers
|
||||
printerid=$($gam create printer displayname "${newbase}" uri ipp://localhost:631 driverless description "made by $(gam_user)" ou "${newou}" nodetails | awk '{print substr($2, 1, length($2)-1)}')
|
||||
printerid=$($gam create printer displayname "${newbase}" uri ipp://localhost:631 driverless description "made by ${gam_user}" ou "${newou}" nodetails | awk '{print substr($2, 1, length($2)-1)}')
|
||||
$gam info printer "$printerid"
|
||||
$gam delete printer "$printerid"
|
||||
$gam delete ou "${newou}"
|
||||
@@ -874,25 +979,6 @@ jobs:
|
||||
fi
|
||||
tar cJvvf cache.tar.xz $tar_folders
|
||||
|
||||
- name: Attest Build Archive Provenance
|
||||
uses: actions/attest-build-provenance@v1
|
||||
if: (github.event_name == 'push' || github.event_name == 'schedule') && matrix.goal == 'build'
|
||||
with:
|
||||
subject-path: |
|
||||
src/gam*.tar.xz
|
||||
src/gam*.zip
|
||||
src/gam*.msi
|
||||
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: (github.event_name == 'push' || github.event_name == 'schedule') && matrix.goal != 'test'
|
||||
with:
|
||||
name: gam-binaries-${{ env.GAMOS }}-${{ env.arch }}-${{ matrix.jid }}
|
||||
path: |
|
||||
src/gam*.tar.xz
|
||||
src/gam*.zip
|
||||
src/gam*.msi
|
||||
|
||||
merge:
|
||||
if: (github.event_name == 'push' || github.event_name == 'schedule')
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
GAM is a command line tool for Google Workspace admins to manage domain and user settings quickly and easily.
|
||||
|
||||

|
||||
[](https://github.com/GAM-team/GAM/actions/workflows/build.yml)
|
||||
|
||||
# Quick Start
|
||||
|
||||
@@ -32,7 +32,7 @@ There is a public chat room hosted in Google Chat. [Instructions to join](https:
|
||||
|
||||
# Author
|
||||
|
||||
GAM is maintained by [Jay Lee](mailto:jay0lee@gmail.com). Please direct "how do I?" questions to [Google Groups].
|
||||
GAM is maintained by [Jay (James) Lee](mailto:jay0lee@gmail.com) and [Ross Scroggs](mailto:ross.scroggs@gmail.com). Please direct "how do I?" questions to [Google Groups].
|
||||
|
||||
[GAM release]: https://github.com/GAM-team/GAM/releases
|
||||
[GitHub Releases]: https://github.com/GAM-team/GAM/releases
|
||||
|
||||
@@ -1088,6 +1088,9 @@ You can limit both client and service account access.
|
||||
You can repeat these steps if you want to configure multiple limited users;
|
||||
substitute a unique value for `limited` in each of the steps.
|
||||
|
||||
In the Admin console, define a new Admin role with the desired privileges,
|
||||
assign it to the limited user and indicate whether it is for all Org Units or a specific Org Unit.
|
||||
|
||||
On your computer, perform these initial steps:
|
||||
|
||||
Make a subdirectory `limited` under the directory specified in `gam.cfg config_dir`
|
||||
|
||||
@@ -391,6 +391,8 @@
|
||||
<Marker> ::= <String>
|
||||
<MatterItem> ::= <UniqueID>|<String>
|
||||
<MatterState> ::= open|closed|deleted
|
||||
<MeetConferenceName> ::= conferenceRecords/<String>
|
||||
<MeetSpaceName> ::= spaces/<String> | <String>
|
||||
<MessageContent> ::=
|
||||
(message|textmessage|htmlmessage <String>)|
|
||||
(file|textfile|htmlfile <FileName> [charset <Charset>])|
|
||||
|
||||
@@ -122,7 +122,7 @@ where you get more columns than is desirable.
|
||||
* `csv_output_header_filter` - Used to select the column headers to include in the output
|
||||
* `csv_output_header_drop_filter` - Used to select the column headers to exclude from the output
|
||||
|
||||
Typically, you would use the option that involes typing the fewest column names but both options can be used.
|
||||
Typically, you would use the option that involves typing the fewest column names but both options can be used.
|
||||
When both options are used, `csv_output_header_drop_filter` is processed first, then `csv_output_header_filter`.
|
||||
|
||||
Field names are specified by regular expressions; at its simplest, you specify a complete field name.
|
||||
|
||||
@@ -176,6 +176,7 @@ Client access works when accessing Resource calendars.
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
|
||||
<EventType> ::=
|
||||
birthday|
|
||||
default|
|
||||
focustime|
|
||||
fromgmail|
|
||||
@@ -241,6 +242,7 @@ Client access works when accessing Resource calendars.
|
||||
(attendee <EmailAddress>)|
|
||||
(attendeestatus [<AttendeeAttendance>] [<AttendeeStatus>] <EmailAddress>)|
|
||||
available|
|
||||
(birthday <Date>)|
|
||||
(color <EventColorName>)|
|
||||
(colorindex|colorid <EventColorIndex>)|
|
||||
(description <String>)|
|
||||
@@ -261,7 +263,7 @@ Client access works when accessing Resource calendars.
|
||||
(privateproperty <PropertyKey> <PropertyValue>)|
|
||||
(range <Date> <Date>)|
|
||||
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
||||
(reminder <Number> email|popup))|
|
||||
(reminder <Number> email|popup)|
|
||||
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
||||
(sequence <Integer>)|
|
||||
(sharedproperty <PropertyKey> <PropertyValue>)|
|
||||
|
||||
@@ -7,13 +7,17 @@
|
||||
- [Definitions](#definitions)
|
||||
- [Display a specific Chrome policy schema](#display-a-specific-chrome-policy-schema)
|
||||
- [Display all or filtered Chrome policy schemas](#display-all-or-filtered-chrome-policy-schemas)
|
||||
- [Display Chrome policy schemas in same format as Standard GAM](#display-chrome-policy-schemas-in-same-format-as-standard-gam)
|
||||
- [Display Chrome policy schemas in same format as Legacy GAM](#display-chrome-policy-schemas-in-same-format-as-legacy-gam)
|
||||
- [Create a Chrome policy image](#create-a-chrome-policy-image)
|
||||
- [Update Chrome policy](#update-chrome-policy)
|
||||
- [Delete Chrome policy](#delete-chrome-policy)
|
||||
- [Display Chrome policies](#display-chrome-policies)
|
||||
- [Copy simple policies set directly in one OU to another OU](#copy-simple-policies-set-directly-in-one-ou-to-another-ou)
|
||||
- [Copy simple and complex policies set directly in one OU to another OU](#copy-simple-and-complex-policies-set-directly-in-one-ou-to-another-ou)
|
||||
- [Copy simple and complex policies set directly in one OU to multiple other OUs](#copy-simple-and-complex-policies-set-directly-in-one-ou-to-multiple-other-ous)
|
||||
- [Copy simple policies in one Group to another Group](#copy-simple-policies-in-one-group-to-another-group)
|
||||
- [Copy simple and complex policies in one Group to another Group](#copy-simple-and-complex-policies-in-one-group-to-another-group)
|
||||
- [Copy simple and complex policies in one Group to multiple other Groups](#copy-simple-and-complex-policies-in-one-group-to-multiple-other-groups)
|
||||
- [Create Chrome network](#create-chrome-network)
|
||||
- [Delete Chrome network](#delete-chrome-network)
|
||||
- [Chrome Policy Schema Table](#chrome-policy-schema-table)
|
||||
@@ -114,7 +118,7 @@ When using the `formatjson` option, double quotes are used extensively in the da
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Chrome policy schemas in same format as Standard GAM
|
||||
## Display Chrome policy schemas in same format as Legacy GAM
|
||||
```
|
||||
gam show chromeschemas std
|
||||
[filter <String>]
|
||||
@@ -154,11 +158,12 @@ gam create chromepolicyimage <ChromePolicyImageSchemaName> <FileName>
|
||||
```
|
||||
|
||||
## Update Chrome policy
|
||||
You can update a policy for all devices/users within an OU or for a specific printer or application within an OU.
|
||||
You can update a policy for all devices/users within an OU, users with a group or for a specific printer or application within an OU.
|
||||
```
|
||||
gam update chromepolicy [convertcrnl]
|
||||
(<SchemaName> ((<Field> <Value>)+ | <JSONData>))+
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
((ou|orgunit <OrgUnitItem>)|(group <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
```
|
||||
You update a schema by specifying its name and one or more fields and values or by using
|
||||
JSON data to specify the field values.
|
||||
@@ -235,31 +240,32 @@ gam update chromepolicy chrome.users.ManagedBookmarksSetting json file bookmark
|
||||
```
|
||||
|
||||
## Delete Chrome policy
|
||||
You can delete a policy for all devices/users within an OU or for a specific printer or application within an OU.
|
||||
You can delete a policy for all devices/users within an OU, users with a group or for a specific printer or application within an OU.
|
||||
```
|
||||
gam delete chromepolicy
|
||||
(<SchemaName> [<JSONData>])+
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
((ou|orgunit <OrgUnitItem>)|(group <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
```
|
||||
## Display Chrome policies
|
||||
You can display policies for all devices/users within an OU or for a specific printer or application within an OU.
|
||||
You can display policies for all devices/users within an OU, users with a group or for a specific printer or application within an OU.
|
||||
|
||||
### Display as an indented list of keys and values.
|
||||
```
|
||||
gam show chromepolicies
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
[filter <String>] [namespace <NamespaceList>]
|
||||
[show all|direct|inherited]
|
||||
((ou|orgunit <OrgUnitItem> [show all|direct|inherited])|(group <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
[filter <StringList>] [namespace <NamespaceList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, all Chrome policies for the OU are displayed.
|
||||
By default, all Chrome policies for the OU or group are displayed.
|
||||
* `filter <String>` - Display policies based on fields like its resource name, description and additionalTargetKeyNames.
|
||||
* `show all` - Display policies regardless of where set; this is the default
|
||||
* `show direct` - Display policies set directly in the OU
|
||||
* `show inherited` - Display policies set in a parent OU
|
||||
* `show all` - For OUs, display policies regardless of where set; this is the default
|
||||
* `show direct` - For OUs, display policies set directly in the OU
|
||||
* `show inherited` - For OUs, display policies set in a parent OU
|
||||
|
||||
These are the default namespaces; use `namespace <NamespaceList>` to override.
|
||||
* `default`
|
||||
* `default` - When OU specified
|
||||
* chrome.users
|
||||
* chrome.users.apps
|
||||
* chrome.users.appsconfig
|
||||
@@ -276,6 +282,12 @@ These are the default namespaces; use `namespace <NamespaceList>` to override.
|
||||
* chrome.networks.wifi
|
||||
* chrome.printers
|
||||
* chrome.printservers
|
||||
* `default` - When group specified
|
||||
* chrome.users
|
||||
* chrome.users.apps
|
||||
* chrome.users.appsconfig
|
||||
* chrome.printers
|
||||
* chrome.printservers
|
||||
* `appid <AppID>`
|
||||
* chrome.users.apps
|
||||
* chrome.devices.kiosk.apps
|
||||
@@ -289,16 +301,16 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
### Display as a CSV file.
|
||||
```
|
||||
gam print chromepolicies [todrive <ToDriveAttribute>*]
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
((ou|orgunit <OrgUnitItem> [show all|direct|inherited])|(group <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
[filter <String>] [namespace <NamespaceList>]
|
||||
[show all|direct|inherited]
|
||||
[[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, all Chrome policies for the OU are displayed.
|
||||
By default, all Chrome policies for the OU or group are displayed.
|
||||
* `filter <String>` - Display policies based on fields like its resource name, description and additionalTargetKeyNames.
|
||||
* `show all` - Display policies regardless of where set; this is the default
|
||||
* `show direct` - Display policies set directly in the OU
|
||||
* `show inherited` - Display policies set in a parent OU
|
||||
* `show all` - For OUs, display policies regardless of where set; this is the default
|
||||
* `show direct` - For OUs, display policies set directly in the OU
|
||||
* `show inherited` - For OUs, display policies set in a parent OU
|
||||
|
||||
These are the default namespaces; use `namespace <NamespaceList>` to override.
|
||||
* `default`
|
||||
@@ -335,8 +347,6 @@ gam redirect csv ChromePolicies.csv print chromepolicies ou "/Path/To/OU1"
|
||||
gam config csv_input_row_filter "direct:boolean:true" csv ChromePolicies.csv gam update chromepolicy "~name" "~fields.0.name" "~fields.0.value" "~fields.1.name" "~fields.1.value" ou "/Path/To/OU2"
|
||||
```
|
||||
## Copy simple and complex policies set directly in one OU to another OU
|
||||
Version `6.21.02` is required.
|
||||
|
||||
Display direct policies, update all
|
||||
```
|
||||
gam redirect csv ChromePolicies.csv print chromepolicies ou "/Path/To/OU1" show direct formatjson quotechar "'"
|
||||
@@ -348,6 +358,51 @@ gam redirect csv ChromePolicies.csv print chromepolicies ou "/Path/To/OU1" forma
|
||||
gam config csv_input_row_filter "direct:boolean:true" csv ChromePolicies.csv quotechar "'" gam update chromepolicy "~name" json "~JSON" ou "/Path/To/OU2"
|
||||
```
|
||||
|
||||
## Copy simple and complex policies set directly in one OU to multiple other OUs
|
||||
Display direct policies, update all
|
||||
```
|
||||
gam redirect csv ChromePolicies.csv print chromepolicies ou "/Path/To/OU1" show direct formatjson quotechar "'"
|
||||
```
|
||||
Make a batch file (SetPolicies.bat) with a line for each target OU
|
||||
```
|
||||
gam csv ChromePolicies.csv quotechar "'" gam update chromepolicy "~name" json "~JSON" ou "/Path/To/OU2"
|
||||
gam csv ChromePolicies.csv quotechar "'" gam update chromepolicy "~name" json "~JSON" ou "/Path/To/OU3"
|
||||
...
|
||||
```
|
||||
Execute batch
|
||||
```
|
||||
gam redirect stdout ./SetPolicies.log multiprocess redirect stderr stdout tbatch SetPolicies.bat
|
||||
```
|
||||
|
||||
## Copy simple policies in one Group to another Group
|
||||
Display all policies, update all
|
||||
```
|
||||
gam redirect csv ChromePolicies.csv print chromepolicies group group1@domain.com
|
||||
gam csv ChromePolicies.csv gam update chromepolicy "~name" "~fields.0.name" "~fields.0.value" "~fields.1.name" "~fields.1.value" group group2@domain.com
|
||||
```
|
||||
## Copy simple and complex policies in one Group to another Group
|
||||
Display all policies, update all
|
||||
```
|
||||
gam redirect csv ChromePolicies.csv print chromepolicies group group1@domain.com formatjson quotechar "'"
|
||||
gam csv ChromePolicies.csv quotechar "'" gam update chromepolicy "~name" json "~JSON" group group2@domain.com
|
||||
```
|
||||
|
||||
## Copy simple and complex policies in one Group to multiple other Groups
|
||||
Display all policies, update all
|
||||
```
|
||||
gam redirect csv ChromePolicies.csv print chromepolicies group group1@domain.com formatjson quotechar "'"
|
||||
```
|
||||
Make a batch file (SetPolicies.bat) with a line for each target group
|
||||
```
|
||||
gam csv ChromePolicies.csv quotechar "'" gam update chromepolicy "~name" json "~JSON" group group2@domain.com
|
||||
gam csv ChromePolicies.csv quotechar "'" gam update chromepolicy "~name" json "~JSON" group group3@domain.com
|
||||
...
|
||||
```
|
||||
Execute batch
|
||||
```
|
||||
gam redirect stdout ./SetPolicies.log multiprocess redirect stderr stdout tbatch SetPolicies.bat
|
||||
```
|
||||
|
||||
## Create Chrome network
|
||||
See: [Chrome Policy Schema Table](#chrome-policy-schema-table) for the allowed network settings.
|
||||
* chrome.networks.ethernet.Details: Ethernet network configuration details.
|
||||
@@ -516,6 +571,11 @@ chrome.devices.ContentProtection: Allow web services to request proof that the d
|
||||
true: Ensures ChromeOS devices in your organization will verify their identity to content providers.
|
||||
false: Does not ensure ChromeOS devices in your organization will verify their identity to content providers. Some premium content may be unavailable to your users.
|
||||
|
||||
chrome.devices.DeviceAllowEnterpriseRemoteAccessConnections: Enterprise remote access connections.
|
||||
deviceAllowEnterpriseRemoteAccessConnections: TYPE_BOOL
|
||||
true: Enable remote access connections from enterprise admins.
|
||||
false: Prevent remote access connections from enterprise admins.
|
||||
|
||||
chrome.devices.DeviceAuthenticationUrlAllowlist: Blocked URL exceptions on the sign-in / lock screens.
|
||||
deviceAuthenticationUrlAllowlist: TYPE_LIST
|
||||
Blocked URL exceptions. Any URL that matches an entry in this exception list will be allowed, even if it matches a line in the blocked URLs. Wildcards ("*") are allowed when appended to a URL, but cannot be entered alone. Maximum of 1000 URLs.
|
||||
@@ -614,11 +674,6 @@ chrome.devices.DeviceLoginScreenExtensionManifestVTwoAvailability: Manifest v2 e
|
||||
ENABLE: Enable manifest V2 extensions on the sign-in screen.
|
||||
ENABLE_FOR_FORCED_EXTENSIONS: Enable force-installed manifest V2 extensions on the sign-in screen.
|
||||
|
||||
chrome.devices.DeviceLoginScreenGeolocationAccessLevel: Geolocation on the login screen.
|
||||
deviceLoginScreenGeolocationAccessLevel: TYPE_ENUM
|
||||
DISALLOWED: Do not allow geolocation access on log-in screen.
|
||||
ALLOWED: Allow geolocation access on log-in screen.
|
||||
|
||||
chrome.devices.DeviceLoginScreenPrivacyScreenEnabled: Privacy screen on sign-in screen.
|
||||
deviceLoginScreenPrivacyScreenEnabled: TYPE_ENUM
|
||||
UNSET: Allow the user to decide.
|
||||
@@ -656,6 +711,12 @@ chrome.devices.DevicePciPeripheralDataAccessEnabled: Data access protection for
|
||||
FALSE: Enable data access protection.
|
||||
TRUE: Disable data access protection.
|
||||
|
||||
chrome.devices.DevicePostQuantumKeyAgreementEnabled: Post-quantum TLS.
|
||||
devicePostQuantumKeyAgreementEnabled: TYPE_ENUM
|
||||
UNSET: Use the default Chrome setting.
|
||||
FALSE: Do not allow post-quantum key agreement in TLS connections.
|
||||
TRUE: Allow post-quantum key agreement in TLS connections.
|
||||
|
||||
chrome.devices.DevicePowerwashAllowed: Powerwash.
|
||||
devicePowerwashAllowed: TYPE_BOOL
|
||||
true: Allow powerwash to be triggered.
|
||||
@@ -1033,6 +1094,12 @@ chrome.devices.kiosk.CursorHighlightEnabled: Kiosk cursor highlight.
|
||||
ACCESSIBILITY_DISABLED: Disable cursor highlight.
|
||||
ACCESSIBILITY_ENABLED: Enable cursor highlight.
|
||||
|
||||
chrome.devices.kiosk.DeviceWeeklyScheduledSuspend: Device sleep mode.
|
||||
hours: TYPE_INT32
|
||||
minutes: TYPE_INT32
|
||||
seconds: TYPE_INT32
|
||||
nanos: TYPE_INT32
|
||||
|
||||
chrome.devices.kiosk.DictationEnabled: Kiosk dictation.
|
||||
dictationEnabled: TYPE_ENUM
|
||||
DEFAULT_USER_CHOICE: Allow the user to decide.
|
||||
@@ -1415,12 +1482,15 @@ chrome.devices.managedguest.apps.PermissionsAndUrlAccess: Allows setting of allo
|
||||
blockedPermissions: TYPE_LIST
|
||||
{'value': '', 'description': 'Allow all permissions. If empty string is set, it must be the only value set for the policy.'}
|
||||
allowedPermissions: TYPE_LIST
|
||||
{'value': 'alarms', 'description': 'Alarms.'}
|
||||
{'value': 'activeTab', 'description': 'Active tab.'}
|
||||
blockedHosts: TYPE_LIST
|
||||
Sets extension hosts that should be blocked.
|
||||
allowedHosts: TYPE_LIST
|
||||
Sets extension hosts that should be allowed. Allowed hosts override blocked hosts.
|
||||
|
||||
chrome.devices.managedguest.apps.SkipDocumentScanConfirmation: Allows the app to skip the confirmation dialog when using the Document Scan API.
|
||||
skipDocumentScanConfirmation: TYPE_BOOL
|
||||
|
||||
chrome.devices.managedguest.apps.SkipPrintConfirmation: Allows the app to skip the confirmation dialog when sending print jobs via the Chrome Printing API.
|
||||
skipPrintConfirmation: TYPE_BOOL
|
||||
|
||||
@@ -1564,6 +1634,11 @@ chrome.devices.managedguest.CpuTaskScheduler: CPU task scheduler.
|
||||
CONSERVATIVE: Optimize for stability.
|
||||
PERFORMANCE: Optimize for performance.
|
||||
|
||||
chrome.devices.managedguest.CssCustomStateDeprecatedSyntaxEnabled: CSS custom state deprecated syntax.
|
||||
cssCustomStateDeprecatedSyntaxEnabled: TYPE_BOOL
|
||||
true: Allow deprecated syntax.
|
||||
false: Do not allow deprecated syntax.
|
||||
|
||||
chrome.devices.managedguest.CursorHighlightEnabled: Cursor highlight.
|
||||
cursorHighlightEnabled: TYPE_ENUM
|
||||
UNSET: Allow the user to decide.
|
||||
@@ -1628,9 +1703,6 @@ chrome.devices.managedguest.DeleteKeyModifier: Control the shortcut used to trig
|
||||
NONE: Setting a shortcut for the "Delete" action is disabled.
|
||||
ALT: Delete shortcut setting uses the shortcut that contains the alt modifier.
|
||||
SEARCH: Delete shortcut setting uses the shortcut that contains the search modifier.
|
||||
deleteKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.DeletePrintJobHistoryAllowed: Print job history deletion.
|
||||
deletePrintJobHistoryAllowed: TYPE_BOOL
|
||||
@@ -1642,6 +1714,10 @@ chrome.devices.managedguest.DeveloperTools: Developer tools.
|
||||
ALWAYS_ALLOW_DEVELOPER_TOOLS: Always allow use of built-in developer tools.
|
||||
ALLOW_DEVELOPER_TOOLS_EXCEPT_FORCE_INSTALLED: Allow use of built-in developer tools except for force-installed extensions and component extensions.
|
||||
NEVER_ALLOW_DEVELOPER_TOOLS: Never allow use of built-in developer tools.
|
||||
extensionDeveloperModeSettings: TYPE_ENUM
|
||||
UNSET: Use 'developer tools availability' selection.
|
||||
ALLOW: Allow use of developer tools on extensions page.
|
||||
DISALLOW: Do not allow use of developer tools on extensions page.
|
||||
|
||||
chrome.devices.managedguest.DeviceAllowMgsToStoreDisplayProperties: Persist display settings.
|
||||
deviceAllowMgsToStoreDisplayProperties: TYPE_BOOL
|
||||
@@ -1728,10 +1804,10 @@ chrome.devices.managedguest.EncryptedClientHelloEnabled: TLS encrypted ClientHel
|
||||
true: Enable the TLS Encrypted ClientHello experiment.
|
||||
false: Disable the TLS Encrypted ClientHello experiment.
|
||||
|
||||
chrome.devices.managedguest.EnhancedNetworkVoicesInSelectToSpeakAllowed: Allow the enhanced network text-to-speech voices in Select-to-speak.
|
||||
chrome.devices.managedguest.EnhancedNetworkVoicesInSelectToSpeakAllowed: Select-to-speak.
|
||||
enhancedNetworkVoicesInSelectToSpeakAllowed: TYPE_BOOL
|
||||
true: Allow the user to decide.
|
||||
false: Disallow enhanced network text-to-speech voices when using Select-to-Speak.
|
||||
true: Allow sending text to Google servers for enhanced Select-to-speak.
|
||||
false: Do not allow sending text to Google servers for enhanced Select-to-speak.
|
||||
|
||||
chrome.devices.managedguest.EnterpriseHardwarePlatformApiEnabled: Enterprise Hardware Platform API.
|
||||
enterpriseHardwarePlatformApiEnabled: TYPE_BOOL
|
||||
@@ -1782,9 +1858,6 @@ chrome.devices.managedguest.FElevenKeyModifier: Control the shortcut used to tri
|
||||
ALT: F11 settings use the shortcut that contains the alt modifier.
|
||||
SHIFT: F11 settings use the shortcut that contains the shift modifier.
|
||||
CTRL_SHIFT: F11 settings use the shortcut that contains the modifiers ctrl and shift.
|
||||
fElevenKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.FileOrDirectoryPickerWithoutGestureAllowedForOrigins: File/directory picker without user gesture.
|
||||
fileOrDirectoryPickerWithoutGestureAllowedForOrigins: TYPE_LIST
|
||||
@@ -1843,9 +1916,6 @@ chrome.devices.managedguest.FTwelveKeyModifier: Control the shortcut used to tri
|
||||
SHIFT: F12 settings use the shortcut that contains the shift modifier.
|
||||
CTRL_SHIFT: F12 settings use the shortcut that contains the modifiers ctrl and shift.
|
||||
UNSET: Allow the user to decide.
|
||||
fTwelveKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.FullscreenAllowed: Fullscreen mode.
|
||||
fullscreenAllowed: TYPE_BOOL
|
||||
@@ -1891,9 +1961,6 @@ chrome.devices.managedguest.HomeAndEndKeysModifier: Control the shortcut used to
|
||||
NONE: Home/End settings are disabled.
|
||||
ALT: Home/End settings use the shortcut that contains the alt modifier.
|
||||
SEARCH: Home/End settings use the shortcut that contains the search modifier.
|
||||
homeAndEndKeysModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.HomeButton: Home button.
|
||||
showHomeButton: TYPE_ENUM
|
||||
@@ -1913,20 +1980,6 @@ chrome.devices.managedguest.HstsPolicyBypassList: HSTS policy bypass list.
|
||||
hstsPolicyBypassList: TYPE_LIST
|
||||
List of hostnames that will bypass the HSTS policy check . Enter a list of hostnames that will be exempt from the HSTS policy check.
|
||||
|
||||
chrome.devices.managedguest.IdleSettings: Idle settings.
|
||||
mgsActionOnDeviceIdle: TYPE_ENUM
|
||||
SLEEP: Sleep.
|
||||
LOGOUT: Logout.
|
||||
SHUTDOWN: Shutdown.
|
||||
DO_NOTHING: Do nothing.
|
||||
mgsIdleTimeoutMinutes: TYPE_STRING
|
||||
Idle time in minutes. Leave empty for system default.
|
||||
mgsActionOnLidClose: TYPE_ENUM
|
||||
SLEEP: Sleep.
|
||||
LOGOUT: Logout.
|
||||
SHUTDOWN: Shutdown.
|
||||
DO_NOTHING: Do nothing.
|
||||
|
||||
chrome.devices.managedguest.IdleSettingsExtended: Idle settings.
|
||||
lidCloseAction: TYPE_ENUM
|
||||
SLEEP: Sleep.
|
||||
@@ -1985,9 +2038,6 @@ chrome.devices.managedguest.InsertKeyModifier: Control the shortcut used to trig
|
||||
insertKeyModifier: TYPE_ENUM
|
||||
NONE: Setting a shortcut for the "Insert" action is disabled.
|
||||
SEARCH: Insert shortcut setting uses the shortcut that contains the search modifier.
|
||||
insertKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.IntensiveWakeUpThrottlingEnabled: Javascript IntensiveWakeUpThrottling.
|
||||
intensiveWakeUpThrottlingEnabled: TYPE_ENUM
|
||||
@@ -2031,6 +2081,11 @@ chrome.devices.managedguest.KerberosTickets: Kerberos tickets.
|
||||
true: Enable kerberos.
|
||||
false: Disable kerberos.
|
||||
|
||||
chrome.devices.managedguest.KeyboardFocusableScrollersEnabled: Keyboard focusable scrollers.
|
||||
keyboardFocusableScrollersEnabled: TYPE_BOOL
|
||||
true: Allow scrollers to be focusable by default.
|
||||
false: Do not allow scrollers to be focusable by default.
|
||||
|
||||
chrome.devices.managedguest.KeyboardFocusHighlightEnabled: Keyboard focus highlighting.
|
||||
keyboardFocusHighlightEnabled: TYPE_ENUM
|
||||
UNSET: Allow the user to decide.
|
||||
@@ -2053,6 +2108,14 @@ chrome.devices.managedguest.LensDesktopNtpSearchEnabled: New Tab page Google Len
|
||||
true: Show the Google Lens button in the search box on the New Tab page.
|
||||
false: Do not show the Google Lens button in the search box on the New Tab page.
|
||||
|
||||
chrome.devices.managedguest.LensOnGalleryEnabled: Lens Gallery App integration.
|
||||
lensOnGalleryEnabled: TYPE_BOOL
|
||||
true: Enable Lens integration.
|
||||
false: Disable Lens integration.
|
||||
lensOnGalleryEnabledSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.LensRegionSearchEnabled: Google Lens region search.
|
||||
lensRegionSearchEnabled: TYPE_BOOL
|
||||
true: Enable Google Lens region search.
|
||||
@@ -2200,9 +2263,6 @@ chrome.devices.managedguest.PageUpAndPageDownKeysModifier: Control the shortcut
|
||||
NONE: PageUp/PageDown settings are disabled.
|
||||
ALT: PageUp/PageDown settings use the shortcut that contains the alt modifier.
|
||||
SEARCH: PageUp/PageDown settings use the shortcut that contains the search modifier.
|
||||
pageUpAndPageDownKeysModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.devices.managedguest.PaymentMethodQueryEnabled: Payment methods.
|
||||
paymentMethodQueryEnabled: TYPE_BOOL
|
||||
@@ -2242,8 +2302,8 @@ chrome.devices.managedguest.Popups: Pop-ups.
|
||||
chrome.devices.managedguest.PostQuantumKeyAgreementEnabled: Post-quantum TLS.
|
||||
postQuantumKeyAgreementEnabled: TYPE_ENUM
|
||||
UNSET: Use the default Chrome setting.
|
||||
FALSE: Do not allow Kyber key agreement for TLS.
|
||||
TRUE: Allow Kyber key agreement for TLS.
|
||||
FALSE: Do not allow post-quantum key agreement in TLS connections.
|
||||
TRUE: Allow post-quantum key agreement in TLS connections.
|
||||
|
||||
chrome.devices.managedguest.PpapiSharedImagesForVideoDecoderAllowed: Allow Pepper to use shared images for video decoding.
|
||||
ppapiSharedImagesForVideoDecoderAllowed: TYPE_BOOL
|
||||
@@ -2353,6 +2413,11 @@ chrome.devices.managedguest.PromptForDownloadLocation: Download location prompt.
|
||||
FALSE: Do not ask the user (downloads start immediately).
|
||||
TRUE: Ask the user where to save the file before downloading.
|
||||
|
||||
chrome.devices.managedguest.QrCodeGeneratorEnabled: QR Code Generator.
|
||||
qrCodeGeneratorEnabled: TYPE_BOOL
|
||||
true: Enable QR Code Generator.
|
||||
false: Disable QR Code Generator.
|
||||
|
||||
chrome.devices.managedguest.QuickAnswersEnabled: Quick Answers.
|
||||
quickAnswersEnabled: TYPE_BOOL
|
||||
true: Enable Quick Answers.
|
||||
@@ -2612,6 +2677,7 @@ chrome.devices.managedguest.SimpleProxySettings: Proxy mode.
|
||||
simpleProxyMode: TYPE_ENUM
|
||||
USER_CONFIGURED: Allow user to configure.
|
||||
DIRECT: Never use a proxy.
|
||||
SYSTEM: Use system proxy settings.
|
||||
AUTO_DETECT: Always auto detect the proxy.
|
||||
FIXED_SERVERS: Always use the proxy specified in 'simpleProxyServerUrl'.
|
||||
PAC_SCRIPT: Always use the proxy auto-config specified in 'simpleProxyPacUrl'.
|
||||
@@ -2660,6 +2726,11 @@ chrome.devices.managedguest.SslVersionMin: Minimum SSL version enabled.
|
||||
TL_SV_1_2: TLS 1.2.
|
||||
SSL_V_3: SSL3.
|
||||
|
||||
chrome.devices.managedguest.StandardizedBrowserZoomEnabled: Zoom Behavior.
|
||||
standardizedBrowserZoomEnabled: TYPE_BOOL
|
||||
true: Standard CSS zoom.
|
||||
false: Legacy CSS zoom.
|
||||
|
||||
chrome.devices.managedguest.StartupBrowserLaunch: Browser launch on startup.
|
||||
startupBrowserWindowLaunchSuppressed: TYPE_BOOL
|
||||
true: Do not launch the browser on startup.
|
||||
@@ -2715,6 +2786,12 @@ chrome.devices.managedguest.SystemFeaturesDisableMode: Disabled system features
|
||||
BLOCKED: Show disabled app icons.
|
||||
HIDDEN: Hide app icons.
|
||||
|
||||
chrome.devices.managedguest.SystemShortcutBehavior: Override system shortcuts.
|
||||
systemShortcutBehavior: TYPE_ENUM
|
||||
DEFAULT: Do not override system shortcuts.
|
||||
SHOULD_IGNORE_COMMON_VDI_SHORTCUTS: Override some system shortcuts.
|
||||
SHOULD_IGNORE_COMMON_VDI_SHORTCUTS_FULLSCREEN_ONLY: Override some system shortcuts while in fullscreen.
|
||||
|
||||
chrome.devices.managedguest.TabDiscardingExceptions: Exceptions to tab discarding.
|
||||
tabDiscardingExceptions: TYPE_LIST
|
||||
URL pattern exceptions to tab discarding. Specifies URL patterns where any URL matching one or more of these patterns will never be discarded by the browser.
|
||||
@@ -3529,12 +3606,15 @@ chrome.users.apps.PermissionsAndUrlAccess: Allows setting of allowed and blocked
|
||||
blockedPermissions: TYPE_LIST
|
||||
{'value': '', 'description': 'Allow all permissions. If empty string is set, it must be the only value set for the policy.'}
|
||||
allowedPermissions: TYPE_LIST
|
||||
{'value': 'alarms', 'description': 'Alarms.'}
|
||||
{'value': 'activeTab', 'description': 'Active tab.'}
|
||||
blockedHosts: TYPE_LIST
|
||||
Sets extension hosts that should be blocked.
|
||||
allowedHosts: TYPE_LIST
|
||||
Sets extension hosts that should be allowed. Allowed hosts override blocked hosts.
|
||||
|
||||
chrome.users.apps.SkipDocumentScanConfirmation: Allows the app to skip the confirmation dialog when using the Document Scan API.
|
||||
skipDocumentScanConfirmation: TYPE_BOOL
|
||||
|
||||
chrome.users.apps.SkipPrintConfirmation: Allows the app to skip the confirmation dialog when sending print jobs via the Chrome Printing API.
|
||||
skipPrintConfirmation: TYPE_BOOL
|
||||
|
||||
@@ -3565,7 +3645,7 @@ chrome.users.appsconfig.AppExtensionInstallSources: App and extension install so
|
||||
|
||||
chrome.users.appsconfig.BlockExtensionsByPermission: Permissions and URLs.
|
||||
extensionBlockedPermissions: TYPE_LIST
|
||||
{'value': 'alarms', 'description': 'Alarms.'}
|
||||
{'value': 'activeTab', 'description': 'Active tab.'}
|
||||
runtimeBlockedHosts: TYPE_LIST
|
||||
Runtime blocked hosts. This is a list of patterns for matching against hostnames. URLs that match one of these patterns cannot be modified by apps and extensions. This includes injecting Javascript, altering and viewing webRequests / webNavigation, viewing and altering cookies, exceptions to the same-origin policy, etc. The format is similar to full URL patterns except no paths may be defined. e.g. "*://*.example.com". Maximum of 100 URLs.
|
||||
runtimeAllowedHosts: TYPE_LIST
|
||||
@@ -4146,6 +4226,11 @@ chrome.users.CrossOriginWebAssemblyModuleSharingEnabled: Allow WebAssembly cross
|
||||
true: Allow WebAssembly modules to be sent cross-origin.
|
||||
false: Prevent WebAssembly modules to be sent cross-origin.
|
||||
|
||||
chrome.users.CssCustomStateDeprecatedSyntaxEnabled: CSS custom state deprecated syntax.
|
||||
cssCustomStateDeprecatedSyntaxEnabled: TYPE_BOOL
|
||||
true: Allow deprecated syntax.
|
||||
false: Do not allow deprecated syntax.
|
||||
|
||||
chrome.users.CursorHighlightEnabled: Cursor highlight.
|
||||
cursorHighlightEnabled: TYPE_ENUM
|
||||
UNSET: Allow the user to decide.
|
||||
@@ -4219,15 +4304,17 @@ chrome.users.DeleteKeyModifier: Control the shortcut used to trigger the Delete
|
||||
NONE: Setting a shortcut for the "Delete" action is disabled.
|
||||
ALT: Delete shortcut setting uses the shortcut that contains the alt modifier.
|
||||
SEARCH: Delete shortcut setting uses the shortcut that contains the search modifier.
|
||||
deleteKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.DeletePrintJobHistoryAllowed: Print job history deletion.
|
||||
deletePrintJobHistoryAllowed: TYPE_BOOL
|
||||
true: Allow print job history to be deleted.
|
||||
false: Do not allow print job history to be deleted.
|
||||
|
||||
chrome.users.DeletingUndecryptablePasswordsEnabled: Delete undecryptable passwords.
|
||||
deletingUndecryptablePasswordsEnabled: TYPE_BOOL
|
||||
true: Enable deleting undecryptable passwords.
|
||||
false: Disable deleting undecryptable passwords.
|
||||
|
||||
chrome.users.DeskApi: Desk API for third-party ChromeOS desk control.
|
||||
deskApiThirdPartyAccessEnabled: TYPE_BOOL
|
||||
true: Enable Desk API for third-party ChromeOS desk control.
|
||||
@@ -4245,6 +4332,10 @@ chrome.users.DeveloperTools: Developer tools.
|
||||
ALWAYS_ALLOW_DEVELOPER_TOOLS: Always allow use of built-in developer tools.
|
||||
ALLOW_DEVELOPER_TOOLS_EXCEPT_FORCE_INSTALLED: Allow use of built-in developer tools except for force-installed extensions and component extensions.
|
||||
NEVER_ALLOW_DEVELOPER_TOOLS: Never allow use of built-in developer tools.
|
||||
extensionDeveloperModeSettings: TYPE_ENUM
|
||||
UNSET: Use 'developer tools availability' selection.
|
||||
ALLOW: Allow use of developer tools on extensions page.
|
||||
DISALLOW: Do not allow use of developer tools on extensions page.
|
||||
|
||||
chrome.users.DeviceEnrollment: Device enrollment.
|
||||
autoDevicePlacementEnabled: TYPE_BOOL
|
||||
@@ -4342,6 +4433,11 @@ chrome.users.DriveFileSyncAvailable: ChromeOS file sync.
|
||||
DISABLED: Do not show the ChromeOS file sync feature.
|
||||
VISIBLE: Show the ChromeOS file sync feature.
|
||||
|
||||
chrome.users.DynamicCodeSettings: Dynamic Code.
|
||||
dynamicCodeSettings: TYPE_ENUM
|
||||
DEFAULT: Use the default Chrome setting.
|
||||
DISABLED_FOR_BROWSER: Do not create dynamic code.
|
||||
|
||||
chrome.users.EcheAllowed: App Streaming.
|
||||
echeAllowed: TYPE_BOOL
|
||||
true: Allow users to launch App Streaming.
|
||||
@@ -4443,9 +4539,6 @@ chrome.users.FElevenKeyModifier: Control the shortcut used to trigger F11.
|
||||
ALT: F11 settings use the shortcut that contains the alt modifier.
|
||||
SHIFT: F11 settings use the shortcut that contains the shift modifier.
|
||||
CTRL_SHIFT: F11 settings use the shortcut that contains the modifiers ctrl and shift.
|
||||
fElevenKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.FetchKeepaliveDurationSecondsOnShutdown: Keepalive duration.
|
||||
duration: TYPE_STRING
|
||||
@@ -4524,9 +4617,6 @@ chrome.users.FTwelveKeyModifier: Control the shortcut used to trigger F12.
|
||||
SHIFT: F12 settings use the shortcut that contains the shift modifier.
|
||||
CTRL_SHIFT: F12 settings use the shortcut that contains the modifiers ctrl and shift.
|
||||
UNSET: Allow the user to decide.
|
||||
fTwelveKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.FullscreenAlertEnabled: Fullscreen alert.
|
||||
fullscreenAlertEnabled: TYPE_BOOL
|
||||
@@ -4594,8 +4684,8 @@ chrome.users.GssapiLibraryName: GSSAPI library name.
|
||||
|
||||
chrome.users.HardwareAccelerationModeEnabled: GPU.
|
||||
hardwareAccelerationModeEnabled: TYPE_BOOL
|
||||
true: Enable hardware acceleration.
|
||||
false: Disable hardware acceleration.
|
||||
true: Enable graphics acceleration.
|
||||
false: Disable graphics acceleration.
|
||||
|
||||
chrome.users.HelpMeWriteSettings: Help me write.
|
||||
helpMeWriteSettings: TYPE_ENUM
|
||||
@@ -4615,14 +4705,17 @@ chrome.users.HighEfficiencyModeEnabled: High efficiency mode.
|
||||
FALSE: Disable high efficiency mode.
|
||||
TRUE: Enable high efficiency mode.
|
||||
|
||||
chrome.users.HistorySearchSettings: History search settings.
|
||||
historySearchSettings: TYPE_ENUM
|
||||
ALLOWED: Allow using AI-powered history search.
|
||||
ALLOWED_WITHOUT_LOGGING: Allow using AI-powered history search without data collection.
|
||||
DISABLED: Fully disable AI-powered history search.
|
||||
|
||||
chrome.users.HomeAndEndKeysModifier: Control the shortcut used to trigger the Home/End "six pack" keys.
|
||||
homeAndEndKeysModifier: TYPE_ENUM
|
||||
NONE: Home/End settings are disabled.
|
||||
ALT: Home/End settings use the shortcut that contains the alt modifier.
|
||||
SEARCH: Home/End settings use the shortcut that contains the search modifier.
|
||||
homeAndEndKeysModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.HomeButton: Home button.
|
||||
showHomeButton: TYPE_ENUM
|
||||
@@ -4657,21 +4750,6 @@ chrome.users.HttpsUpgradesEnabled: Automatic HTTPS upgrades.
|
||||
true: Allow HTTPS upgrades.
|
||||
false: Do not allow HTTPS upgrades.
|
||||
|
||||
chrome.users.IdleSettings: Idle settings.
|
||||
idleTimeoutMinutes: TYPE_STRING
|
||||
Idle time in minutes. Leave empty for system default.
|
||||
actionOnDeviceIdle: TYPE_ENUM
|
||||
SLEEP: Sleep.
|
||||
LOGOUT: Logout.
|
||||
LOCK: Lock Screen.
|
||||
actionOnLidClose: TYPE_ENUM
|
||||
SLEEP: Sleep.
|
||||
LOGOUT: Logout.
|
||||
lockOnSleep: TYPE_ENUM
|
||||
UNSET: Allow the user to decide.
|
||||
FALSE: Don't lock screen.
|
||||
TRUE: Lock screen.
|
||||
|
||||
chrome.users.IdleSettingsExtended: Idle settings.
|
||||
lidCloseAction: TYPE_ENUM
|
||||
SLEEP: Sleep.
|
||||
@@ -4780,9 +4858,6 @@ chrome.users.InsertKeyModifier: Control the shortcut used to trigger the Insert
|
||||
insertKeyModifier: TYPE_ENUM
|
||||
NONE: Setting a shortcut for the "Insert" action is disabled.
|
||||
SEARCH: Insert shortcut setting uses the shortcut that contains the search modifier.
|
||||
insertKeyModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.IntegratedWebAuthenticationAllowed: Login credentials for network authentication.
|
||||
integratedWebAuthenticationAllowed: TYPE_BOOL
|
||||
@@ -4881,6 +4956,11 @@ chrome.users.KerberosTickets: Kerberos tickets.
|
||||
true: Customize Kerberos configuration.
|
||||
false: Use default Kerberos configuration.
|
||||
|
||||
chrome.users.KeyboardFocusableScrollersEnabled: Keyboard focusable scrollers.
|
||||
keyboardFocusableScrollersEnabled: TYPE_BOOL
|
||||
true: Allow scrollers to be focusable by default.
|
||||
false: Do not allow scrollers to be focusable by default.
|
||||
|
||||
chrome.users.KeyboardFocusHighlightEnabled: Keyboard focus highlighting.
|
||||
keyboardFocusHighlightEnabled: TYPE_ENUM
|
||||
UNSET: Allow the user to decide.
|
||||
@@ -4918,6 +4998,14 @@ chrome.users.LensDesktopNtpSearchEnabled: New Tab page Google Lens button.
|
||||
true: Show the Google Lens button in the search box on the New Tab page.
|
||||
false: Do not show the Google Lens button in the search box on the New Tab page.
|
||||
|
||||
chrome.users.LensOnGalleryEnabled: Lens Gallery App integration.
|
||||
lensOnGalleryEnabled: TYPE_BOOL
|
||||
true: Enable Lens integration.
|
||||
false: Disable Lens integration.
|
||||
lensOnGalleryEnabledSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.LensRegionSearchEnabled: Google Lens region search.
|
||||
lensRegionSearchEnabled: TYPE_BOOL
|
||||
true: Enable Google Lens region search.
|
||||
@@ -4943,6 +5031,11 @@ chrome.users.LockScreen: Lock screen.
|
||||
true: Allow locking screen.
|
||||
false: Do not allow locking screen.
|
||||
|
||||
chrome.users.LockScreenAutoStartOnlineReauth: Lock screen online reauthentication.
|
||||
lockScreenAutoStartOnlineReauth: TYPE_BOOL
|
||||
true: Show users the online reauthentication screen.
|
||||
false: Show users interstitial screens prior to online reauthentication.
|
||||
|
||||
chrome.users.LockScreenMediaPlaybackEnabled: Lock screen media playback.
|
||||
lockScreenMediaPlaybackEnabled: TYPE_BOOL
|
||||
true: Allow users to play media when the device is locked.
|
||||
@@ -4972,7 +5065,7 @@ chrome.users.ManagedBookmarksSetting: Managed bookmarks.
|
||||
|
||||
chrome.users.MaxConnectionsPerProxy: Max connections per proxy.
|
||||
maxConnectionsPerProxy: TYPE_INT64
|
||||
Maximium number of concurrent connections to the proxy server. Specifies the maximal number of simultaneous connections to the proxy server. The value of this policy should be lower than 100 and higher than 6 and the default value is 32.
|
||||
Maximum number of concurrent connections to the proxy server. Specifies the maximal number of simultaneous connections to the proxy server. The value of this policy should be lower than 100 and higher than 6 and the default value is 32.
|
||||
|
||||
chrome.users.MaxInvalidationFetchDelay: Policy fetch delay.
|
||||
duration: TYPE_STRING
|
||||
@@ -5166,9 +5259,6 @@ chrome.users.PageUpAndPageDownKeysModifier: Control the shortcut used to trigger
|
||||
NONE: PageUp/PageDown settings are disabled.
|
||||
ALT: PageUp/PageDown settings use the shortcut that contains the alt modifier.
|
||||
SEARCH: PageUp/PageDown settings use the shortcut that contains the search modifier.
|
||||
pageUpAndPageDownKeysModifierSettingGroupPolicyMode: TYPE_ENUM
|
||||
MANDATORY: Do not allow users to override.
|
||||
RECOMMENDED: Allow users to override.
|
||||
|
||||
chrome.users.ParcelTrackingEnabled: Parcel tracking.
|
||||
parcelTrackingEnabled: TYPE_BOOL
|
||||
@@ -5222,6 +5312,11 @@ chrome.users.PdfUseSkiaRendererEnabled: Renderer for PDF files.
|
||||
FALSE: Use AGG renderer for PDF files.
|
||||
TRUE: Use Skia renderer for PDF files.
|
||||
|
||||
chrome.users.PdfViewerOutOfProcessIframeEnabled: PDF viewer.
|
||||
pdfViewerOutOfProcessIframeEnabled: TYPE_BOOL
|
||||
true: PDF viewer uses out-of-process iframe.
|
||||
false: PDF viewer uses guest view.
|
||||
|
||||
chrome.users.PersistentQuotaEnabled: Persistent quota for webkitRequestFileSystem.
|
||||
persistentQuotaEnabled: TYPE_BOOL
|
||||
true: Enable persistent quota.
|
||||
@@ -5298,8 +5393,8 @@ chrome.users.Popups: Pop-ups.
|
||||
chrome.users.PostQuantumKeyAgreementEnabled: Post-quantum TLS.
|
||||
postQuantumKeyAgreementEnabled: TYPE_ENUM
|
||||
UNSET: Use the default Chrome setting.
|
||||
FALSE: Do not allow Kyber key agreement for TLS.
|
||||
TRUE: Allow Kyber key agreement for TLS.
|
||||
FALSE: Do not allow post-quantum key agreement in TLS connections.
|
||||
TRUE: Allow post-quantum key agreement in TLS connections.
|
||||
|
||||
chrome.users.PpapiSharedImagesForVideoDecoderAllowed: Allow Pepper to use shared images for video decoding.
|
||||
ppapiSharedImagesForVideoDecoderAllowed: TYPE_BOOL
|
||||
@@ -5355,6 +5450,11 @@ chrome.users.PrintingBackgroundGraphicsDefault: Background graphics printing def
|
||||
DISABLED: Disable background graphics printing mode by default.
|
||||
ENABLED: Enable background graphics printing mode by default.
|
||||
|
||||
chrome.users.PrintingLpacSandboxEnabled: Printing LPAC Sandbox.
|
||||
printingLpacSandboxEnabled: TYPE_BOOL
|
||||
true: Run printing services in LPAC sandbox when available.
|
||||
false: Run printing services in a less secure sandbox.
|
||||
|
||||
chrome.users.PrintingMaxSheetsAllowed: Maximum sheets.
|
||||
value: TYPE_INT64
|
||||
|
||||
@@ -5469,6 +5569,11 @@ chrome.users.PromptOnMultipleMatchingCertificates: Prompt when multiple certific
|
||||
true: Prompt the user to select the client certificate whenever the auto-selection policy matches multiple certificates.
|
||||
false: Only prompt the user when no certificate matches the auto-selection.
|
||||
|
||||
chrome.users.QrCodeGeneratorEnabled: QR Code Generator.
|
||||
qrCodeGeneratorEnabled: TYPE_BOOL
|
||||
true: Enable QR Code Generator.
|
||||
false: Disable QR Code Generator.
|
||||
|
||||
chrome.users.QuickAnswersEnabled: Quick Answers.
|
||||
quickAnswersEnabled: TYPE_BOOL
|
||||
true: Enable Quick Answers.
|
||||
@@ -5813,7 +5918,7 @@ chrome.users.ShowCastSessionsStartedByOtherDevices: Show media controls for Goog
|
||||
FALSE: Do not show media controls for Google Cast sessions started by other devices.
|
||||
TRUE: Show media controls for Google Cast sessions started by other devices.
|
||||
|
||||
chrome.users.ShowDisplaySizeScreenEnabled: Controls whether display size setting screen is displayed during sign-in.
|
||||
chrome.users.ShowDisplaySizeScreenEnabled: Display size setting during sign-in.
|
||||
showDisplaySizeScreenEnabled: TYPE_ENUM
|
||||
UNSET: Use the default Chrome setting.
|
||||
FALSE: Do not display the display size setting screen during sign-in.
|
||||
@@ -5830,7 +5935,7 @@ chrome.users.ShowLogoutButton: Show sign-out button in tray.
|
||||
true: Show sign-out button in tray.
|
||||
false: Do not show sign-out button in tray.
|
||||
|
||||
chrome.users.ShowTouchpadScrollScreenEnabled: Controls whether touchpad scroll direction screen is displayed during sign-in.
|
||||
chrome.users.ShowTouchpadScrollScreenEnabled: Touchpad scroll setting during sign-in.
|
||||
showTouchpadScrollScreenEnabled: TYPE_BOOL
|
||||
true: Display the touchpad scroll direction screen during sign-in.
|
||||
false: Do not display the touchpad scroll direction screen during sign-in.
|
||||
@@ -5854,6 +5959,7 @@ chrome.users.SimpleProxySettings: Proxy mode.
|
||||
simpleProxyMode: TYPE_ENUM
|
||||
USER_CONFIGURED: Allow user to configure.
|
||||
DIRECT: Never use a proxy.
|
||||
SYSTEM: Use system proxy settings.
|
||||
AUTO_DETECT: Always auto detect the proxy.
|
||||
FIXED_SERVERS: Always use the proxy specified in 'simpleProxyServerUrl'.
|
||||
PAC_SCRIPT: Always use the proxy auto-config specified in 'simpleProxyPacUrl'.
|
||||
@@ -5945,6 +6051,11 @@ chrome.users.SslVersionMin: Minimum SSL version enabled.
|
||||
TL_SV_1_2: TLS 1.2.
|
||||
SSL_V_3: SSL3.
|
||||
|
||||
chrome.users.StandardizedBrowserZoomEnabled: Zoom Behavior.
|
||||
standardizedBrowserZoomEnabled: TYPE_BOOL
|
||||
true: Standard CSS zoom.
|
||||
false: Legacy CSS zoom.
|
||||
|
||||
chrome.users.StartupPages: Pages to load on startup.
|
||||
restoreOnStartupUrls: TYPE_LIST
|
||||
Startup pages. Example: https://example.com.
|
||||
@@ -5992,6 +6103,9 @@ chrome.users.SyncSettingsCbcm: Chrome Sync and Roaming Profiles (Chrome Browser
|
||||
{'value': 'browsing_history', 'description': 'Browsing history.'}
|
||||
roamingProfileLocationCbcm: TYPE_STRING
|
||||
Roaming profile directory. Configures the directory that Google Chrome will use for storing the roaming copy of the profiles.
|
||||
profileReauthPrompt: TYPE_ENUM
|
||||
DO_NOT_PROMPT: Do not prompt for re-authentication after authentication expiration.
|
||||
PROMPT_IN_TAB: Prompt for re-authentication in a tab after authentication expiration.
|
||||
|
||||
chrome.users.SyncSettingsCros: Chrome Sync (ChromeOS).
|
||||
syncDisabledCros: TYPE_BOOL
|
||||
@@ -6006,6 +6120,12 @@ chrome.users.SystemFeaturesDisableList: Disabled system features.
|
||||
systemFeaturesDisableList: TYPE_LIST
|
||||
{'value': 'camera', 'description': 'Camera.'}
|
||||
|
||||
chrome.users.SystemShortcutBehavior: Override system shortcuts.
|
||||
systemShortcutBehavior: TYPE_ENUM
|
||||
DEFAULT: Do not override system shortcuts.
|
||||
SHOULD_IGNORE_COMMON_VDI_SHORTCUTS: Override some system shortcuts.
|
||||
SHOULD_IGNORE_COMMON_VDI_SHORTCUTS_FULLSCREEN_ONLY: Override some system shortcuts while in fullscreen.
|
||||
|
||||
chrome.users.SystemTerminalSshAllowed: SSH in terminal system app.
|
||||
systemTerminalSshAllowed: TYPE_ENUM
|
||||
UNSET: Use the default Chrome setting.
|
||||
@@ -6179,8 +6299,6 @@ chrome.users.UserDownloadDirectory: Download location.
|
||||
LOCAL_FOLDER_DEFAULT: Set local Downloads folder as default, but allow user to change.
|
||||
GOOGLE_DRIVE_DEFAULT: Set Google Drive as default, but allow user to change.
|
||||
GOOGLE_DRIVE_FORCED: Force Google Drive.
|
||||
ONEDRIVE_DEFAULT: Set OneDrive as default, but allow user to change.
|
||||
ONEDRIVE_FORCED: Force OneDrive.
|
||||
|
||||
chrome.users.UserEnrollmentNudging: Initial sign-in.
|
||||
userEnrollmentNudging: TYPE_ENUM
|
||||
@@ -6387,4 +6505,5 @@ chrome.users.ZstdContentEncodingEnabled: Zstd compression.
|
||||
zstdContentEncodingEnabled: TYPE_BOOL
|
||||
true: Allow zstd-compressed web content.
|
||||
false: Do not allow zstd-compressed web content.
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
@@ -71,7 +71,7 @@ gam <Command> cros <CrOSEntity> ...
|
||||
```
|
||||
The first form allows more powerful selection of devices with `<CrOSTypeEntity>`.
|
||||
|
||||
The second form is backwards compatible with Standard GAM and selection with `<CrOSEntity>` is limited.
|
||||
The second form is backwards compatible with Legacy GAM and selection with `<CrOSEntity>` is limited.
|
||||
|
||||
## Definitions
|
||||
* [`<CrOSTypeEntity>`](Collections-of-ChromeOS-Devices)
|
||||
@@ -465,7 +465,7 @@ gam getcommand cros <CrOSEntity> commandid <CommandID> [times_to_check_status <I
|
||||
### Action Examples
|
||||
Remove user profile data from the device; the device will remain enrolled and connected.
|
||||
User data not synced to the Cloud including Downloads, Android app data and Crostini Linux VMs will be permanently lost.
|
||||
Commands with issuecommand directly after gam will work with standard GAM & GAMADV-XTD3, whereas commands where the issuecommand is after the cros <CrOSTypeEntity> will work only with GAMADV-XTD3.
|
||||
Commands with issuecommand directly after gam will work with Legacy GAM & GAMADV-XTD3, whereas commands where the issuecommand is after the cros <CrOSTypeEntity> will work only with GAMADV-XTD3.
|
||||
```
|
||||
gam issuecommand cros dd1d659a-0ea4-4e94-905e-4726c7a5f1e9 command wipe_users doit
|
||||
```
|
||||
|
||||
@@ -495,8 +495,9 @@ gam print course-announcements [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
(courseannouncementids <CourseAnnouncementIDEntity>)|(announcementstates <CourseAnnouncementStateList>)*
|
||||
(orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
|
||||
[creatoremail] [fields <CourseAnnouncementFieldNameList>] [formatjson [quotechar <Character>]]
|
||||
[creatoremail] [fields <CourseAnnouncementFieldNameList>]
|
||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the `print course-announcements` command displays course announcement information for all courses.
|
||||
|
||||
@@ -525,6 +526,8 @@ By default, all course announcement fields are displayed; use the following opti
|
||||
* `creatoremail` - Display course announcement creator email; requires an additional API call per course announcement.
|
||||
* `fields <CourseAnnouncementFieldNameList>` - Select specific fields to display.
|
||||
|
||||
Use the `countsonly` option to display the number of announcements in a course but not their details.
|
||||
|
||||
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.
|
||||
|
||||
@@ -540,8 +543,9 @@ gam print course-materials [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
(materialids <CourseMaterialIDEntity>)|(materialstates <CourseMaterialStateList>)*
|
||||
(orderby <CourseMaterialOrderByFieldName> [ascending|descending])*)
|
||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseMaterialFieldNameList>] [formatjson [quotechar <Character>]]
|
||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseMaterialFieldNameList>]
|
||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the `print course-materials` command displays course materials information for all courses.
|
||||
|
||||
@@ -571,6 +575,8 @@ By default, all course materials fields are displayed; use the following options
|
||||
* `showtopicnames` - Display topic names; requires and additional API call per course.
|
||||
* `fields <CourseMaterialsFieldNameList>` - Select specific fields to display.
|
||||
|
||||
Use the `countsonly` option to display the number of course materials in a course but not their details.
|
||||
|
||||
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.
|
||||
|
||||
@@ -585,8 +591,8 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
gam print course-topics [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
(coursetopicids <CourseTopicIDEntity>)
|
||||
[formatjson [quotechar <Character>]]
|
||||
[timefilter updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the `print course-topics` command displays course topic information for all courses.
|
||||
|
||||
@@ -611,6 +617,8 @@ To get information about course topics updated within a particular time frame, u
|
||||
* `end|endtime <Date>|<Time>` - specify the end of the time frame; if not specified, the time frame will be open ended at the end
|
||||
For the filter to apply, `timefilter` and at least one of `start|starttime` and `end|endtime` must be specified.
|
||||
|
||||
Use the `countsonly` option to display the number of topics in a course but not their details.
|
||||
|
||||
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.
|
||||
|
||||
@@ -628,8 +636,8 @@ gam print course-work [todrive <ToDriveAttribute>*]
|
||||
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
||||
[showcreatoremails] [showtopicnames] [fields <CourseWorkFieldNameList>]
|
||||
[showstudentsaslist [<Boolean>]] [delimiter <Character>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the `print course-work` command displays course work information for all courses.
|
||||
|
||||
@@ -662,6 +670,8 @@ By default, all course work fields are displayed; use the following options to m
|
||||
By default, when course work is assigned to individual students, the student IDs are displayed in multiple indexed columns.
|
||||
Use options `showstudentsaslist [<Boolean>]` and `delimiter <Character>` to display the student IDs is a single column as a delimited list.
|
||||
|
||||
Use the `countsonly` option to display the number of course works in a course but not their details.
|
||||
|
||||
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.
|
||||
|
||||
@@ -678,8 +688,9 @@ gam print course-submissions [todrive <ToDriveAttribute>*]
|
||||
(workids <CourseWorkIDEntity>)|(workstates <CourseWorkStateList>)*
|
||||
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
||||
(submissionids <CourseSubmissionIDEntity>)|(submissionstates <CourseSubmissionStateList>)*) [late|notlate]
|
||||
[fields <CourseSubmissionFieldNameList>] [showuserprofile] [formatjson [quotechar <Character>]]
|
||||
[fields <CourseSubmissionFieldNameList>] [showuserprofile]
|
||||
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the `print course-submissions` command displays course submission information for all course work for all courses.
|
||||
|
||||
@@ -704,7 +715,7 @@ By default, all course submissions for a course work is displayed; use the follo
|
||||
* `late` - Display course submissions marked late.
|
||||
* `notlate` - Display course submissions not marked late.
|
||||
|
||||
To get information about course submissionss created/updated within a particular time frame, use the following options.
|
||||
To get information about course submissions created/updated within a particular time frame, use the following options.
|
||||
* `timefilter creationtime|updatetime` - select which event to filter
|
||||
* `start|starttime <Date>|<Time>` - specify the start of the time frame; if not specified, the time frame will be open ended at the start
|
||||
* `end|endtime <Date>|<Time>` - specify the end of the time frame; if not specified, the time frame will be open ended at the end
|
||||
@@ -717,6 +728,8 @@ By default, only the numeric userId is displayed; use the `showuserprofile` opti
|
||||
You can only get profile information if the scope `https://www.googleapis.com/auth/classroom.profile.emails` is enabled
|
||||
for service account access; verify with `gam <UserTypeEntity> update serviceaccount`.
|
||||
|
||||
Use the `countsonly` option to display the number of submissions in a course but not their details.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
|
||||
<UserGoogleDoc> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>)
|
||||
|
||||
<SheetEntity> ::= <String>|id:<Number>
|
||||
<UserGoogleSheet> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>) <SheetEntity>
|
||||
|
||||
|
||||
@@ -55,6 +55,8 @@
|
||||
|
||||
<UserGoogleDoc> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>)
|
||||
|
||||
<SheetEntity> ::= <String>|id:<Number>
|
||||
<UserGoogleSheet> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>) <SheetEntity>
|
||||
```
|
||||
@@ -88,8 +90,6 @@
|
||||
<SharedDriveIDEntity> |
|
||||
<SharedDriveNameEntity>
|
||||
|
||||
<SheetEntity> ::= <String>|id:<Number>
|
||||
|
||||
<UserTypeEntity> ::=
|
||||
(all users|users_ns|users_susp|users_ns_susp)|
|
||||
(user <UserItem>)|
|
||||
|
||||
56
docs/Downloads-Installs-GAM7.md
Normal file
56
docs/Downloads-Installs-GAM7.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Downloads-Installs-GAM7
|
||||
You can download and install the current GAM7 release from the [GitHub Releases](https://github.com/GAM-team/GAM/releases/latest) page.
|
||||
Choose one of the following:
|
||||
|
||||
* Executable Archive, Automatic, Linux/Mac OS/Google Cloud Shell/Raspberry Pi/ChromeOS
|
||||
- Start a terminal session and execute one of the following commands:
|
||||
- New install, default path `$HOME/bin`
|
||||
- `bash <(curl -s -S -L https://git.io/gam-install)`
|
||||
- New install, specify a path
|
||||
- `bash <(curl -s -S -L https://git.io/gam-install) -d <Path>`
|
||||
- Update to latest version, do not create project or authorizations, default path `$HOME/bin`
|
||||
- `bash <(curl -s -S -L https://git.io/gam-install) -l`
|
||||
- Update to latest version, do not create project or authorizations, specify a path
|
||||
- `bash <(curl -s -S -L https://git.io/gam-install) -l -d <Path>`
|
||||
|
||||
By default, a folder, `gam7`, is created in the default or specified path and the files are downloaded into that folder.
|
||||
Add the `-s` option to the end of the above commands to suppress creating the `gam7` folder; the files are downloaded directly into the default or specified path.
|
||||
|
||||
* Executable Archive, Manual, Linux/Google Cloud Shell
|
||||
- `gam-7.wx.yz-linux-x86_64-glibc2.35.tar.xz`
|
||||
- `gam-7.wx.yz-linux-x86_64-glibc2.31.tar.xz`
|
||||
- `gam-7.wx.yz-linux-x86_64-legacy.tar.xz`
|
||||
- Download the archive, extract the contents into some directory.
|
||||
- Start a terminal session.
|
||||
|
||||
* Executable Archive, Manual, Raspberry Pi/ChromeOS ARM devices
|
||||
- `gam-7.wx.yz-linux-aarch-glibc2.31.tar.xz`
|
||||
- `gam-7.wx.yz-linux-aarch-legacy.tar.xz`
|
||||
- Download the archive, extract the contents into some directory.
|
||||
- Start a terminal session.
|
||||
|
||||
* Executable Archive, Manual, Mac OS versions Big Sur, Monterey, Ventura - M1/M2
|
||||
- `gam-7.wx.yz-macos-aarch.tar.xz`
|
||||
- Download the archive, extract the contents into some directory.
|
||||
- Start a terminal session.
|
||||
|
||||
* Executable Archive, Manual, Mac OS, versions Big Sur, Monterey, Ventura - Intel
|
||||
- `gam-7.wx.yz-macos-x86_64.tar.xz`
|
||||
- Download the archive, extract the contents into some directory.
|
||||
- Start a terminal session.
|
||||
|
||||
* Executable Archive, Manual, Windows 64 bit
|
||||
- `gam-7.wx.yz-windows-x86_64.zip`
|
||||
- Download the archive, extract the contents into some directory.
|
||||
- Start a Command Prompt/PowerShell session.
|
||||
|
||||
* Executable Installer, Manual, Windows 64 bit
|
||||
- `gam-7.wx.yz-windows-x86_64.msi`
|
||||
- Download the installer and run it.
|
||||
- Start a Command Prompt/PowerShell session.
|
||||
|
||||
* Source, all platforms
|
||||
- `Source code(zip)`
|
||||
- `Source code(tar.gz)`
|
||||
- Download the archive, extract the contents into some directory.
|
||||
- Start a terminal/Command Prompt/PowerShell session.
|
||||
@@ -4,7 +4,7 @@ Many of the changes are internal to Gam and have no visible effect. Google has m
|
||||
A variable, `drive_v3_native_names` (default value is True), has been added to `gam.cfg` to control the field names on output: when True, the v3 native field names are used; when False, the v3 native field names are mapped to the v2 field names.
|
||||
|
||||
If you have scripts that process the output from these print commands, you may have to make modifications to your scripts.
|
||||
Run your print/show commands with a version of Standard Gam and save the output.
|
||||
Run your print/show commands with a version of Legacy Gam and save the output.
|
||||
With drive_v3_native_names = False, run your print/show commands with this version of Gam and compare the output to that saved in the previous run;
|
||||
modify your scripts that process the output as appropriate.
|
||||
|
||||
|
||||
@@ -10,9 +10,104 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
||||
|
||||
See [Downloads-Installs](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||
|
||||
### 7.00.08
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> delete groups` that caused the command to fail when `enable_dasa = true` in `gam.cfg`.
|
||||
|
||||
### 7.00.07
|
||||
|
||||
Updated `<PeopleContactAttribute>` fields `address,email,phone,url` to allow an empty type field.
|
||||
```
|
||||
address "" formatted "My Address" primary
|
||||
email "" user@gmail.com primary
|
||||
phone "" "510-555-1212" primary
|
||||
url "" "https://www.domain.com" primary
|
||||
```
|
||||
|
||||
### 7.00.06
|
||||
|
||||
Updated `gam <UserTypeEntity> create|update chatspace` to support the new permissions settings
|
||||
for Chat spaces that are in Developer Preview.
|
||||
|
||||
* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces#Space.FIELDS.predefined_permission_settings
|
||||
|
||||
### 7.00.05
|
||||
|
||||
Fixed bug that caused an error when creating a calendar birthday event.
|
||||
|
||||
### 7.00.04
|
||||
|
||||
Improved performance of `gam report users orgunit <OrgUnitPath>` when `showorgunit` is not specified.
|
||||
|
||||
Added option `birthday <Date>` to `gam <UserTypeEntity> create event <UserCalendarEntity>` that adds
|
||||
an annual recurring event to the calendar.
|
||||
|
||||
Added `birthday` to `<EventType>` for use in various calendar event commands.
|
||||
|
||||
### 7.00.03
|
||||
|
||||
Updated `gam delete ou` and `gam print admins` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
### 7.00.02
|
||||
|
||||
Added option `showlastmodification` to `gam <UserTypeEntity> print|show filecounts` that adds
|
||||
the following fields to the output: `lastModifiedFileId,lastModifiedFileName,lastModifyingUser,lastModifiedTime`;
|
||||
these are for the most recently modified file.
|
||||
|
||||
Added option `keepforever [<Boolean>]` to `gam <UserTypeEntity> update filerevisions` that allows setting
|
||||
`Keep forever` in revisions.
|
||||
|
||||
Upgraded to Python 3.12.6 where possible.
|
||||
|
||||
### 7.00.01
|
||||
|
||||
Added option `shownames` to `gam <UserTypeEntity> print|show sheet` that causes GAM
|
||||
to make an additional API call to get and display the sheet file name that is not supplied by the Sheets API.
|
||||
|
||||
### 7.00.00
|
||||
|
||||
Merged GAM-Team version
|
||||
|
||||
### 6.81.02
|
||||
|
||||
Updated `gam update group postmaster@domain.com` to handle the error that is generated.
|
||||
|
||||
### 6.81.01
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> create meetspace` that caused errors
|
||||
due to Developer Preview options being included.
|
||||
|
||||
### 6.81.00
|
||||
|
||||
Added support for groups when defining Chrome policies.
|
||||
|
||||
Added support for the Meet API.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Meet
|
||||
|
||||
Added option `countsonly` to the following course commands that displays
|
||||
the number of items in a course but not the details of the items.
|
||||
```
|
||||
gam print course-announcements
|
||||
gam print course-materials
|
||||
gam print course-submissions
|
||||
gam print course-topics
|
||||
gam print course-work
|
||||
```
|
||||
|
||||
### 6.80.21
|
||||
|
||||
Updated `gam <UserTypeEntity> archive messages` to handle the following error:
|
||||
```
|
||||
googleapiclient.errors.MediaUploadSizeError: Media larger than: 26214400
|
||||
```
|
||||
|
||||
### 6.80.20
|
||||
|
||||
Updated `gam report usage user` and `gam report users` to handle the followong error:
|
||||
Updated `gam report usage user` and `gam report users` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
@@ -25,6 +25,24 @@
|
||||
|
||||
## Definitions
|
||||
See [Collections of Items](Collections-of-Items)
|
||||
|
||||
* [Command data from Google Docs/Sheets/Storage](Command-Data-From-Google-Docs-Sheets-Storage)
|
||||
```
|
||||
<StorageBucketName> ::= <String>
|
||||
<StorageObjectName> ::= <String>
|
||||
<StorageBucketObjectName> ::=
|
||||
https://storage.cloud.google.com/<StorageBucketName>/<StorageObjectName>|
|
||||
https://storage.googleapis.com/<StorageBucketName>/<StorageObjectName>|
|
||||
gs://<StorageBucketName>/<StorageObjectName>|
|
||||
<StorageBucketName>/<StorageObjectName>
|
||||
|
||||
<UserGoogleDoc> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>)
|
||||
|
||||
<SheetEntity> ::= <String>|id:<Number>
|
||||
<UserGoogleSheet> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>) <SheetEntity>
|
||||
```
|
||||
```
|
||||
<DeliverySetting> ::=
|
||||
allmail|
|
||||
|
||||
14
docs/Home.md
14
docs/Home.md
@@ -1,8 +1,7 @@
|
||||
- [Introduction](#introduction)
|
||||
- [Requirements](#requirements)
|
||||
- [Installation - First time GAM installation](#installation---first-time-gam-installation)
|
||||
- [Installation - Upgrading from a GAM version other than a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3](#installation---upgrading-from-a-gam-version-other-than-a-prior-version-of-gamadv-x-or-gamadv-xtd-or-gamadv-xtd3)
|
||||
- [Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3](#installation---upgrading-from-a-prior-version-of-gamadv-x-or-gamadv-xtd-or-gamadv-xtd3)
|
||||
- [Installation - Upgrading from Legacy GAM](#installation---upgrading-from-legacy-gam)
|
||||
|
||||
# Introduction
|
||||
GAMADV-XTD3 is a free, open source command line tool for Google Workspace Administrators to manage domain and user settings quickly and easily.
|
||||
@@ -43,20 +42,13 @@ and all necessary authentications.
|
||||
* Configuration: [GAM Configuration](gam.cfg)
|
||||
* Install: [How to Install Advanced GAM](How-to-Install-Advanced-GAM)
|
||||
|
||||
# Installation - Upgrading from a GAM version other than a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3
|
||||
# Installation - Upgrading from Legacy GAM
|
||||
Use these steps if you have used any version of GAM in your domain. They will update your GAM project
|
||||
and all necessary authentications.
|
||||
|
||||
* Download: [Downloads-Installs](Downloads-Installs)
|
||||
* Configuration: [GAM Configuration](gam.cfg)
|
||||
* Upgrade: [How to Upgrade from Standard GAM](How-to-Upgrade-from-Standard-GAM)
|
||||
|
||||
# Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3
|
||||
Use these steps if you already use GAMADV-X or GAMADV-XTD or GAMADV-XTD3. The updates may tell you to update your GAM project
|
||||
or authentications because new features have been included.
|
||||
|
||||
* Updates: [GAM Updates]
|
||||
* Download: [Downloads-Installs](Downloads-Installs)
|
||||
* Upgrade: [How to Upgrade from Legacy GAM](How-to-Upgrade-from-Legacy-GAM)
|
||||
|
||||
You can install multiple versions of GAM and GAMADV-XTD3 in different parallel directories.
|
||||
|
||||
|
||||
120
docs/How-to-Update-Advanced-GAM-to-GAM7.md
Normal file
120
docs/How-to-Update-Advanced-GAM-to-GAM7.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Installation - Update Advanced GAM to GAM7
|
||||
|
||||
- [Downloads-Installs-GAM7](Downloads-Installs-GAM7)
|
||||
- [Linux and MacOS and Google Cloud Shell](#linux-and-mac-os-and-google-cloud-shell)
|
||||
- [Windows](#windows)
|
||||
|
||||
## Linux and MacOS and Google Cloud Shell
|
||||
|
||||
This example assumes that GAMADV-XTD3 was installed in /Users/admin/bin/gamadv-xtd3.
|
||||
If GAMADV-XTD3 was installed in another directory, substitute that value in the directions.
|
||||
|
||||
Rename install directory.
|
||||
```
|
||||
mv /Users/admin/bin/gamadv-xtd3 /Users/admin/bin/gam7
|
||||
```
|
||||
|
||||
See: [Downloads-Installs-GAM7](Downloads-Installs-GAM7)
|
||||
|
||||
You can download and install the current GAM7 release from the [GitHub Releases](https://github.com/GAM-team/GAM/releases/latest) page. Choose one of the following:
|
||||
|
||||
* Executable Archive, Automatic, Linux/Mac OS/Google Cloud Shell/Raspberry Pi/ChromeOS
|
||||
- Start a terminal session and execute one of the following commands:
|
||||
- Update to latest version, do not create project or authorizations, default path `$HOME/bin`
|
||||
- `bash <(curl -s -S -L https://git.io/gam-install) -l`
|
||||
- Update to latest version, do not create project or authorizations, specify a path
|
||||
- `bash <(curl -s -S -L https://git.io/gam-install) -l -d <Path>`
|
||||
|
||||
In these examples, the user home folder is shown as /Users/admin; adjust according to your
|
||||
specific situation; e.g., /home/administrator.
|
||||
|
||||
### Update gam alias
|
||||
You should set an alias to point to /Users/admin/bin/gam/gam so you can operate from the /Users/admin/GAMWork directory.
|
||||
Aliases aren't available in scripts, so you may want to set a symlink instead, see below.
|
||||
|
||||
Change the following line:
|
||||
```
|
||||
alias gam="/Users/admin/bin/gamadv-xtd3/gam"
|
||||
```
|
||||
to
|
||||
```
|
||||
alias gam="/Users/admin/bin/gam7/gam"
|
||||
```
|
||||
in one of these files based on your shell:
|
||||
```
|
||||
~/.bash_aliases
|
||||
~/.bash_profile
|
||||
~/.bashrc
|
||||
~/.zshrc
|
||||
~/.profile
|
||||
```
|
||||
|
||||
Issue the following command replacing `<Filename>` with the name of the file you edited:
|
||||
```
|
||||
source <Filename>
|
||||
```
|
||||
|
||||
### Set a symlink if desired
|
||||
Set a symlink in `/usr/local/bin` (or some other location on $PATH) to point to GAM.
|
||||
```
|
||||
ln -s "/Users/admin/bin/gam7/gam" /usr/local/bin/gam
|
||||
```
|
||||
|
||||
### Test
|
||||
```
|
||||
gam version
|
||||
```
|
||||
|
||||
## Windows
|
||||
|
||||
You can download and install the current GAM7 release from the [GitHub Releases](https://github.com/GAM-team/GAM/releases/latest) page.
|
||||
|
||||
This example assumes that GAMADV-XTD3 was installed in C:\GAMADV-XTD3.
|
||||
If GAMADV-XTD3 was installed in another directory, substitute that value in the directions.
|
||||
|
||||
These steps assume Command Prompt, adjust if you're using PowerShell.
|
||||
|
||||
Rename install directory.
|
||||
```
|
||||
ren C:\GAMADV-STD3 C:\GAM7
|
||||
```
|
||||
|
||||
See: [Downloads-Installs-GAM7](Downloads-Installs-GAM7)
|
||||
|
||||
* Executable Archive, Manual, Windows 64 bit
|
||||
- `gam-7.wx.yz-windows-x86_64.zip`
|
||||
- Download the archive, extract the contents into C:\GAM7.
|
||||
- Start a Command Prompt/PowerShell session.
|
||||
|
||||
* Executable Installer, Manual, Windows 64 bit
|
||||
- `gam-7.wx.yz-windows-x86_64.msi`
|
||||
- Download the installer and run it.
|
||||
- Start a Command Prompt/PowerShell session.
|
||||
|
||||
### Update system path
|
||||
You should set the system path to point to C:\GAM7 so you can operate from the C:\GAMWork directory.
|
||||
```
|
||||
Start Control Panel
|
||||
Click System
|
||||
Click Advanced system settings
|
||||
Click Environment Variables...
|
||||
Click Path under System variables
|
||||
Click Edit...
|
||||
If you have an existing entry referencing GAMADV-XTD3:
|
||||
Click that entry
|
||||
Click Delete
|
||||
If C:\GAM7 is already on the Path, skip the next three steps
|
||||
Click New
|
||||
Enter C:\GAM7
|
||||
Click OK
|
||||
Click OK
|
||||
Click OK
|
||||
Exit Control Panel
|
||||
```
|
||||
|
||||
At this point, you should restart Command Prompt so that it has the updated path and environment variables.
|
||||
|
||||
### Test
|
||||
```
|
||||
gam version
|
||||
```
|
||||
1262
docs/How-to-Upgrade-from-Legacy-GAM.md
Normal file
1262
docs/How-to-Upgrade-from-Legacy-GAM.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -251,7 +251,7 @@ writes the credentials into the file oauth2.txt.
|
||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||
admin@server:/Users/admin$ gam version
|
||||
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||
GAMADV-XTD3 6.80.20 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 7.00.02 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.5 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
@@ -923,7 +923,7 @@ writes the credentials into the file oauth2.txt.
|
||||
C:\>del C:\GAMConfig\oauth2.txt
|
||||
C:\>gam version
|
||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||
GAMADV-XTD3 6.80.20 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 7.00.02 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.5 64-bit final
|
||||
Windows-10-10.0.17134 AMD64
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
- [Display organizational unit counts](#display-organizational-unit-counts)
|
||||
- [Display indented organizational unit tree](#display-indented-organizational-unit-tree)
|
||||
- [Check organizational unit for contained items](#check-organizational-unit-for-contained-items)
|
||||
- [Delete Empty OUs](#delete-empty-ous)
|
||||
- [Special case handling for large number of organizational units](#special-case-handling-for-large-number-of-organizational-units)
|
||||
|
||||
## API documentation
|
||||
@@ -321,6 +322,17 @@ You can inspect the file and execute it if desired; substitute actual filenames
|
||||
gam redirect stdout CleanOuLog.txt multiproces redirect stderr stdout batch CleanOuBatch.txt
|
||||
```
|
||||
|
||||
### Delete Empty OUs
|
||||
```
|
||||
# Get list of OUs
|
||||
gam redirect csv ./OUs.csv print ous
|
||||
# Check status of each OU
|
||||
gam redirect csv ./CheckOUs.csv multiprocess redirect stderr - multiprocess csv OUs.csv gam check ou "~orgUnitId"
|
||||
# Delete empty OUs
|
||||
gam config csv_input_row_filter "empty:boolean:true" redirect stdout ./DeleteEmptyOUs.txt multiprocess redirect stderr stdout csv CheckOUs.csv gam delete ou "~orgUnitId"
|
||||
```
|
||||
Repeat the steps until no empty OUs remain.
|
||||
|
||||
## Special case handling for large number of organizational units
|
||||
|
||||
By default, the `print orgs` and `show orgtree` commands issue a single API call to get the
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Scripts
|
||||
|
||||
These scripts can be used to enhance GAM's capabilities; all are supported with Advanced GAM,
|
||||
many are supported with Standard GAM. They require that Python 3 be installed on you computer.
|
||||
many are supported with Legacy GAM. They require that Python 3 be installed on you computer.
|
||||
|
||||
* https://github.com/taers232c/GAM-Scripts3
|
||||
* https://www.python.org/
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
- [Delete a Shared Drive](#delete-a-shared-drive)
|
||||
- [Change Shared Drive visibility](#change-shared-drive-visibility)
|
||||
- [Display Shared Drives](#display-shared-drives)
|
||||
- [Display List of Shared Drives in an Organizational Unit other than /](#display-list-of-shared-drives-in-an-organizational-unit-other-than-)
|
||||
- [Display List of Shared Drives in an Organizational Unit](#display-list-of-shared-drives-in-an-organizational-unit)
|
||||
- [Display all Shared Drives with no organizers](#display-all-shared-drives-with-no-organizers)
|
||||
- [Display all Shared Drives with a specific organizer](#display-all-shared-drives-with-a-specific-organizer)
|
||||
@@ -411,40 +412,20 @@ Substitute actual email address for `organizer@domain.com`.
|
||||
gam config csv_output_header_filter "id,name" print teamdriveacls pm emailaddress organizer@domain.com role organizer em pma skip pmselect
|
||||
```
|
||||
|
||||
## Display List of Shared Drives in an Organizational Unit other than /
|
||||
Get the orgUnitID of OU / and use it (without the id:) in the print|show command. Adjust fields as desired.
|
||||
```
|
||||
gam info ou / nousers
|
||||
gam show teamdrives query "orgUnitId!='00gjdgxs2p9cxyz'" fields id,name,orgunit,createdtime
|
||||
gam print teamdrives query "orgUnitId!='00gjdgxs2p9cxyz'" fields id,name,orgunit,createdtime
|
||||
```
|
||||
|
||||
## Display List of Shared Drives in an Organizational Unit
|
||||
To use this command you must add the `Cloud Identity API` to your project and authorize
|
||||
the appropriate scope: `Cloud Identity OrgUnits API`.
|
||||
|
||||
You'll have to do `gam update project` and `gam oauth create` to enable this command.
|
||||
|
||||
Get the orgUnitID of the desired OU and use it (without the id:) in the print|show command. Adjust fields as desired.
|
||||
```
|
||||
gam show oushareddrives
|
||||
[ou|org|orgunit <OrgUnitPath>]
|
||||
[formatjson]
|
||||
```
|
||||
If `ou|org|orgunit <OrgUnitPath>` is not specified, `/` is used.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam print oushareddrives [todrive <ToDriveAttribute>*]
|
||||
[ou|org|orgunit <OrgUnitPath>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
If `ou|org|orgunit <OrgUnitPath>` is not specified, `/` is used.
|
||||
|
||||
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.
|
||||
|
||||
### Get clean, simple output
|
||||
```
|
||||
gam config csv_output_header_filter "driveId,driveName,orgUnitPath" print oushareddrives [ou <OrgUnitPath>]
|
||||
gam info ou <OrgUnitPath> nousers
|
||||
gam show teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||
gam print teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||
```
|
||||
|
||||
## Manage Shared Drive access
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
* https://developers.google.com/calendar/v3/reference/events
|
||||
* https://developers.google.com/calendar/v3/reference/events/import
|
||||
* https://developers.google.com/calendar/api/guides/working-hours-and-location
|
||||
* https://developers.google.com/calendar/api/guides/event-types#birthday
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
@@ -241,6 +242,7 @@
|
||||
```
|
||||
```
|
||||
<EventType> ::=
|
||||
birthday|
|
||||
default|
|
||||
focustime|
|
||||
fromgmail|
|
||||
@@ -306,6 +308,7 @@
|
||||
(attendee <EmailAddress>)|
|
||||
(attendeestatus [<AttendeeAttendance>] [<AttendeeStatus>] <EmailAddress>)|
|
||||
available|
|
||||
(birthday <Date>)|
|
||||
(color <EventColorName>)|
|
||||
(colorindex|colorid <EventColorIndex>)|
|
||||
(description <String>)|
|
||||
@@ -326,7 +329,7 @@
|
||||
(privateproperty <PropertyKey> <PropertyValue>)|
|
||||
(range <Date> <Date>)|
|
||||
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
||||
(reminder <Number> email|popup))|
|
||||
(reminder <Number> email|popup)|
|
||||
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
||||
(sequence <Integer>)|
|
||||
(sharedproperty <PropertyKey> <PropertyValue>)|
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Users - Chat
|
||||
- [API documentation](#api-documentation)
|
||||
- [Introduction](#introduction)
|
||||
- [Developer Preview Admin Access](#developer-preview-admin-access)
|
||||
- [Set up a Chat Bot](#set-up-a-chat-bot)
|
||||
- [Definitions](#definitions)
|
||||
- [Chat Space Permissions](#chat-space-permissions)
|
||||
- [Manage Chat Spaces](#manage-chat-spaces)
|
||||
- [Display Chat Spaces](#display-chat-spaces)
|
||||
- [Manage Chat Members](#manage-chat-members)
|
||||
@@ -20,7 +20,9 @@
|
||||
* https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/list
|
||||
* https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.spaceEvents/list
|
||||
* https://support.google.com/chat/answer/7655820
|
||||
* https://support.google.com/a/answer/13369245
|
||||
* https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
* https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces#Space.FIELDS.predefined_permission_settings
|
||||
|
||||
## Introduction
|
||||
These features were added in version 6.60.00.
|
||||
@@ -30,36 +32,11 @@ To use these commands you must update your service account authorization.
|
||||
gam user user@domain.com update serviceaccount
|
||||
|
||||
[*] 4) Chat API - Memberships (supports readonly)
|
||||
[*] 5) Chat API - Memberships Admin (supports readonly)
|
||||
[*] 6) Chat API - Messages (supports readonly)
|
||||
[*] 7) Chat API - Spaces (supports readonly)
|
||||
[*] 9) Chat API - Spaces Delete
|
||||
|
||||
```
|
||||
|
||||
## Developer Preview Admin Access
|
||||
The Chat API Developer Preview allows an admin to perform certain actions
|
||||
on all Chat Spaces. These commands were added in version 6.77.00.
|
||||
|
||||
You must be enrolled in the Developer Preview program for the CHAT API to use these commands.
|
||||
|
||||
```
|
||||
gam <UserItem> delete chatspace asadmin
|
||||
gam <UserItem> update chatspace asadmin
|
||||
gam <UserItem> info chatspace asadmin
|
||||
gam <UserItem> print|show chatspaces asadmin
|
||||
gam <UserItem> create chatmember asadmin
|
||||
gam <UserItem> delete|remove chatmember asadmin
|
||||
gam <UserItem> update|modify chatmember asadmin
|
||||
gam <UserItem> sync chatmembers asadmin
|
||||
gam <UserItem> info chatmember asadmin
|
||||
gam <UserItem> print|show chatmembers|asadmin
|
||||
```
|
||||
To use these commands you must update your service account authorization.
|
||||
```
|
||||
gam user user@domain.com update serviceaccount
|
||||
|
||||
[*] 5) Chat API - Memberships Admin (supports readonly)
|
||||
[*] 8) Chat API - Spaces Admin (supports readonly)
|
||||
[*] 9) Chat API - Spaces Delete
|
||||
[*] 10) Chat API - Spaces Delete Admin
|
||||
```
|
||||
|
||||
@@ -71,15 +48,6 @@ Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
||||
* Default: False
|
||||
```
|
||||
|
||||
If your account is not enrolled in the Chat API Developer Preview, you will see errors like this:
|
||||
```
|
||||
$ gam user admin@domain.com show chatspaces asadmin
|
||||
Getting all Chat Spaces that match query (customer = "customers/my_customer" AND spaceType = "SPACE") for admin@domain.com(asadmin)
|
||||
Chat Admin: admin@domain.com(asadmin), Show Failed: Method not found.
|
||||
```
|
||||
|
||||
To enroll in the Developer Preview program, see: https://developers.google.com/workspace/preview
|
||||
|
||||
Google requires that you have a Chat Bot configured in order to use the Chat API; set up a Chat Bot as described in the next section.
|
||||
|
||||
## Set up a Chat Bot
|
||||
@@ -139,6 +107,7 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
lastactivetime|
|
||||
membershipcount|
|
||||
name|
|
||||
permissionsettings|
|
||||
singleuserbotdm|
|
||||
spacedetails|
|
||||
spacehistorystate|
|
||||
@@ -188,11 +157,36 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
|
||||
```
|
||||
|
||||
## Chat Space Permissions
|
||||
### Announcement
|
||||
| Keyword | Description | Allowed | Default |
|
||||
|---------|-------------|---------|---------|
|
||||
| manageapps | Manage apps | managers-immutable | managers |
|
||||
| managemembersandgroups | Manage members and groups | managers/members | managers |
|
||||
| managewebhooks | Manage web hooks | managers-immutable | managers |
|
||||
| modifyspacedetails | Modify space details | managers/members | managers |
|
||||
| postmessages | Post messages | managers-immutable | managers |
|
||||
| replymessages | Reply messages | members/managers | members |
|
||||
| togglehistory | Turn history on and off | managers/members | managers |
|
||||
| useatmentionall | Use @all | managers-immutable | managers |
|
||||
|
||||
### Collaboration
|
||||
| Keyword | Description | Allowed | Default |
|
||||
|---------|-------------|---------|---------|
|
||||
| manageapps | Manage apps | members-immutable | members |
|
||||
| managemembersandgroups | Manage members and groups | managers/members | members |
|
||||
| managewebhooks | Manage web hooks | managers/members | members |
|
||||
| modifyspacedetails | Modify space details | managers/members | members |
|
||||
| postmessages | Post messages | members-immutable | members |
|
||||
| replymessages | Reply messages | members-immutable | members |
|
||||
| togglehistory | Turn history on and off | managers/members | members |
|
||||
| useatmentionall | Use @all | managers/members | members |
|
||||
|
||||
## Manage Chat Spaces
|
||||
### Create a chat space
|
||||
```
|
||||
gam <UserTypeEntity> create chatspace
|
||||
[type <ChatSpaceType>]
|
||||
[type <ChatSpaceType>] [announcement|collaboration]
|
||||
[restricted|(audience <String>)]
|
||||
[externalusersallowed <Boolean>]
|
||||
[members <UserTypeEntity>]
|
||||
@@ -208,6 +202,7 @@ For `type space`, the following apply:
|
||||
* `description <String>` - Optional
|
||||
* `guidelines <String>` - Optional
|
||||
* `history <Boolean>` - Optional
|
||||
* `announcement|collaboration` - Initial permission settings; default is `collaboration`; this is in Developer Preview
|
||||
|
||||
For `type groupchat`, the following apply:
|
||||
* `members <UserTypeEntity>` - Required, must specify between 2 and 20 users
|
||||
@@ -229,8 +224,6 @@ By default, Gam displays the information about the created chatspace as an inden
|
||||
|
||||
Use the `<ChatContent>` option to send an initial message to the created chatspace.
|
||||
|
||||
The `restricted|audience` options are in Developer Preview and will not be generally available.
|
||||
|
||||
By default, details about the chatmessage are displayed.
|
||||
* `returnidonly` - Display the chatmessage name only
|
||||
|
||||
@@ -242,12 +235,29 @@ gam <UserTypeEntity> update chatspace <ChatSpace>
|
||||
[type space]
|
||||
[description <String>] [guidelines|rules <String>]
|
||||
[history <Boolean>])
|
||||
[managemembersandgroups managers|members]
|
||||
[modifyspacedetails managers|members]
|
||||
[togglehistory managers|members]
|
||||
[useatmentionall managers|members]
|
||||
[manageapps managers|members]
|
||||
[managewebhooks managers|members]
|
||||
[replymessages managers|members]
|
||||
[formatjson]
|
||||
```
|
||||
A groupchat space can be upgraded to a space by specifying `type space` and `displayname <String>`.
|
||||
|
||||
The `restricted|audience` options can not be combined with options `displayname,type,description,guidelines,history`.
|
||||
They are in Developer Preview and will not be generally available.
|
||||
|
||||
You can manage permissions for chat spaces with the following options that are available with Developer Preview.
|
||||
[managemembersandgroups managers|members]
|
||||
[modifyspacedetails managers|members]
|
||||
[togglehistory managers|members]
|
||||
[useatmentionall managers|members]
|
||||
[manageapps managers|members]
|
||||
[managewebhooks managers|members]
|
||||
[postmessages managers|members]
|
||||
[replymessages managers|members]
|
||||
|
||||
|
||||
By default, Gam displays the information about the created chatspace as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
@@ -265,7 +275,6 @@ gam <UserItem> update chatspace asadmin <ChatSpace>
|
||||
A groupchat space can be upgraded to a space by specifying `type space` and `displayname <String>`.
|
||||
|
||||
The `restricted|audience` options can not be combined with options `displayname,type,description,guidelines,history`.
|
||||
They are in Developer Preview and will not be generally available.
|
||||
|
||||
By default, Gam displays the information about the created chatspace as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
@@ -398,7 +407,6 @@ When using the `formatjson` option, double quotes are used extensively in the da
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
|
||||
## Manage Chat Members
|
||||
### Add members to a user's chat space
|
||||
```
|
||||
|
||||
@@ -693,7 +693,8 @@ gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[showsize] [showmimetypesize] (addcsvdata <FieldName> <String>)*
|
||||
[showsize] [showmimetypesize] [showlastmodification]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[summary none|only|plus] [summaryuser <String>]
|
||||
gam <UserTypeEntity> show filecounts
|
||||
[((query <QueryDriveFile>) | (fullquery <QueryDriveFile>) | <DriveFileQueryShortcut>)
|
||||
@@ -707,13 +708,13 @@ gam <UserTypeEntity> show filecounts
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[showsize] [showmimetypesize]
|
||||
[showsize] [showmimetypesize] [showlastmodification]
|
||||
[summary none|only|plus] [summaryuser <String>]
|
||||
```
|
||||
|
||||
By default, print filecounts displays counts of all files owned by the specified [`<UserTypeEntity>`](Collections-of-Users).
|
||||
|
||||
The option `continueoninvalidquery [<Boolean>] can be used in special cases where a query of the form
|
||||
The option `continueoninvalidquery [<Boolean>] can be used in special cases where a query of the form
|
||||
`query "'labels/mRoha85IbwCRl490E00xGLvBsSbkwIiuZ6PRNNEbwxyz' in labels" causes Google to issue an error
|
||||
saying that the query is invalid when, in fact, it is but the user does not have a license that suppprts drive file labels.
|
||||
When `continueoninvalidquery` is true, GAM prints an error message and proceeds to the next user rather that terminating
|
||||
@@ -721,7 +722,11 @@ as it does now. Of course, if the query really is invalid, you will get the mess
|
||||
|
||||
The `showsize` option displays the total size (in bytes) of the files counted.
|
||||
|
||||
The showmimetypesize' displays the total size (in bytes) of each MIME type counted.
|
||||
The `showmimetypesize` option displays the total size (in bytes) of each MIME type counted.
|
||||
|
||||
The option `showlastmodification` displays the following fields:
|
||||
`lastModifiedFileId,lastModifiedFileName,lastModifyingUser,lastModifiedTime`;
|
||||
these are for the most recently modified file.
|
||||
|
||||
For print filecouts, add additional columns of data from the command line to the output:
|
||||
* `addcsvdata <FieldName> <String>` - Add additional columns of data from the command line to the output
|
||||
|
||||
@@ -208,7 +208,7 @@ If `noduplicate` is specfied, GAM will issue a warning and not perform the creat
|
||||
exists in the parent folder.
|
||||
|
||||
By default, when files are uploaded from local content, they are created with `binary` format, i.e., the data is uploaded
|
||||
without any conversion. Standard GAM had an option `convert` that was passed to the Drive API v2 that it used.
|
||||
without any conversion. Legacy GAM had an option `convert` that was passed to the Drive API v2 that it used.
|
||||
* convert - Whether to convert this file to the corresponding Docs Editors format
|
||||
|
||||
Advanced GAM uses Drive API v3 that doesn't support the `convert` option; it uses the `mimetype` argument to cause conversions.
|
||||
|
||||
@@ -85,6 +85,8 @@ gam <UserTypeEntity> update filerevisions <DriveFileEntity> select <DriveFileRev
|
||||
```
|
||||
When `select <DriveFileRevisionIDEntity>` is omitted, all revisions are updated.
|
||||
|
||||
* `keepforever true` - Keep revision forever, even if it is no longer the head revision
|
||||
* `keepforever false` - Do not keep revision forever
|
||||
* `published true` - Publish these revision to the web
|
||||
* `published false` - Do not publish these revision to the web
|
||||
* `publishauto true` - Automaticaly publish subsequent revisions to the web
|
||||
|
||||
@@ -17,6 +17,8 @@ To use these commands you must add the 'Looker Studio API' to your project and u
|
||||
```
|
||||
gam update project
|
||||
gam user user@domain.com check serviceaccount
|
||||
...
|
||||
[*] 35) Looker Studio API (supports readonly)
|
||||
```
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
|
||||
174
docs/Users-Meet.md
Normal file
174
docs/Users-Meet.md
Normal file
@@ -0,0 +1,174 @@
|
||||
# Users - Meet
|
||||
- [API documentation](#api-documentation)
|
||||
- [Query documentation](#query-documentation)
|
||||
- [Introduction](#introduction)
|
||||
- [Definitions](#definitions)
|
||||
- [Manage Meet Spaces](#manage-meet-spaces)
|
||||
- [Display Meet Conferences](#display-meet-conferences)
|
||||
- [Display Meet Participants](#display-meet-participants)
|
||||
- [Display Meet Recordings](#display-meet-recordings)
|
||||
- [Display Meet Transcripts](#display-meet-transcripts)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/meet/api/reference/rest/v2
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/spaces
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.participants
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.recordings
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.transcripts
|
||||
|
||||
## Query documentation
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords/list
|
||||
* https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.participants/list
|
||||
|
||||
## Introduction
|
||||
These features were added in version 6.81.00.
|
||||
|
||||
To use these commands you must add the 'Meet API' to your project and update your service account authorization.
|
||||
```
|
||||
gam update project
|
||||
gam user user@domain.com update serviceaccount
|
||||
...
|
||||
[*] 36) Meet API (supports readonly)
|
||||
|
||||
```
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
```
|
||||
<MeetConferenceName> ::= conferenceRecords/<String>
|
||||
<MeetSpaceName> ::= spaces/<String> | <String>
|
||||
<MeetSpaceOptions> ::=
|
||||
accesstype open|trusted|restricted |
|
||||
entrypointaccess all|creatorapponly
|
||||
```
|
||||
|
||||
## Manage Meet Spaces
|
||||
### Create a meet space
|
||||
```
|
||||
gam <UserTypeEntity> create meetspace
|
||||
<MeetSpaceOptions>*
|
||||
[formatjson|returnidonly]
|
||||
```
|
||||
By default, Gam displays the information about the created meetspace as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
* `returnidonly` - Display the meetspace name only
|
||||
|
||||
### Update a meet space
|
||||
```
|
||||
gam <UserTypeEntity> update meetspace <MeetSpaceName>
|
||||
<MeetSpaceOptions>*
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information about the created meetspace as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
### Display information about a specific meet space for a user
|
||||
```
|
||||
gam <UserTypeEntity> info meetspace <MeetSpaceName>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
### End a meet space conference
|
||||
```
|
||||
gam <UserTypeEntity> end meetconference <MeetSpaceName>
|
||||
```
|
||||
|
||||
## Display Meet Conferences
|
||||
```
|
||||
gam <UserItem> show meetconferences
|
||||
[space <MeetSpaceName>] [code <String>]
|
||||
[andquery|orquery <String>] [querytime<String> <Time>]
|
||||
[formatjson]
|
||||
```
|
||||
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
|
||||
* `code <String>` - Display conferences for a specifc space by giving its code
|
||||
|
||||
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.
|
||||
```
|
||||
gam <UserItem> print meetconferences [todrive <ToDriveAttribute>*]
|
||||
[space <MeetSpaceName>] [code <String>]
|
||||
[andquery|orquery <String>] [querytime<String> <Time>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
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
|
||||
* `code <String>` - Display conferences for a specifc 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,
|
||||
* `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 Meet Participants
|
||||
```
|
||||
gam <UserItem> show meetparticipants <MeetConferenceName>
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information about the meet participants as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam <UserItem> print meetparticipants <MeetConferenceName> [todrive <ToDriveAttribute>*]
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[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 Meet Recordings
|
||||
```
|
||||
gam <UserItem> show meetrecordings <MeetConferenceName>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information about the meet recordings as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam <UserItem> print meetrecordings <MeetConferenceName> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
|
||||
## Display Meet Transcripts
|
||||
```
|
||||
gam <UserItem> show meettranscripts <MeetConferenceName>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information about the meet transcripts as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam <UserItem> print meettranscripts <MeetConferenceName> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
@@ -125,8 +125,15 @@ gam user user@domain.com check serviceaccount
|
||||
(subject <String>)|
|
||||
(suffix <String>)|
|
||||
(userdefinedfield clear|(<String> <String>))|
|
||||
(website clear|(app_install_page|blog|ftp|home|home_page|other|profile|reservations|work|<String> <URL> notprimary|primary))
|
||||
(url|website clear|(app_install_page|blog|ftp|home|home_page|other|profile|reservations|work|<String> <URL> notprimary|primary))
|
||||
|
||||
For address, email, phone and url, the type <String> can be empty.
|
||||
address "" formatted "My Address" primary
|
||||
email "" user@gmail.com primary
|
||||
phone "" "510-555-1212" primary
|
||||
url "" "https://www.domain.com" primary
|
||||
```
|
||||
```
|
||||
<PeopleFieldName> ::=
|
||||
addresses|
|
||||
ageranges|
|
||||
|
||||
@@ -231,18 +231,24 @@ gam user testuser@domain.com update sheet <DriveFileItem> json file Sheet.json
|
||||
gam <UserTypeEntity> info|show sheet <DriveFileEntity>
|
||||
[fields <SpreadsheetFieldList>] [sheetsfields <SpreadsheetSheetsFieldList>]
|
||||
(range <SpreadsheetRange>)* (rangelist <SpreadsheetRangeList>)*
|
||||
[includegriddata [<Boolean>]]
|
||||
[includegriddata [<Boolean>]] [shownames]
|
||||
[formatjson]
|
||||
```
|
||||
By default, the Sheets API does not return the sheet file name, use the `shownames` option to have GAM
|
||||
make an additional API call to get and display the sheet file name.
|
||||
|
||||
The output is formatted for human readability. Use the following option to produce JSON output for program parsing.
|
||||
* `formatjson` - Display output in JSON format.
|
||||
```
|
||||
gam <UserTypeEntity> print sheet <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
[fields <SpreadsheetFieldList>] [sheetsfields <SpreadsheetSheetsFieldList>]
|
||||
(range <SpreadsheetRange>)* (rangelist <SpreadsheetRangeList>)*
|
||||
[includegriddata [<Boolean>]]
|
||||
[includegriddata [<Boolean>]] [shownames]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the Sheets API does not return the sheet file name, use the `shownames` option to have GAM
|
||||
make an additional API call to get and display the sheet file name.
|
||||
|
||||
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.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Users
|
||||
- [API documentation](#api-documentation)
|
||||
- [Name guidelines](#name-guidelines)
|
||||
- [Query documentation](#query-documentation)
|
||||
- [Name guidelines](#name-guidelines)
|
||||
- [Quoting rules](#quoting-rules)
|
||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function and Search function
|
||||
- [Definitions](#definitions)
|
||||
@@ -46,12 +46,12 @@
|
||||
* https://developers.google.com/admin-sdk/directory/reference/rest/v1/users
|
||||
* https://developers.google.com/admin-sdk/directory/reference/rest/v1/schemas
|
||||
|
||||
## Name guidelines
|
||||
* https://support.google.com/a/answer/9193374
|
||||
|
||||
## Query documentation
|
||||
* https://developers.google.com/admin-sdk/directory/v1/guides/search-users
|
||||
|
||||
## Name guidelines
|
||||
* https://support.google.com/a/answer/9193374
|
||||
|
||||
## Quoting rules
|
||||
Items in a list can be separated by commas or spaces; if an item itself contains a comma, a space or a single quote, special quoting must be used.
|
||||
Typically, you will enclose the entire list in double quotes and quote each item in the list as detailed below.
|
||||
@@ -80,6 +80,22 @@ queries "`"orgUnitPath=\'/Students/Lower\ School/2027\'`",`"orgUnitPath=\'/Stude
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
* [Command data from Google Docs/Sheets/Storage](Command-Data-From-Google-Docs-Sheets-Storage)
|
||||
```
|
||||
<StorageBucketName> ::= <String>
|
||||
<StorageObjectName> ::= <String>
|
||||
<StorageBucketObjectName> ::=
|
||||
https://storage.cloud.google.com/<StorageBucketName>/<StorageObjectName>|
|
||||
https://storage.googleapis.com/<StorageBucketName>/<StorageObjectName>|
|
||||
gs://<StorageBucketName>/<StorageObjectName>|
|
||||
<StorageBucketName>/<StorageObjectName>
|
||||
|
||||
<UserGoogleDoc> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>)
|
||||
|
||||
<SheetEntity> ::= <String>|id:<Number>
|
||||
<UserGoogleSheet> ::=
|
||||
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>) <SheetEntity>
|
||||
```
|
||||
```
|
||||
<DeliverySetting> ::=
|
||||
allmail|
|
||||
abridged|daily|
|
||||
@@ -736,7 +752,7 @@ When updating a user's password, you can send a message with the new password to
|
||||
|
||||
In versions of GAMADV-XTD3 prior to 5.07.00, if you do `gam update users <UserTypeEntity>` or `gam <UserTypeEntity> update users` and
|
||||
specify `password random`, all of the users in `<UserTypeEntity>` are assigned the same random password;
|
||||
this is the same behavior as in Standard GAM. If you would like each of the users in `<UserTypeEntity>` to be
|
||||
this is the same behavior as in Legacy GAM. If you would like each of the users in `<UserTypeEntity>` to be
|
||||
assigned a unique random password, specify `password uniquerandom`.
|
||||
|
||||
If you update a user with `password random|uniquerandom`, the `lograndompassword <FileName>` option causes GAM
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
gam version
|
||||
GAMADV-XTD3 6.80.20 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 7.00.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.5 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
||||
Print the current version of Gam with details and time offset information
|
||||
```
|
||||
gam version timeoffset
|
||||
GAMADV-XTD3 6.80.20 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 7.00.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.5 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
||||
Print the current version of Gam with extended details and SSL information
|
||||
```
|
||||
gam version extended
|
||||
GAMADV-XTD3 6.80.20 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 7.00.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.5 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 6.80.20
|
||||
Latest: 7.00.08
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@@ -72,7 +72,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
6.80.20
|
||||
7.00.08
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@@ -82,7 +82,7 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
gam help
|
||||
GAM 6.80.20 - https://github.com/taers232c/GAMADV-XTD3
|
||||
GAM 7.00.08 - https://github.com/taers232c/GAMADV-XTD3
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.5 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
|
||||
@@ -3,9 +3,9 @@ Update History
|
||||
|
||||
Installation
|
||||
* [How to Install Advanced GAM](How-to-Install-Advanced-GAM)
|
||||
* [How to Update Advanced GAM to GAM7](How-to-Update-Advanced-GAM-to-GAM7)
|
||||
* [How to Update Advanced GAM](How-to-Update-Advanced-GAM)
|
||||
* [How to Upgrade from Standard GAM](How-to-Upgrade-from-Standard-GAM)
|
||||
* [How to Upgrade from GAMADV-X or GAMADV-XTD](How-to-Upgrade-from-GAMADV-X-or-GAMADV-XTD)
|
||||
* [How to Upgrade from Legacy GAM](How-to-Upgrade-from-Legacy-GAM)
|
||||
* [Install GAM as Python Library](Install-GAM-as-Python-Library)
|
||||
* [GAMADV-XTD3 on Chrome OS Devices](GAMADV-XTD3-on-Chrome-OS-Devices)
|
||||
* [GAMADV-XTD3 on Android Devices](GAMADV-XTD3-on-Android-Devices)
|
||||
@@ -155,6 +155,8 @@ Service Account Access
|
||||
* [Users - Group Membership](Users-Group-Membership)
|
||||
* [Users - Keep](Users-Keep)
|
||||
* [Users - Looker Studio](Users-Looker-Studio)
|
||||
* [Users - Meet](Users-Meet)
|
||||
* [Users - Classroom - Profile](Users-Classroom-Profile)
|
||||
* [Users - People - Contacts & Profiles](Users-People-Contacts-Profiles)
|
||||
* [Users - Photo](Users-Photo)
|
||||
* [Users - Profile Sharing](Users-Profile-Sharing)
|
||||
|
||||
@@ -944,11 +944,11 @@ domain = goo.com
|
||||
customer_id = my_customer
|
||||
config_dir = goo
|
||||
```
|
||||
### Existing clients that have been accessed with Standard GAM.
|
||||
### Existing clients that have been accessed with Legacy GAM.
|
||||
You have two clients: foo and goo.
|
||||
Make sub-directories foo and goo in the same folder/directory as gam.cfg.
|
||||
For each client, copy the client_secrets.json and oauth2service.json files from their Standard GAM location
|
||||
to the appropriate sub-directory. If the Standard Gam files do not have these names,
|
||||
For each client, copy the client_secrets.json and oauth2service.json files from their Legacy GAM location
|
||||
to the appropriate sub-directory. If the Legacy Gam files do not have these names,
|
||||
rename them after copying them to the sub-directory.
|
||||
|
||||
Perform the following commands for each client (replace xxx with foo and goo).
|
||||
|
||||
@@ -1594,6 +1594,7 @@ gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
|
||||
<EventType> ::=
|
||||
birthday|
|
||||
default|
|
||||
focustime|
|
||||
fromgmail|
|
||||
@@ -2047,6 +2048,7 @@ gam setup chat
|
||||
lastactivetime|
|
||||
membershipcount|
|
||||
name|
|
||||
permissionsettings|
|
||||
singleuserbotdm|
|
||||
spacedetails|
|
||||
spacehistorystate|
|
||||
@@ -2599,19 +2601,21 @@ gam create chromepolicyimage <ChromePolicyImageSchemaName> <FileName>
|
||||
|
||||
gam update chromepolicy [convertcrnl]
|
||||
(<SchemaName> ((<Field> <Value>)+ | <JSONData>))+
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
((ou|orgunit <OrgUnitItem>)|(cigroup <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
gam delete chromepolicy
|
||||
(<SchemaName> [<JSONData>])+
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
((ou|orgunit <OrgUnitItem>)|(cigroup <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
gam show chromepolicies
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
[filter <String>] [namespace <NamespaceList>]
|
||||
[show all|direct|inherited]
|
||||
((ou|orgunit <OrgUnitItem> [show all|direct|inherited])|(cigroup <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
(filter <StringList>)* (namespace <NamespaceList>)*
|
||||
[formatjson]
|
||||
gam print chromepolicies [todrive <ToDriveAttribute>*]
|
||||
ou|org|orgunit <OrgUnitItem> [(printerid <PrinterID>)|(appid <AppID>)]
|
||||
[filter <String>] [namespace <NamespaceList>]
|
||||
[show all|direct|inherited]
|
||||
((ou|orgunit <OrgUnitItem> [show all|direct|inherited])|(cigroup <GroupItem>))
|
||||
[(printerid <PrinterID>)|(appid <AppID>)]
|
||||
(filter <StringList>)* (namespace <NamespaceList>)*
|
||||
[[formatjson [quotechar <Character>]]
|
||||
|
||||
<ChromePolicySchemaFieldName> ::=
|
||||
@@ -3144,36 +3148,36 @@ gam print course-announcements [todrive <ToDriveAttribute>*]
|
||||
(announcementids <CourseAnnouncementIDEntity>)|((announcementstates <CourseAnnouncementStateList>)*
|
||||
(orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
|
||||
[showcreatoremails|creatoremail] [fields <CourseAnnouncementFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
gam print course-materials [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
(materialids <CourseMaterialIDEntity>)|((materialstates <CourseMaterialStateList>)*
|
||||
(orderby <CourseMaterialOrderByFieldName> [ascending|descending])*)
|
||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseMaterialFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
gam print course-submissions [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
(workids <CourseWorkIDEntity>)|((workstates <CourseWorkStateList>)*
|
||||
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
||||
(submissionids <CourseSubmissionIDEntity>)|((submissionstates <CourseSubmissionStateList>)*) [late|notlate]
|
||||
[fields <CourseSubmissionFieldNameList>]
|
||||
[formatjson [quotechar <Character>]] [showuserprofile]
|
||||
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
gam print course-topics [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
[topicids <CourseTopicIDEntity>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[timefilter updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
gam print course-works [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||
(workids <CourseWorkIDEntity>)|((workstates <CourseWorkStateList>)*
|
||||
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseWorkFieldNameList>]
|
||||
[showstudentsaslist [<Boolean>]] [delimiter <Character>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
[countsonly] [formatjson [quotechar <Character>]]
|
||||
|
||||
# Classroom - Invitations
|
||||
|
||||
@@ -3539,11 +3543,11 @@ gam [<UserTypeEntity>] show drivelabels
|
||||
[formatjson] [adminaccess|asadmin]
|
||||
`
|
||||
gam [<UserTypeEntity>] create drivelabelpermission <DriveLabelNameEntity>
|
||||
(user <UserItem>) | (group <GroupItem) | (audience <String>)
|
||||
(user <UserItem>) | (group <GroupItem>) | (audience <String>)
|
||||
role applier|editor|organizer|reader
|
||||
[formatjson] [adminaccess|asadmin]
|
||||
gam [<UserTypeEntity>] delete drivelabelpermission <DriveLabelNameEntity>
|
||||
(user <UserItem>) | (group <GroupItem) | (audience <String>)
|
||||
(user <UserItem>) | (group <GroupItem>) | (audience <String>)
|
||||
[adminaccess|asadmin]
|
||||
gam [<UserTypeEntity>] remove drivelabelpermission <DriveLabelPermissionNameEntity>
|
||||
[adminaccess|asadmin]
|
||||
@@ -5845,6 +5849,7 @@ gam <UserTypeEntity> transfer calendars|seccals <UserItem> [<UserCalendarEntity>
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
|
||||
<EventType> ::=
|
||||
birthday|
|
||||
default|
|
||||
focustime|
|
||||
outofoffice|
|
||||
@@ -5894,13 +5899,15 @@ gam <UserTypeEntity> transfer calendars|seccals <UserItem> [<UserCalendarEntity>
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
|
||||
<EventAttribute> ::=
|
||||
(allday <Date>)|
|
||||
(anyonecanaddself [<Boolean>])|
|
||||
(attachment <String> <URL>)|
|
||||
(attendee <EmailAddress>)|
|
||||
(attendeestatus [<AttendeeAttendance>] [<AttendeeStatus>] <EmailAddress>)|
|
||||
available|
|
||||
(birthday <Date>)|
|
||||
(color <EventColorName>)|
|
||||
(colorindex|colorid <EventColorIndex>))|
|
||||
(colorindex|colorid <EventColorIndex>)|
|
||||
(description <String>)|
|
||||
(end|endtime (allday <Date>)|<Time>)|
|
||||
(guestscaninviteothers <Boolean>)|
|
||||
@@ -5910,14 +5917,16 @@ gam <UserTypeEntity> transfer calendars|seccals <UserItem> [<UserCalendarEntity>
|
||||
guestscantseeotherguests|
|
||||
hangoutsmeet|
|
||||
<JSONData>|
|
||||
(jsonattendees [charset <Charset>] <String>)|(jsonattendees file <FileName> [charset <Charset>])|
|
||||
(jsonattendees [charset <Charset>] <String>)|
|
||||
(jsonattendees file <FileName> [charset <Charset>])|
|
||||
(location <String>)|
|
||||
(noreminders|(reminder email|popup <Number>))|
|
||||
(optionalattendee <EmailAddress>)|
|
||||
(originalstart|originalstarttime (allday <Date>)|<Time>)|
|
||||
(privateproperty <PropertyKey> <PropertyValue>)|
|
||||
(range <Date> <Date>)|
|
||||
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
||||
(reminder <Number> email|popup))|
|
||||
(reminder <Number> email|popup)|
|
||||
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
||||
(sequence <Integer>)|
|
||||
(sharedproperty <PropertyKey> <PropertyValue>)|
|
||||
@@ -5926,6 +5935,7 @@ gam <UserTypeEntity> transfer calendars|seccals <UserItem> [<UserCalendarEntity>
|
||||
(status confirmed|tentative|cancelled)|
|
||||
(summary <String>)|
|
||||
tentative|
|
||||
(timerange <Time> <Time>)|
|
||||
(timezone <TimeZone>)|
|
||||
(transparency opaque|transparent)|
|
||||
(visibility default|public|private)
|
||||
@@ -6062,7 +6072,7 @@ gam <UserTypeEntity> print focustime|outofoffice|workinglocation
|
||||
[showdayofweek]
|
||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||
|
||||
# Users Chat
|
||||
# Users - Chat
|
||||
|
||||
<ChatContent> ::=
|
||||
((text <String>)|
|
||||
@@ -6084,7 +6094,7 @@ gam <UserTypeEntity> print focustime|outofoffice|workinglocation
|
||||
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
||||
|
||||
gam <UserTypeEntity> create chatspace
|
||||
[type <ChatSpaceType>]
|
||||
[type <ChatSpaceType>] [announcement|collaboration]
|
||||
[restricted|(audience <String>)]
|
||||
[externalusersrallowed <Boolean>]
|
||||
[members <UserTypeEntity>]
|
||||
@@ -6099,6 +6109,13 @@ gam <UserTypeEntity> update chatspace <ChatSpace>
|
||||
[type space]
|
||||
[description <String>] [guidelines|rules <String>]
|
||||
[history <Boolean>])
|
||||
[managemembersandgroups managers|members]
|
||||
[modifyspacedetails managers|members]
|
||||
[togglehistory managers|members]
|
||||
[useatmentionall managers|members]
|
||||
[manageapps managers|members]
|
||||
[managewebhooks managers|members]
|
||||
[replymessages managers|members]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> delete chatspace <ChatSpace>
|
||||
|
||||
@@ -7041,7 +7058,8 @@ gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[showsize] [showmimetypesize] (addcsvdata <FieldName> <String>)*
|
||||
[showsize] [showmimetypesize] [showlastmodification]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[summary none|only|plus] [summaryuser <String>]
|
||||
gam <UserTypeEntity> show filecounts
|
||||
[((query <QueryDriveFile>) | (fullquery <QueryDriveFile>) | <DriveFileQueryShortcut>)
|
||||
@@ -7050,12 +7068,12 @@ gam <UserTypeEntity> show filecounts
|
||||
[corpora <CorporaAttribute>]
|
||||
[select <SharedDriveEntity>]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [`<showmimetype category <MimeTypeNameList>]
|
||||
[showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[showsize] [showmimetypesize]
|
||||
[showsize] [showmimetypesize] [showlastmodification]
|
||||
[summary none|only|plus] [summaryuser <String>]
|
||||
|
||||
gam <UserTypeEntity> print filesharecounts [todrive <ToDriveAttribute>*]
|
||||
@@ -7794,6 +7812,52 @@ gam <UserTypeEntity> show lookerstudiopermissions
|
||||
[role editor|owner|viewer]
|
||||
[formatjson]
|
||||
|
||||
# Users - Meet
|
||||
|
||||
<MeetConferenceName> ::= conferenceRecords/<String>
|
||||
<MeetSpaceName> ::= spaces/<String> | <String>
|
||||
<MeetSpaceOptions> ::=
|
||||
accesstype open|trusted|restricted |
|
||||
entrypointaccess all|creatorapponly
|
||||
|
||||
gam <UserTypeEntity> create meetspace
|
||||
<MeetSpaceOptions>*
|
||||
[formatjson]
|
||||
|
||||
gam <UserTypeEntity> update meetspace <MeetSpaceName>
|
||||
<MeetSpaceOptions>*
|
||||
[formatjson]
|
||||
|
||||
gam <UserTypeEntity> info meetspace <MeetSpaceName>
|
||||
[formatjson]
|
||||
|
||||
gam <UserTypeEntity> end meetconference <MeetSpaceName>
|
||||
|
||||
gam <UserItem> show meetconferences
|
||||
[space <MeetSpaceName>] [code <String>]
|
||||
[andquery|orquery <String>] [querytime<String> <Time>]
|
||||
[formatjson]
|
||||
gam <UserItem> print meetconferences [todrive <ToDriveAttribute>*]
|
||||
[andquery|orquery <String>] [querytime<String> <Time>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserItem> show meetparticipants <MeetConferenceName>
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[formatjson]
|
||||
gam <UserItem> print meetparticipants <MeetConferenceName> [todrive <ToDriveAttribute>*]
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserItem> show meetrecordings <MeetConferenceName>
|
||||
[formatjson]
|
||||
gam <UserItem> print meetrecordings <MeetConferenceName> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserItem> show meettranscripts <MeetConferenceName>
|
||||
[formatjson]
|
||||
gam <UserItem> print meettranscripts <MeetConferenceName> [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
# Users - Contacts and Profiles
|
||||
|
||||
<PeopleContactAttribute> ::=
|
||||
@@ -7838,7 +7902,7 @@ gam <UserTypeEntity> show lookerstudiopermissions
|
||||
(subject <String>)|
|
||||
(suffix <String>)|
|
||||
(userdefinedfield clear|(<String> <String>))|
|
||||
(website clear|(app_install_page|blog|ftp|home|home_page|other|profile|reservations|work|<String> <URL> notprimary|primary))
|
||||
(url|website clear|(app_install_page|blog|ftp|home|home_page|other|profile|reservations|work|<String> <URL> notprimary|primary))
|
||||
|
||||
<PeopleUserContactSelection> ::=
|
||||
[(selectcontactgroup <PeopleContactGroupItem>)|
|
||||
@@ -8196,12 +8260,12 @@ gam <UserTypeEntity> update sheet <DriveFileEntity>
|
||||
gam <UserTypeEntity> info|show sheet <DriveFileEntity>
|
||||
[fields <SpreadsheetFieldList>] [sheetsfields <SpreadsheetSheetsFieldList>]
|
||||
(range <SpreadsheetRange>)* (rangelist <SpreadsheetRangeList>)*
|
||||
[includegriddata [<Boolean>]]
|
||||
[includegriddata [<Boolean>]] [shownames]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print sheet <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
[fields <SpreadsheetFieldList>] [sheetsfields <SpreadsheetSheetsFieldList>]
|
||||
(range <SpreadsheetRange>)* (rangelist <SpreadsheetRangeList>)*
|
||||
[includegriddata [<Boolean>]]
|
||||
[includegriddata [<Boolean>]] [shownames]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
See: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values#ValueRange
|
||||
|
||||
@@ -1,10 +1,101 @@
|
||||
7.00.08
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> delete groups` that caused the command to fail when `enable_dasa = true` in `gam.cfg`.
|
||||
|
||||
7.00.07
|
||||
|
||||
Updated `<PeopleContactAttribute>` fields `address,email,phone,url` to allow an empty type field.
|
||||
```
|
||||
address "" formatted "My Address" primary
|
||||
email "" user@gmail.com primary
|
||||
phone "" "510-555-1212" primary
|
||||
url "" "https://www.domain.com" primary
|
||||
```
|
||||
|
||||
7.00.06
|
||||
|
||||
Updated `gam <UserTypeEntity> create|update chatspace` to support the new permissions settings
|
||||
for Chat spaces that are in Developer Preview.
|
||||
|
||||
* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces#Space.FIELDS.predefined_permission_settings
|
||||
|
||||
7.00.05
|
||||
|
||||
Fixed bug that caused an error when creating a calendar birthday event.
|
||||
|
||||
7.00.04
|
||||
|
||||
Improved performance of `gam report users orgunit <OrgUnitPath>` when `showorgunit` is not specified.
|
||||
|
||||
Added option `birthday <Date>` to `gam <UserTypeEntity> create event <UserCalendarEntity>` that adds
|
||||
an annual recurring event to the calendar.
|
||||
|
||||
Added `birthday` to `<EventType>` for use in various calendar event commands.
|
||||
|
||||
7.00.03
|
||||
|
||||
Updated `gam delete ou` and `gam print admins` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
7.00.02
|
||||
|
||||
Added option `showlastmodification` to `gam <UserTypeEntity> print|show filecounts` that adds
|
||||
the following fields to the output: `lastModifiedFileId,lastModifiedFileName,lastModifyingUser,lastModifiedTime`;
|
||||
these are for the most recently modified file.
|
||||
|
||||
Added option `keepforever [<Boolean>]` to `gam <UserTypeEntity> update filerevisions` that allows setting
|
||||
`Keep forever` in revisions.
|
||||
|
||||
Upgraded to Python 3.12.6 where possible.
|
||||
|
||||
7.00.01
|
||||
|
||||
Added option `shownames` to `gam <UserTypeEntity> print|show sheet` that causes GAM
|
||||
to make an additional API call to get and display the sheet file name that is not supplied by the Sheets API.
|
||||
|
||||
7.00.00
|
||||
|
||||
Merged GAM-Team version
|
||||
|
||||
6.81.02
|
||||
|
||||
Updated `gam update group postmaster@domain.com` to handle the error that is generated.
|
||||
|
||||
6.81.01
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> create meetspace` that caused errors
|
||||
due to Developer Preview options being included.
|
||||
|
||||
6.81.00
|
||||
|
||||
Added support for groups when defining Chrome policies.
|
||||
|
||||
Added support for the Meet API.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Meet
|
||||
|
||||
Added option `countsonly` to the following course commands that displays
|
||||
the number of items in a course but not the details of the items.
|
||||
```
|
||||
gam print course-announcements
|
||||
gam print course-materials
|
||||
gam print course-submissions
|
||||
gam print course-topics
|
||||
gam print course-work
|
||||
```
|
||||
|
||||
6.80.21
|
||||
|
||||
Updated `gam <UserTypeEntity> archive messages` to handle the following error:
|
||||
```
|
||||
googleapiclient.errors.MediaUploadSizeError: Media larger than: 26214400
|
||||
```
|
||||
|
||||
6.80.20
|
||||
|
||||
Updated `gam report usage user` and `gam report users` to handle the followong error:
|
||||
Updated `gam report usage user` and `gam report users` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
4880
src/chat-v1.json
4880
src/chat-v1.json
File diff suppressed because it is too large
Load Diff
@@ -16,12 +16,12 @@ OPTIONS:
|
||||
-u Admin user email address to use with GAM. Default is to prompt.
|
||||
-r Regular user email address. Used to test service account access to user data. Default is to prompt.
|
||||
-v Version to install (latest, prerelease, draft, 3.8, etc). Default is latest.
|
||||
-s Strip gam7 component from extracted files, files will be downloaded directly to $target_dir
|
||||
-s Strip gam component from extracted files, files will be downloaded directly to $target_dir
|
||||
EOF
|
||||
}
|
||||
|
||||
target_dir="$HOME/bin"
|
||||
target_gam="gam/gam"
|
||||
target_gam="gam7/gam"
|
||||
gamarch=$(uname -m)
|
||||
gamos=$(uname -s)
|
||||
osversion=""
|
||||
@@ -30,7 +30,7 @@ upgrade_only=false
|
||||
gamversion="latest"
|
||||
adminuser=""
|
||||
regularuser=""
|
||||
gam_x86_64_glibc_vers="2.31"
|
||||
gam_x86_64_glibc_vers="2.35 2.31"
|
||||
gam_arm64_glibc_vers="2.31"
|
||||
strip_gam="--strip-components 0"
|
||||
|
||||
@@ -141,7 +141,28 @@ case $gamos in
|
||||
;;
|
||||
[Mm]ac[Oo][sS]|[Dd]arwin)
|
||||
gamos="macos"
|
||||
gamfile="macos-universal2.tar.xz"
|
||||
fullversion=$(sw_vers -productVersion)
|
||||
osversion=${fullversion:0:2}
|
||||
case $gamarch in
|
||||
x86_64)
|
||||
gamfile="macos-x86_64.tar.xz"
|
||||
minimum_version=13
|
||||
;;
|
||||
arm|arm64|aarch64)
|
||||
gamfile="macos-aarch64.tar.xz"
|
||||
minimum_version=14
|
||||
;;
|
||||
*)
|
||||
echo_red "ERROR: this installer currently only supports x86_64 and arm64 MacOS. Looks like you're running on $gamarch. Exiting."
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
if [[ "$osversion" -ge "$minimum_version" ]]; then
|
||||
echo_green "You are running MacOS ${fullversion}, good. Using GAM with ${gamfile}."
|
||||
else
|
||||
echo_red "Sorry, you are running MacOS ${fullversion} but GAM on ${gamarch} requires MacOS ${minimum_version}. Exiting."
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
MINGW64_NT*)
|
||||
gamos="windows"
|
||||
@@ -154,7 +175,9 @@ case $gamos in
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$gamversion" == "latest" -o "$gamversion" == "prerelease" -o "$gamversion" == "draft" ]; then
|
||||
if [ "$gamversion" == "latest" ]; then
|
||||
release_url="https://api.github.com/repos/GAM-team/GAM/releases/latest"
|
||||
elif [ "$gamversion" == "prerelease" -o "$gamversion" == "draft" ]; then
|
||||
release_url="https://api.github.com/repos/GAM-team/GAM/releases"
|
||||
else
|
||||
release_url="https://api.github.com/repos/GAM-team/GAM/releases/tags/v$gamversion"
|
||||
|
||||
83
src/gam.spec
83
src/gam.spec
@@ -12,7 +12,6 @@ for pkg in GAM_VER_LIBS:
|
||||
datas += copy_metadata(pkg, recursive=True)
|
||||
datas += [('admin-directory_v1.1beta1.json', '.')]
|
||||
datas += [('cbcm-v1.1beta1.json', '.')]
|
||||
datas += [('chat-v1.json', '.')]
|
||||
datas += [('contactdelegation-v1.json', '.')]
|
||||
datas += [('datastudio-v1.json', '.')]
|
||||
datas += [('serviceaccountlookup-v1.json', '.')]
|
||||
@@ -21,7 +20,7 @@ hiddenimports = [
|
||||
'gam.gamlib.yubikey',
|
||||
]
|
||||
|
||||
print(f"datas before analysis:\n{datas}")
|
||||
runtime_hooks = []
|
||||
a = Analysis(
|
||||
['gam/__main__.py'],
|
||||
pathex=[],
|
||||
@@ -30,30 +29,35 @@ a = Analysis(
|
||||
hiddenimports=hiddenimports,
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
runtime_hooks=runtime_hooks,
|
||||
excludes=[],
|
||||
win_no_prefer_redirects=False,
|
||||
win_private_assemblies=False,
|
||||
cipher=None,
|
||||
noarchive=False,
|
||||
)
|
||||
print(f"datas from analysis:\n{a.datas}")
|
||||
#print(f"datas from analysis:\n{a.datas}")
|
||||
for d in a.datas:
|
||||
if 'pyconfig' in d[0]:
|
||||
a.datas.remove(d)
|
||||
break
|
||||
print(f"datas after pyconfig cleanup:\n{a.datas}")
|
||||
#print(f"datas after pyconfig cleanup:\n{a.datas}")
|
||||
pyz = PYZ(a.pure,
|
||||
a.zipped_data,
|
||||
cipher=None)
|
||||
# requires Python 3.10+ but no one should be compiling
|
||||
# GAM with older versions anyway
|
||||
target_arch = None
|
||||
codesign_identity = None
|
||||
entitlements_file = None
|
||||
match platform:
|
||||
case "darwin":
|
||||
if getenv('arch') == 'universal2':
|
||||
target_arch = "universal2"
|
||||
else:
|
||||
target_arch = None
|
||||
|
||||
codesign_identity = getenv('codesign_identity')
|
||||
if codesign_identity:
|
||||
entitlements_file = '../.github/actions/entitlements.plist'
|
||||
strip = True
|
||||
case "win32":
|
||||
target_arch = None
|
||||
@@ -68,9 +72,38 @@ upx = False
|
||||
console = True
|
||||
disable_windowed_traceback = False
|
||||
argv_emulation = False
|
||||
codesign_identity = None
|
||||
entitlements_file = None
|
||||
if not getenv('PYINSTALLER_BUILD_ONEDIR') == 'yes':
|
||||
if getenv('PYINSTALLER_BUILD_ONEDIR') == 'yes':
|
||||
# Build one directory
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name=name,
|
||||
debug=debug,
|
||||
bootloader_ignore_signals=bootloader_ignore_signals,
|
||||
strip=strip,
|
||||
upx=upx,
|
||||
console=console,
|
||||
# put most everyting under a lib/ subfolder
|
||||
contents_directory='lib',
|
||||
disable_windowed_traceback=disable_windowed_traceback,
|
||||
argv_emulation=argv_emulation,
|
||||
target_arch=target_arch,
|
||||
codesign_identity=codesign_identity,
|
||||
entitlements_file=entitlements_file,
|
||||
)
|
||||
coll = COLLECT(
|
||||
exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
strip=strip,
|
||||
upx=upx,
|
||||
upx_exclude=[],
|
||||
name=name,
|
||||
)
|
||||
else:
|
||||
# Build one file
|
||||
exe = EXE(
|
||||
pyz,
|
||||
@@ -91,32 +124,4 @@ if not getenv('PYINSTALLER_BUILD_ONEDIR') == 'yes':
|
||||
codesign_identity=codesign_identity,
|
||||
entitlements_file=entitlements_file,
|
||||
)
|
||||
else:
|
||||
# Build one folder
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name=name,
|
||||
debug=debug,
|
||||
bootloader_ignore_signals=bootloader_ignore_signals,
|
||||
strip=strip,
|
||||
upx=upx,
|
||||
console=console,
|
||||
disable_windowed_traceback=disable_windowed_traceback,
|
||||
argv_emulation=argv_emulation,
|
||||
target_arch=target_arch,
|
||||
codesign_identity=codesign_identity,
|
||||
entitlements_file=entitlements_file,
|
||||
)
|
||||
coll = COLLECT(
|
||||
exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
strip=strip,
|
||||
upx=upx,
|
||||
upx_exclude=[],
|
||||
name=name,
|
||||
)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<ComponentGroup
|
||||
Id="ProductComponents"
|
||||
Directory="INSTALLFOLDER"
|
||||
Source="dist/gam">
|
||||
Source="dist/gam7">
|
||||
<Component Id="gam_exe" Guid="d046ea24-c9f8-40ca-84db-70b0119933ff">
|
||||
<File Name="gam.exe" KeyPath="yes" />
|
||||
<Environment Id="PATH" Name="PATH" Value="[INSTALLFOLDER]" Permanent="yes" Part="last" Action="set" System="yes" />
|
||||
|
||||
56
src/gam.wxs.template
Normal file
56
src/gam.wxs.template
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" >
|
||||
<Product
|
||||
Id="*"
|
||||
Name="GAM7"
|
||||
Language="1033"
|
||||
Version="$(env.GAMVERSION)"
|
||||
Manufacturer="GAM Team - google-apps-manager@googlegroups.com"
|
||||
UpgradeCode="D86B52B2-EFE9-4F9D-8BA3-9D84B9B2D319">
|
||||
<Package
|
||||
InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
|
||||
|
||||
<MajorUpgrade
|
||||
DowngradeErrorMessage=
|
||||
"A newer version of [ProductName] is already installed."
|
||||
Schedule="afterInstallExecute" />
|
||||
<MediaTemplate EmbedCab="yes" />
|
||||
|
||||
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
|
||||
<WixVariable Id="WixUILicenseRtf" Value="LICENSE.rtf" />
|
||||
<UIRef Id="WixUI_InstallDir" />
|
||||
|
||||
<Feature
|
||||
Id="gam"
|
||||
Title="GAM7"
|
||||
Level="1">
|
||||
<ComponentGroupRef Id="ProductComponents" />
|
||||
</Feature>
|
||||
</Product>
|
||||
|
||||
<Fragment>
|
||||
<SetDirectory Id="WINDOWSVOLUME" Value="[WindowsVolume]"/>
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="WINDOWSVOLUME">
|
||||
<Directory Id="INSTALLFOLDER" Name="GAM7" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<!-- Group of components that are our main application items -->
|
||||
<ComponentGroup
|
||||
Id="ProductComponents"
|
||||
Directory="INSTALLFOLDER"
|
||||
Source="dist/gam7">
|
||||
REPLACE_ME_WITH_FILE_COMPONENTS
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<InstallUISequence>
|
||||
<ExecuteAction />
|
||||
<Show Dialog="WelcomeDlg" Before="ProgressDlg" />
|
||||
</InstallUISequence>
|
||||
</Fragment>
|
||||
</Wix>
|
||||
1054
src/gam/__init__.py
1054
src/gam/__init__.py
File diff suppressed because it is too large
Load Diff
4880
src/gam/chat-v1.json
4880
src/gam/chat-v1.json
File diff suppressed because it is too large
Load Diff
@@ -56,6 +56,7 @@ class GamAction():
|
||||
DRAFT = 'draf'
|
||||
EMPTY = 'empt'
|
||||
ENABLE = 'enbl'
|
||||
END = 'end '
|
||||
EXISTS = 'exis'
|
||||
EXPORT = 'expo'
|
||||
EXTRACT = 'extr'
|
||||
@@ -174,6 +175,7 @@ class GamAction():
|
||||
DRAFT: ['Drafted', 'Draft'],
|
||||
EMPTY: ['Emptied', 'Empty'],
|
||||
ENABLE: ['Enabled', 'Enable'],
|
||||
END: ['Ended', 'End'],
|
||||
EXISTS: ['Exists', 'Exists'],
|
||||
EXPORT: ['Exported', 'Export'],
|
||||
EXTRACT: ['Extracted', 'Extract'],
|
||||
|
||||
@@ -74,6 +74,7 @@ IAP = 'iap'
|
||||
KEEP = 'keep'
|
||||
LICENSING = 'licensing'
|
||||
LOOKERSTUDIO = 'datastudio'
|
||||
MEET = 'meet'
|
||||
OAUTH2 = 'oauth2'
|
||||
ORGPOLICY = 'orgpolicy'
|
||||
PEOPLE = 'people'
|
||||
@@ -186,6 +187,7 @@ PROJECT_APIS = [
|
||||
'iap.googleapis.com',
|
||||
'keep.googleapis.com',
|
||||
'licensing.googleapis.com',
|
||||
'meet.googleapis.com',
|
||||
'people.googleapis.com',
|
||||
'pubsub.googleapis.com',
|
||||
'reseller.googleapis.com',
|
||||
@@ -204,15 +206,15 @@ _INFO = {
|
||||
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
||||
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
||||
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
||||
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_MESSAGES: {'name': 'Chat API - Messages', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES: {'name': 'Chat API - Spaces', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_ADMIN: {'name': 'Chat API - Spaces Admin', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_DELETE: {'name': 'Chat API - Spaces Delete', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_DELETE_ADMIN: {'name': 'Chat API - Spaces Delete Admin', 'version': 'v1', 'v2discovery': True, 'localjson': True, 'mappedAPI': CHAT},
|
||||
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True},
|
||||
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_MESSAGES: {'name': 'Chat API - Messages', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES: {'name': 'Chat API - Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_ADMIN: {'name': 'Chat API - Spaces Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_DELETE: {'name': 'Chat API - Spaces Delete', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_DELETE_ADMIN: {'name': 'Chat API - Spaces Delete Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CLASSROOM: {'name': 'Classroom API', 'version': 'v1', 'v2discovery': True},
|
||||
CHROMEMANAGEMENT: {'name': 'Chrome Management API', 'version': 'v1', 'v2discovery': True},
|
||||
CHROMEMANAGEMENT_APPDETAILS: {'name': 'Chrome Management API - AppDetails', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
|
||||
@@ -250,6 +252,7 @@ _INFO = {
|
||||
KEEP: {'name': 'Keep API', 'version': 'v1', 'v2discovery': True},
|
||||
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
||||
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||
MEET: {'name': 'Meet API', 'version': 'v2', 'v2discovery': True},
|
||||
OAUTH2: {'name': 'OAuth2 API', 'version': 'v2', 'v2discovery': False},
|
||||
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
||||
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
||||
@@ -652,6 +655,10 @@ _SVCACCT_SCOPES = [
|
||||
'api': LOOKERSTUDIO,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/datastudio'},
|
||||
{'name': 'Meet API',
|
||||
'api': MEET,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/meetings.space.created'},
|
||||
{'name': 'OAuth2 API',
|
||||
'api': OAUTH2,
|
||||
'subscopes': [],
|
||||
|
||||
@@ -651,6 +651,16 @@ class GamCLArgs():
|
||||
ARG_LICENSES = 'licenses'
|
||||
ARG_MATTER = 'matter'
|
||||
ARG_MATTERS = 'matters'
|
||||
ARG_MEETSPACE = 'meetspace'
|
||||
ARG_MEETSPACES = 'meetspaces'
|
||||
ARG_MEETCONFERENCE = 'meetconference'
|
||||
ARG_MEETCONFERENCES = 'meetconferences'
|
||||
ARG_MEETPARTICIPANT = 'meetparticipant'
|
||||
ARG_MEETPARTICIPANTS = 'meetparticipants'
|
||||
ARG_MEETRECORDING = 'meetrecording'
|
||||
ARG_MEETRECORDINGS = 'meetrecordings'
|
||||
ARG_MEETTRANSCRIPT = 'meettranscript'
|
||||
ARG_MEETTRANSCRIPTS = 'meettranscripts'
|
||||
ARG_MEMBER = 'member'
|
||||
ARG_MEMBERS = 'members'
|
||||
ARG_MESSAGE = 'message'
|
||||
@@ -936,6 +946,7 @@ class GamCLArgs():
|
||||
OB_LOOKERSTUDIO_PERMISSION_ENTITY = 'LookerStudioPermissionEntity'
|
||||
OB_MATTER_ITEM = 'MatterItem'
|
||||
OB_MATTER_ITEM_LIST = 'MatterItemList'
|
||||
OB_MEET_CONFERENCE_NAME = 'MeetConferenceName'
|
||||
OB_MESSAGE_ID = 'MessageID'
|
||||
OB_MIMETYPE = 'MimeType'
|
||||
OB_MIMETYPE_LIST = 'MimeTypeList'
|
||||
|
||||
@@ -215,6 +215,7 @@ class GamEntity():
|
||||
END_TIME = 'endt'
|
||||
ENTITY = 'enti'
|
||||
EVENT = 'evnt'
|
||||
EVENT_BIRTHDAY = 'evbd'
|
||||
EVENT_FOCUSTIME = 'evft'
|
||||
EVENT_OUTOFOFFICE = 'evoo'
|
||||
EVENT_WORKINGLOCATION = 'evwl'
|
||||
@@ -260,6 +261,11 @@ class GamEntity():
|
||||
LOOKERSTUDIO_ASSET_REPORT = 'lsar'
|
||||
LOOKERSTUDIO_PERMISSION = 'lspe'
|
||||
MD5HASH = 'md5h'
|
||||
MEET_SPACE = 'mesp'
|
||||
MEET_CONFERENCE = 'msco'
|
||||
MEET_PARTICIPANT = 'msps'
|
||||
MEET_RECORDING = 'msre'
|
||||
MEET_TRANSCRIPT = 'mstr'
|
||||
MEMBER = 'memb'
|
||||
MEMBER_NOT_ARCHIVED = 'mena'
|
||||
MEMBER_ARCHIVED = 'mear'
|
||||
@@ -560,6 +566,7 @@ class GamEntity():
|
||||
END_TIME: ['End Times', 'End Time'],
|
||||
ENTITY: ['Entities', 'Entity'],
|
||||
EVENT: ['Events', 'Event'],
|
||||
EVENT_BIRTHDAY: ['Borthday Events', 'Birthday Event'],
|
||||
EVENT_FOCUSTIME: ['Focus Time Events', 'Focus Time Event'],
|
||||
EVENT_OUTOFOFFICE: ['Out of Office Events', 'Out of Office Event'],
|
||||
EVENT_WORKINGLOCATION: ['Working Location Events', 'Working Location Event'],
|
||||
@@ -605,6 +612,11 @@ class GamEntity():
|
||||
LOOKERSTUDIO_ASSET_REPORT: ['Looker Studio REPORT Assets', 'Looker Studio REPORT Asset'],
|
||||
LOOKERSTUDIO_PERMISSION: ['Looker Studio Permissions', 'Looker Studio Permission'],
|
||||
MD5HASH: ['MD5 hash', 'MD5 Hash'],
|
||||
MEET_SPACE: ['Meet Spaces', 'Meet Space'],
|
||||
MEET_CONFERENCE: ['Meet Conferences', 'Meet Conference'],
|
||||
MEET_PARTICIPANT: ['Meet Participants', 'Meet Participant'],
|
||||
MEET_RECORDING: ['Meet Recordings', 'Meet Recording'],
|
||||
MEET_TRANSCRIPT: ['Meet Transcripts', 'Meet Transcript'],
|
||||
MEMBER: ['Members', 'Member'],
|
||||
MEMBER_NOT_ARCHIVED: ['Members (Not Archived)', 'Member (Not Archived)'],
|
||||
MEMBER_ARCHIVED: ['Members (Archived)', 'Member (Archived)'],
|
||||
|
||||
@@ -78,7 +78,7 @@ Please go to:
|
||||
|
||||
https://admin.google.com/ac/owl/list?tab=configuredApps
|
||||
|
||||
1. Click on: Add app > OAuth App Name Or Client ID.
|
||||
1. Click on: Configure new app > OAuth App Name Or Client ID.
|
||||
2. Enter the following Client ID value:
|
||||
|
||||
{1}
|
||||
|
||||
@@ -1170,9 +1170,11 @@ def createMethod(methodName, methodDesc, rootDesc, schema):
|
||||
elif "response" not in methodDesc:
|
||||
model = RawModel()
|
||||
|
||||
api_version = methodDesc.get("apiVersion", None)
|
||||
|
||||
headers = {}
|
||||
headers, params, query, body = model.request(
|
||||
headers, actual_path_params, actual_query_params, body_value
|
||||
headers, actual_path_params, actual_query_params, body_value, api_version
|
||||
)
|
||||
|
||||
expanded_url = uritemplate.expand(pathUrl, params)
|
||||
|
||||
@@ -27,10 +27,18 @@ import json
|
||||
import logging
|
||||
import platform
|
||||
import urllib
|
||||
import warnings
|
||||
|
||||
from googleapiclient import version as googleapiclient_version
|
||||
from googleapiclient.errors import HttpError
|
||||
|
||||
try:
|
||||
from google.api_core.version_header import API_VERSION_METADATA_KEY
|
||||
|
||||
HAS_API_VERSION = True
|
||||
except ImportError:
|
||||
HAS_API_VERSION = False
|
||||
|
||||
_LIBRARY_VERSION = googleapiclient_version.__version__
|
||||
_PY_VERSION = platform.python_version()
|
||||
|
||||
@@ -121,7 +129,7 @@ class BaseModel(Model):
|
||||
LOGGER.info("query: %s", query)
|
||||
LOGGER.info("--request-end--")
|
||||
|
||||
def request(self, headers, path_params, query_params, body_value):
|
||||
def request(self, headers, path_params, query_params, body_value, api_version=None):
|
||||
"""Updates outgoing requests with a serialized body.
|
||||
|
||||
Args:
|
||||
@@ -129,7 +137,10 @@ class BaseModel(Model):
|
||||
path_params: dict, parameters that appear in the request path
|
||||
query_params: dict, parameters that appear in the query
|
||||
body_value: object, the request body as a Python object, which must be
|
||||
serializable by json.
|
||||
serializable by json.
|
||||
api_version: str, The precise API version represented by this request,
|
||||
which will result in an API Version header being sent along with the
|
||||
HTTP request.
|
||||
Returns:
|
||||
A tuple of (headers, path_params, query, body)
|
||||
|
||||
@@ -155,6 +166,15 @@ class BaseModel(Model):
|
||||
_PY_VERSION,
|
||||
)
|
||||
|
||||
if api_version and HAS_API_VERSION:
|
||||
headers[API_VERSION_METADATA_KEY] = api_version
|
||||
elif api_version:
|
||||
warnings.warn(
|
||||
"The `api_version` argument is ignored as a newer version of "
|
||||
"`google-api-core` is required to use this feature."
|
||||
"Please upgrade `google-api-core` to 2.19.0 or newer."
|
||||
)
|
||||
|
||||
if body_value is not None:
|
||||
headers["content-type"] = self.content_type
|
||||
body_value = self.serialize(body_value)
|
||||
|
||||
@@ -12,4 +12,4 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
__version__ = "2.124.0"
|
||||
__version__ = "2.146.0"
|
||||
|
||||
@@ -13,10 +13,10 @@ keywords = google, oauth2, gsuite, google-apps, google-admin-sdk, google-drive,
|
||||
classifiers =
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3 :: Only
|
||||
Programming Language :: Python :: 3.8
|
||||
Programming Language :: Python :: 3.9
|
||||
Programming Language :: Python :: 3.10
|
||||
Programming Language :: Python :: 3.11
|
||||
Programming Language :: Python :: 3.12
|
||||
License :: OSI Approved :: Apache License
|
||||
|
||||
[options]
|
||||
|
||||
58
src/tools/gen-wix-xml-filelist.py
Normal file
58
src/tools/gen-wix-xml-filelist.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import os
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
source_dir = sys.argv[1]
|
||||
template_file = sys.argv[2]
|
||||
target_file = sys.argv[3]
|
||||
|
||||
existing_components = {
|
||||
'gam.exe': ''' <Component Id="gam_exe" Guid="d046ea24-c9f8-40ca-84db-70b0119933ff">
|
||||
<File Name="gam.exe" KeyPath="yes" />
|
||||
<Environment Id="PATH" Name="PATH" Value="[INSTALLFOLDER]" Permanent="yes" Part="last" Action="set" System="yes" />
|
||||
</Component>
|
||||
''',
|
||||
'LICENSE': ''' <Component Id="license" Guid="c76864c5-d005-44d5-bb7c-a27e5923792d">
|
||||
<File Name="LICENSE" KeyPath="yes" />
|
||||
</Component>
|
||||
''',
|
||||
'gam-setup.bat': ''' <Component Id="gam_setup_bat" Guid="5e6bbacb-d86f-4d80-a10b-89b81ee63fcb">
|
||||
<File Name="gam-setup.bat" KeyPath="yes" />
|
||||
</Component>
|
||||
''',
|
||||
'GamCommands.txt': ''' <Component Id="GamCommands_txt" Guid="a2dca862-b222-469e-a637-95ea2a1c53e7">
|
||||
<File Name="GamCommands.txt" KeyPath="yes" />
|
||||
</Component>
|
||||
''',
|
||||
'GamUpdate.txt': ''' <Component Id="GamUpdate_txt" Guid="1b7cdd48-0fff-4943-a219-102fcd14c755">
|
||||
<File Name="GamUpdate.txt" KeyPath="yes" />
|
||||
</Component>
|
||||
''',
|
||||
'cacerts.pem': ''' <Component Id="cacerts_pem" Guid="61fe2b2d-1646-4bed-b844-193965e97727">
|
||||
<File Name="cacerts.pem" KeyPath="yes" />
|
||||
</Component>
|
||||
''',
|
||||
}
|
||||
|
||||
component_xml = ''
|
||||
all_files = []
|
||||
for root, dirs, files in os.walk(source_dir):
|
||||
for filename in files:
|
||||
relpath = os.path.relpath(root, source_dir)
|
||||
if relpath == '.':
|
||||
all_files.append(filename)
|
||||
else:
|
||||
all_files.append(os.path.join(relpath, filename))
|
||||
all_files.sort()
|
||||
for filename in all_files:
|
||||
component_xml += existing_components.get(filename,
|
||||
f' <Component>\n <File Name="{filename}" KeyPath="yes"/>\n </Component>\n')
|
||||
|
||||
with open(template_file, 'r') as f:
|
||||
template = f.read()
|
||||
|
||||
full_xml = template.replace('REPLACE_ME_WITH_FILE_COMPONENTS', component_xml)
|
||||
|
||||
with open(target_file, 'w') as f:
|
||||
f.write(full_xml)
|
||||
|
||||
Reference in New Issue
Block a user