mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-16 20:21:37 +00:00
Compare commits
51 Commits
20240530.0
...
20240629.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e0ae154a5 | ||
|
|
435388aa0b | ||
|
|
e66ff54c3c | ||
|
|
a7da52a485 | ||
|
|
ab65890455 | ||
|
|
f8dafa294d | ||
|
|
19ea4bbb9c | ||
|
|
53f40eb9eb | ||
|
|
793f230c30 | ||
|
|
6964f10aa3 | ||
|
|
3f6f6a191d | ||
|
|
9388b8497c | ||
|
|
28ca319632 | ||
|
|
d5ad1cb2fb | ||
|
|
c12ee6438c | ||
|
|
e18eb0931e | ||
|
|
2c0295d674 | ||
|
|
ced1e84567 | ||
|
|
5adc996f3e | ||
|
|
a3b3353e71 | ||
|
|
f084096658 | ||
|
|
d9188da059 | ||
|
|
12c150f64d | ||
|
|
6d25ada6a4 | ||
|
|
c0cd121a91 | ||
|
|
e8e508eb18 | ||
|
|
deda162375 | ||
|
|
b69601c5c2 | ||
|
|
87f9aa37b5 | ||
|
|
b74e2e1fd2 | ||
|
|
e40cbc32a6 | ||
|
|
636a49b1a6 | ||
|
|
7239f252da | ||
|
|
5d85ea63b0 | ||
|
|
cf50fcc78f | ||
|
|
eead1bd8b9 | ||
|
|
206a09aad3 | ||
|
|
eb365a3eb5 | ||
|
|
1690daccb5 | ||
|
|
233eeb0744 | ||
|
|
3f17525169 | ||
|
|
100df45d46 | ||
|
|
cb00e6de9f | ||
|
|
82585dc28a | ||
|
|
cb16747125 | ||
|
|
8632c98556 | ||
|
|
6c3a805a4d | ||
|
|
f6b949e4c1 | ||
|
|
1f9624ad5c | ||
|
|
9c9ddff973 | ||
|
|
f1636c7768 |
37
.github/workflows/build.yml
vendored
37
.github/workflows/build.yml
vendored
@@ -17,6 +17,7 @@ defaults:
|
||||
working-directory: src
|
||||
|
||||
env:
|
||||
SCRATCH_COUNTER: 1
|
||||
OPENSSL_CONFIG_OPTS: no-fips --api=3.0.0
|
||||
OPENSSL_INSTALL_PATH: ${{ github.workspace }}/bin/ssl
|
||||
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
||||
@@ -114,7 +115,7 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
cache.tar.xz
|
||||
key: gam-${{ matrix.jid }}-20240526
|
||||
key: gam-${{ matrix.jid }}-20240620
|
||||
|
||||
- name: Untar Cache archive
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||
@@ -195,9 +196,10 @@ jobs:
|
||||
bash ./rust.sh -y
|
||||
source $HOME/.cargo/env
|
||||
# Install needed packages
|
||||
# brew update
|
||||
# brew install gpg
|
||||
brew install swig
|
||||
#brew update
|
||||
#brew install gpg
|
||||
#brew install swig
|
||||
#brew install ncurses
|
||||
|
||||
- name: Windows Configure VCode
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
@@ -224,7 +226,9 @@ jobs:
|
||||
MAKE=make
|
||||
MAKEOPT="-j$(sysctl -n hw.logicalcpu)"
|
||||
PERL=perl
|
||||
echo "MACOSX_DEPLOYMENT_TARGET=10.15" >> $GITHUB_ENV
|
||||
MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion | awk -F '.' '{print $1 "." $2}')
|
||||
echo "MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" >> $GITHUB_ENV
|
||||
echo "We are running on and targetting MacOS ${MACOSX_DEPLOYMENT_TARGET}"
|
||||
echo "PYTHON=${PYTHON_INSTALL_PATH}/bin/python3" >> $GITHUB_ENV
|
||||
elif [[ "${RUNNER_OS}" == "Linux" ]]; then
|
||||
MAKE=make
|
||||
@@ -322,15 +326,27 @@ jobs:
|
||||
-output "${GITHUB_WORKSPACE}/bin/ssl/bin/openssl"
|
||||
rm -rf ${GITHUB_WORKSPACE}/bin/ssl-darwin64-x86_64
|
||||
rm -rf ${GITHUB_WORKSPACE}/bin/ssl-darwin64-arm64
|
||||
echo "LDFLAGS=-L${OPENSSL_INSTALL_PATH}/lib" >> $GITHUB_ENV
|
||||
echo "CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1" >> $GITHUB_ENV
|
||||
echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include -arch arm64 -arch x86_64 ${CFLAGS}" >> $GITHUB_ENV
|
||||
echo "ARCHFLAGS=-arch x86_64 -arch arm64" >> $GITHUB_ENV
|
||||
else
|
||||
cd "${GITHUB_WORKSPACE}/src/openssl-${openssl_archs}"
|
||||
# install_sw saves us ages processing man pages :-)
|
||||
$MAKE install_sw
|
||||
fi
|
||||
echo "LDFLAGS=-L${OPENSSL_INSTALL_PATH}/lib" >> $GITHUB_ENV
|
||||
echo "CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1" >> $GITHUB_ENV
|
||||
case $arch in
|
||||
universal2)
|
||||
echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include -arch arm64 -arch x86_64 ${CFLAGS}" >> $GITHUB_ENV
|
||||
echo "ARCHFLAGS=-arch x86_64 -arch arm64" >> $GITHUB_ENV
|
||||
;;
|
||||
x86_64)
|
||||
echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include ${CFLAGS}" >> $GITHUB_ENV
|
||||
echo "ARCHFLAGS=-arch x86_64" >> $GITHUB_ENV
|
||||
;;
|
||||
aarch64)
|
||||
echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include ${CFLAGS}" >> $GITHUB_ENV
|
||||
echo "ARCHFLAGS=-arch arm64" >> $GITHUB_ENV
|
||||
;;
|
||||
esac
|
||||
|
||||
- name: Run OpenSSL
|
||||
if: matrix.goal == 'build'
|
||||
@@ -370,7 +386,8 @@ jobs:
|
||||
--with-ensurepip=upgrade \
|
||||
--enable-optimizations \
|
||||
--with-lto \
|
||||
"${extra_args[@]}"
|
||||
"${extra_args[@]}" || : # exit 0
|
||||
cat config.log
|
||||
|
||||
- name: Windows Get External Python deps
|
||||
if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
|
||||
@@ -317,7 +317,8 @@ gam create project [admin <EmailAddress>] [project <ProjectID>]
|
||||
[sadescription <ServiceAccountDescription>]
|
||||
[(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
|
||||
(localkeysize 1024|2048|4096 [validityhours <Number>])|
|
||||
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)]
|
||||
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)|
|
||||
nokey}
|
||||
```
|
||||
* `admin <EmailAddress>` - Google Workspace admin/GCP project manager; if omitted, you will be prompted for the address
|
||||
* `appname <String>` - Application name, defaults to `GAM`
|
||||
@@ -331,6 +332,8 @@ gam create project [admin <EmailAddress>] [project <ProjectID>]
|
||||
|
||||
You can optionally specify the type of service account key with `algorithm|localkeysize|yubikey`: [Manage Service Account keys](#manage-service-account-keys)
|
||||
|
||||
Use `nokey` if you do not want a service account key created for the project.
|
||||
|
||||
## Use an existing project for GAM authorization
|
||||
Use an existing project to create and download two files: `client_secrets.json` for the Client and `oauth2service.json` for the Service Account.
|
||||
|
||||
@@ -837,7 +840,7 @@ gam update sakey
|
||||
(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
|
||||
(localkeysize 1024|2048|4096 [validityhours <Number>])|
|
||||
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)
|
||||
gam rotate sakey replace_existing
|
||||
gam rotate sakey replace_current
|
||||
(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
|
||||
(localkeysize 1024|2048|4096 [validityhours <Number>])|
|
||||
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- [CSV files](#csv-files)
|
||||
- [CSV files with redirection and select](#csv-files-with-redirection-and-select)
|
||||
- [Automatic batch processing](#automatic-batch-processing)
|
||||
- [Process Google Sheet commands and save results](#process-google-sheet-commands-and-save-results)
|
||||
|
||||
## Introduction
|
||||
Batch and CSV file processing can improve performance by executing Gam commands in parallel.
|
||||
@@ -57,7 +58,7 @@ Tbatch files can also contain the following line:
|
||||
* You have a CSV file NewStudents.csv with columns: Email,First,Last,GradYear,Password
|
||||
* You have a batch file NewStudents.bat containing these commands:
|
||||
```
|
||||
gam csv NewStudents.csv gam create user ~Email firstname ~First lastname ~Last org "/Students/~~GradYear~~" password ~Password
|
||||
gam csv NewStudents.csv gam create user "~Email" firstname "~First" lastname "~Last" org "/Students/~~GradYear~~" password "~Password"
|
||||
commit-batch
|
||||
gam update group seniors sync members ou /Students/2020
|
||||
gam update group juniors sync members ou /Students/2021
|
||||
@@ -120,7 +121,7 @@ Put a space in front of the `~`: `targetfolder " ~/Documents/GamWork"` to avoid
|
||||
* You want a note field that shows their email address as name AT domain.com
|
||||
* You have a CSV file Users.csv with columns: primaryEmail,Street,City,State,ZIP
|
||||
```
|
||||
gam csv Users.csv gam update user ~primaryEmail address type work unstructured "~~Street~~, ~~City~~, ~~State~~ ~~ZIP~~" primary note text_plain "~~primaryEmail~!~^(.+)@(.+)$~!~\1 AT \2~~"
|
||||
gam csv Users.csv gam update user "~primaryEmail" address type work unstructured "~~Street~~, ~~City~~, ~~State~~ ~~ZIP~~" primary note text_plain "~~primaryEmail~!~^(.+)@(.+)$~!~\1 AT \2~~"
|
||||
```
|
||||
* You want to do the above using a Google Sheet
|
||||
```
|
||||
@@ -130,17 +131,17 @@ gam csv gsheet <user> <fileID> "<sheetName>" gam update user "~primaryEmail" add
|
||||
## CSV files with redirection and select
|
||||
You should use the `multiprocess` option on any redirected files: `csv`, `stdout`, `stderr`.
|
||||
```
|
||||
gam redirect csv ./filelistperms.csv multiprocess csv Users.csv gam user ~primaryEmail print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv - multiprocess todrive csv Users.csv gam user ~primaryEmail print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv ./filelistperms.csv multiprocess csv Users.csv gam user "~primaryEmail" print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv - multiprocess todrive csv Users.csv gam user "~primaryEmail" print filelist fields id,name,mimetype,basicpermissions
|
||||
```
|
||||
|
||||
If you want to select a `gam.cfg` section for the command, you can select the section at the outer `gam` and save it
|
||||
or select the section at the inner `gam`.
|
||||
```
|
||||
gam select <Section> save redirect csv ./filelistperms.csv multiprocess csv Users.csv gam user ~primaryEmail print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv ./filelistperms.csv multiprocess csv Users.csv gam select <Section> user ~primaryEmail print filelist fields id,name,mimetype,basicpermissions
|
||||
gam select <Section> save redirect csv - multiprocess todrive csv Users.csv gam user ~primaryEmail print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv - multiprocess todrive csv Users.csv gam select <Section> user ~primaryEmail print filelist fields id,name,mimetype,basicpermissions
|
||||
gam select <Section> save redirect csv ./filelistperms.csv multiprocess csv Users.csv gam user "~primaryEmail" print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv ./filelistperms.csv multiprocess csv Users.csv gam select <Section> user "~primaryEmail" print filelist fields id,name,mimetype,basicpermissions
|
||||
gam select <Section> save redirect csv - multiprocess todrive csv Users.csv gam user "~primaryEmail" print filelist fields id,name,mimetype,basicpermissions
|
||||
gam redirect csv - multiprocess todrive csv Users.csv gam select <Section> user "~primaryEmail" print filelist fields id,name,mimetype,basicpermissions
|
||||
```
|
||||
|
||||
## Automatic batch processing
|
||||
@@ -156,3 +157,18 @@ If you want to select a `gam.cfg` section for the command, you must select and s
|
||||
```
|
||||
gam select <Section> save config auto_batch_min 1 redirect csv ./filelistperms.csv multiprocess group sales@domain.com print filelist fields id,name,mimetype,basicpermissions
|
||||
```
|
||||
|
||||
## Process Google Sheet commands and save results
|
||||
You want to process data from a Google Sheet tab and save the results to another tab in the same sheet.
|
||||
Make a Google sheet with two tabs: Commands, Results; get the File ID and the two tab IDs.
|
||||
Put your command data in the Commands tab.
|
||||
|
||||
Run your command, write the results to Results.txt
|
||||
```
|
||||
gam redirect stdout ./Results.txt multiprocess redirect stderr stdout csv gsheet user@domain.com <FileID> id:<CommandsTabID> gam ... Command
|
||||
```
|
||||
|
||||
Upload Results.txt to the Results tab of the sheet.
|
||||
```
|
||||
gam user user@domain.com update drivefile <FileID> localfile Results.txt retainname gsheet id:<ResultsTabID>
|
||||
```
|
||||
|
||||
@@ -178,6 +178,7 @@ Client access works when accessing Resource calendars.
|
||||
<EventType> ::=
|
||||
default|
|
||||
focustime|
|
||||
fromgmail|
|
||||
outofoffice|
|
||||
workinglocation
|
||||
<EventTypeList> ::= "<EventType>(,<EventType>)*"
|
||||
|
||||
@@ -47,6 +47,64 @@ This Wiki page was built directly from Jay Lee's Wiki page; my sincere thanks fo
|
||||
<ChatMessageID> ::= client-<String>
|
||||
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
||||
```
|
||||
```
|
||||
<ChatSpaceFieldName> ::=
|
||||
accesssettings|
|
||||
admininstalled|
|
||||
createtime|
|
||||
displayname|
|
||||
externaluserallowed|
|
||||
importmode|
|
||||
lastactivetime|
|
||||
membershipcount|
|
||||
name|
|
||||
singleuserbotdm|
|
||||
spacedetails|
|
||||
spacehistorystate|
|
||||
spacethreadingstate|threaded|
|
||||
spacetype|type|
|
||||
spaceuri
|
||||
<ChatSpaceFieldNameList> ::= "<ChatSpaceFieldName>(,<ChatSpaceFieldName>)*"
|
||||
|
||||
<ChatMemberFieldName> ::=
|
||||
createtime|
|
||||
deletetime|
|
||||
groupmember|
|
||||
member|
|
||||
name|
|
||||
role|
|
||||
state|
|
||||
<ChatMemberFieldNameList> ::= "<ChatMemberFieldName>(,<ChatMemberFieldName>)*"
|
||||
|
||||
<ChatMessageFieldName> ::=
|
||||
accessorywidgets|
|
||||
actionresponse|
|
||||
annotations|
|
||||
argumenttext|
|
||||
attachedgifs|
|
||||
attachment|
|
||||
cards|
|
||||
cardsv2|
|
||||
clientassignedmessageid|
|
||||
createtime|
|
||||
deletetime|
|
||||
deletionmetadata|
|
||||
emojireactionsummaries|
|
||||
fallbacktext|
|
||||
formattedtext|
|
||||
lastupdatetime|
|
||||
matchedurl|
|
||||
name|
|
||||
privatemessageviewer|
|
||||
quotedmessagemetadata|
|
||||
sender|
|
||||
slashcommand|
|
||||
space|
|
||||
text|
|
||||
thread|
|
||||
threadreply
|
||||
<ChatMessageFieldNameList> ::= "<ChatMessageFieldName>(,<ChatMessageFieldName>)*"
|
||||
```
|
||||
|
||||
## Set up a Chat Bot
|
||||
Since GAM 6.04.00, GAM is capable of acting as a Chat Bot and sending messages to Chat Rooms or direct messages to users. You first need to configure your Chat Bot.
|
||||
@@ -69,6 +127,7 @@ At first you'll have no spaces listed. Try [finding your bot and chatting it](ht
|
||||
### Display information about a specific chat space
|
||||
```
|
||||
gam info chatspace space <ChatSpace>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -77,6 +136,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
### Display information about all chat spaces
|
||||
```
|
||||
gam show chatspaces
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -84,11 +144,12 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam print chatspaces [todrive <ToDriveAttribute>*]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[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.
|
||||
@@ -101,6 +162,7 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
### Display information about a specific chat member
|
||||
```
|
||||
gam info chatmember member <ChatMember>
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -110,6 +172,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
```
|
||||
gam show chatmembers space <ChatSpace>
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -118,6 +181,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
```
|
||||
gam print chatmembers [todrive <ToDriveAttribute>*] space <ChatSpace>
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
@@ -238,6 +302,7 @@ Display the given Chat message.
|
||||
|
||||
```
|
||||
gam info chatmessage name <ChatMessage>
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
|
||||
@@ -130,7 +130,7 @@ If you have a CSV file, UpdateBrowsers.csv with two columns: deviceId,notes
|
||||
this command will add a new line of notes to the front of the existing notes:
|
||||
|
||||
```
|
||||
gam csv UpdateBrowsers.csv gam update browser ~deviceId updatenotes "~~notes~~\n#notes#"
|
||||
gam csv UpdateBrowsers.csv gam update browser "~deviceId" updatenotes "~~notes~~\n#notes#"
|
||||
```
|
||||
|
||||
## Move Chrome browsers from one OU to another
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
# Chrome Installed Apps Counts
|
||||
|
||||
- [Chrome Policies](#chrome-policies)
|
||||
- [API documentation](#api-documentation)
|
||||
- [Definitions](#definitions)
|
||||
- [Quoting rules](#quoting-rules)
|
||||
- [Display Chrome installed app details](#display-chrome-installed-app-details)
|
||||
- [Display Chrome installed apps counts](#display-chrome-installed-apps-counts)
|
||||
- [Display Chrome devices with a specific installed application](#display-chrome-devices-with-a-specific-installed-application)
|
||||
- [API documentation](#api-documentation)
|
||||
- [Definitions](#definitions)
|
||||
- [Quoting rules](#quoting-rules)
|
||||
- [Display Chrome installed app details](#display-chrome-installed-app-details)
|
||||
- [Display Chrome installed apps counts](#display-chrome-installed-apps-counts)
|
||||
- [Display Chrome devices with a specific installed application](#display-chrome-devices-with-a-specific-installed-application)
|
||||
|
||||
## API documentation
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -364,7 +364,7 @@ If you have a CSV file, UpdateCrOS.csv with two columns: deviceId,notes
|
||||
this command will add a new line of notes to the front of the existing notes:
|
||||
|
||||
```
|
||||
gam csv UpdateCrOS.csv gam update cros ~deviceId updatenotes "~~notes~~\n#notes#"
|
||||
gam csv UpdateCrOS.csv gam update cros "~deviceId" updatenotes "~~notes~~\n#notes#"
|
||||
```
|
||||
|
||||
## Add ChromeOS devices to an organizational unit
|
||||
@@ -856,7 +856,7 @@ gam redirect stdout ./CrOSDeviceFiles.out redirect stderr stdout csvkmd cros ./C
|
||||
Download the device files in parallel.
|
||||
|
||||
```
|
||||
gam redirect stdout ./CrOSDeviceFiles.out multiprocess redirect stderr stdout csv ./CrOSDeviceFiles.csv matchfield deviceFiles.type LOG_FILE gam cros ~deviceId get devicefile select ~deviceFiles.createTime
|
||||
gam redirect stdout ./CrOSDeviceFiles.out multiprocess redirect stderr stdout csv ./CrOSDeviceFiles.csv matchfield deviceFiles.type LOG_FILE gam cros "~deviceId" get devicefile select "~deviceFiles".createTime
|
||||
```
|
||||
|
||||
Suppose you want only the last device file for each Chromebook.
|
||||
|
||||
@@ -272,6 +272,7 @@ gam create|add course [id|alias <CourseAlias>] <CourseAttribute>*
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
[materialstates <CourseMaterialStateList>]
|
||||
[workstates <CourseWorkStateList>]
|
||||
[individualstudentassignments copy|delete|maptoall]
|
||||
[removeduedate [<Boolean>]]
|
||||
[mapsharemodestudentcopy edit|none|view]
|
||||
[copymaterialsfiles [<Boolean>]]
|
||||
@@ -286,6 +287,7 @@ gam update course <CourseID> <CourseAttribute>+
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
[materialstates <CourseMaterialStateList>]
|
||||
[workstates <CourseWorkStateList>]
|
||||
[individualstudentassignments copy|delete|maptoall]
|
||||
[removeduedate [<Boolean>]]
|
||||
[mapsharemodestudentcopy edit|none|view]
|
||||
[copymaterialsfiles [<Boolean>]]
|
||||
@@ -299,6 +301,7 @@ gam update courses <CourseEntity> <CourseAttribute>+
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
[materialstates <CourseMaterialStateList>]
|
||||
[workstates <CourseWorkStateList>]
|
||||
[individualstudentassignments copy|delete|maptoall]
|
||||
[removeduedate [<Boolean>]]
|
||||
[mapsharemodestudentcopy edit|none|view]
|
||||
[copymaterialsfiles [<Boolean>]]
|
||||
@@ -315,6 +318,9 @@ gam update courses <CourseEntity> <CourseAttribute>+
|
||||
* `materialstates <CourseMaterialsStateList>` - Copy class materials with the specified states
|
||||
* Work - By default, no course work is copied
|
||||
* `workstates <CourseWorkStateList>` - Copy class work with the specified states
|
||||
* `individualstudentassignments copy` - Copy individual student assignments; this is the default. You will get an error if the student is not a member of the course.
|
||||
* `individualstudentassignments delete` - Delete individual student assignments
|
||||
* `individualstudentassignments maptoall` - Map individual student assignments to all student assignments
|
||||
* `removeduedate false` - Remove due dates before the current time; this is the default
|
||||
* `removeduedate|removeduedate true` - Remove all due dates
|
||||
* Announcements, Materials and Work Materials files
|
||||
|
||||
@@ -69,7 +69,7 @@ gam redirect stdout ./Invites.out redirect stderr stdout csvkmd users CourseStud
|
||||
```
|
||||
This command will invite all students to their courses in parallel
|
||||
```
|
||||
gam redirect stdout ./Invites.out multiprocess redirect stderr stdout multiprocess csv CourseStudent.csv gam user ~Student create classroominvitation role student course ~Course
|
||||
gam redirect stdout ./Invites.out multiprocess redirect stderr stdout multiprocess csv CourseStudent.csv gam user "~Student" create classroominvitation role student course "~Course"
|
||||
```
|
||||
## Accept classroom invitations by user
|
||||
Accept classroom invitations for users.
|
||||
|
||||
@@ -237,10 +237,10 @@ seniors@domain.org,/Students/ClassOf2018
|
||||
juniors@domain.org,/Students/ClassOf2019
|
||||
...
|
||||
```
|
||||
This allows you to do: `gam csv GradeOU.csv gam update cigroup ~Grade sync members ou ~OU`
|
||||
This allows you to do: `gam csv GradeOU.csv gam update cigroup "~Grade" sync members ou "~OU"`
|
||||
But suppose that at each grade level there are additional group members that are groups of faculty/staff; e.g., senioradvisors@domain.org.
|
||||
In this scenario, you can't do the `update cigroup sync` command as the members that are groups will be deleted; the `usersonly` option allows
|
||||
the `update cigroup sync` command to work: `gam csv GradeOU.csv gam update cigroup ~Grade sync members usersonly ou ~OU`
|
||||
the `update cigroup sync` command to work: `gam csv GradeOU.csv gam update cigroup "~Grade" sync members usersonly ou "~OU"`
|
||||
The users from the OU are matched against the user members of the group and adds/deletes are done as necessary to synchronize them;
|
||||
the group members of the group are unaffected.
|
||||
|
||||
|
||||
@@ -44,14 +44,14 @@ the sub-command lines and the initial command with a numeric return code.
|
||||
$ gam redirect stdout usernames.csv multiprocess redirect stderr stdout csv users.csv gam info user "~primaryEmail" quick name
|
||||
2021-08-01T19:50:38.151-07:00,0/6,Using 6 processes...
|
||||
$ more ~/.gam/gam.log
|
||||
2021-08-01T19:50:38.120-07:00,*,/Users/admin/bin/gamadv-xtd3/gam redirect stdout usernames.csv multiprocess redirect stderr stdout csv users.csv showcmds false gam info user ~primaryEmail quick name
|
||||
2021-08-01T19:50:38.120-07:00,*,/Users/admin/bin/gamadv-xtd3/gam redirect stdout usernames.csv multiprocess redirect stderr stdout csv users.csv showcmds false gam info user "~primaryEmail" quick name
|
||||
2021-08-01T19:50:39.144-07:00,0,gam info user testuser2 quick name
|
||||
2021-08-01T19:50:39.358-07:00,0,gam info user testuser3 quick name
|
||||
2021-08-01T19:50:39.358-07:00,0,gam info user testuser1 quick name
|
||||
2021-08-01T19:50:39.401-07:00,0,gam info user testuser5 quick name
|
||||
2021-08-01T19:50:39.459-07:00,56,gam info user testuserx quick name
|
||||
2021-08-01T19:50:39.470-07:00,0,gam info user testuser4 quick name
|
||||
2021-08-01T19:50:39.483-07:00,0,/Users/admin/bin/gamadv-xtd3/gam redirect stdout usernames.csv multiprocess redirect stderr stdout csv users.csv showcmds false gam info user ~primaryEmail quick name
|
||||
2021-08-01T19:50:39.483-07:00,0,/Users/admin/bin/gamadv-xtd3/gam redirect stdout usernames.csv multiprocess redirect stderr stdout csv users.csv showcmds false gam info user "~primaryEmail" quick name
|
||||
```
|
||||
|
||||
## Command Progress
|
||||
|
||||
@@ -10,6 +10,130 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
||||
|
||||
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation
|
||||
|
||||
### 6.77.03
|
||||
|
||||
Thanks to jay, added the following Colab License SKUs:
|
||||
```
|
||||
1010500001 - Colab Pro
|
||||
1010500002 - Colab Pro+
|
||||
```
|
||||
|
||||
Thanks to Jay, updated `gam print|show admins` to properly display addresses
|
||||
of service accounts with admin role assignments.
|
||||
|
||||
Added option `limitdatechanges <Integer>` to `gam report users|customers`.
|
||||
|
||||
If no report is available for the specified date, can an earlier date be used?
|
||||
* `limitdatechanges -1' - Back up to earlier dates to find report data; this is the default.
|
||||
* `limitdatechanges 0 | nodatechange' - Do not report on an earlier date if no report data is available for the specified date.
|
||||
* `limitdatechanges N' - Back up to earlier dates to find report data; do not back up more than N times.
|
||||
|
||||
By default, when `gam report user user <UserItem>` is specified and no report data is available, there is no output.
|
||||
If `csv_output_users_audit = true` in `gam.cfg`, then a row with columns `email,date` will be displayed
|
||||
where `date` is the earliest date for which report data was requested.
|
||||
|
||||
### 6.77.02
|
||||
|
||||
Cleaned up problems with some of the new Chat API asadmin commands.
|
||||
Some remaining problems may require a Google fix.
|
||||
|
||||
### 6.77.01
|
||||
|
||||
Thanks to Jay, added column `verificationCodesCount` to `gam <UserTypeEntity> print backupcodes`
|
||||
that displays the number of available backup codes in addtion to the codes.
|
||||
|
||||
Added option `countsonly` that displays only the number of available backup codes but not the codes themselves.
|
||||
|
||||
Thanks to Jay, added option `nokey` to `gam create project` that creates a project with no service account key, `oauth2service.json`.
|
||||
|
||||
### 6.77.00
|
||||
|
||||
Added option `individualstudentassignments copy|delete|maptoall` to `gam create|update course ... copyfrom`
|
||||
that controls how individual student assignments in the `copyfrom` course are processed.
|
||||
* `individualstudentassignments copy` - Copy individual student assignments; this is the default. You will get an error if the student is not a member of the course.
|
||||
* `individualstudentassignments delete` - Delete individual student assignments
|
||||
* `individualstudentassignments maptoall` - Map individual student assignments to all student assignments
|
||||
|
||||
Upgraded to Python 3.12.4 where possible.
|
||||
|
||||
Added option `asadmin` to the following Chat commands that allows admin access.
|
||||
These commands are in Developer Preview, your project must have Developer Preview enabled for the Chat API
|
||||
in order 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
|
||||
```
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Chat#developer-preview-admin-access
|
||||
|
||||
Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
||||
```
|
||||
* When False, GAM uses user access when making all Chat API calls. For calls that support admin access,
|
||||
this can be overridden with the asadmin command line option.
|
||||
* When True, GAM uses admin access for Chat API calls that support admin access; other calls will use user access.
|
||||
* Default: False
|
||||
```
|
||||
|
||||
### 6.76.15
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print|show filesharecounts summary only summaryuser <String>`
|
||||
that printed an erroneous row if `<UserTypeEntity>` specified a single user and `<String>` matched
|
||||
the user's email address.
|
||||
|
||||
### 6.76.14
|
||||
|
||||
Added the following Gemini License SKUs:
|
||||
```
|
||||
1010470004 - Gemini Education
|
||||
1010470005 - Gemini Education Premium
|
||||
```
|
||||
|
||||
### 6.76.13
|
||||
|
||||
Updated `gam <UserTypeEntity> show fileinfo ... showlabels` and `gam <UserTypeEntity> print filelist ... showlabels`
|
||||
to retry these errors that occur when trying to get the drive labels for a file/folder.
|
||||
```
|
||||
ERROR: 500: unknownError - Unknown Error.
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
Upgraded to OpenSSL 3.3.1 where possible.
|
||||
|
||||
### 6.76.12
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print|show chatspaces` that caused the following error:
|
||||
```
|
||||
ERROR: Got an unexpected keyword argument orderBy
|
||||
```
|
||||
|
||||
### 6.76.11
|
||||
|
||||
Thanks to Jay, added `gam report vault`.
|
||||
|
||||
Thanks to Jay, added the following Gemini SKUs:
|
||||
```
|
||||
1010470006 - AI Security
|
||||
1010470007 - AI Meetings and Messaging
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> print filelist ... showshareddrivepermissions` to display
|
||||
progress messages to stderr as a separate API call must be made for every file/folder on the Shared Drive
|
||||
to get its permissions. As this can take a long time, the progress messages indicate that progress is being made.
|
||||
|
||||
### 6.76.10
|
||||
|
||||
Added `fromgmail` to `<EventType>` that can be used in `gam calendars <CalendarEntity> print|show events ... eventtype fromgmail`.
|
||||
|
||||
* See: https://workspaceupdates.googleblog.com/2024/05/google-calendar-api-event-type-fromgmail.html
|
||||
|
||||
### 6.76.09
|
||||
|
||||
Updated `gam update|delete|info adminrole` to handle the following error:
|
||||
|
||||
@@ -279,6 +279,7 @@ If `actioncsv` is specified, a CSV file with columns `group,email,role,action,me
|
||||
that shows the actions performed when updating the group.
|
||||
|
||||
The option `additionalmembers [<GroupRole>] <EmailAddressEntity>` can be used to specify members in addition to those specified with `<UserTypeEntity>`.
|
||||
If a <GroupRole> is specified, it must match the same role as the one used for the group sync.
|
||||
|
||||
For example,
|
||||
```
|
||||
@@ -304,10 +305,10 @@ seniors@domain.org,/Students/ClassOf2023
|
||||
juniors@domain.org,/Students/ClassOf2024
|
||||
...
|
||||
```
|
||||
This allows you to do: `gam csv GradeOU.csv gam update group ~Grade sync members ou ~OU`
|
||||
This allows you to do: `gam csv GradeOU.csv gam update group "~Grade" sync members ou "~OU"`
|
||||
But suppose that at each grade level there are additional group members that are groups of faculty/staff; e.g., senioradvisors@domain.org.
|
||||
In this scenario, you can't do the `update group sync` command as the members that are groups will be deleted; the `usersonly` option allows
|
||||
the `update group sync` command to work: `gam csv GradeOU.csv gam update group ~Grade sync members usersonly ou ~OU`
|
||||
the `update group sync` command to work: `gam csv GradeOU.csv gam update group "~Grade" sync members usersonly ou "~OU"`
|
||||
The users from the OU are matched against the user members of the group and adds/deletes are done as necessary to synchronize them;
|
||||
the group members of the group are unaffected.
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
- [Definitions](#definitions)
|
||||
- [GUI API Group settings mapping](#gui-api-group-settings-mapping)
|
||||
- [GUI API Group access type settings mapping](#gui-api-group-access-type-settings-mapping)
|
||||
- [whoCanViewMembership and whoCanDiscoverGroup interactions](#whocanviewmembership-and-whocandiscovergroup-interactions)
|
||||
- [Manage groups](#manage-groups)
|
||||
- [Update a group's settings with JSON data](#update-a-groups-settings-with-json-data)
|
||||
- [Display information about specific groups](#display-information-about-specific-groups)
|
||||
@@ -303,6 +304,46 @@ Restricted
|
||||
whoCanViewMembership ALL_MEMBERS_CAN_VIEW
|
||||
```
|
||||
|
||||
## whoCanViewMembership and whoCanDiscoverGroup interactions
|
||||
Some combinations of these two settings are not allowed:
|
||||
```
|
||||
gam update group group@domain.com whoCanViewMembership ALL_IN_DOMAIN_CAN_VIEW whoCanDiscoverGroup ANYONE_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_OWNERS_CAN_VIEW whoCanDiscoverGroup ANYONE_CAN_DISCOVER
|
||||
Group: group@domain.com, Update Failed: Failed request validation in update settings: DONT_USE_OR_ELSE_WHO_CAN_MANAGE_MEMBERS_CANNOT_BE_BROADER_THAN_WHO_CAN_VIEW_MEMBERSHIP
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_MANAGERS_CAN_VIEW whoCanDiscoverGroup ANYONE_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_MEMBERS_CAN_VIEW whoCanDiscoverGroup ANYONE_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_IN_DOMAIN_CAN_VIEW whoCanDiscoverGroup ALL_IN_DOMAIN_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_OWNERS_CAN_VIEW whoCanDiscoverGroup ALL_IN_DOMAIN_CAN_DISCOVER
|
||||
Group: group@domain.com, Update Failed: Failed request validation in update settings: DONT_USE_OR_ELSE_WHO_CAN_MANAGE_MEMBERS_CANNOT_BE_BROADER_THAN_WHO_CAN_VIEW_MEMBERSHIP
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_MANAGERS_CAN_VIEW whoCanDiscoverGroup ALL_IN_DOMAIN_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_MEMBERS_CAN_VIEW whoCanDiscoverGroup ALL_IN_DOMAIN_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_IN_DOMAIN_CAN_VIEW whoCanDiscoverGroup ALL_MEMBERS_CAN_DISCOVER
|
||||
Group: group@domain.com, Update Failed: Failed request validation in update settings: WHO_CAN_VIEW_MEMBERSHIP_CANNOT_BE_BROADER_THAN_WHO_CAN_SEE_GROUP
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_OWNERS_CAN_VIEW whoCanDiscoverGroup ALL_MEMBERS_CAN_DISCOVER
|
||||
Group: group@domain.com, Update Failed: Failed request validation in update settings: DONT_USE_OR_ELSE_WHO_CAN_MANAGE_MEMBERS_CANNOT_BE_BROADER_THAN_WHO_CAN_VIEW_MEMBERSHIP
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_MANAGERS_CAN_VIEW whoCanDiscoverGroup ALL_MEMBERS_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
|
||||
gam update group group@domain.com whoCanViewMembership ALL_MEMBERS_CAN_VIEW whoCanDiscoverGroup ALL_MEMBERS_CAN_DISCOVER
|
||||
Group: group@domain.com, Updated
|
||||
```
|
||||
|
||||
## Manage groups
|
||||
|
||||
These commands allow you to create, update and delete groups.
|
||||
@@ -343,7 +384,7 @@ Getting Group Settings for testgroup4@domain.com (4/4)
|
||||
```
|
||||
Perform your experiments and then restore the original settings.
|
||||
```
|
||||
$ gam csv ./groups.csv quotechar "'" gam update group ~email json ~JSON-settings
|
||||
$ gam csv ./groups.csv quotechar "'" gam update group "~email" json "~JSON-settings"
|
||||
Using 4 processes...
|
||||
Group: testgroup1@domain.com, Updated
|
||||
Group: testgroup2@domain.com, Updated
|
||||
|
||||
@@ -335,10 +335,10 @@ writes the credentials into the file oauth2.txt.
|
||||
admin@server:/Users/admin/bin/gamadv-xtd3$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||
admin@server:/Users/admin/bin/gamadv-xtd3$ ./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.76.09 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.77.03 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.3 64-bit final
|
||||
MacOS Sonoma 14.4.1 x86_64
|
||||
Python 3.12.4 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
Path: /Users/admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
|
||||
@@ -1009,9 +1009,9 @@ writes the credentials into the file oauth2.txt.
|
||||
C:\GAMADV-XTD3>del C:\GAMConfig\oauth2.txt
|
||||
C:\GAMADV-XTD3>gam version
|
||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||
GAMADV-XTD3 6.76.09 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.77.03 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.3 64-bit final
|
||||
Python 3.12.4 64-bit final
|
||||
Windows-10-10.0.17134 AMD64
|
||||
Path: C:\GAMADV-XTD3
|
||||
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
| Cloud Identity Free | 101001 |
|
||||
| Cloud Identity Premium | 101005 |
|
||||
| Cloud Search | 101035 |
|
||||
| Colab | 101050 |
|
||||
| Education Endpoint Management | 101049 |
|
||||
| Gemini | 101047 |
|
||||
| Google Chrome Device Management | Google-Chrome-Device-Management |
|
||||
@@ -39,6 +40,8 @@
|
||||
|
||||
| License Name | License SKU | Abbreviation |
|
||||
|--------------|-------------|---------------|
|
||||
| AI Meetings and Messaging | 1010470007 | aimeetingsandmessaging |
|
||||
| AI Security | 1010470006 | aisecurity |
|
||||
| AppSheet Core | 1010380001 | appsheetcore |
|
||||
| AppSheet Enterprise Standard | 1010380002 | appsheetstandard |
|
||||
| AppSheet Enterprise Plus | 1010380003 | appsheetplus |
|
||||
@@ -47,12 +50,16 @@
|
||||
| Cloud Identity Free | 1010010001 | cloudidentity |
|
||||
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
||||
| Cloud Search | 1010350001 | cloudsearch |
|
||||
| Colab Pro | 1010500001 | colabpro |
|
||||
| Colab Pro+ | 1010500002 | colabpro+ | colabproplus |
|
||||
| Endpoint Education Upgrade | 1010490001 | eeu |
|
||||
| G Suite Basic | Google-Apps-For-Business | gsuitebasic |
|
||||
| G Suite Business | Google-Apps-Unlimited | gsuitebusiness |
|
||||
| G Suite Legacy | Google-Apps | standard |
|
||||
| G Suite Lite | Google-Apps-Lite | gsuitelite |
|
||||
| Gemini Business | 1010470003 | geminibiz
|
||||
| Gemini Education | 1010470004 | geminiedu |
|
||||
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
||||
| Gemini Enterprise | 1010470001 | geminient | duetai |
|
||||
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
||||
| Google Chrome Device Management | Google-Chrome-Device-Management | cdm |
|
||||
@@ -119,6 +126,7 @@
|
||||
101043 |
|
||||
101047 |
|
||||
101049 |
|
||||
101050 |
|
||||
Google-Apps |
|
||||
Google-Chrome-Device-Management |
|
||||
Google-Drive-storage |
|
||||
@@ -136,6 +144,8 @@
|
||||
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
||||
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
||||
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
||||
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
||||
aisecurity | 1010470006 | AI Security |
|
||||
appsheetcore | 1010380001 | AppSheet Core |
|
||||
appsheetstandard | appsheetenterprisestandard | 1010380002 | AppSheet Enterprise Standard |
|
||||
appsheetplus | appsheetenterpriseplus | 1010380003 | AppSheet Enterprise Plus |
|
||||
@@ -145,8 +155,12 @@
|
||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||
cloudsearch | 1010350001 | Cloud Search |
|
||||
colabpro | 1010500001 | Colab Pro |
|
||||
colabpro+ | colabproplus | 1010500002 | Colab Pro+ |
|
||||
eeu | 1010490001 | SKU Endpoint Education Upgrade |
|
||||
geminibiz | 1010470003 | Gemini Business |
|
||||
geminiedu | 1010470004 | Gemini Education |
|
||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||
|
||||
@@ -171,9 +171,9 @@ If the pattern `{{Section}}` appears in `<FileName>`, it will be replaced with t
|
||||
### Examples - redirect CSV
|
||||
Suppose that you have a CSV file CourseList.csv with a column labeled CourseId that contains course Ids. You want a single CSV file with participant information for these courses.
|
||||
```
|
||||
gam redirect csv ./CourseInfo.csv multiprocess csv CourseList.csv gam print course-participants course ~CourseId
|
||||
gam redirect csv ./CourseInfo.csv multiprocess csv CourseList.csv gam print course-participants course "~CourseId"
|
||||
```
|
||||
`redirect csv ./CourseInfo.csv multiprocess` causes gam to collect output from all of the processes started by `csv CourseList.csv gam print course-participants course ~CourseId` and produces a single CSV file CourseInfo.csv.
|
||||
`redirect csv ./CourseInfo.csv multiprocess` causes gam to collect output from all of the processes started by `csv CourseList.csv gam print course-participants course "~CourseId"` and produces a single CSV file CourseInfo.csv.
|
||||
|
||||
Generate a list of CrOS devices and update an existing sheet in a Google spreadsheet. The file ID and sheet IDs are preserved so other appplications can access the data using the file ID and sheet ID.
|
||||
By setting 'tdtimestamp true`, the file name will the updated to reflect the time of execution, but the file ID will not change.
|
||||
@@ -183,23 +183,23 @@ gam redirect csv - todrive tdtitle "CrOS" tdtimestamp true tdfileid 12345-mizZ6Q
|
||||
|
||||
For a collection of users, generate a list of files shared with anyone; combine the output for all users into a single file.
|
||||
```
|
||||
gam redirect csv - multiprocess todrive tdtitle AnyoneShares-All csv Users.csv gam user ~primaryEmail print filelist fields id,name,permissions pm type anyone em
|
||||
gam redirect csv - multiprocess todrive tdtitle AnyoneShares-All csv Users.csv gam user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em
|
||||
```
|
||||
|
||||
For a collection of users, generate a list of files shared with anyone; generate a separate file for each user.
|
||||
The two forms of the command are equivalent.
|
||||
```
|
||||
gam csv Users.csv gam redirect csv - todrive tdtitle "AnyoneShares-~~primaryEmail~~" user ~primaryEmail print filelist fields id,name,permissions pm type anyone em
|
||||
gam csv Users.csv gam redirect csv - todrive tdtitle "AnyoneShares-~~primaryEmail~~" user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em
|
||||
|
||||
gam csv Users.csv gam user ~primaryEmail print filelist fields id,name,permissions pm type anyone em todrive tdtitle "AnyoneShares-~~primaryEmail~~"
|
||||
gam csv Users.csv gam user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em todrive tdtitle "AnyoneShares-~~primaryEmail~~"
|
||||
```
|
||||
|
||||
### Examples - Redirect stdout
|
||||
The output from each of the `gam info user ~primaryEmail` commands will be combined into the single file Users.txt.
|
||||
The output from each of the `gam info user "~primaryEmail"` commands will be combined into the single file Users.txt.
|
||||
The value of `show_multiprocess_info` from `gam.cfg` controls whether information identifying the processes is also shown.
|
||||
|
||||
```
|
||||
$ gam config show_multiprocess_info false redirect stdout ./Users.txt multiprocess csv Users.csv gam info user ~primaryEmail
|
||||
$ gam config show_multiprocess_info false redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
|
||||
$ more Users.txt
|
||||
User: testuser1@domain.com (1/1)
|
||||
Settings:
|
||||
@@ -214,9 +214,9 @@ User: testuser2@domain.com@ (1/1)
|
||||
Full Name: Test User2
|
||||
...
|
||||
|
||||
$ gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user ~primaryEmail
|
||||
$ gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
|
||||
$ more Users.txt
|
||||
stdout: 0, Start: 2017-01-26T11:35:00.897773-08:00, RC: 0, Cmd: /Users/admin/gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user ~primaryEmail
|
||||
stdout: 0, Start: 2017-01-26T11:35:00.897773-08:00, RC: 0, Cmd: /Users/admin/gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
|
||||
stdout: 1, Start: 2017-01-26T11:35:00.902709-08:00, RC: 0, Cmd: gam info user testuser1@domain.com
|
||||
User: testuser1@domain.com (1/1)
|
||||
Settings:
|
||||
@@ -233,5 +233,5 @@ User: testuser2@domain.com@ (1/1)
|
||||
Full Name: Test User2
|
||||
...
|
||||
stdout: 2, End: 2017-01-26T11:35:02.849646-08:00, RC: 0, Cmd: gam info user testuser2@domain.com
|
||||
stdout: 0, End: 2017-01-26T11:35:02.907141-08:00, RC: 0, Cmd: /Users/admin/gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user ~primaryEmail
|
||||
stdout: 0, End: 2017-01-26T11:35:02.907141-08:00, RC: 0, Cmd: /Users/admin/gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
|
||||
```
|
||||
|
||||
@@ -10,7 +10,8 @@ Thank you.
|
||||
* Goldy Arora - https://www.goldyarora.com/license-notifier/
|
||||
* Iain Macleod - https://docs.google.com/document/d/1QxWAPdhROcx70OXLpSD9Trh3vs-nJKSMiaMZCTwOOTg/edit?pli=1#heading=h.2a2azzpy36k0
|
||||
* James Seymour - https://sites.google.com/jis.edu.bn/gam-commands/home
|
||||
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
||||
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
||||
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist - A helpful tool to assist with, GAM (+Advance) and GYB commands to assist with syntax for Google Workspace Administrators.
|
||||
* Paul Ogier (Taming.Tech) - GAMADV-XTD3 Course on Udemy https://taming.tech/GAMCourse
|
||||
* Paul Ogier (Taming.Tech) - GAMADV-XTD3 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
||||
* Paul Ogier (Taming.Tech) - https://taming.tech/taming-gam-a-practical-guide-to-gam-and-gamadv-xtd3/
|
||||
|
||||
@@ -97,7 +97,7 @@ In the `print/show drivefileacls` and `create/delete permissions` commands you c
|
||||
* `expirationend <Time>` - For types user and group, will the permission expire before or on <Time>.
|
||||
* `deleted <Boolean>` - For types user and groups, has the user or group been deleted.
|
||||
* `inherited <Boolean>` - For Shared Drive files/folders, is the permission inherited
|
||||
* `pmtype member|file` - For Shared Drive files/folders, is the permission derived from membership or explicitly granted.
|
||||
* `pmtype member|file` - For Shared Drive files/folders, is the permission derived from membership or explicitly granted.
|
||||
* `em|endmatch` - End of permission match definition
|
||||
|
||||
## File Selection Examples
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
rules|
|
||||
saml|
|
||||
token|tokens|oauthtoken|
|
||||
useraccounts
|
||||
useraccounts|
|
||||
vault
|
||||
|
||||
gam report <ActivityApplicationName> [todrive <ToDriveAttributes>*]
|
||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
||||
@@ -233,7 +234,7 @@ Customer reports are generally available up to two days before the current date.
|
||||
gam report customers|customer|domain [todrive <ToDriveAttributes>*]
|
||||
[(date <Date>)|(range <Date> <Date>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[nodatechange|(fulldatarequired all|<CustomerServiceNameList>)]
|
||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<CustomerServiceNameList>)]
|
||||
[(fields|parameters <String>)|(services <CustomerServiceNameList>)]
|
||||
[noauthorizedapps]
|
||||
```
|
||||
@@ -246,7 +247,9 @@ Specify the report date; the default is today's date.
|
||||
* `previousmonths <Integer>` - A number in the range 1 to 6 indicating calendar months previous to the current month; there is an API call per date
|
||||
|
||||
If no report is available for the specified date, can an earlier date be used?
|
||||
* `nodatechange` - Do not report on an earlier date if no report is available for the specified date.
|
||||
* `limitdatechanges -1' - Back up to earlier dates to find report data; this is the default.
|
||||
* `limitdatechanges 0 | nodatechange' - Do not report on an earlier date if no report data is available for the specified date.
|
||||
* `limitdatechanges N' - Back up to earlier dates to find report data; do not back up more than N times.
|
||||
|
||||
If only partial report data is available for the specified date and applications, can an earlier date be used?
|
||||
* `fulldatarequired all` - Back up to an earlier date to get complete data until all applications have full report data
|
||||
@@ -327,7 +330,7 @@ gam report users|user [todrive <ToDriveAttributes>*]
|
||||
[allverifyuser <UserItem>]
|
||||
[(date <Date>)|(range <Date> <Date>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[nodatechange|(fulldatarequired all|<UserServiceNameList>)]
|
||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
||||
[filtertime.* <Time>] [filter|filters <String>]
|
||||
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
||||
[aggregatebydate|aggregatebyuser [Boolean]]
|
||||
@@ -352,12 +355,18 @@ Specify the report date; the default is today's date.
|
||||
* `previousmonths <Integer>` - A number in the range 1 to 6 indicating calendar months previous to the current month; there is an API call per date
|
||||
|
||||
If no report is available for the specified date, can an earlier date be used?
|
||||
* `nodatechange` - Do not report on an earlier date if no report is available for the specified date.
|
||||
* `limitdatechanges -1' - Back up to earlier dates to find report data; this is the default.
|
||||
* `limitdatechanges 0 | nodatechange' - Do not report on an earlier date if no report data is available for the specified date.
|
||||
* `limitdatechanges N' - Back up to earlier dates to find report data; do not back up more than N times.
|
||||
|
||||
If only partial report data is available for the specified date and applications, can an earlier date be used?
|
||||
* `fulldatarequired all` - Back up to an earlier date to get complete data until all applications have full report data
|
||||
* `fulldatarequired <UserServiceNameList>` - Back up to an earlier date to get complete data until all applications in `<UserServiceNameList>` have full report data
|
||||
|
||||
By default, when `user <UserItem>` is specified and no report data is available, there is no output.
|
||||
If `csv_output_users_audit = true` in `gam.cfg`, then a row with columns `email,date` will be displayed
|
||||
where `date` is the earliest date for which report data was requested.
|
||||
|
||||
Apply filters.
|
||||
* `filter|filters <String>` - `<String>` is a comma separated list of filter expressions.
|
||||
|
||||
@@ -390,6 +399,10 @@ Report on users Google Drive usage.
|
||||
```
|
||||
gam report users parameters accounts:drive_used_quota_in_mb,accounts:total_quota_in_mb,accounts:used_quota_in_mb,accounts:used_quota_in_percentage
|
||||
```
|
||||
Report on users total storage usage.
|
||||
```
|
||||
gam report users parameters accounts:drive_used_quota_in_mb,accounts:gmail_used_quota_in_mb,accounts:gplus_photos_used_quota_in_mb,accounts:total_quota_in_mb,accounts:used_quota_in_mb,accounts:used_quota_in_percentage
|
||||
```
|
||||
Report on email activity for individual users.
|
||||
```
|
||||
$ gam report users select users testuser1,testuser2,testuser3 fields gmail:num_emails_received,gmail:num_emails_sent range 2023-07-01 2023-07-07
|
||||
|
||||
@@ -59,17 +59,23 @@ Thanks to Duncan Isaksen-Loxton for a script to help manage multiple domains.
|
||||
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
||||
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
||||
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
||||
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
||||
aisecurity | 1010470006 | AI Security |
|
||||
appsheetcore | 1010380001 | AppSheet Core |
|
||||
appsheetstandard | appsheetenterprisestandard | 1010380002 | AppSheet Enterprise Standard |
|
||||
appsheetplus | appsheetenterpriseplus | 1010380003 | AppSheet Enterprise Plus |
|
||||
assuredcontrols | 1010390001 | Assured Controls |
|
||||
bce | beyondcorp | beyondcorpenterprise | 1010400001 | Beyond Corp Enterprise |
|
||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||
cloudsearch | 1010350001 | Cloud Search |
|
||||
colabpro | 1010500001 | Colab Pro |
|
||||
colabpro+ | colabproplus | 1010500002 | Colab Pro+ |
|
||||
eeu | 1010490001 | SKU Endpoint Education Upgrade |
|
||||
geminibiz | 1010470003 | Gemini Business |
|
||||
geminiedu | 1010470004 | Gemini Education |
|
||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||
|
||||
@@ -304,15 +304,15 @@ gam redirect csv - todrive tdtitle "CrOS" tdtimestamp true tdfileid 12345-mizZ6Q
|
||||
|
||||
For a collection of users, generate a list of files shared with anyone; combine the output for all users into a single file.
|
||||
```
|
||||
gam redirect csv - multiprocess todrive tdtitle AnyoneShares-All csv Users.csv gam user ~primaryEmail print filelist fields id,name,permissions pm type anyone em
|
||||
gam redirect csv - multiprocess todrive tdtitle AnyoneShares-All csv Users.csv gam user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em
|
||||
```
|
||||
|
||||
For a collection of users, generate a list of files shared with anyone; generate a separate file for each user.
|
||||
The two forms of the command are equivalent.
|
||||
```
|
||||
gam csv Users.csv gam redirect csv - todrive tdtitle "AnyoneShares-~~primaryEmail~~" user ~primaryEmail print filelist fields id,name,permissions pm type anyone em
|
||||
gam csv Users.csv gam redirect csv - todrive tdtitle "AnyoneShares-~~primaryEmail~~" user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em
|
||||
|
||||
gam csv Users.csv gam user ~primaryEmail print filelist fields id,name,permissions pm type anyone em todrive tdtitle "AnyoneShares-~~primaryEmail~~"
|
||||
gam csv Users.csv gam user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em todrive tdtitle "AnyoneShares-~~primaryEmail~~"
|
||||
```
|
||||
|
||||
Suppose you have a spreadsheet with sheets `Monday` ... `Friday`, `Backup Monday` ... `Backup Friday` and `Latest`.
|
||||
|
||||
@@ -31,8 +31,10 @@ Exit Status of 0 indicates no errors, and backup codes are sent to stdout.
|
||||
|
||||
Exit status of 60 indicates no errors, and that no backup codes are available for this user.
|
||||
```
|
||||
gam <UserTypeEntity> print backupcodes|verificationcodes [todrive <ToDriveAttributes>*] [delimiter <Character>]
|
||||
gam <UserTypeEntity> print backupcodes|verificationcodes [todrive <ToDriveAttributes>*]
|
||||
[delimiter <Character>] [countsonly]
|
||||
```
|
||||
Gam displays the information in CSV form.
|
||||
GAM displays the information in CSV form.
|
||||
|
||||
* `delimiter <Character>` - Separate `verificationCodes` entries with `<Character>`; the default value is `csv_output_field_delimiter` from `gam.cfg`.
|
||||
* `countsonly` - Display only the number of available backup codes but not the codes themselves.
|
||||
|
||||
@@ -243,6 +243,7 @@
|
||||
<EventType> ::=
|
||||
default|
|
||||
focustime|
|
||||
fromgmail|
|
||||
outofoffice|
|
||||
workinglocation
|
||||
<EventTypeList> ::= "<EventType>(,<EventType>)*"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# 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)
|
||||
- [Manage Chat Spaces](#manage-chat-spaces)
|
||||
@@ -19,6 +20,7 @@
|
||||
* 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://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
|
||||
## Introduction
|
||||
These features were added in version 6.60.00.
|
||||
@@ -27,12 +29,55 @@ To use these commands you must update your service account authorization.
|
||||
```
|
||||
gam user user@domain.com update serviceaccount
|
||||
|
||||
[*] 3) Chat API - Memberships (supports readonly)
|
||||
[*] 4) Chat API - Messages (supports readonly)
|
||||
[*] 5) Chat API - Spaces (supports readonly)
|
||||
[*] 6) Chat API - Spaces Delete
|
||||
[*] 4) Chat API - Memberships (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)
|
||||
[*] 10) Chat API - Spaces Delete Admin
|
||||
```
|
||||
|
||||
Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
||||
```
|
||||
* When False, GAM uses user access when making all Chat API calls. For calls that support admin access,
|
||||
this can be overridden with the asadmin command line option.
|
||||
* When True, GAM uses admin access for Chat API calls that support admin access; other calls will use user access.
|
||||
* Default: False
|
||||
```
|
||||
|
||||
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.
|
||||
```
|
||||
|
||||
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
|
||||
@@ -81,6 +126,65 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
<ChatMessageID> ::= client-<String>
|
||||
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
||||
```
|
||||
```
|
||||
<ChatSpaceFieldName> ::=
|
||||
accesssettings|
|
||||
admininstalled|
|
||||
createtime|
|
||||
displayname|
|
||||
externaluserallowed|
|
||||
importmode|
|
||||
lastactivetime|
|
||||
membershipcount|
|
||||
name|
|
||||
singleuserbotdm|
|
||||
spacedetails|
|
||||
spacehistorystate|
|
||||
spacethreadingstate|threaded|
|
||||
spacetype|type|
|
||||
spaceuri
|
||||
<ChatSpaceFieldNameList> ::= "<ChatSpaceFieldName>(,<ChatSpaceFieldName>)*"
|
||||
|
||||
<ChatMemberFieldName> ::=
|
||||
createtime|
|
||||
deletetime|
|
||||
groupmember|
|
||||
member|
|
||||
name|
|
||||
role|
|
||||
state|
|
||||
<ChatMemberFieldNameList> ::= "<ChatMemberFieldName>(,<ChatMemberFieldName>)*"
|
||||
|
||||
<ChatMessageFieldName> ::=
|
||||
accessorywidgets|
|
||||
actionresponse|
|
||||
annotations|
|
||||
argumenttext|
|
||||
attachedgifs|
|
||||
attachment|
|
||||
cards|
|
||||
cardsv2|
|
||||
clientassignedmessageid|
|
||||
createtime|
|
||||
deletetime|
|
||||
deletionmetadata|
|
||||
emojireactionsummaries|
|
||||
fallbacktext|
|
||||
formattedtext|
|
||||
lastupdatetime|
|
||||
matchedurl|
|
||||
name|
|
||||
privatemessageviewer|
|
||||
quotedmessagemetadata|
|
||||
sender|
|
||||
slashcommand|
|
||||
space|
|
||||
text|
|
||||
thread|
|
||||
threadreply
|
||||
<ChatMessageFieldNameList> ::= "<ChatMessageFieldName>(,<ChatMessageFieldName>)*"
|
||||
|
||||
```
|
||||
|
||||
## Manage Chat Spaces
|
||||
### Create a chat space
|
||||
@@ -128,7 +232,7 @@ The `restricted|audience` options are in Developer Preview and will not be gener
|
||||
By default, details about the chatmessage are displayed.
|
||||
* `returnidonly` - Display the chatmessage name only
|
||||
|
||||
### Update a chat space
|
||||
### Update a user's chat space
|
||||
```
|
||||
gam <UserTypeEntity> update chatspace <ChatSpace>
|
||||
[restricted|(audience <String>)]|
|
||||
@@ -146,15 +250,39 @@ 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.
|
||||
|
||||
### Delete a chat space
|
||||
### Update a chat space, asadmin
|
||||
```
|
||||
gam <UserItem> update chatspace asadmin <ChatSpace>
|
||||
[restricted|(audience <String>)]|
|
||||
([displayname <String>]
|
||||
[type space]
|
||||
[description <String>] [guidelines|rules <String>]
|
||||
[history <Boolean>])
|
||||
[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.
|
||||
|
||||
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.
|
||||
|
||||
### Delete a user's chat space
|
||||
```
|
||||
gam <UserTypeEntity> delete chatspace <ChatSpace>
|
||||
```
|
||||
|
||||
### Delete a chat space, asadmin
|
||||
```
|
||||
gam <UserItem> delete chatspace asadmin <ChatSpace>
|
||||
```
|
||||
|
||||
## Display Chat Spaces
|
||||
### Display information about a specific chat space for a user
|
||||
```
|
||||
gam <UserTypeEntity> info chatspace <ChatSpace>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -163,6 +291,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
### Display information about a direct message chat space between two users
|
||||
```
|
||||
gam <UserTypeEntity> info chatspacedm <UserItem>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -172,16 +301,24 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
```
|
||||
gam <UserTypeEntity> show chatspaces
|
||||
[types <ChatSpaceTypeList>]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, chat spaces of all types are displayed.
|
||||
* `types <ChatSpaceTypeList>` - Display specific types of spaces.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print chatspaces [todrive <ToDriveAttribute>*]
|
||||
[types <ChatSpaceTypeList>]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, chat spaces of all types are displayed.
|
||||
* `types <ChatSpaceTypeList>` - Display specific types of spaces.
|
||||
|
||||
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.
|
||||
|
||||
@@ -191,7 +328,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 information about all chat spaces
|
||||
### Display information about all user's chat spaces
|
||||
```
|
||||
# Local file
|
||||
gam config auto_batch_min 1 redirect csv ./AllChatSpaces.csv multiprocess redirect stdout - multiprocess redirect stderr stdout all users print chatspaces
|
||||
@@ -212,8 +349,56 @@ 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 information about a specific chat space, asadmin
|
||||
```
|
||||
gam <UserItem> info chatspace asadmin <ChatSpace>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
### Display information about all chat spaces, asadmin
|
||||
For query and orderby information, see: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
|
||||
Only spaces of `<ChatSpaceType>` `space` are displayed; spaces of `<ChatSpaceType>` `groupchat` and `directmessage` are not displayed.
|
||||
```
|
||||
gam <UserItem> show chatspaces asadmin
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, all chat spaces of type SPACE are displayed.
|
||||
* `query <String> [querytime<String> <Time>]` - Display selected chat spaces
|
||||
* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserItem> print chatspaces asadmin [todrive <ToDriveAttribute>*]
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, all chat spaces of type SPACE are displayed.
|
||||
* `query <String> [querytime<String> <Time>]` - Display selected chat spaces
|
||||
* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
|
||||
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.
|
||||
|
||||
|
||||
## Manage Chat Members
|
||||
### Add members to a chat space
|
||||
### Add members to a user's chat space
|
||||
```
|
||||
gam <UserTypeEntity> create chatmember <ChatSpace>
|
||||
[type human|bot] [role member|manager]
|
||||
@@ -225,7 +410,7 @@ By default, Gam displays the information about the chatmember as an indented lis
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
* `returnidonly` - Display the chatmember name only
|
||||
|
||||
### Delete members from a chat space
|
||||
### Delete members from a user's chat space
|
||||
Delete members by specifying a chat space and user/group email addresses.
|
||||
```
|
||||
gam <UserTypeEntity> delete chatmember <ChatSpace>
|
||||
@@ -233,12 +418,37 @@ gam <UserTypeEntity> delete chatmember <ChatSpace>
|
||||
(group <GroupItem>)|(groups <GroupEntity>))+
|
||||
```
|
||||
|
||||
Delete members by specifying chatmember names.
|
||||
Delete members from a user's chat space by specifying chatmember names.
|
||||
```
|
||||
gam <UserTypeEntity> remove chatmember members <ChatMemberList>
|
||||
```
|
||||
|
||||
### Update members role
|
||||
### Add members to a chat space, asadmin
|
||||
```
|
||||
gam <UserItem> create chatmember asadmin <ChatSpace>
|
||||
[type human|bot] [role member|manager]
|
||||
(user <UserItem>)* (members <UserTypeEntity>)*
|
||||
(group <GroupItem>)* (groups <GroupEntity>)*
|
||||
[formatjson|returnidonly]
|
||||
```
|
||||
By default, Gam displays the information about the chatmember as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
* `returnidonly` - Display the chatmember name only
|
||||
|
||||
### Delete members from a chat space, asadmin
|
||||
Delete members by specifying a chat space and user/group email addresses.
|
||||
```
|
||||
gam <UserItem> delete chatmember asadmin <ChatSpace>
|
||||
((user <UserItem>)|(members <UserTypeEntity>)|
|
||||
(group <GroupItem>)|(groups <GroupEntity>))+
|
||||
```
|
||||
|
||||
Delete members from a chat space by specifying chatmember names, asadmin
|
||||
```
|
||||
gam <UserItem> remove chatmember members asadmin <ChatMemberList>
|
||||
```
|
||||
|
||||
### Update a members role in a user's chat space
|
||||
Update members by specifying a chat space, user/group email addresses and role.
|
||||
```
|
||||
gam <UserTypeEntity> update chatmember <ChatSpace>
|
||||
@@ -252,31 +462,98 @@ gam <UserTypeEntity> modify chatmember
|
||||
members <ChatMemberList>
|
||||
```
|
||||
|
||||
### Update a members role in a chat space, asadmin
|
||||
Update members by specifying a chat space, user/group email addresses and role.
|
||||
```
|
||||
gam <UserItem> update chatmember asadmin <ChatSpace>
|
||||
role member|manager
|
||||
((user <UserItem>)|(members <UserTypeEntity>))+
|
||||
```
|
||||
Update members by specifying chatmember names and role.
|
||||
```
|
||||
gam <UserItem> modify chatmember asadmin
|
||||
role member|manager
|
||||
members <ChatMemberList>
|
||||
```
|
||||
|
||||
## Display Chat Members
|
||||
### Display information about a specific chat members
|
||||
### Display information about a user's specific chat members
|
||||
```
|
||||
gam <UserTypeEntity> info chatmember members <ChatMemberList>
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
### Display information about all chat members in a chat space
|
||||
### Display information about members in a user's chat spaces
|
||||
```
|
||||
gam <UserTypeEntity> show chatmembers <ChatSpace>
|
||||
gam <UserTypeEntity> show chatmembers
|
||||
<ChatSpace>* [types <ChatSpaceTypeList>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
|
||||
By default, members for all of a user's chat spaces of all types are displayed.
|
||||
* `<ChatSpace>` - Display members for a specific chat space
|
||||
* `types <ChatSpaceTypeList>` - Display members for specific types of spaces.
|
||||
|
||||
By default, all JOINED user members in a chat space are displayed.
|
||||
* `showinvited` - Display `INVITED` members.
|
||||
* `showgroups` - Display group members,
|
||||
* `filter <String>` - Filter memberships by a member's `role `and `member.type`.
|
||||
* To filter by role, set role to ROLE_MEMBER or ROLE_MANAGER.
|
||||
* To filter by type, set member.type to HUMAN or BOT.
|
||||
* To filter by both role and type, use the AND operator.
|
||||
* To filter by either role or type, use the OR operator.
|
||||
|
||||
For example, the following filters are valid:
|
||||
```
|
||||
role = "ROLE_MANAGER" OR role = "ROLE_MEMBER"
|
||||
member.type = "HUMAN" AND role = "ROLE_MANAGER"
|
||||
```
|
||||
The following filters are invalid:
|
||||
```
|
||||
member.type = "HUMAN" AND member.type = "BOT"
|
||||
role = "ROLE_MANAGER" AND role = "ROLE_MEMBER"
|
||||
```
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print chatmembers [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
gam <UserTypeEntity> print chatmembers [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>* [types <ChatSpaceTypeList>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
By default, members for all of a user's chat spaces of all types are displayed.
|
||||
* `<ChatSpace>` - Display members for a specific chat space
|
||||
* `types <ChatSpaceTypeList>` - Display members for specific types of spaces.
|
||||
|
||||
By default, all JOINED user members in a chat space are displayed.
|
||||
* `showinvited` - Display `INVITED` members.
|
||||
* `showgroups` - Display group members,
|
||||
* `filter <String>` - Filter memberships by a member's `role `and `member.type`.
|
||||
* To filter by role, set role to ROLE_MEMBER or ROLE_MANAGER.
|
||||
* To filter by type, set member.type to HUMAN or BOT.
|
||||
* To filter by both role and type, use the AND operator.
|
||||
* To filter by either role or type, use the OR operator.
|
||||
|
||||
For example, the following filters are valid:
|
||||
```
|
||||
role = "ROLE_MANAGER" OR role = "ROLE_MEMBER"
|
||||
member.type = "HUMAN" AND role = "ROLE_MANAGER"
|
||||
```
|
||||
The following filters are invalid:
|
||||
```
|
||||
member.type = "HUMAN" AND member.type = "BOT"
|
||||
role = "ROLE_MANAGER" AND role = "ROLE_MEMBER"
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
@@ -286,25 +563,95 @@ 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.
|
||||
|
||||
By default, only `JOINED` members are displayed; use `showinvited` to also display `INVITED` members.
|
||||
### Display information about specific chat members, asadmin
|
||||
```
|
||||
gam <UserItem> info chatmember asadmin members <ChatMemberList>
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
Use `filter <String>` to filter memberships by a member's `role `and `member.type`.
|
||||
* To filter by role, set role to ROLE_MEMBER or ROLE_MANAGER.
|
||||
* To filter by type, set member.type to HUMAN or BOT.
|
||||
* To filter by both role and type, use the AND operator.
|
||||
* To filter by either role or type, use the OR operator.
|
||||
### Display information about members all chat spaces, asadmin
|
||||
For query and orderby information, see: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
```
|
||||
gam <UserItem> show chatmembers asadmin
|
||||
<ChatSpace>* [query <String>] [querytime<String> <Time>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
|
||||
For example, the following queries are valid:
|
||||
By default, members for all chat spaces of type SPACE are displayed.
|
||||
* `<ChatSpace>` - Display members for a specific chat space
|
||||
* `query <String> [querytime<String> <Time>]` - Display members for selected chat spaces
|
||||
* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
|
||||
By default, all JOINED user members in a chat space are displayed.
|
||||
* `showinvited` - Display `INVITED` members.
|
||||
* `showgroups` - Display group members,
|
||||
* `filter <String>` - Filter memberships by a member's `role `and `member.type`.
|
||||
* To filter by role, set role to ROLE_MEMBER or ROLE_MANAGER.
|
||||
* To filter by type, set member.type to HUMAN or BOT.
|
||||
* To filter by both role and type, use the AND operator.
|
||||
* To filter by either role or type, use the OR operator.
|
||||
|
||||
For example, the following filters are valid:
|
||||
```
|
||||
role = "ROLE_MANAGER" OR role = "ROLE_MEMBER"
|
||||
member.type = "HUMAN" AND role = "ROLE_MANAGER"
|
||||
```
|
||||
The following queries are invalid:
|
||||
The following filters are invalid:
|
||||
```
|
||||
member.type = "HUMAN" AND member.type = "BOT"
|
||||
role = "ROLE_MANAGER" AND role = "ROLE_MEMBER"
|
||||
```
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserItem> print chatmembers asadmin [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>* [query <String>] [querytime<String> <Time>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
By default, members for all chat spaces of type SPACE are displayed.
|
||||
* `<ChatSpace>` - Display members for a specific chat space
|
||||
* `query <String> [querytime<String> <Time>]` - Display members for selected chat spaces
|
||||
* See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
|
||||
|
||||
By default, all JOINED user members in a chat space are displayed.
|
||||
* `showinvited` - Display `INVITED` members.
|
||||
* `showgroups` - Display group members,
|
||||
* `filter <String>` - Filter memberships by a member's `role `and `member.type`.
|
||||
* To filter by role, set role to ROLE_MEMBER or ROLE_MANAGER.
|
||||
* To filter by type, set member.type to HUMAN or BOT.
|
||||
* To filter by both role and type, use the AND operator.
|
||||
* To filter by either role or type, use the OR operator.
|
||||
|
||||
For example, the following filters are valid:
|
||||
```
|
||||
role = "ROLE_MANAGER" OR role = "ROLE_MEMBER"
|
||||
member.type = "HUMAN" AND role = "ROLE_MANAGER"
|
||||
```
|
||||
The following filters are invalid:
|
||||
```
|
||||
member.type = "HUMAN" AND member.type = "BOT"
|
||||
role = "ROLE_MANAGER" AND role = "ROLE_MEMBER"
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
### Delete a user from their `space` and `groupchat` spaces
|
||||
There is no way to delete a user from a directmessage space.
|
||||
```
|
||||
@@ -397,6 +744,7 @@ Display a specific Chat message.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -409,16 +757,20 @@ gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx
|
||||
|
||||
### Display information about all chat messages in a chat space
|
||||
```
|
||||
gam <UserTypeEntity> show chatmessages <ChatSpace>
|
||||
gam <UserTypeEntity> show chatmessages
|
||||
<ChatSpace>+
|
||||
[showdeleted [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>+
|
||||
[showdeleted [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
@@ -482,7 +834,8 @@ gam user user@domain.com info chatevent name spaces/AAAAsUhqjkg/spaceEvents/MTcx
|
||||
|
||||
### Display information about all chat events in a chat space
|
||||
```
|
||||
gam <UserTypeEntity> show chatevents <ChatSpace>
|
||||
gam <UserTypeEntity> show chatevents
|
||||
<ChatSpace>+
|
||||
filter <String>
|
||||
[formatjson]
|
||||
```
|
||||
@@ -490,7 +843,8 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>+
|
||||
filter <String>
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
@@ -1501,8 +1501,8 @@ Getting all Drive Files/Folders that match query ('me' in owners and name contai
|
||||
Got 0 Drive Files/Folders that matched query ('me' in owners and name contains 'abcd') for user@domain.com...
|
||||
$ more Files.csv
|
||||
Owner
|
||||
$ gam csv Files.csv gam user ~Owner show fileinfo ~id permissions
|
||||
Command: /Users/admin/bin/gam csv Files.csv gam user ~Owner show fileinfo >>>~id<<< permissions
|
||||
$ gam csv Files.csv gam user "~Owner" show fileinfo "~id" permissions
|
||||
Command: /Users/admin/bin/gam csv Files.csv gam user "~Owner" show fileinfo >>>~id<<< permissions
|
||||
|
||||
ERROR: Header "id" not found in CSV headers of "Owner".
|
||||
Help: Syntax in file /Users/admin/bin/gam/GamCommands.txt
|
||||
@@ -1516,7 +1516,7 @@ Getting all Drive Files/Folders that match query ('me' in owners and name contai
|
||||
Got 0 Drive Files/Folders that matched query ('me' in owners and name contains 'abcd') for user@domain.com...
|
||||
$ more Files.csv
|
||||
Owner,id,name
|
||||
$ gam csv Files.csv gam user ~Owner show fileinfo ~id permissions
|
||||
$ gam csv Files.csv gam user "~Owner" show fileinfo "~id" permissions
|
||||
$
|
||||
```
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@ mary@domain.com, Mary Smith
|
||||
|
||||
# Create the student folders on the Shared Drive
|
||||
gam redirect csv ./StudentFolders.csv multiprocess csv Students.csv gam user admin@domain.com create drivefile mimetype gfolder drivefilename "~~Name~~ Digital Portfolio" parentid <TeamDriveID> csv addcsvdata primaryEmail "~primaryEmail"
|
||||
# Add ACLs granting the students write access to their folders; ~User refers to admin@domain.com
|
||||
# Add ACLs granting the students write access to their folders; "~User" refers to admin@domain.com
|
||||
gam csv StudentFolders.csv gam user "~User" add drivefileacl "~id" user "~primaryEmail" role fileorganizer
|
||||
# Add a shortcut to the folder on the student's My Drive
|
||||
gam csv StudentFolders.csv gam user "~primaryEmail" create drivefileshortcut "~id" parentid root
|
||||
@@ -519,6 +519,7 @@ You can update a specific sheet within a Google spreadsheet or add a new sheet t
|
||||
* `addsheet <String>` - Specify a sheet name to be added to the Google Sheets file
|
||||
* `charset <Charset>` - Specify the character set of the local file; if not specified, the value of `charset` from `gam.cfg` will be used
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
|
||||
If you want the Google spreadsheet to retain its name, specify: `retainname localfile LocalFile.csv`.
|
||||
|
||||
By default, the user, file name, updated file name and id values are displayed on stdout.
|
||||
@@ -617,7 +618,7 @@ Suppose you have a Google Sheets file UserSheet with multiple sheets, one of whi
|
||||
|
||||
The following command will download the sheet and show the name for each user in the column.
|
||||
```
|
||||
gam user user@domain.com get drivefile drivefilename UserSheet csvsheet NewUsers targetname - | gam redirect stdout - multiprocess csv - gam info user ~primaryEmail name nogroups nolicenses
|
||||
gam user user@domain.com get drivefile drivefilename UserSheet csvsheet NewUsers targetname - | gam redirect stdout - multiprocess csv - gam info user "~primaryEmail" name nogroups nolicenses
|
||||
```
|
||||
* The `redirect stdout - multiprocess` option produces clean output from the multiple processes
|
||||
|
||||
|
||||
@@ -87,3 +87,8 @@ Show forwarding addresses for all users with forwarding on.
|
||||
gam config auto_batch_min 1 num_threads 5 redirect csv ./FowardEnabledUsers.csv multiprocess redirect stdout - multiprocess redirect stderr stdout all users print forward enabledonly
|
||||
gam redirect csv ./FowardEnabledUsersForwardingAddresses.csv multiprocess redirect stdout - multiprocess redirect stderr stdout csv ./FowardEnabledUsers.csv gam user "~User" print forwardingaddresses
|
||||
```
|
||||
|
||||
Show forwarding addresses that are not your domain for all users with forwarding on.
|
||||
```
|
||||
gam config csv_output_row_drop_filter "forwardTo:regex:yourdomain.com" auto_batch_min 1 num_threads 20 redirect csv ./NonDomainForwards.csv multiprocess redirect stdout - multiprocess redirect stderr stdout all users print forward enabledonly
|
||||
```
|
||||
@@ -244,7 +244,7 @@ gam <UserTypeEntity> draft message
|
||||
* `file|htmlfile <FileName> [charset <Charset>]` - Read the message from `<FileName>`
|
||||
* `gdoc|ghtml <UserGoogleDoc>` - Read the message from `<UserGoogleDoc>`
|
||||
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the message from the Google Cloud Storage file `<StorageBucketObjectName>`
|
||||
* `emlfile <FileName> [charset <Charset>]` - Read the message from the EML message file `<FileName>`. SMTP headers specified in the command will replace those in the message file. The default `chatser` is `ascii`.
|
||||
* `emlfile <FileName> [charset <Charset>]` - Read the message from the EML message file `<FileName>`. SMTP headers specified in the command will replace those in the message file. The default `charset` is `ascii`.
|
||||
|
||||
The `<SMTPDateHeader> <Time>` argument requires `<Time>` values which will be converted to RFC2822 dates. If you have these headers with values that
|
||||
are not in `<Time>` format, use the argument `header <SMTPDateHeader> <String>`.
|
||||
@@ -261,7 +261,7 @@ Your HTML message will contain lines like this:
|
||||
<img src="cid:image2"/>
|
||||
```
|
||||
|
||||
Your command line will have: `embedimage file1.jpg image1` embedimage file2.jpg image2`
|
||||
Your command line will have: `embedimage file1.jpg image1 embedimage file2.jpg image2`
|
||||
|
||||
## Import messages
|
||||
Import a message into a user's mailbox, with standard email delivery scanning and classification similar to receiving via SMTP.
|
||||
|
||||
@@ -81,7 +81,7 @@ $ gam csvkmd users UserGroupRole.csv keyfield User print groups
|
||||
User,Group,Role,Status,Delivery
|
||||
|
||||
# Add users to groups
|
||||
$ gam redirect stdout - multiprocess csv UserGroupRole.csv gam user ~User add group ~Role ~Delivery ~Group
|
||||
$ gam redirect stdout - multiprocess csv UserGroupRole.csv gam user "~User" add group "~Role" "~Delivery" "~Group"
|
||||
Using 5 processes...
|
||||
User: testuser1@domain.com, Add to 1 Group
|
||||
Group: testgroup1@domain.com, Owner: testuser1@domain.com, Added
|
||||
@@ -249,7 +249,7 @@ testuser2@domain.com,testgroup2@domain.com,MANAGER,ACTIVE,DAILY
|
||||
testuser3@domain.com,testgroup2@domain.com,OWNER,ACTIVE,DIGEST
|
||||
|
||||
# Update roles/delivery settings
|
||||
$ gam redirect stdout - multiprocess csv UserGroupRoleNew.csv gam user ~User update group ~Role ~Delivery ~Group
|
||||
$ gam redirect stdout - multiprocess csv UserGroupRoleNew.csv gam user "~User" update group "~Role" "~Delivery" "~Group"
|
||||
Using 3 processes...
|
||||
User: testuser2@domain.com, Update to 1 Group
|
||||
Group: testgroup2@domain.com, Manager: testuser2@domain.com, Updated
|
||||
@@ -357,7 +357,7 @@ testuser3@domain.com,testgroup1@domain.com,MEMBER,ACTIVE,ALL_MAIL
|
||||
testuser3@domain.com,testgroup2@domain.com,OWNER,ACTIVE,ALL_MAIL
|
||||
|
||||
# Update roles/delivery settings
|
||||
$ gam redirect stdout - multiprocess csv UserGroupRole.csv gam user ~User update group ~Role ~Delivery ~Group
|
||||
$ gam redirect stdout - multiprocess csv UserGroupRole.csv gam user "~User" update group "~Role" "~Delivery" "~Group"
|
||||
Using 5 processes...
|
||||
User: testuser2@domain.com, Update to 1 Group
|
||||
Group: testgroup1@domain.com, Member: testuser2@domain.com, Updated
|
||||
|
||||
@@ -133,7 +133,7 @@ CSV file Sheet.csv contains:
|
||||
User,spreadsheetId,JSON
|
||||
user@domain.com,1MOq6umgWSM7NF8-CQ-Aj3_n1DIu_GvyCcuLxxxxxx,'[{"range": "Sheet1!A1:C1", "values": [["1", "2", "3"]], "majorDimension": "ROWS"}, {"range": "Sheet1!A3:C3", "values": [["10/01/2017 10:30:00", true, "6"]], "majorDimension": "ROWS"}]'
|
||||
|
||||
gam csv Sheet.csv quotechar "'" gam user ~User update sheetranges ~spreadsheetId json ~JSON userentered includevaluesinresponse
|
||||
gam csv Sheet.csv quotechar "'" gam user "~User" update sheetranges "~spreadsheetId" json "~JSON" userentered includevaluesinresponse
|
||||
```
|
||||
## Create spreadsheets
|
||||
```
|
||||
|
||||
@@ -239,7 +239,7 @@ queries "`"orgUnitPath=\'/Students/Lower\ School/2027\'`",`"orgUnitPath=\'/Stude
|
||||
protocol aim|gtalk|icq|jabber|msn|net_meeting|qq|
|
||||
skype|yahoo|(custom_protocol <String>) <String>
|
||||
notprimary|primary)|
|
||||
(keyword mission|occupation|outlook|(custom <string>) <String>)|
|
||||
(keyword mission|occupation|outlook|(custom <String>) <String>)|
|
||||
(location [type default|desk|<String>] area <String>
|
||||
[building|buildingid <String>] [floor|floorname <String>]
|
||||
[section|floorsection <String>] [desk|deskcode <String>] endlocation)|
|
||||
@@ -250,7 +250,7 @@ queries "`"orgUnitPath=\'/Students/Lower\ School/2027\'`",`"orgUnitPath=\'/Stude
|
||||
[description <String>] [domain <String>]
|
||||
[fulltimeequivalent <Integer>]
|
||||
notprimary|primary)|
|
||||
(otheremail home|other|work|<String> <String>)|
|
||||
(otheremail home|other|work|(custom <String>)|<String> <String>)|
|
||||
(phone [type assistant|callback|car|company_main|grand_central|home|
|
||||
home_fax|isdn|main|mobile|other|other_fax|pager|radio|telex|tty_tdd|
|
||||
work|work_fax|work_mobile|work_pager|(custom <String>)]
|
||||
@@ -262,10 +262,10 @@ queries "`"orgUnitPath=\'/Students/Lower\ School/2027\'`",`"orgUnitPath=\'/Stude
|
||||
[primary <Boolean>] endposix)|
|
||||
(relation admin_assistant|assistant|brother|child|domestic_partner|
|
||||
dotted-line_manager|exec_assistant|father|friend|manager|mother|
|
||||
parent|partner|referred_by|relative|sister|spouse|<String> <String>)|
|
||||
parent|partner|referred_by|relative|sister|spouse|(custom <String>)|<String> <String>)|
|
||||
(sshkeys key <String> [expires <Integer>] endssh)|
|
||||
(website app_install_page|blog|ftp|home|home_page|other|
|
||||
profile|reservations|resume|work|<String> <URL>
|
||||
profile|reservations|resume|work|(custom <String>)|<String> <URL>
|
||||
notprimary|primary)
|
||||
|
||||
<UserClearAttribute> ::=
|
||||
@@ -464,7 +464,7 @@ If you specify `scalarnonempty`, empty values will be suppressed. This is most u
|
||||
|
||||
For example, to suppress errors when empty values would cause an error or are simply undesirable:
|
||||
```
|
||||
GeoData.Region scalarnonempty ~region GeoData.State scalarnonempty ~state GeoData.City scalarnonempty ~city
|
||||
GeoData.Region scalarnonempty "~region" GeoData.State scalarnonempty "~state" GeoData.City scalarnonempty "~city"
|
||||
```
|
||||
### Multivalued fields
|
||||
```
|
||||
@@ -541,7 +541,7 @@ When creating a user, you can send a message with the account details to an emai
|
||||
If you create a user with `random password`, the `lograndompassword <FileName>` option causes GAM
|
||||
to append the user email address and random password to `<FileName>`. If `<FileName>` is `-`, the data is written to stdout.
|
||||
|
||||
Option `ignorenullpassword` causes GAM to ignore options like `password ""` or `password ~password` where the
|
||||
Option `ignorenullpassword` causes GAM to ignore options like `password ""` or `password "~password"` where the
|
||||
CSV entry `password` is null; it must appear in the command before any null passwords.
|
||||
If `ignorenullpassword` and a null password are entered, the user will be assigned a random password.
|
||||
|
||||
@@ -570,8 +570,8 @@ OU needs to be already set with forced 2FA, else you can't create backup codes i
|
||||
These three commands should be run in sequence, as commands two and three are reliant on the previous command being run.
|
||||
```
|
||||
gam redirect stdout CreateUsers.log multiprocess redirect stderr stdout csv CreateUsers.csv gam create user "~useremail" firstname "~firstname" lastname "~lastname" ou "~ou" password random notify "~~notifyemail"
|
||||
gam redirect stdout UpdateUsers.log multiprocess redirect stderr stdout csv CreateUsers.csv gam user ~useremail update backupcodes
|
||||
gam redirect stdout SendBackupCodes.log multiprocess redirect stderr stdout csv CreateUsers.csv gam user ~useremail print backupcodes | gam csv - gam sendemail "~notifyemail" subject "Backup codes for 2FA login" message "~verificationCodes"
|
||||
gam redirect stdout UpdateUsers.log multiprocess redirect stderr stdout csv CreateUsers.csv gam user "~useremail" update backupcodes
|
||||
gam redirect stdout SendBackupCodes.log multiprocess redirect stderr stdout csv CreateUsers.csv gam user "~useremail" print backupcodes | gam csv - gam sendemail "~notifyemail" subject "Backup codes for 2FA login" message "~verificationCodes"
|
||||
```
|
||||
|
||||
## Specify a user's attributes with JSON data
|
||||
@@ -713,19 +713,19 @@ The user aliases in `alias|aliases <EmailAddressList>` will be created.
|
||||
|
||||
For example, you are given a CSV file Users.csv with these headers: email,firstname,lastname,password,ou,altemail
|
||||
```
|
||||
gam csv Users.csv gam update user ~email firstname ~firstname lastname ~lastname password ~password ou ~ou createifnotfound notify ~altemail
|
||||
gam csv Users.csv gam update user "~email" firstname "~firstname" lastname "~lastname" password "~password" ou "~ou" createifnotfound notify "~altemail"
|
||||
```
|
||||
The existing users (including their passwords) will be updated and the new users will be created; if `notify` is specified, a notification email message is sent as in (#create-a-user).
|
||||
|
||||
If you don't want to update the passwords of the existing users but must supply a password for newly created users, use the `notfoundpassword` option.
|
||||
```
|
||||
gam csv Users.csv gam update user ~email firstname ~firstname lastname ~lastname notfoundpassword ~password ou ~ou createifnotfound notify ~altemail
|
||||
gam csv Users.csv gam update user "~email" firstname "~firstname" lastname "~lastname" notfoundpassword "~password" ou "~ou" createifnotfound notify "~altemail"
|
||||
```
|
||||
The existing users (but not their passwords) will be updated and the new users will be created; if `notify` is specified, a notification email message is sent as in (#create-a-user).
|
||||
|
||||
If you don't want to force a password change of the existing users but do want newly created users to change their password, use the `setchangepasswordoncreate` option.
|
||||
```
|
||||
gam csv Users.csv gam update user ~email firstname ~firstname lastname ~lastname notfoundpassword ~password ou ~ou createifnotfound notify ~altemail setchangepasswordoncreate true
|
||||
gam csv Users.csv gam update user "~email" firstname "~firstname" lastname "~lastname" notfoundpassword "~password" ou "~ou" createifnotfound notify "~altemail" setchangepasswordoncreate true
|
||||
```
|
||||
|
||||
## Update a user's name
|
||||
@@ -742,7 +742,7 @@ assigned a unique random password, specify `password uniquerandom`.
|
||||
If you update a user with `password random|uniquerandom`, the `lograndompassword <FileName>` option causes GAM
|
||||
to append the user email address and random password to `<FileName>`. If `<FileName` is `-`, the data is written to stdout.
|
||||
|
||||
Option `ignorenullpassword` causes GAM to ignore options like `password ""` or `password ~password` or `notfoundpassword ~password` where the
|
||||
Option `ignorenullpassword` causes GAM to ignore options like `password ""` or `password "~password"` or `notfoundpassword "~password"` where the
|
||||
CSV entry `password` is null; it must appear in the command before any null passwords.
|
||||
This option would typically be used when processing CSV files where only selected user's passwords are being updated.
|
||||
|
||||
@@ -813,7 +813,7 @@ $ gam redirect csv ./phones.csv group group@domain.com print users phones format
|
||||
```
|
||||
Edit phones.csv and change the work number; update.
|
||||
```
|
||||
$ gam csv ./phones.csv quotechar "'" gam update user ~primaryEmail json ~JSON
|
||||
$ gam csv ./phones.csv quotechar "'" gam update user "~primaryEmail" json "~JSON"
|
||||
```
|
||||
## Update a user's OU based on group membership
|
||||
This option would typically be used when an external service creates a Google user and assigns it to a group but does not place it in an OU.
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
gam version
|
||||
GAMADV-XTD3 6.76.09 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.77.03 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.3 64-bit final
|
||||
MacOS Sonoma 14.4.1 x86_64
|
||||
Python 3.12.4 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
@@ -15,10 +15,10 @@ Time: 2023-06-02T21:10:00-07:00
|
||||
Print the current version of Gam with details and time offset information
|
||||
```
|
||||
gam version timeoffset
|
||||
GAMADV-XTD3 6.76.09 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.77.03 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.3 64-bit final
|
||||
MacOS Sonoma 14.4.1 x86_64
|
||||
Python 3.12.4 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Your system time differs from www.googleapis.com by less than 1 second
|
||||
@@ -27,17 +27,17 @@ 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.76.09 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.77.03 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.3 64-bit final
|
||||
MacOS Sonoma 14.4.1 x86_64
|
||||
Python 3.12.4 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
Your system time differs from admin.googleapis.com by less than 1 second
|
||||
OpenSSL 3.1.1 30 May 2023
|
||||
cryptography 41.0.1
|
||||
filelock 3.12.3
|
||||
filelock 3.12.4
|
||||
google-api-python-client 2.88.0
|
||||
google-auth-httplib2 0.1.0
|
||||
google-auth-oauthlib 1.0.0
|
||||
@@ -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.76.09
|
||||
Latest: 6.77.03
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@@ -72,7 +72,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
6.76.09
|
||||
6.77.03
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@@ -82,10 +82,10 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
gam help
|
||||
GAM 6.76.09 - https://github.com/taers232c/GAMADV-XTD3
|
||||
GAM 6.77.03 - https://github.com/taers232c/GAMADV-XTD3
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.12.3 64-bit final
|
||||
MacOS Sonoma 14.4.1 x86_64
|
||||
Python 3.12.4 64-bit final
|
||||
MacOS Sonoma 14.5 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
|
||||
@@ -589,6 +589,12 @@ update_cros_ou_with_id
|
||||
Set to true if you are getting the following error:
|
||||
`400: invalidInput - Invalid Input: Inconsistent Orgunit id and path in request`
|
||||
Default: False
|
||||
use_chat_admin_access
|
||||
When False, GAM uses user access when making Chat API calls. For calls that support admin access,
|
||||
this can be overridden with the asadmin command line option.
|
||||
When True, GAM uses admin access for Chat API calls that support admin access;
|
||||
other calls will use user access.
|
||||
Default: False
|
||||
use_classroom_owner_access
|
||||
How is classroom member information obtained and how are classroom members deleted.
|
||||
Client access does not provide complete information about non-domain students/teachers.
|
||||
@@ -1033,24 +1039,24 @@ goo,gooadmin
|
||||
```
|
||||
For each of the domains, you want to get user information about the domain administrator.
|
||||
```
|
||||
$gam csv InfoAdmins.csv gam select ~Section info user "~AdminUser" nolicenses
|
||||
$gam csv InfoAdmins.csv gam select "~Section" info user "~AdminUser" nolicenses
|
||||
```
|
||||
For each of the domains, you also want to list the Google Drive files for the domain administrator.
|
||||
```
|
||||
$gam csv InfoAdmins.csv gam select ~Section user "~AdminUser" print filelist id
|
||||
$gam csv InfoAdmins.csv gam select "~Section" user "~AdminUser" print filelist id
|
||||
```
|
||||
Suppose you have two CSV files, NewFooUsers.csv and NewGooUsers.csv, with the columns: Email,FirstName,LastName,Password.
|
||||
You will use these files to create new users in the foo.com and goo.com domains.
|
||||
|
||||
To process the files sequentially, there are two forms:
|
||||
```
|
||||
$gam select foo save csv NewFooUsers.csv gam create user ~Email firstname ~FirstName lastname ~LastName password ~Password
|
||||
$gam select goo save csv NewGooUsers.csv gam create user ~Email firstname ~FirstName lastname ~LastName password ~Password
|
||||
$gam select foo save csv NewFooUsers.csv gam create user "~Email" firstname "~FirstName" lastname "~LastName" password "~Password"
|
||||
$gam select goo save csv NewGooUsers.csv gam create user "~Email" firstname "~FirstName" lastname "~LastName" password "~Password"
|
||||
```
|
||||
You could also do:
|
||||
```
|
||||
$gam csv NewFooUsers.csv gam select foo create user ~Email firstname ~FirstName lastname ~LastName password ~Password
|
||||
$gam csv NewGooUsers.csv gam select goo create user ~Email firstname ~FirstName lastname ~LastName password ~Password
|
||||
$gam csv NewFooUsers.csv gam select foo create user "~Email" firstname "~FirstName" lastname "~LastName" password "~Password"
|
||||
$gam csv NewGooUsers.csv gam select goo create user "~Email" firstname "~FirstName" lastname "~LastName" password "~Password"
|
||||
```
|
||||
In the first form, the select/save before csv sets the default section which then applies to each gam instance.
|
||||
|
||||
@@ -1060,11 +1066,11 @@ To process the files in parallel in separate shells, you have to use the second
|
||||
|
||||
In shell number 1, do:
|
||||
```
|
||||
$gam csv NewFooUsers.csv gam select foo create user ~Email firstname ~FirstName lastname ~LastName password ~Password
|
||||
$gam csv NewFooUsers.csv gam select foo create user "~Email" firstname "~FirstName" lastname "~LastName" password "~Password"
|
||||
```
|
||||
In shell number 2, do:
|
||||
```
|
||||
$gam csv NewGooUsers.csv gam select goo create user ~Email firstname ~FirstName lastname ~LastName password ~Password
|
||||
$gam csv NewGooUsers.csv gam select goo create user "~Email" firstname "~FirstName" lastname "~LastName" password "~Password"
|
||||
```
|
||||
The gam loop command and the select and redirect arguments can be combined to perform powerful operations in a single command line.
|
||||
```
|
||||
@@ -1080,23 +1086,23 @@ For each of the domains, you want to get user information about the domain admin
|
||||
to stdout, so you'll redirect stdout. In the first case, you want all of the output in a single file so stdout is
|
||||
redirected to a file before the csv command.
|
||||
```
|
||||
$gam redirect stdout InfoDomainAdmins.lst multiprocess csv InfoDomains.csv gam select ~Section info user "~AdminUser" nolicenses
|
||||
$gam redirect stdout InfoDomainAdmins.lst multiprocess csv InfoDomains.csv gam select "~Section" info user "~AdminUser" nolicenses
|
||||
```
|
||||
In the second case, you want the output for each domain administrator in a separate file so stdout is redirected after
|
||||
the csv command.
|
||||
```
|
||||
$gam csv InfoDomains.csv select ~Section redirect stdout Info-~~Domain~~-Admin.lst info user "~AdminUser" nolicenses
|
||||
$gam csv InfoDomains.csv select "~Section" redirect stdout Info-~~Domain~~-Admin.lst info user "~AdminUser" nolicenses
|
||||
```
|
||||
For each of the domains, you also want to list the Google Drive files for the domain administrator. GAM writes this information
|
||||
to a csv file, so you'll redirect csv output. In the first case, you want all of the output in a single file so csv output is
|
||||
redirected to a file before the csv command.
|
||||
```
|
||||
$gam redirect csv FilesDomainAdmins.csv multiprocess csv InfoDomains.csv gam select ~Section user "~AdminUser" print filelist id
|
||||
$gam redirect csv FilesDomainAdmins.csv multiprocess csv InfoDomains.csv gam select "~Section" user "~AdminUser" print filelist id
|
||||
```
|
||||
In the second case, you want the output for each domain administrator in a separate file so csv output is redirected after
|
||||
the csv command.
|
||||
```
|
||||
$gam csv InfoDomains.csv select ~Section redirect csv Files-~~Domain~~-Admin.csv user "~AdminUser" print filelist id
|
||||
$gam csv InfoDomains.csv select "~Section" redirect csv Files-~~Domain~~-Admin.csv user "~AdminUser" print filelist id
|
||||
```
|
||||
|
||||
## Multiple Users-Projects on One Computer
|
||||
|
||||
@@ -244,6 +244,7 @@ If an item contains spaces, it should be surrounded by ".
|
||||
101043 |
|
||||
101047 |
|
||||
101049 |
|
||||
101050 |
|
||||
Google-Apps |
|
||||
Google-Chrome-Device-Management |
|
||||
Google-Drive-storage |
|
||||
@@ -259,6 +260,8 @@ If an item contains spaces, it should be surrounded by ".
|
||||
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
||||
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
||||
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
||||
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
||||
aisecurity | 1010470006 | AI Security |
|
||||
appsheetcore | 1010380001 | AppSheet Core |
|
||||
appsheetstandard | appsheetenterprisestandard | 1010380002 | AppSheet Enterprise Standard |
|
||||
appsheetplus | appsheetenterpriseplus | 1010380003 | AppSheet Enterprise Plus |
|
||||
@@ -268,8 +271,12 @@ If an item contains spaces, it should be surrounded by ".
|
||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||
cloudsearch | 1010350001 | Cloud Search |
|
||||
colabpro | 1010500001 | Colab Pro |
|
||||
colabpro+ | colabproplus | 1010500002 | Colab Pro+ |
|
||||
eeu | 1010490001 | SKU Endpoint Education Upgrade |
|
||||
geminibiz | 1010470003 | Gemini Business |
|
||||
geminiedu | 1010470004 | Gemini Education |
|
||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||
@@ -1341,7 +1348,8 @@ gam create project [admin <EmailAddress>] [project <ProjectID>]
|
||||
[sadescription <ServiceAccountDescription>]
|
||||
[(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
|
||||
(localkeysize 1024|2048|4096 [validityhours <Number>])|
|
||||
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)]
|
||||
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)|
|
||||
nokey]
|
||||
gam use project [<EmailAddress>] [<ProjectID>]
|
||||
gam use project [admin <EmailAddress>] [project <ProjectID>]
|
||||
[saname <ServiceAccountName>] [sadisplayname <ServiceAccountDisplayName>]
|
||||
@@ -1580,6 +1588,7 @@ gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
||||
<EventType> ::=
|
||||
default|
|
||||
focustime|
|
||||
fromgmail|
|
||||
outofoffice|
|
||||
workinglocation
|
||||
<EventTypeList> ::= "<EventType>(,<EventType>)*"
|
||||
@@ -1988,7 +1997,7 @@ gam revoke browsertoken <BrowserTokenPermanentID>
|
||||
state|
|
||||
token|
|
||||
tokenpermanentid
|
||||
<BrowserTokenFieldNameList> ::= "<BrowseTokenFieldName>(,<BrowserTokenFieldName>)*"
|
||||
<BrowserTokenFieldNameList> ::= "<BrowserTokenFieldName>(,<BrowserTokenFieldName>)*"
|
||||
|
||||
gam show browsertokens
|
||||
([ou|org|orgunit|browserou <OrgUnitPath>] [(query <QueryBrowserToken>)|(queries <QueryBrowserTokenList>)))
|
||||
@@ -2019,20 +2028,55 @@ gam print browsertokens [todrive <ToDriveAttribute>*]
|
||||
|
||||
gam setup chat
|
||||
|
||||
<ChatSpaceFieldName> ::=
|
||||
accesssettings|
|
||||
admininstalled|
|
||||
createtime|
|
||||
displayname|
|
||||
externaluserallowed|
|
||||
importmode|
|
||||
lastactivetime|
|
||||
membershipcount|
|
||||
name|
|
||||
singleuserbotdm|
|
||||
spacedetails|
|
||||
spacehistorystate|
|
||||
spacethreadingstate|threaded|
|
||||
spacetype|type|
|
||||
spaceuri
|
||||
<ChatSpaceFieldNameList> ::= "<ChatSpaceFieldName>(,<ChatSpaceFieldName>)*"
|
||||
|
||||
gam info chatspace <ChatSpace>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam show chatspaces
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam print chatspaces [todrive <ToDriveAttribute>*]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
<ChatMemberFieldName> ::=
|
||||
createtime|
|
||||
deletetime|
|
||||
groupmember|
|
||||
member|
|
||||
name|
|
||||
role|
|
||||
state|
|
||||
<ChatMemberFieldNameList> ::= "<ChatMemberFieldName>(,<ChatMemberFieldName>)*"
|
||||
|
||||
gam info chatmember member <ChatMember>
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
gam show chatmembers <ChatSpace>
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
gam print chatmembers [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam create chatmessage <ChatSpace>
|
||||
@@ -2044,7 +2088,37 @@ gam update chatmessage name <ChatMessage>
|
||||
<ChatContent>
|
||||
gam delete chatmessage name <ChatMessage>
|
||||
|
||||
<ChatMessageFieldName> ::=
|
||||
accessorywidgets|
|
||||
actionresponse|
|
||||
annotations|
|
||||
argumenttext|
|
||||
attachedgifs|
|
||||
attachment|
|
||||
cards|
|
||||
cardsv2|
|
||||
clientassignedmessageid|
|
||||
createtime|
|
||||
deletetime|
|
||||
deletionmetadata|
|
||||
emojireactionsummaries|
|
||||
fallbacktext|
|
||||
formattedtext|
|
||||
lastupdatetime|
|
||||
matchedurl|
|
||||
name|
|
||||
privatemessageviewer|
|
||||
quotedmessagemetadata|
|
||||
sender|
|
||||
slashcommand|
|
||||
space|
|
||||
text|
|
||||
thread|
|
||||
threadreply
|
||||
<ChatMessageFieldNameList> ::= "<ChatMessageFieldName>(,<ChatMessageFieldName>)*"
|
||||
|
||||
gam info chatmessage name <ChatMessage>
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson]
|
||||
|
||||
gam info chatevent name <ChatEvent>
|
||||
@@ -2864,6 +2938,7 @@ gam create|add course [id|alias <CourseAlias>] <CourseAttribute>*
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
[materialstates <CourseMaterialStateList>]
|
||||
[workstates <CourseWorkStateList>]
|
||||
[individualstudentassignments copy|delete|maptoall]
|
||||
[removeduedate [<Boolean>]]
|
||||
[mapsharemodestudentcopy edit|none|view]
|
||||
[copymaterialsfiles [<Boolean>]]
|
||||
@@ -2876,6 +2951,7 @@ gam update course <CourseID> <CourseAttribute>+
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
[materialstates <CourseMaterialStateList>]
|
||||
[workstates <CourseWorkStateList>]
|
||||
[individualstudentassignments copy|delete|maptoall]
|
||||
[removeduedate [<Boolean>]]
|
||||
[mapsharemodestudentcopy edit|none|view]
|
||||
[copymaterialsfiles [<Boolean>]]
|
||||
@@ -2890,6 +2966,7 @@ gam update courses <CourseEntity> <CourseAttribute>+
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
[materialstates <CourseMaterialStateList>]
|
||||
[workstates <CourseWorkStateList>]
|
||||
[individualstudentassignments copy|delete|maptoall]
|
||||
[removeduedate [<Boolean>]]
|
||||
[mapsharemodestudentcopy edit|none|view]
|
||||
[copymaterialsfiles [<Boolean>]]
|
||||
@@ -4221,7 +4298,8 @@ gam report usage customer [todrive <ToDriveAttribute>*]
|
||||
rules|
|
||||
saml|
|
||||
token|tokens|oauthtoken|
|
||||
useraccounts
|
||||
useraccounts|
|
||||
vault
|
||||
|
||||
gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
||||
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
||||
@@ -4253,7 +4331,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
||||
gam report customers|customer|domain [todrive <ToDriveAttribute>*]
|
||||
[(date <Date>)|(range <Date> <Date>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[nodatechange | (fulldatarequired all|<CustomerServiceNameList>)]
|
||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<CustomerServiceNameList>)]
|
||||
[(fields|parameters <String>)|(services <CustomerServiceNameList>)] [noauthorizedapps]
|
||||
|
||||
<UserServiceName> ::=
|
||||
@@ -4270,7 +4348,7 @@ gam report users|user [todrive <ToDriveAttribute>*]
|
||||
[allverifyuser <UserItem>]
|
||||
[(date <Date>)|(range <Date> <Date>)|
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[nodatechange | (fulldatarequired all|<UserServiceNameList>)]
|
||||
[(nodatechange | limitdatechanges <Integer>) | (fulldatarequired all|<UserServiceNameList>)]
|
||||
[filtertime.* <Time>] [filter|filters <String>]
|
||||
[(fields|parameters <String>)|(services <UserServiceNameList>)]
|
||||
[aggregatebydate|aggregatebyuser [Boolean]]
|
||||
@@ -5348,7 +5426,7 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[immutableous <OrgUnitEntity>]|
|
||||
[clearschema <SchemaName> | <SchemaNameField>]
|
||||
[clearschema <SchemaName>|<SchemaNameField>]
|
||||
[createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
|
||||
(groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
|
||||
[alias|aliases <EmailAddressList>]
|
||||
@@ -5416,7 +5494,7 @@ gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <CSVFileInput> [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName> | <SchemaNameField>]
|
||||
[clearschema <SchemaName>|<SchemaNameField>]
|
||||
[createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
|
||||
(groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
|
||||
[alias|aliases <EmailAddressList>]
|
||||
@@ -5553,7 +5631,7 @@ gam <UserTypeEntity> update backupcodes|verificationcodes
|
||||
gam <UserTypeEntity> delete backupcodes|verificationcodes
|
||||
gam <UserTypeEntity> show backupcodes|verificationcodes
|
||||
gam <UserTypeEntity> print backupcodes|verificationcodes [todrive <ToDriveAttribute>*]
|
||||
[delimiter <Character>]
|
||||
[delimiter <Character>] [countsonly]
|
||||
|
||||
# Users - Calendars
|
||||
|
||||
@@ -5970,15 +6048,60 @@ gam <UserTypeEntity> update chatspace <ChatSpace>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> delete chatspace <ChatSpace>
|
||||
|
||||
gam <UserItem> update chatspace asadmin <ChatSpace>
|
||||
[restricted|(audience <String>)]|
|
||||
([displayname <String>]
|
||||
[type space]
|
||||
[description <String>] [guidelines|rules <String>]
|
||||
[history <Boolean>])
|
||||
[formatjson]
|
||||
gam <UserItem> delete chatspace asadmin <ChatSpace>
|
||||
|
||||
<ChatSpaceFieldName> ::=
|
||||
accesssettings|
|
||||
admininstalled|
|
||||
createtime|
|
||||
displayname|
|
||||
externaluserallowed|
|
||||
importmode|
|
||||
lastactivetime|
|
||||
membershipcount|
|
||||
name|
|
||||
singleuserbotdm|
|
||||
spacedetails|
|
||||
spacehistorystate|
|
||||
spacethreadingstate|threaded|
|
||||
spacetype|type|
|
||||
spaceuri
|
||||
<ChatSpaceFieldNameList> ::= "<ChatSpaceFieldName>(,<ChatSpaceFieldName>)*"
|
||||
|
||||
gam <UserTypeEntity> info chatspace <ChatSpace>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> info chatspacedm <UserItem>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> show chatspaces
|
||||
[types <ChatSpaceTypeList>]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print chatspaces [todrive <ToDriveAttribute>*]
|
||||
[types <ChatSpaceTypeList>]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserItem> info chatspace asadmin <ChatSpace>
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserItem> show chatspaces asadmin
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserItem> print chatspaces asadmin [todrive <ToDriveAttribute>*]
|
||||
[query <String>] [querytime<String> <Time>]
|
||||
[orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
|
||||
[fields <ChatSpaceFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> create chatmember <ChatSpace>
|
||||
@@ -5996,14 +6119,75 @@ gam <UserTypeEntity> update chatmember <ChatSpace>
|
||||
gam <UserTypeEntity> modify chatmember
|
||||
role member|manager
|
||||
members <ChatMemberList>
|
||||
gam <UserTypeEntity> sync chatmembers <ChatSpace>
|
||||
[role member|manager] [type human|bot]
|
||||
[addonly|removeonly]
|
||||
[preview [actioncsv]]
|
||||
(users <UserTypeEntity>)* (groups <GroupEntity>)*
|
||||
|
||||
gam <UserTypeEntity> info chatmember members <ChatMemberList>
|
||||
gam <UserItem> create chatmember asadmin <ChatSpace>
|
||||
[type human|bot] [role member|manager]
|
||||
(user <UserItem>)* (members <UserTypeEntity>)*
|
||||
(group <GroupItem>)* (groups <GroupEntity>)*
|
||||
[formatjson|returnidonly]
|
||||
gam <UserItem> remove chatmember asadmin members <ChatMemberList>
|
||||
gam <UserItem> delete chatmember asadmin <ChatSpace>
|
||||
((user <UserItem>)|(members <UserTypeEntity>)|
|
||||
(group <GroupItem>)|(groups <GroupEntity>))+
|
||||
gam <UserItem> update chatmember asadmin <ChatSpace>
|
||||
role member|manager
|
||||
((user <UserItem>)|(members <UserTypeEntity>))+
|
||||
gam <UserItem> modify chatmember asadmin
|
||||
role member|manager
|
||||
members <ChatMemberList>
|
||||
gam <UserItem> sync chatmembers asadmin <ChatSpace>
|
||||
[role member|manager] [type human|bot]
|
||||
[addonly|removeonly]
|
||||
[preview [actioncsv]]
|
||||
(users <UserTypeEntity>)* (groups <GroupEntity>)*
|
||||
|
||||
<ChatMemberFieldName> ::=
|
||||
createtime|
|
||||
deletetime|
|
||||
groupmember|
|
||||
member|
|
||||
name|
|
||||
role|
|
||||
state|
|
||||
<ChatMemberFieldNameList> ::= "<ChatMemberFieldName>(,<ChatMemberFieldName>)*"
|
||||
|
||||
gam <UserTypeEntity> info chatmember
|
||||
members <ChatMemberList>
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> show chatmembers <ChatSpace>
|
||||
gam <UserTypeEntity> show chatmembers
|
||||
<ChatSpace>* [types <ChatSpaceTypeList>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print chatmembers [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
gam <UserTypeEntity> print chatmembers [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>* [types <ChatSpaceTypeList>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserItem> info chatmember asadmin
|
||||
members <ChatMemberList>
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserItem> show chatmembers asadmin
|
||||
<ChatSpace>* [query <String>] [querytime<String> <Time>]
|
||||
[orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserItem> print chatmembers asadmin [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>* [query <String>] [querytime<String> <Time>]
|
||||
[orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMemberFieldNameList>]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> create chatmessage <ChatSpace>
|
||||
@@ -6015,21 +6199,57 @@ gam <UserTypeEntity> update chatmessage name <ChatMessage>
|
||||
<ChatContent>
|
||||
gam <UserTypeEntity> delete chatmessage name <ChatMessage>
|
||||
|
||||
<ChatMessageFieldName> ::=
|
||||
accessorywidgets|
|
||||
actionresponse|
|
||||
annotations|
|
||||
argumenttext|
|
||||
attachedgifs|
|
||||
attachment|
|
||||
cards|
|
||||
cardsv2|
|
||||
clientassignedmessageid|
|
||||
createtime|
|
||||
deletetime|
|
||||
deletionmetadata|
|
||||
emojireactionsummaries|
|
||||
fallbacktext|
|
||||
formattedtext|
|
||||
lastupdatetime|
|
||||
matchedurl|
|
||||
name|
|
||||
privatemessageviewer|
|
||||
quotedmessagemetadata|
|
||||
sender|
|
||||
slashcommand|
|
||||
space|
|
||||
text|
|
||||
thread|
|
||||
threadreply
|
||||
<ChatMessageFieldNameList> ::= "<ChatMessageFieldName>(,<ChatMessageFieldName>)*"
|
||||
|
||||
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> show chatmessages <ChatSpace>
|
||||
gam <UserTypeEntity> show chatmessages
|
||||
<ChatSpace>+
|
||||
[showdeleted [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>+
|
||||
[showdeleted [<Boolean>]] [filter <String>]
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
gam <UserTypeEntity> info chatevent name <ChatEvent>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> show chatevents <ChatSpace>
|
||||
gam <UserTypeEntity> show chatevents
|
||||
<ChatSpace>+
|
||||
filter <String>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
||||
<ChatSpace>+
|
||||
filter <String>
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
|
||||
@@ -1,7 +1,131 @@
|
||||
Added option `limitdatechanges <Integer>` to `gam report users|customers`.
|
||||
|
||||
If no report is available for the specified date, can an earlier date be used?
|
||||
* `limitdatechanges -1' - Back up to earlier dates to find report data; this is the default.
|
||||
* `limitdatechanges 0 | nodatechange' - Do not report on an earlier date if no report data is available for the specified date.
|
||||
* `limitdatechanges N' - Back up to earlier dates to find report data; do not back up more than N times.
|
||||
|
||||
By default, when `gam report user user <UserItem>` is specified and no report data is available, there is no output.
|
||||
If `csv_output_users_audit = true` in `gam.cfg`, then a row with columns `email,date` will be displayed
|
||||
where `date` is the earliest date for which report data was requested.
|
||||
|
||||
7.00.00
|
||||
|
||||
Merged GAM-Team version
|
||||
|
||||
6.77.03
|
||||
|
||||
Thanks to jay, added the following Colab License SKUs:
|
||||
```
|
||||
1010500001 - Colab Pro
|
||||
1010500002 - Colab Pro+
|
||||
```
|
||||
|
||||
Thanks to Jay, updated `gam print|show admins` to properly display addresses
|
||||
of service accounts with admin role assignments.
|
||||
|
||||
6.77.02
|
||||
|
||||
Cleaned up problems with some of the new Chat API asadmin commands.
|
||||
Some remaining problems may require a Google fix.
|
||||
|
||||
6.77.01
|
||||
|
||||
Thanks to Jay, added column `verificationCodesCount` to `gam <UserTypeEntity> print backupcodes`
|
||||
that displays the number of available backup codes in addtion to the codes.
|
||||
|
||||
Added option `countsonly` that displays only the number of available backup codes but not the codes themselves.
|
||||
|
||||
Thanks to Jay, added option `nokey` to `gam create project` that creates a project with no service account key, `oauth2service.json`.
|
||||
|
||||
6.77.00
|
||||
|
||||
Added option `individualstudentassignments copy|delete|maptoall` to `gam create|update course ... copyfrom`
|
||||
that controls how individual student assignments in the `copyfrom` course are processed.
|
||||
* `individualstudentassignments copy` - Copy individual student assignments; this is the default. You will get an error if the student is not a member of the course.
|
||||
* `individualstudentassignments delete` - Delete individual student assignments
|
||||
* `individualstudentassignments maptoall` - Map individual student assignments to all student assignments
|
||||
|
||||
Upgraded to Python 3.12.4 where possible.
|
||||
|
||||
Added option `asadmin` to the following Chat commands that allows admin access.
|
||||
These commands are in Developer Preview, your project must have Developer Preview enabled for the Chat API
|
||||
in order 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
|
||||
```
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Chat
|
||||
|
||||
Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
||||
```
|
||||
* When False, GAM uses user access when making all Chat API calls. For calls that support admin access,
|
||||
this can be overridden with the asadmin command line option.
|
||||
* When True, GAM uses admin access for Chat API calls that support admin access; other calls will use user access.
|
||||
* Default: False
|
||||
```
|
||||
|
||||
6.76.15
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print|show filesharecounts summary only summaryuser <String>`
|
||||
that printed an erroneous row if `<UserTypeEntity>` specified a single user and `<String>` matched
|
||||
the user's email address.
|
||||
|
||||
6.76.14
|
||||
|
||||
Added the following Gemini License SKUs:
|
||||
```
|
||||
1010470004 - Gemini Education
|
||||
1010470005 - Gemini Education Premium
|
||||
```
|
||||
|
||||
6.76.13
|
||||
|
||||
Updated `gam <UserTypeEntity> show fileinfo ... showlabels` and `gam <UserTypeEntity> print filelist ... showlabels`
|
||||
to retry these errors that occur when trying to get the drive labels for a file/folder.
|
||||
```
|
||||
ERROR: 500: unknownError - Unknown Error.
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
Upgraded to OpenSSL 3.3.1 where possible.
|
||||
|
||||
6.76.12
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print|show chatspaces` that caused the following error:
|
||||
```
|
||||
ERROR: Got an unexpected keyword argument orderBy
|
||||
```
|
||||
|
||||
6.76.11
|
||||
|
||||
Thanks to Jay, added `gam report vault`.
|
||||
|
||||
Thanks to Jay, added the following Gemini License SKUs:
|
||||
```
|
||||
1010470006 - AI Security
|
||||
1010470007 - AI Meetings and Messaging
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> print filelist ... showshareddrivepermissions` to display
|
||||
progress messages to stderr as a separate API call must be made for every file/folder on the Shared Drive
|
||||
to get its permissions. As this can take a long time, the progress messages indicate that progress is being made.
|
||||
|
||||
6.76.10
|
||||
|
||||
Added `fromgmail` to `<EventType>` that can be used in `gam calendars <CalendarEntity> print|show events ... eventtype fromgmail`.
|
||||
|
||||
* See: https://workspaceupdates.googleblog.com/2024/05/google-calendar-api-event-type-fromgmail.html
|
||||
|
||||
6.76.09
|
||||
|
||||
Updated `gam update|delete|info adminrole` to handle the following error:
|
||||
|
||||
4880
src/chat-v1.json
Normal file
4880
src/chat-v1.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -10,9 +10,12 @@ from gam.gamlib.glverlibs import GAM_VER_LIBS
|
||||
datas = []
|
||||
for pkg in GAM_VER_LIBS:
|
||||
datas += copy_metadata(pkg, recursive=True)
|
||||
datas += [('cbcm-v1.1beta1.json', '.')]
|
||||
datas += [('contactdelegation-v1.json', '.')]
|
||||
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', '.')]
|
||||
datas += [('cacerts.pem', '.')]
|
||||
hiddenimports = [
|
||||
'gam.auth.yubikey',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
4880
src/gam/chat-v1.json
Normal file
4880
src/gam/chat-v1.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -34,6 +34,7 @@ CHAT_MESSAGES = 'chatmessages'
|
||||
CHAT_SPACES = 'chatspaces'
|
||||
CHAT_SPACES_ADMIN = 'chatspacesadmin'
|
||||
CHAT_SPACES_DELETE = 'chatspacesdelete'
|
||||
CHAT_SPACES_DELETE_ADMIN = 'chatspacesdeleteadmin'
|
||||
CHROMEMANAGEMENT = 'chromemanagement'
|
||||
CHROMEMANAGEMENT_APPDETAILS = 'chromemanagementappdetails'
|
||||
CHROMEMANAGEMENT_TELEMETRY = 'chromemanagementtelemetry'
|
||||
@@ -82,6 +83,7 @@ PRINTERS = 'printers'
|
||||
PUBSUB = 'pubsub'
|
||||
REPORTS = 'reports'
|
||||
RESELLER = 'reseller'
|
||||
SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
|
||||
SERVICEMANAGEMENT = 'servicemanagement'
|
||||
SERVICEUSAGE = 'serviceusage'
|
||||
SHEETS = 'sheets'
|
||||
@@ -119,6 +121,12 @@ JWT_APIS = {
|
||||
ORGPOLICY: [CLOUD_PLATFORM_SCOPE],
|
||||
}
|
||||
#
|
||||
SCOPELESS_APIS = {
|
||||
CHROMEVERSIONHISTORY,
|
||||
OAUTH2,
|
||||
SERVICEACCOUNTLOOKUP,
|
||||
}
|
||||
#
|
||||
APIS_NEEDING_ACCESS_TOKEN = {
|
||||
CBCM: ['https://www.googleapis.com/auth/admin.directory.device.chromebrowsers']
|
||||
}
|
||||
@@ -196,14 +204,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},
|
||||
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 - Admin Memberships', '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 - Admin Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
CHAT_SPACES_DELETE: {'name': 'Chat API - Spaces Delete', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
||||
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},
|
||||
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 +259,7 @@ _INFO = {
|
||||
PUBSUB: {'name': 'Pub / Sub API', 'version': 'v1', 'v2discovery': True},
|
||||
REPORTS: {'name': 'Reports API', 'version': 'reports_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||
RESELLER: {'name': 'Reseller API', 'version': 'v1', 'v2discovery': True},
|
||||
SERVICEACCOUNTLOOKUP: {'name': 'Service Account Lookup psuedo-API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||
SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
|
||||
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
||||
SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
|
||||
@@ -465,6 +475,10 @@ _CLIENT_SCOPES = [
|
||||
'subscopes': [],
|
||||
'offByDefault': True,
|
||||
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
||||
{'name': 'Service Account Lookup psuedo-API',
|
||||
'api': SERVICEACCOUNTLOOKUP,
|
||||
'subscopes': [],
|
||||
'scope': ''},
|
||||
{'name': 'Site Verification API',
|
||||
'api': SITEVERIFICATION,
|
||||
'subscopes': [],
|
||||
@@ -518,10 +532,10 @@ _SVCACCT_SCOPES = [
|
||||
'api': CHAT_MEMBERSHIPS,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/chat.memberships'},
|
||||
# {'name': 'Chat API - Admin Memberships',
|
||||
# 'api': CHAT_MEMBERSHIPS_ADMIN,
|
||||
# 'subscopes': READONLY,
|
||||
# 'scope': 'https://www.googleapis.com/auth/chat.admin.memberships'},
|
||||
{'name': 'Chat API - Memberships Admin',
|
||||
'api': CHAT_MEMBERSHIPS_ADMIN,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/chat.admin.memberships'},
|
||||
{'name': 'Chat API - Messages',
|
||||
'api': CHAT_MESSAGES,
|
||||
'subscopes': READONLY,
|
||||
@@ -530,14 +544,18 @@ _SVCACCT_SCOPES = [
|
||||
'api': CHAT_SPACES,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/chat.spaces'},
|
||||
# {'name': 'Chat API - Admin Spaces',
|
||||
# 'api': CHAT_SPACES_ADMIN,
|
||||
# 'subscopes': READONLY,
|
||||
# 'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
|
||||
{'name': 'Chat API - Spaces Admin',
|
||||
'api': CHAT_SPACES_ADMIN,
|
||||
'subscopes': READONLY,
|
||||
'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
|
||||
{'name': 'Chat API - Spaces Delete',
|
||||
'api': CHAT_SPACES_DELETE,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/chat.delete'},
|
||||
{'name': 'Chat API - Spaces Delete Admin',
|
||||
'api': CHAT_SPACES_DELETE_ADMIN,
|
||||
'subscopes': [],
|
||||
'scope': 'https://www.googleapis.com/auth/chat.admin.delete'},
|
||||
{'name': 'Classroom API - Course Announcements',
|
||||
'api': CLASSROOM,
|
||||
'subscopes': READONLY,
|
||||
|
||||
@@ -292,6 +292,8 @@ TODRIVE_USER = 'todrive_user'
|
||||
TRUNCATE_CLIENT_ID = 'truncate_client_id'
|
||||
# Update CrOS org unit with orgUnitId
|
||||
UPDATE_CROS_OU_WITH_ID = 'update_cros_ou_with_id'
|
||||
# Use admin access for chat where possible
|
||||
USE_CHAT_ADMIN_ACCESS = 'use_chat_admin_access'
|
||||
# Use course owner for course access
|
||||
USE_COURSE_OWNER_ACCESS = 'use_course_owner_access'
|
||||
# Use Project ID as Project Name and App Name
|
||||
@@ -434,6 +436,7 @@ Defaults = {
|
||||
TODRIVE_USER: '',
|
||||
TRUNCATE_CLIENT_ID: FALSE,
|
||||
UPDATE_CROS_OU_WITH_ID: FALSE,
|
||||
USE_CHAT_ADMIN_ACCESS: FALSE,
|
||||
USE_COURSE_OWNER_ACCESS: FALSE,
|
||||
USE_PROJECTID_AS_NAME: FALSE,
|
||||
USER_MAX_RESULTS: '500',
|
||||
@@ -595,6 +598,7 @@ VAR_INFO = {
|
||||
TODRIVE_USER: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
||||
TRUNCATE_CLIENT_ID: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
UPDATE_CROS_OU_WITH_ID: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
USE_CHAT_ADMIN_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
USE_COURSE_OWNER_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
USE_PROJECTID_AS_NAME: {VAR_TYPE: TYPE_BOOLEAN},
|
||||
USER_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
||||
|
||||
@@ -84,6 +84,7 @@ class GamEntity():
|
||||
CHANNEL_PRODUCT = 'chpr'
|
||||
CHANNEL_SKU = 'chsk'
|
||||
CHAT_BOT = 'chbo'
|
||||
CHAT_ADMIN = 'chad'
|
||||
CHAT_EVENT = 'chev'
|
||||
CHAT_MANAGER_USER = 'chgu'
|
||||
CHAT_MEMBER = 'chme'
|
||||
@@ -424,6 +425,7 @@ class GamEntity():
|
||||
CHANNEL_PRODUCT: ['Channel Products', 'Channel Product'],
|
||||
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
||||
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
||||
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
||||
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
||||
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
||||
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
||||
|
||||
@@ -186,6 +186,7 @@ BATCH_NOT_PROCESSED_ERRORS = '{0}batch file: {1}, not processed, {2} {3}\n'
|
||||
CALLING_GCLOUD_FOR_REAUTH = 'Calling gcloud for reauth credentials..."\n'
|
||||
CAN_NOT_DELETE_USER_WITH_VAULT_HOLD = '{0}: The user may be (or have recently been) on Google Vault Hold and thus not eligible for deletion. You can check holds with "gam user {1} show vaultholds".'
|
||||
CAN_NOT_BE_SPECIFIED_MORE_THAN_ONCE = 'Argument {0} can not be specified more than once'
|
||||
CHAT_ADMIN_ACCESS_LIMITED_TO_ONE_USER = 'Chat adminaccess|asadmin limited to one user, {0} specified'
|
||||
CHROME_TARGET_VERSION_FORMAT = r'^([a-z]+)-(\d+)$ or ^(\d{1,4}\.){1,4}$'
|
||||
COLUMN_DOES_NOT_MATCH_ANY_INPUT_COLUMNS = '{0} column "{1}" does not match any input columns'
|
||||
COLUMN_DOES_NOT_MATCH_ANY_OUTPUT_COLUMNS = '{0} column "{1}" does not match any output columns'
|
||||
|
||||
@@ -36,6 +36,7 @@ _PRODUCTS = {
|
||||
'101043': 'Google Workspace Additional Storage',
|
||||
'101047': 'Gemini',
|
||||
'101049': 'Education Endpoint Management',
|
||||
'101050': 'Colab',
|
||||
'Google-Apps': 'Google Workspace',
|
||||
'Google-Chrome-Device-Management': 'Google Chrome Device Management',
|
||||
'Google-Drive-storage': 'Google Drive Storage',
|
||||
@@ -92,8 +93,20 @@ _SKUS = {
|
||||
'product': '101047', 'aliases': ['gwlabs', 'workspacelabs'], 'displayName': 'Google Workspace Labs'},
|
||||
'1010470003': {
|
||||
'product': '101047', 'aliases': ['geminibiz'], 'displayName': 'Gemini Business'},
|
||||
'1010470004': {
|
||||
'product': '101047', 'aliases': ['geminiedu'], 'displayName': 'Gemini Education'},
|
||||
'1010470005': {
|
||||
'product': '101047', 'aliases': ['geminiedupremium'], 'displayName': 'Gemini Education Premium'},
|
||||
'1010470006': {
|
||||
'product': '101047', 'aliases': ['aisecurity'], 'displayName': 'AI Security'},
|
||||
'1010470007': {
|
||||
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
||||
'1010490001': {
|
||||
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
||||
'1010500001': {
|
||||
'product': '101050', 'aliases': ['colabpro'], 'displayName': 'Colab Pro'},
|
||||
'1010500002': {
|
||||
'product': '101050', 'aliases': ['colabpro+', 'colabproplus'], 'displayName': 'Colab Pro+'},
|
||||
'Google-Apps': {
|
||||
'product': 'Google-Apps', 'aliases': ['standard', 'free'], 'displayName': 'G Suite Legacy'},
|
||||
'Google-Apps-For-Business': {
|
||||
|
||||
141
src/gam/serviceaccountlookup-v1.json
Normal file
141
src/gam/serviceaccountlookup-v1.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"basePath": "",
|
||||
"baseUrl": "https://www.googleapis.com/service_accounts/v1",
|
||||
"canonicalName": "serviceaccountlookup",
|
||||
"description": "Psuedo-API to lookup public certificates for a service account anonymously",
|
||||
"discoveryVersion": "v1",
|
||||
"documentationLink": "https://example.com/",
|
||||
"fullyEncodeReservedExpansion": true,
|
||||
"icons": {
|
||||
"x16": "http://www.google.com/images/icons/product/search-16.gif",
|
||||
"x32": "http://www.google.com/images/icons/product/search-32.gif"
|
||||
},
|
||||
"id": "serviceaccountlookup:v1",
|
||||
"kind": "discovery#restDescription",
|
||||
"name": "serviceaccountlookup",
|
||||
"ownerDomain": "google.com",
|
||||
"ownerName": "Google",
|
||||
"packagePath": "admin",
|
||||
"parameters": {
|
||||
"$.xgafv": {
|
||||
"description": "V1 error format.",
|
||||
"enum": [
|
||||
"1",
|
||||
"2"
|
||||
],
|
||||
"enumDescriptions": [
|
||||
"v1 error format",
|
||||
"v2 error format"
|
||||
],
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"access_token": {
|
||||
"description": "OAuth access token.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"alt": {
|
||||
"default": "json",
|
||||
"description": "Data format for response.",
|
||||
"enum": [
|
||||
"json",
|
||||
"media",
|
||||
"proto"
|
||||
],
|
||||
"enumDescriptions": [
|
||||
"Responses with Content-Type of application/json",
|
||||
"Media download with context-dependent Content-Type",
|
||||
"Responses with Content-Type of application/x-protobuf"
|
||||
],
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"callback": {
|
||||
"description": "JSONP",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"fields": {
|
||||
"description": "Selector specifying which fields to include in a partial response.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"key": {
|
||||
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"oauth_token": {
|
||||
"description": "OAuth 2.0 token for the current user.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"prettyPrint": {
|
||||
"default": "true",
|
||||
"description": "Returns response with indentations and line breaks.",
|
||||
"location": "query",
|
||||
"type": "boolean"
|
||||
},
|
||||
"quotaUser": {
|
||||
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"uploadType": {
|
||||
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"upload_protocol": {
|
||||
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"protocol": "rest",
|
||||
"resources": {
|
||||
"serviceaccounts": {
|
||||
"methods": {
|
||||
"lookup": {
|
||||
"description": "Lookup",
|
||||
"flatPath": "metadata/x509/{account}",
|
||||
"httpMethod": "GET",
|
||||
"id": "serviceaccountslookup.lookup",
|
||||
"parameterOrder": [
|
||||
"account"
|
||||
],
|
||||
"parameters": {
|
||||
"account": {
|
||||
"description": "Email or ID of the service account.",
|
||||
"location": "path",
|
||||
"required": true,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"path": "metadata/x509/{account}",
|
||||
"response": {
|
||||
"$ref": "Certificates"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"rootUrl": "https://www.googleapis.com/service_accounts/v1",
|
||||
"schemas": {
|
||||
"Certificates": {
|
||||
"description": "JSON template for certificates.",
|
||||
"id": "Certificates",
|
||||
"properties": {
|
||||
"email": { "description": "Email of the delegate.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"servicePath": "",
|
||||
"title": "Service Account Lookup Psuedo-API",
|
||||
"version": "v1",
|
||||
"version_module": true
|
||||
}
|
||||
141
src/serviceaccountlookup-v1.json
Normal file
141
src/serviceaccountlookup-v1.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"basePath": "",
|
||||
"baseUrl": "https://www.googleapis.com/service_accounts/v1",
|
||||
"canonicalName": "serviceaccountlookup",
|
||||
"description": "Psuedo-API to lookup public certificates for a service account anonymously",
|
||||
"discoveryVersion": "v1",
|
||||
"documentationLink": "https://example.com/",
|
||||
"fullyEncodeReservedExpansion": true,
|
||||
"icons": {
|
||||
"x16": "http://www.google.com/images/icons/product/search-16.gif",
|
||||
"x32": "http://www.google.com/images/icons/product/search-32.gif"
|
||||
},
|
||||
"id": "serviceaccountlookup:v1",
|
||||
"kind": "discovery#restDescription",
|
||||
"name": "serviceaccountlookup",
|
||||
"ownerDomain": "google.com",
|
||||
"ownerName": "Google",
|
||||
"packagePath": "admin",
|
||||
"parameters": {
|
||||
"$.xgafv": {
|
||||
"description": "V1 error format.",
|
||||
"enum": [
|
||||
"1",
|
||||
"2"
|
||||
],
|
||||
"enumDescriptions": [
|
||||
"v1 error format",
|
||||
"v2 error format"
|
||||
],
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"access_token": {
|
||||
"description": "OAuth access token.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"alt": {
|
||||
"default": "json",
|
||||
"description": "Data format for response.",
|
||||
"enum": [
|
||||
"json",
|
||||
"media",
|
||||
"proto"
|
||||
],
|
||||
"enumDescriptions": [
|
||||
"Responses with Content-Type of application/json",
|
||||
"Media download with context-dependent Content-Type",
|
||||
"Responses with Content-Type of application/x-protobuf"
|
||||
],
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"callback": {
|
||||
"description": "JSONP",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"fields": {
|
||||
"description": "Selector specifying which fields to include in a partial response.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"key": {
|
||||
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"oauth_token": {
|
||||
"description": "OAuth 2.0 token for the current user.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"prettyPrint": {
|
||||
"default": "true",
|
||||
"description": "Returns response with indentations and line breaks.",
|
||||
"location": "query",
|
||||
"type": "boolean"
|
||||
},
|
||||
"quotaUser": {
|
||||
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"uploadType": {
|
||||
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
"upload_protocol": {
|
||||
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"protocol": "rest",
|
||||
"resources": {
|
||||
"serviceaccounts": {
|
||||
"methods": {
|
||||
"lookup": {
|
||||
"description": "Lookup",
|
||||
"flatPath": "metadata/x509/{account}",
|
||||
"httpMethod": "GET",
|
||||
"id": "serviceaccountslookup.lookup",
|
||||
"parameterOrder": [
|
||||
"account"
|
||||
],
|
||||
"parameters": {
|
||||
"account": {
|
||||
"description": "Email or ID of the service account.",
|
||||
"location": "path",
|
||||
"required": true,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"path": "metadata/x509/{account}",
|
||||
"response": {
|
||||
"$ref": "Certificates"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"rootUrl": "https://www.googleapis.com/service_accounts/v1",
|
||||
"schemas": {
|
||||
"Certificates": {
|
||||
"description": "JSON template for certificates.",
|
||||
"id": "Certificates",
|
||||
"properties": {
|
||||
"email": { "description": "Email of the delegate.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"servicePath": "",
|
||||
"title": "Service Account Lookup Psuedo-API",
|
||||
"version": "v1",
|
||||
"version_module": true
|
||||
}
|
||||
Reference in New Issue
Block a user