mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-21 14:41:37 +00:00
Compare commits
160 Commits
20230811.0
...
20240131.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e1702018c | ||
|
|
a404af0582 | ||
|
|
741b69ff2d | ||
|
|
da1f808c06 | ||
|
|
39a8bf9485 | ||
|
|
53d1ce5ddb | ||
|
|
432ef09129 | ||
|
|
647da9f980 | ||
|
|
cc50ae28cd | ||
|
|
64ed92692a | ||
|
|
2dd810ba69 | ||
|
|
5922d939e2 | ||
|
|
14eaa9f32f | ||
|
|
f935a6bdfc | ||
|
|
29ceda7f43 | ||
|
|
f950c863f4 | ||
|
|
90f9931dca | ||
|
|
4c357d5281 | ||
|
|
0abf2ceeca | ||
|
|
3088570449 | ||
|
|
800943c401 | ||
|
|
3bedb57443 | ||
|
|
668ded91e2 | ||
|
|
293e1c1d9a | ||
|
|
7596215bbe | ||
|
|
7c6bbaf107 | ||
|
|
5271368776 | ||
|
|
430a30e2d2 | ||
|
|
b0eae53f80 | ||
|
|
dd03bafaec | ||
|
|
ded3ea104b | ||
|
|
0d9c6a77b6 | ||
|
|
ae46ae8738 | ||
|
|
06a4c7a8c9 | ||
|
|
f89f730957 | ||
|
|
80fc40a9c7 | ||
|
|
2bb0088ade | ||
|
|
d113b3ec8e | ||
|
|
97e13b92be | ||
|
|
dc832b8c7f | ||
|
|
56c33fec87 | ||
|
|
48862997b0 | ||
|
|
59dd01f1e8 | ||
|
|
d639e8e728 | ||
|
|
1c0e6ebf9c | ||
|
|
c289fb08f1 | ||
|
|
a64d6f1215 | ||
|
|
b0f05c2dea | ||
|
|
46d4e78b79 | ||
|
|
0562639715 | ||
|
|
51de288f27 | ||
|
|
7cfb16c1f5 | ||
|
|
f0cddbe7c2 | ||
|
|
06840c2608 | ||
|
|
87db64897d | ||
|
|
683d47175b | ||
|
|
fac8c11798 | ||
|
|
b5f5291e14 | ||
|
|
194b93a7ee | ||
|
|
55099e6835 | ||
|
|
4a199c7b6f | ||
|
|
3facd05a94 | ||
|
|
bb443be367 | ||
|
|
1952aa2026 | ||
|
|
d206ac4518 | ||
|
|
6b19ba1933 | ||
|
|
bcf9c051f0 | ||
|
|
4934809b88 | ||
|
|
55298f0134 | ||
|
|
7e9207ae3c | ||
|
|
7915f97bd5 | ||
|
|
1231627412 | ||
|
|
40977cedc7 | ||
|
|
d500196dee | ||
|
|
994d489226 | ||
|
|
602c47a900 | ||
|
|
de4315b4b7 | ||
|
|
9bbdae6986 | ||
|
|
c7899ba401 | ||
|
|
4b9a8cc235 | ||
|
|
4ae5cdee83 | ||
|
|
1393ed3ca6 | ||
|
|
6ec24c87cd | ||
|
|
a404311097 | ||
|
|
a7d8260de5 | ||
|
|
63fe8b53f9 | ||
|
|
4ad4711b84 | ||
|
|
f13625719b | ||
|
|
5ae29742ce | ||
|
|
ec6f36cf82 | ||
|
|
c18cf75b4f | ||
|
|
7b6673b43b | ||
|
|
d1dea2593f | ||
|
|
aebec7fa94 | ||
|
|
7f79bf0e87 | ||
|
|
0e0d45322e | ||
|
|
b7f572149f | ||
|
|
b07bd82f60 | ||
|
|
086c7469c5 | ||
|
|
37a968a142 | ||
|
|
dab05fb5c5 | ||
|
|
115dde8c2f | ||
|
|
38c78228aa | ||
|
|
9999abe462 | ||
|
|
d16ce28ee5 | ||
|
|
effa972a40 | ||
|
|
e998bcfde6 | ||
|
|
c9023d4792 | ||
|
|
c30931545f | ||
|
|
ed62abe464 | ||
|
|
34e42a1076 | ||
|
|
451d945095 | ||
|
|
cfb44548ab | ||
|
|
c6de3de370 | ||
|
|
59b653f92a | ||
|
|
b509e35cd1 | ||
|
|
079553e8bb | ||
|
|
220cbbac80 | ||
|
|
6993137430 | ||
|
|
d0a378413f | ||
|
|
c314637847 | ||
|
|
219e9ee8da | ||
|
|
d47268f45c | ||
|
|
d5eef1faf5 | ||
|
|
a7097a7310 | ||
|
|
0335ea7056 | ||
|
|
71777652cf | ||
|
|
7a91faab2b | ||
|
|
ed073877a6 | ||
|
|
8a46365f51 | ||
|
|
04fded6d94 | ||
|
|
15670fc7c4 | ||
|
|
cf27d4d9cc | ||
|
|
48c30dc266 | ||
|
|
d2430323b2 | ||
|
|
2a38699595 | ||
|
|
e76b71e245 | ||
|
|
92174438f6 | ||
|
|
0c85abf074 | ||
|
|
e9ea536aaf | ||
|
|
d2bbbb3b73 | ||
|
|
6735c361a4 | ||
|
|
1243ece157 | ||
|
|
7573013da4 | ||
|
|
b79c48718e | ||
|
|
8354c63a62 | ||
|
|
c163d9ac46 | ||
|
|
dcf63e203a | ||
|
|
8fb01205ea | ||
|
|
3e85b268a0 | ||
|
|
78d93428f2 | ||
|
|
4454e55b1e | ||
|
|
f1229fe8ce | ||
|
|
09581ae654 | ||
|
|
03fd8c296d | ||
|
|
155c29cc55 | ||
|
|
a017621a3d | ||
|
|
bea1c1c22d | ||
|
|
02c7628840 | ||
|
|
b5a9f302df |
45
.github/workflows/build.yml
vendored
45
.github/workflows/build.yml
vendored
@@ -86,11 +86,11 @@ jobs:
|
||||
python: "3.10"
|
||||
jid: 11
|
||||
arch: x86_64
|
||||
#- os: ubuntu-22.04
|
||||
# goal: test
|
||||
# python: "3.12"
|
||||
# jid: 12
|
||||
# arch: x86_64
|
||||
- os: ubuntu-22.04
|
||||
goal: test
|
||||
python: "3.11"
|
||||
jid: 12
|
||||
arch: x86_64
|
||||
|
||||
steps:
|
||||
|
||||
@@ -114,7 +114,7 @@ jobs:
|
||||
path: |
|
||||
bin.tar.xz
|
||||
src/cpython
|
||||
key: gam-${{ matrix.jid }}-20230801
|
||||
key: gam-${{ matrix.jid }}-20240130
|
||||
|
||||
- name: Untar Cache archive
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||
@@ -342,7 +342,12 @@ jobs:
|
||||
cd "${GITHUB_WORKSPACE}/src"
|
||||
git clone https://github.com/python/cpython.git
|
||||
cd "${PYTHON_SOURCE_PATH}"
|
||||
# Pin Windows to 3.11.6 for the moment
|
||||
# if [[ "${RUNNER_OS}" == "Windows" ]]; then
|
||||
# export LATEST_STABLE_TAG="v3.11.6"
|
||||
# else
|
||||
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
||||
# fi
|
||||
git checkout "${LATEST_STABLE_TAG}"
|
||||
export COMPILED_PYTHON_VERSION=${LATEST_STABLE_TAG:1} # Trim the "v" prefix
|
||||
echo "COMPILED_PYTHON_VERSION=${COMPILED_PYTHON_VERSION}" >> $GITHUB_ENV
|
||||
@@ -479,7 +484,16 @@ jobs:
|
||||
git clone https://github.com/pyinstaller/pyinstaller.git
|
||||
cd pyinstaller
|
||||
export latest_release=$(git tag --list | grep -v dev | grep -v rc | sort -Vr | head -n1)
|
||||
git checkout "${latest_release}"
|
||||
#V6.0.0 causes errors on staticx
|
||||
if [[ "${staticx}" == "yes" ]]; then
|
||||
git checkout "v5.13.2"
|
||||
elif [[ "${RUNNER_OS}" == "Windows" ]]; then
|
||||
git checkout "v5.13.2"
|
||||
elif [[ "${RUNNER_OS}" == "macOS" ]]; then
|
||||
git checkout "v5.13.2"
|
||||
else
|
||||
git checkout "${latest_release}"
|
||||
fi
|
||||
# remove pre-compiled bootloaders so we fail if bootloader compile fails
|
||||
rm -rvf PyInstaller/bootloader/*-*/*
|
||||
cd bootloader
|
||||
@@ -526,6 +540,7 @@ jobs:
|
||||
export distpath="./dist/gam"
|
||||
export gampath="${distpath}"
|
||||
"${PYTHON}" -m PyInstaller --clean --noconfirm --distpath="${distpath}" gam.spec
|
||||
cat build/gam/warn-gam.txt
|
||||
|
||||
- name: Copy extra package files
|
||||
if: matrix.goal == 'build'
|
||||
@@ -563,8 +578,8 @@ jobs:
|
||||
- name: Basic Tests all jobs
|
||||
id: basictests
|
||||
run: |
|
||||
$PYTHON -m unittest discover --start-directory ./ --pattern "*_test.py" --buffer
|
||||
$gam version extended
|
||||
$PYTHON -m unittest discover --start-directory ./ --pattern "*_test.py" --buffer || if [ $? != 5 ]; then exit $?; fi # exit 5 is no tests
|
||||
$gam version extended nooffseterror
|
||||
export GAMVERSION=$($gam version simple)
|
||||
echo "GAM Version ${GAMVERSION}"
|
||||
echo "GAMVERSION=${GAMVERSION}" >> $GITHUB_ENV
|
||||
@@ -598,7 +613,7 @@ jobs:
|
||||
- name: Basic Tests build jobs only
|
||||
if: matrix.goal != 'test' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
export voutput=$($gam version extended)
|
||||
export voutput=$($gam version extended nooffseterror)
|
||||
export python_line=$(echo -e "${voutput}" | grep "Python ")
|
||||
export python_arr=($python_line)
|
||||
export this_python=${python_arr[1]}
|
||||
@@ -660,7 +675,8 @@ jobs:
|
||||
$gam config csv_output_row_filter "email:regex:^gha_test_${JID}_" print cigroups | $gam csv - gam delete cigroup ~email
|
||||
$gam config csv_output_row_filter "resourceId:regex:^gha_test_${JID}_" print resources | $gam csv - gam delete resource ~resourceId
|
||||
$gam config csv_output_row_filter "buildingId:regex:^gha_test_${JID}_" print buildings | $gam csv - gam delete building ~buildingId
|
||||
|
||||
$gam config csv_output_row_filter "Emails.1.address:regex:^gha_test-${JID}_" print contacts | $gam csv - gam delete contact ~ContactID
|
||||
|
||||
echo "Creating OrgUnit ${newou}"
|
||||
$gam create ou "${newou}"
|
||||
export GAM_THREADS=5
|
||||
@@ -679,6 +695,8 @@ jobs:
|
||||
$gam user $gam_user sendemail recipient $newuser subject "test message $newbase" message "GHA test message"
|
||||
$gam user $gam_user sendemail recipient exchange@pdl.jaylee.us subject "test ${tstamp}" message "test message"
|
||||
$gam config enable_dasa false save
|
||||
$gam create contact firstname GHA lastname "$JID" email work "${newbase}@example.com" primary
|
||||
$gam print contacts
|
||||
$gam user $newuser add license workspaceenterpriseplus
|
||||
$gam print privileges
|
||||
$gam config enable_dasa true save
|
||||
@@ -776,6 +794,7 @@ jobs:
|
||||
$gam create device serialnumber $sn devicetype android
|
||||
$gam config enable_dasa true save
|
||||
$gam print users query "gha.jid=$JID" | $gam csv - gam delete user ~primaryEmail || if [ $? != 50 ]; then exit $?; fi # expect a 50 return code (vault hold on user)
|
||||
$gam delete contacts emailmatchpattern "^${newbase}@example.com$"
|
||||
$gam print mobile
|
||||
$gam print devices
|
||||
$gam print browsers
|
||||
@@ -803,8 +822,8 @@ jobs:
|
||||
echo "printer model count:"
|
||||
ssoprofile=$($gam create inboundssoprofile name "El Goog ${newbase}" loginurl https://www.google.com logouturl https://www.google.com changepasswordurl https://www.google.com entityid ElGoog return_name_only)
|
||||
$gam create inboundssocredential profile "id:${ssoprofile}" generate_key
|
||||
$gam create inboundssoassignment profile "id:${ssoprofile}" orgunit "${newou}" mode SAML_SSO
|
||||
$gam delete inboundssoassignment "orgunit:${newou}"
|
||||
#$gam create inboundssoassignment profile "id:${ssoprofile}" orgunit "${newou}" mode SAML_SSO
|
||||
#$gam delete inboundssoassignment "orgunit:${newou}"
|
||||
$gam delete inboundssoprofile "id:${ssoprofile}"
|
||||
$gam print printermodels | wc -l
|
||||
$gam print printers
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- [Create an administrator](#create-an-administrator)
|
||||
- [Delete an administrator](#delete-an-administrator)
|
||||
- [Display administrators](#display-administrators)
|
||||
- [Copy roles from one administrator to another](#copy-roles-from-one-administrator-to-another)
|
||||
|
||||
## Administrator roles documentation
|
||||
* https://support.google.com/a/answer/33325?ref_topic=4514341
|
||||
@@ -856,6 +857,7 @@ gam show adminroles|roles [todrive <ToDriveAttribute>*] [privileges]
|
||||
* `privileges` - Display privileges associated with each role
|
||||
|
||||
## Create an administrator
|
||||
Add an administrator role to an administrator.
|
||||
```
|
||||
gam create admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
||||
[condition securitygroup|nonsecuritygroup]
|
||||
@@ -868,6 +870,7 @@ The option `condition` limits the conditions for delegate admin access. This cur
|
||||
* `condition nonsecuritygroup` - limit the delegated admin to managing non-security groups
|
||||
|
||||
## Delete an administrator
|
||||
Remove an administrator role from an administrator.
|
||||
```
|
||||
gam delete admin <RoleAssignmentId>
|
||||
```
|
||||
@@ -888,3 +891,15 @@ options to limit the display:
|
||||
|
||||
In versions prior to 6.07.01, specification of both `user <UserItem>`
|
||||
and `role <RoleItem>` generated no output due to an undocumented API rule that disallows both.
|
||||
|
||||
## Copy roles from one administrator to another
|
||||
Get roles for current admin.
|
||||
```
|
||||
gam redirect csv ./CurrentAdminRoles.csv print admins user currentadmin@domain.com
|
||||
```
|
||||
Add roles to new admin.
|
||||
```
|
||||
gam config csv_input_row_filter "scopeType:regex:CUSTOMER" redirect stdout ./UpdateNewAdminCustomerRoles.txt multiprocess redirect stderr stdout csv CurrentAdminRoles.csv gam create admin newadmin@domain.com "id:~~roleId~~" customer
|
||||
gam config csv_input_row_filter "scopeType:regex:ORG_UNIT" redirect stdout ./UpdateNewAdminOrgUnitRoles.txt multiprocess redirect stderr stdout csv CurrentAdminRoles.csv gam create admin newadmin@domain.com "id:~~roleId~~" org_unit "id:~~orgUnitId~~"
|
||||
```
|
||||
|
||||
|
||||
@@ -21,11 +21,16 @@
|
||||
* https://developers.google.com/admin-sdk/directory/v1/guides/search-users
|
||||
|
||||
## Definitions
|
||||
See [Collections of Items](Collections-of-Items)
|
||||
```
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<DomainNameList> ::= "<DomainName>(,<DomainName>)*"
|
||||
<DomainNameEntity> ::=
|
||||
<DomainNameList> | <FileSelector> | <CSVFileSelector>
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::= <EmailAddressList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<UniqueID> ::= id:<String>
|
||||
```
|
||||
## Create an alias for a target
|
||||
@@ -50,13 +55,18 @@ gam create alias bob[@yourdomain.com] user robert[@yourdomain.com]
|
||||
The existing alias is deleted and a new alias is created.
|
||||
```
|
||||
gam update alias|aliases <EmailAddressEntity> user|group|target <UniqueID>|<EmailAddress>
|
||||
[notargetverify]
|
||||
[notargetverify] [waitafterdelete <Integer>]
|
||||
```
|
||||
`<EmailAddressEntity>` are the aliases, `<EmailAddress>` is the target.
|
||||
|
||||
By default, GAM makes additional API calls to verify that the target email address exists before updating the alias;
|
||||
if you know that the target exists, you can suppress the verification with `notargetverify.
|
||||
|
||||
GAM updates an alias to point to a new target by deleting the alias and then recreates the alias pointing to the new target.
|
||||
Unfortunately, if these commands are executed back-to-back; Google generates the `Update Failed: Duplicate` error.
|
||||
Now, GAM waits 2 seconds between the delete and the insert which seems to eliminate the problem. If the problem persists,
|
||||
use the option `waitafterdelete <Integer>` to increase the wait time to a maximum of 10 seconds.
|
||||
|
||||
## Delete an alias regardless of the target
|
||||
```
|
||||
gam delete alias|aliases [user|group|target] <EmailAddressEntity>
|
||||
@@ -75,7 +85,7 @@ gam <UserTypeEntity> delete aliases
|
||||
```
|
||||
|
||||
## Display aliases
|
||||
Display a specific alise.
|
||||
Display a specific alias.
|
||||
```
|
||||
gam info alias|aliases <EmailAddressEntity>
|
||||
```
|
||||
@@ -83,7 +93,8 @@ gam info alias|aliases <EmailAddressEntity>
|
||||
Display selected aliases.
|
||||
```
|
||||
gam print aliases [todrive <ToDriveAttribute>*]
|
||||
[domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
([domain|domains <DomainNameEntity>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
[limittoou <OrgUnitItem>])
|
||||
[user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
||||
[select <UserTypeEntity>]
|
||||
[aliasmatchpattern <RegularExpression>]
|
||||
@@ -93,8 +104,10 @@ gam print aliases [todrive <ToDriveAttribute>*]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
```
|
||||
By default, group and user aliases in all domains in the account are selected; these options allow selection of subsets of aliases:
|
||||
* `domain <DomainName>` - Limit aliases to those in `<DomainName>`
|
||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Print aliases for selected users
|
||||
* `domain|domains <DomainNameEntity>` - Limit aliases to those in the domains specified by `<DomainNameEntity>`
|
||||
* You can predefine this list with the `print_agu_domains` variable in `gam.cfg`.
|
||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Print aliases for users/groups that match a query; each query is run against each domain
|
||||
* `limittoou <OrgUnitItem>` - Print aliases for users in the specified `<OrgUnitItem>`
|
||||
* `user|users <EmailAddressList>` - Print aliases for users in `<EmailAddressList`
|
||||
* `select <UserTypeEntity>` - Print aliases for users in `<UserTypeEntity>`
|
||||
* `group|groups <EmailAddressList>` - Print aliases for groups in `<EmailAddressList`
|
||||
@@ -116,6 +129,24 @@ By default, the aliases in a list are separated by the `csv_output_field_delimit
|
||||
|
||||
Specifying both `onerowpertarget` and `suppressnoaliasrows` causes GAM to not display any targets that have no aliases.
|
||||
|
||||
Add additional columns of data from the command line to the output
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
When multiple domains are specified and a query/queries are specified, an API call is made for each domain/query combination.
|
||||
```
|
||||
$ gam print aliases domains school.org,students.school.org queries "'email:admin*','email:test*'"
|
||||
Getting all Users that match query (domain=school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
|
||||
Got 3 Users: admin@school.org - admindirector@school.org
|
||||
Getting all Users that match query (domain=school.org, query="email:test*"), may take some time on a large Google Workspace Account...
|
||||
Got 20 Users: testusera@school.org - testuserx@school.org
|
||||
Getting all Users that match query (domain=students.school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
|
||||
Got 1 User: admin@students.school.org - admin@students.school.org
|
||||
Getting all Users that match query (domain=students.school.org, query="email:test*"), may take some time on a large Google Workspace Account...
|
||||
Got 1 User: testuser1@students.school.org - testuser1@students.school.org
|
||||
Alias,Target,TargetType
|
||||
...
|
||||
```
|
||||
|
||||
## Bulk delete aliases
|
||||
You can bulk delete aliases as follows; use `(query <QueryUser>)|(queries <QueryUserList>)` and
|
||||
`aliasmatchpattern <RegularExpression>` as desired.
|
||||
|
||||
@@ -161,6 +161,7 @@ gam oauth update
|
||||
<ProjectIDEntity> ::=
|
||||
current | gam | <ProjectID> | (filter <String>) |
|
||||
(select <ProjectIDList> | <FileSelector> | <CSVFileSelector>)
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<ProjectName> ::= <String>
|
||||
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
||||
<ServiceAccountName> ::= <String>
|
||||
@@ -230,6 +231,16 @@ gam create gcpfolder [admin <EmailAddress] folder <String>
|
||||
Create a new project to create and download two files: `client_secrets.json` for the Client and `oauth2service.json` for the Service Account.
|
||||
On-screen instructions lead you through the process.
|
||||
|
||||
An existing project, `GAM Project Creation`, is used to create your GAM project. The initial instructions tell you how to
|
||||
enable this project as a trusted app as your workspace may not allow untrusted third-party apps.
|
||||
This is recommended but not mandatory unless your workspace has "Google Cloud" service restricted:
|
||||
* https://support.google.com/a/answer/7281227?hl=en#zippy=%2Crestrict-or-unrestrict-google-services
|
||||
|
||||
If it is restricted and you complete this step it may take an hour or so to take full affect and allow you to approve GAM project creation.
|
||||
|
||||
The final instructions tell you how to enable your new GAM project as a trusted app as your workspace may not allow untrusted third-party apps.
|
||||
You can skip these steps if you know that untrusted third-party apps are allowed.
|
||||
|
||||
### Default values
|
||||
* `<AppName>` - "GAM"
|
||||
* `<ProjectID>` - "gam-project-abc-def-jki" where "abc-def-ghi" are randomly generated
|
||||
@@ -920,7 +931,7 @@ This will prevent the limited user from having any client access.
|
||||
Perform these steps:
|
||||
|
||||
Create a a new service account in your project that will be used for the limited user;
|
||||
this will create `outh2service.json`.
|
||||
this will create `oauth2service.json`.
|
||||
```
|
||||
gam add svcacct saname "gam-limited" sadisplayname "GAM Limited"
|
||||
```
|
||||
|
||||
@@ -16,44 +16,7 @@
|
||||
<FalseValues>= false|off|no|disabled|0
|
||||
<TrueValues> ::= true|on|yes|enabled|1
|
||||
|
||||
<Charset> ::= ascii|latin1|mbcs|utf-8|utf-8-sig|utf-16|<String>
|
||||
<CalendarColorIndex> ::= <Number in range 1-24>
|
||||
<CalendarColorName> ::=
|
||||
amethyst|avocado|banana|basil|birch|blueberry|
|
||||
cherryblossom|citron|cobalt|cocoa|eucalyptus|flamingo|
|
||||
grape|graphite|lavender|mango|peacock|pistachio|
|
||||
pumpkin|radicchio|sage|tangerine|tomato|wisteria|
|
||||
<ColorHex> ::= "#<Hex><Hex><Hex><Hex><Hex><Hex>"
|
||||
<ColorNameGoogle> ::=
|
||||
asparagus|bluevelvet|bubblegum|cardinal|chocolateicecream|denim|desertsand|
|
||||
earthworm|macaroni|marsorange|mountaingray|mountaingrey|mouse|oldbrickred|
|
||||
pool|purpledino|purplerain|rainysky|seafoam|slimegreen|spearmint|
|
||||
toyeggplant|vernfern|wildstrawberries|yellowcab
|
||||
<ColorNameWeb> ::=
|
||||
aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|
|
||||
blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|
|
||||
cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|
|
||||
darkgrey|darkgreen|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|
|
||||
darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|
|
||||
darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|
|
||||
firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|
|
||||
gray|grey|green|greenyellow|honeydew|hotpink|indianred|indigo|ivory|khaki|
|
||||
lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|
|
||||
lightgoldenrodyellow|lightgray|lightgrey|lightgreen|lightpink|lightsalmon|
|
||||
lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|
|
||||
lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|
|
||||
mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|
|
||||
mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|
|
||||
navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|
|
||||
palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|
|
||||
peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|
|
||||
sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|
|
||||
slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|
|
||||
wheat|white|whitesmoke|yellow|yellowgreen
|
||||
<ColorName> ::= <ColorNameGoogle>|<ColorNameWeb>
|
||||
<ColorValue> ::= <ColorName>|<ColorHex>
|
||||
<DayOfWeek> ::= mon|tue|wed|thu|fri|sat|sun
|
||||
<DriveLabelLanguageCode> ::=
|
||||
<BCP47LanguageCode> ::=
|
||||
ar-sa| # Arabic Saudi Arabia
|
||||
cs-cz| # Czech Czech Republic
|
||||
da-dk| # Danish Denmark
|
||||
@@ -91,6 +54,43 @@
|
||||
zh-cn| # Chinese China
|
||||
zh-hk| # Chinese Hong Kong
|
||||
zh-tw # Chinese Taiwan
|
||||
<Charset> ::= ascii|latin1|mbcs|utf-8|utf-8-sig|utf-16|<String>
|
||||
<CalendarColorIndex> ::= <Number in range 1-24>
|
||||
<CalendarColorName> ::=
|
||||
amethyst|avocado|banana|basil|birch|blueberry|
|
||||
cherryblossom|citron|cobalt|cocoa|eucalyptus|flamingo|
|
||||
grape|graphite|lavender|mango|peacock|pistachio|
|
||||
pumpkin|radicchio|sage|tangerine|tomato|wisteria|
|
||||
<ColorHex> ::= "#<Hex><Hex><Hex><Hex><Hex><Hex>"
|
||||
<ColorNameGoogle> ::=
|
||||
asparagus|bluevelvet|bubblegum|cardinal|chocolateicecream|denim|desertsand|
|
||||
earthworm|macaroni|marsorange|mountaingray|mountaingrey|mouse|oldbrickred|
|
||||
pool|purpledino|purplerain|rainysky|seafoam|slimegreen|spearmint|
|
||||
toyeggplant|vernfern|wildstrawberries|yellowcab
|
||||
<ColorNameWeb> ::=
|
||||
aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|
|
||||
blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|
|
||||
cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|
|
||||
darkgrey|darkgreen|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|
|
||||
darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|
|
||||
darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|
|
||||
firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|
|
||||
gray|grey|green|greenyellow|honeydew|hotpink|indianred|indigo|ivory|khaki|
|
||||
lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|
|
||||
lightgoldenrodyellow|lightgray|lightgrey|lightgreen|lightpink|lightsalmon|
|
||||
lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|
|
||||
lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|
|
||||
mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|
|
||||
mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|
|
||||
navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|
|
||||
palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|
|
||||
peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|
|
||||
sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|
|
||||
slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|
|
||||
wheat|white|whitesmoke|yellow|yellowgreen
|
||||
<ColorName> ::= <ColorNameGoogle>|<ColorNameWeb>
|
||||
<ColorValue> ::= <ColorName>|<ColorHex>
|
||||
<DayOfWeek> ::= mon|tue|wed|thu|fri|sat|sun
|
||||
<EventColorIndex> ::= <Number in range 1-11>
|
||||
<EventColorName> ::=
|
||||
banana|basil|blueberry|flamingo|graphite|grape|
|
||||
@@ -211,6 +211,7 @@
|
||||
gfolder|gdirectory|
|
||||
gform|
|
||||
gfusion|
|
||||
gjam|
|
||||
gmap|
|
||||
gpresentation|
|
||||
gscript|
|
||||
@@ -371,12 +372,6 @@
|
||||
<CourseWorkState> ::= draft|published|deleted
|
||||
<CrOSID> ::= <String>
|
||||
<CustomerID> ::= <String>
|
||||
<DataStudioAssetID> ::= <String>
|
||||
<DataStudioPermission> ::=
|
||||
user:<EmailAddress>|
|
||||
group:<EmailAddress>|
|
||||
domain:<DomainName>|
|
||||
serviceAccount:<EmailAddress>
|
||||
<DeliverySetting> ::=
|
||||
allmail|
|
||||
abridged|daily|
|
||||
@@ -452,15 +447,15 @@
|
||||
<LabelID> ::= Label_<String>
|
||||
<LabelName> ::= <String>
|
||||
<LabelReplacement> ::= <String>
|
||||
<LookerStudioAssetID> ::= <String>
|
||||
<LookerStudioPermission> ::=
|
||||
user:<EmailAddress>|
|
||||
group:<EmailAddress>|
|
||||
domain:<DomainName>|
|
||||
serviceAccount:<EmailAddress>
|
||||
<Marker> ::= <String>
|
||||
<MatterItem> ::= <UniqueID>|<String>
|
||||
<MatterState> ::= open|closed|deleted
|
||||
<MessageContent> ::=
|
||||
(message|textmessage|htmlmessage <String>)|
|
||||
(file|textfile|htmlfile <FileName> [charset <Charset>])|
|
||||
(gdoc|ghtml <UserGoogleDoc>)|
|
||||
(gcsdoc|gcshtml <StorageBucketObjectName>)|
|
||||
(emlfile <FileName>)
|
||||
<MessageID> ::= <String>
|
||||
<Namespace> ::= <String>
|
||||
<NotesName> ::= notes/<String>
|
||||
@@ -570,6 +565,7 @@
|
||||
<TakeoutBucketName> ::= takeout-export-[a-f,0-9,-]*
|
||||
<TaskID> ::= <String>
|
||||
<TaskListID> ::= <String>
|
||||
<TaskListTitle> ::= tltitle:<String>
|
||||
<TasklistIDTaskID> ::= <TasklistID>/<TaskID>
|
||||
<ThreadID> ::= <String>
|
||||
<TimeZone> ::= <String>
|
||||
@@ -611,4 +607,5 @@
|
||||
(file|textfile|htmlfile <FileName> [charset <Charset>])|
|
||||
(gdoc|ghtml <UserGoogleDoc>)|
|
||||
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
||||
<YouTubeChannelID> ::= <String>
|
||||
```
|
||||
|
||||
@@ -69,13 +69,13 @@ gam redirect stdout ./NewStudents.out redirect stderr ./NewStudents.err tbatch N
|
||||
## CSV files
|
||||
```
|
||||
gam csv <FileName>|-|(gsheet <UserGoogleSheet>)|(gdoc <UserGoogleDoc>) [charset <Charset>] [warnifnodata]
|
||||
[columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)* [showcmds [<Boolean>]]
|
||||
[maxrows <Integer>]
|
||||
gam <GAMArgumentList>
|
||||
|
||||
gam loop <FileName>|-|(gsheet <UserGoogleSheet>)|(gdoc <UserGoogleDoc>) [charset <Charset>] [warnifnodata]
|
||||
[columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)* [showcmds [<Boolean>]]
|
||||
[maxrows <Integer>]
|
||||
gam <GAMArgumentList>
|
||||
@@ -87,6 +87,7 @@ gam loop <FileName>|-|(gsheet <UserGoogleSheet>)|(gdoc <UserGoogleDoc>) [charset
|
||||
* `gsheet <UserGoogleSheet>` - A Google Sheet and the one or more columns that contain data
|
||||
* `gdoc <UserGoogleDoc>` - A Google Doc and the one or more columns that contain data
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings.
|
||||
* `(matchfield|skipfield <FieldName> <RegularExpression>)*` - The criteria to select rows from the CSV file; can be used multiple times; if not specified, all rows are selected
|
||||
|
||||
@@ -171,32 +171,39 @@ primaryEmail,externalIds,externalIds.0.type,externalIds.0.value,externalIds.1.ty
|
||||
You can include rows generated by gam print commands based on column values. You specify a list
|
||||
of fields (headers) and the values they must have. `csv_output_row_filter` is used to specify the
|
||||
fields and values. Each field name/expression can appear only once in the list.
|
||||
|
||||
You specify whether all or any value filters must match for the row to be included in the output.
|
||||
|
||||
* `csv_output_row_filter_mode allmatch` - All value filters must match for the row to be included in the output; this is the default
|
||||
* `csv_output_row_filter_mode anymatch` - Any value filter must match for the row to be included in the output
|
||||
|
||||
```
|
||||
gam config csv_output_row_filter <RowValueFilterList> ...
|
||||
gam config csv_output_row_filter <RowValueFilterJSONList> ...
|
||||
```
|
||||
|
||||
You optionally specify whether all or any value filters must match for the row to be included in the output.
|
||||
|
||||
* `csv_output_row_filter_mode allmatch` - All value filters must match for the row to be included in the output; this is the default
|
||||
* `csv_output_row_filter_mode anymatch` - Any value filter must match for the row to be included in the output
|
||||
```
|
||||
gam config csv_output_row_filter_mode anymatch csv_output_row_filter <RowValueFilterList> ...
|
||||
gam config csv_output_row_filter_mode anymatch csv_output_row_filter <RowValueFilterJSONList> ...
|
||||
```
|
||||
|
||||
|
||||
### Exclusive filters
|
||||
You can exclude rows generated by gam print commands based on column values. You specify a list
|
||||
of fields (headers) and the values they must not have. `csv_output_row_drop_filter` is used to specify the
|
||||
fields and values. Each field name/expression can appear only once in the list.
|
||||
|
||||
You specify whether all or any value filters must match for the row to be excluded from the output.
|
||||
|
||||
* `csv_output_row_filter_drop_mode allmatch` - If all value filters match, the row is excluded from the output
|
||||
* `csv_output_row_filter_drop_mode anymatch` - If any value filter matches, the row is excluded from the output; this is the default
|
||||
|
||||
```
|
||||
gam config csv_output_row_drop_filter <RowValueFilterList> ...
|
||||
gam config csv_output_row_drop_filter <RowValueFilterJSONList> ...
|
||||
```
|
||||
|
||||
You optionally specify whether all or any value filters must match for the row to be excluded from the output.
|
||||
|
||||
* `csv_output_row_drop_filter_mode allmatch` - If all value filters match, the row is excluded from the output
|
||||
* `csv_output_row_drop_filter_mode anymatch` - If any value filter matches, the row is excluded from the output; this is the default
|
||||
```
|
||||
gam config csv_output_row_drop_filter_mode allmatch csv_output_row_drop_filter <RowValueFilterList> ...
|
||||
gam config csv_output_row_drop_filter_mode allmatch csv_output_row_drop_filter <RowValueFilterJSONList> ...
|
||||
```
|
||||
|
||||
### Matches
|
||||
A filter matches if the field has the desired value. lf you specify a regular expression for a field name that matches
|
||||
several columns, the filter matches if any of the columns has a match. In the case of `notregex|notregexcs|notdata`,
|
||||
|
||||
94
docs/CSV-Special-Characters.md
Normal file
94
docs/CSV-Special-Characters.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# CSV Special Characters
|
||||
- [Python CSV documentation](https://docs.python.org/3/library/csv.html#dialects-and-formatting-parameters)
|
||||
|
||||
## Python variables that control CSV file reading/writing:
|
||||
```
|
||||
Dialect.delimiter
|
||||
A one-character string used to separate fields.
|
||||
It defaults to ','.
|
||||
|
||||
Dialect.doublequote
|
||||
Controls how instances of quotechar appearing inside a field should themselves be quoted.
|
||||
When True, the character is doubled. When False, the escapechar is used as a prefix to the quotechar.
|
||||
It defaults to True.
|
||||
|
||||
Dialect.escapechar
|
||||
A one-character string used by the writer to escape the delimiter if quoting is set to QUOTE_NONE and the quotechar if doublequote is False.
|
||||
On reading, the escapechar removes any special meaning from the following character.
|
||||
It defaults to None, which disables escaping.
|
||||
|
||||
Dialect.lineterminator
|
||||
The string used to terminate lines produced by the writer.
|
||||
It defaults to '\r\n'.
|
||||
|
||||
The reader is hard-coded to recognise either '\r' or '\n' as end-of-line, and ignores lineterminator.
|
||||
|
||||
Dialect.quotechar
|
||||
A one-character string used to quote fields containing special characters, such as the delimiter or quotechar, or which contain new-line characters.
|
||||
It defaults to '"'.
|
||||
|
||||
Dialect.quoting
|
||||
Controls when quotes should be generated by the writer and recognised by the reader. It can take on any of the QUOTE_* constants (see section Module Contents).
|
||||
It defaults to QUOTE_MINIMAL.
|
||||
```
|
||||
|
||||
## GAM variables that control CSV file reading/writing:
|
||||
```
|
||||
csv_input_column_delimiter = , - Dialect.delimiter
|
||||
csv_input_no_escape_char = true - Dialect.escapechar is set to None if true, '\' if false
|
||||
csv_input_quote_char = " - Dialect.quotechar
|
||||
csv_output_column_delimiter = , - Dialect.delimiter
|
||||
csv_output_no_escape_char = false - Dialect.escapechar is set to None if true, '\' if false
|
||||
csv_output_line_terminator = lf - Dialect.lineterminator
|
||||
csv_output_quote_char = " - Dialect.quotechar
|
||||
todrive_no_escape_char = true - Dialect.escapechar is set to None if true, '\' if false
|
||||
```
|
||||
|
||||
GAM sets Dialect.doublequote to true and Dialect.quoting to QUOTE_MINIMAL; there are no variables to change these values.
|
||||
|
||||
## Examples
|
||||
|
||||
### Local file, default settings
|
||||
With these settings, here are examples of how field values are mapped on output to a local file:
|
||||
```
|
||||
csv_output_column_delimiter = ,
|
||||
csv_output_no_escape_char = false
|
||||
csv_output_quote_char = "
|
||||
```
|
||||
|
||||
| Input | Output |
|
||||
|-------|--------|
|
||||
| abc def | abc def |
|
||||
| abc,def | "abc,def" |
|
||||
| abc"def | "abc""def" |
|
||||
| abc\def | abc\\\\def |
|
||||
|
||||
### Local file, modified settings
|
||||
With these settings, here are examples of how field values are mapped on output to a local file:
|
||||
```
|
||||
csv_output_column_delimiter = ,
|
||||
csv_output_no_escape_char = true
|
||||
csv_output_quote_char = "
|
||||
```
|
||||
|
||||
| Input | Output |
|
||||
|-------|--------|
|
||||
| abc def | abc def |
|
||||
| abc,def | "abc,def" |
|
||||
| abc"def | "abc""def" |
|
||||
| abc\def | abc\def |
|
||||
|
||||
### todrive, default settings
|
||||
With these settings, here are examples of how field values are mapped on output to todrive
|
||||
```
|
||||
csv_output_column_delimiter = ,
|
||||
todrive_no_escape_char = true
|
||||
csv_output_quote_char = "
|
||||
```
|
||||
|
||||
| Input | Output |
|
||||
|-------|--------|
|
||||
| abc def | abc def |
|
||||
| abc,def | "abc,def" |
|
||||
| abc"def | "abc""def" |
|
||||
| abc\def | abc\def |
|
||||
@@ -28,6 +28,7 @@ Calendar ACL roles (as seen in Calendar GUI):
|
||||
<CalendarItem> ::= <EmailAddress>
|
||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
||||
@@ -56,11 +57,14 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam calendars <CalendarEntity> print acls|calendaracls [todrive <ToDriveAttribute>*]
|
||||
[noselfowner]
|
||||
[noselfowner] (addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
Option `noselfowner` suppresses the display of ACLs that reference the calendar itself as its owner.
|
||||
|
||||
Add additional columns of data from the command line to the output
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
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.
|
||||
@@ -74,7 +78,9 @@ gam calendar <CalendarEntity> add <CalendarACLRole> ([user] <EmailAddress>)|(gro
|
||||
gam calendar <CalendarEntity> update <CalendarACLRole> ([user] <EmailAddress>)|(group <EmailAddress>)|(domain [<DomainName>])|default [sendnotifications <Boolean>]
|
||||
gam calendar <CalendarEntity> delete [<CalendarACLRole>] ([user] <EmailAddress>)|(group <EmailAddress>)|(domain [<DomainName>])|default
|
||||
gam calendar <CalendarEntity> showacl [formatjson]
|
||||
gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]
|
||||
gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, when you add or update a calendar ACL, notification is sent to the members referenced in the `<CalendarACLScopeEntity>`.
|
||||
Use `sendnotifications false` to suppress sending the notification.
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
- [Add calendar attendees](#add-calendar-attendees)
|
||||
- [Update calendar events](#update-calendar-events)
|
||||
- [Update calendar attendees](#update-calendar-attendees)
|
||||
- [Specify calendar attendees with JSON data](#specify-calendar-attendees-with-JSON-data)
|
||||
- [Specify calendar attendees with JSON data](#specify-calendar-attendees-with-json-data)
|
||||
- [Delete selected calendar events](#delete-selected-calendar-events)
|
||||
- [Delete all calendar events](#delete-all-calendar-events)
|
||||
- [Move calendar events to another calendar](#move-calendar-events-to-another-calendar)
|
||||
@@ -63,10 +63,12 @@ Client access works when accessing Resource calendars.
|
||||
<CalendarItem> ::= <EmailAddress>
|
||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<EmailAddressList> ::= "<EmailAddess>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::= <EmailAddressList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<EventAttachmentsSubfieldName> ::=
|
||||
attachments.fileid|
|
||||
@@ -101,12 +103,21 @@ Client access works when accessing Resource calendars.
|
||||
creator.id|
|
||||
creator.self
|
||||
|
||||
<EventFocusTimePropertiesSubfieldName> ::=
|
||||
focustimeproperties.chatstatus|
|
||||
focustimeproperties.declinemode|
|
||||
focustimeproperties.declinemessage
|
||||
|
||||
<EventOrganizerSubfieldName> ::=
|
||||
organizer.displayname|
|
||||
organizer.email|
|
||||
organizer.id|
|
||||
organizer.self
|
||||
|
||||
<EventOutOfOfficePropertiesSubfieldName> ::=
|
||||
outofoffice.declinemode|
|
||||
outofoffice.declinemessage
|
||||
|
||||
<EventWorkingLocationPropertiesSubfieldName> ::=
|
||||
workinglocationproperties.homeoffice|
|
||||
workinglocationproperties.customlocation|
|
||||
@@ -130,6 +141,7 @@ Client access works when accessing Resource calendars.
|
||||
endtimeunspecified|
|
||||
extendedproperties|
|
||||
eventtype|
|
||||
<EventFocusTimePropertiesSubfieldName>
|
||||
gadget|
|
||||
guestscaninviteothers|
|
||||
guestscanmodify|
|
||||
@@ -143,6 +155,7 @@ Client access works when accessing Resource calendars.
|
||||
organizer|
|
||||
<EventOrganizerSubfieldName>|
|
||||
originalstart|originalstarttime|
|
||||
<EventOutOfOfficePropertiesSubfieldName>
|
||||
privatecopy|
|
||||
recurrence|
|
||||
recurringeventid|
|
||||
@@ -156,14 +169,23 @@ Client access works when accessing Resource calendars.
|
||||
updated|
|
||||
visibility|
|
||||
workinglocationproperties|
|
||||
<EventWorkingLocationPropertiesSubfieldName>
|
||||
<EventFieldNameList> ::= "<EventFieldName>(,<EventFieldName>)*"
|
||||
|
||||
<AttendeeAttendance> ::= optional|required
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
|
||||
<EventType> ::=
|
||||
default|
|
||||
focustime|
|
||||
outofoffice|
|
||||
workinglocation
|
||||
<EventTypeList> ::= "<EventType>(,<EventType>)*"
|
||||
|
||||
<EventSelectProperty> ::=
|
||||
(after|starttime|timemin <Time>)|
|
||||
(before|endtime|timemax <Time>)|
|
||||
(eventtype|eventtypes <EventTypeList>)|
|
||||
(query <QueryCalendar>)|
|
||||
(privateextendedproperty <String>)|
|
||||
(sharedextendedproperty <String>)|
|
||||
@@ -183,6 +205,7 @@ Client access works when accessing Resource calendars.
|
||||
(matchfield location <RegularExpression>)|
|
||||
(matchfield organizeremail <RegularExpression>)|
|
||||
(matchfield organizername <RegularExpression>)|
|
||||
(matchfield organizerself <Boolean>)|
|
||||
(matchfield status <RegularExpression>)|
|
||||
(matchfield summary <RegularExpression>)|
|
||||
(matchfield transparency <RegularExpression>)|
|
||||
@@ -192,6 +215,7 @@ Client access works when accessing Resource calendars.
|
||||
(id|eventid <EventId>) |
|
||||
(event|events <EventIdList> |
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVSubkeySelector> | <CSVDataSelector>)
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<EventSelectEntity> ::=
|
||||
(<EventSelectProperty>+ <EventMatchProperty>*)
|
||||
@@ -207,6 +231,7 @@ Client access works when accessing Resource calendars.
|
||||
<PropertyValue> ::= <String>
|
||||
|
||||
<EventAttribute> ::=
|
||||
(allday <Date>)|
|
||||
(anyonecanaddself [<Boolean>])|
|
||||
(attachment <String> <URL>)|
|
||||
(attendee <EmailAddress>)|
|
||||
@@ -215,7 +240,7 @@ Client access works when accessing Resource calendars.
|
||||
(color <EventColorName>)|
|
||||
(colorindex|colorid <EventColorIndex>)|
|
||||
(description <String>)|
|
||||
(end (allday <Date>)|<Time>)|
|
||||
(end|endtime (allday <Date>)|<Time>)|
|
||||
(guestscaninviteothers <Boolean>)|
|
||||
guestscantinviteothers|
|
||||
(guestscanmodify <Boolean>)|
|
||||
@@ -230,16 +255,18 @@ Client access works when accessing Resource calendars.
|
||||
(optionalattendee <EmailAddress>)|
|
||||
(originalstart|originalstarttime (allday <Date>)|<Time>)|
|
||||
(privateproperty <PropertyKey> <PropertyValue>)|
|
||||
(range <Date> <Date>)|
|
||||
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
||||
(reminder <Number> email|popup))|
|
||||
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
||||
(sequence <Integer>)|
|
||||
(sharedproperty <PropertyKey> <PropertyValue>)|
|
||||
(source <String> <URL>)|
|
||||
(start (allday <Date>)|<Time>)|
|
||||
(start|starttime (allday <Date>)|<Time>)|
|
||||
(status confirmed|tentative|cancelled)|
|
||||
(summary <String>)|
|
||||
tentative|
|
||||
(timerange <Time> <Time>)|
|
||||
(timezone <TimeZone>)|
|
||||
(transparency opaque|transparent)|
|
||||
(visibility default|public|private)
|
||||
@@ -289,10 +316,12 @@ This is dense reading; a simpler approach is to define a test event in Google Ca
|
||||
the recurrence rule that you want, then use `gam info event` to get the recurrence rule and use it in subsequent commands.
|
||||
|
||||
```
|
||||
RRULE:FREQ=DAILY
|
||||
RRULE:FREQ=DAILY;COUNT=30
|
||||
RRULE:FREQ=WEEKLY;BYDAY=WE
|
||||
RRULE:FREQ=WEEKLY;WKST=SU;COUNT=13;BYDAY=WE
|
||||
RRULE:FREQ=DAILY - Daily
|
||||
RRULE:FREQ=DAILY;COUNT=30 - Daily for 30 days
|
||||
RRULE:FREQ=WEEKLY - Weekly on the same day of the week as the starting day; e.g., every Wednesday
|
||||
RRULE:FREQ=WEEKLY;COUNT=13 - Weekly on the same day of the week as the starting day; e.g., every Wednesday, for 13 weeks
|
||||
RRULE:FREQ=MONTHLY - Monthly on the same day of the month as the starting day; e.g., every 15th of the month
|
||||
RRULE:FREQ=MONTHLY;BYDAY=4TH - Monthly on the fourth instance of the starting day; e.g., every 4th Thursday
|
||||
```
|
||||
|
||||
## Event colors
|
||||
@@ -316,6 +345,7 @@ If none of the following options are selected, all events are selected.
|
||||
The Google Calendar API processes `<EventSelectProperty>*`; you may specify none or multiple properties.
|
||||
* `after|starttime|timemin <Time>` - Lower bound (inclusive) for an event's end time to filter by. If timeMax is set, timeMin must be smaller than timeMax.
|
||||
* `before|endtime|timemax <Time>` - Upper bound (exclusive) for an event's start time to filter by. If timeMin is set, timeMax must be greater than timeMin.
|
||||
* `eventtypes <EventTypeList>` - Select events based on their type.
|
||||
* `query <QueryCalendar>` - Free text search terms to find events that match these terms in any field, except for extended properties
|
||||
* `privateextendedproperty <String>` - A required private property; `<String>` must be of the form `propertyName=value`
|
||||
* `sharedextendedproperty <String>` - A required shared property; `<String>` must be of the form `propertyName=value`
|
||||
@@ -463,7 +493,7 @@ No events are deleted unless you specify the `doit` option; omit `doit` to verif
|
||||
|
||||
When events are deleted from a calendar, they are moved to the calendar's trash and are only permanently deleted (purged) after 30 days.
|
||||
Following a suggestion here (https://stackoverflow.com/questions/41043053/how-to-empty-calendar-trash-via-google-services) you can permanently delete
|
||||
calendar events. This is achieved by creating a temporary calendar, deleting the events, moving the deleted events to the temporary calendar
|
||||
calendar events with `purge events`. This is achieved by creating a temporary calendar, deleting the events, moving the deleted events to the temporary calendar
|
||||
and then deleting the temporary calendar.
|
||||
|
||||
## Delete all calendar events
|
||||
|
||||
@@ -21,6 +21,7 @@ Client access works when accessing Resource calendars.
|
||||
<CalendarItem> ::= <EmailAddress>
|
||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<TimeZone> ::= <String>
|
||||
See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
|
||||
@@ -36,7 +36,7 @@ This Wiki page was built directly from Jay Lee's Wiki page; my sincere thanks fo
|
||||
|
||||
<ChatContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <CharSet>])|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
@@ -109,7 +109,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
### Display information about all chat members in a chat space
|
||||
```
|
||||
gam show chatmembers space <ChatSpace>
|
||||
[showinvited [<Boolean>]] [filter <String>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -117,7 +117,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam print chatmembers [todrive <ToDriveAttribute>*] space <ChatSpace>
|
||||
[showinvited [<Boolean>]] [filter <String>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
@@ -162,7 +162,7 @@ gam create chatmessage space <ChatSpace>
|
||||
```
|
||||
Specify the text of the message: `<ChatContent>`
|
||||
* `text <String>` - The message is `<String>`
|
||||
* `textfile <FileName> [charset <CharSet>]` - The message is read from a local file
|
||||
* `textfile <FileName> [charset <Charset>]` - The message is read from a local file
|
||||
* `gdoc <UserGoogleDoc>` - The message is read from a Google Doc.
|
||||
* `gcsdoc <StorageBucketObjectName>` - The message is read from a Google Cloud Storage file.
|
||||
|
||||
@@ -207,7 +207,7 @@ gam update chatmessage name <ChatMessage>
|
||||
```
|
||||
Specify the source of the message:
|
||||
* `text <String>` - The message is `<String>`
|
||||
* `textfile <FileName> [charset <CharSet>]` - The message is read from a local file
|
||||
* `textfile <FileName> [charset <Charset>]` - The message is read from a local file
|
||||
* `gdoc <UserGoogleDoc>` - The message is read from a Google Doc.
|
||||
* `gcsdoc <StorageBucketObjectName>` - The message is read from a Google Cloud Storage file.
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
- [Chrome Browser Cloud Management](#chrome-browser-cloud-management)
|
||||
- [API documentation](#api-documentation)
|
||||
- [Query documentation](#query-documentation)
|
||||
- [Collections of ChromeOS Devices](Collections-of-ChromeOS-Devices)
|
||||
- [Definitions](#definitions)
|
||||
- [Manage Chrome browsers](#manage-chrome-browsers)
|
||||
- [Update Chrome browsers](#update-chrome-browsers)
|
||||
@@ -25,8 +24,9 @@
|
||||
* https://support.google.com/chrome/a/answer/9681204#retrieve_all_chrome_devices_for_an_account
|
||||
|
||||
## Definitions
|
||||
* [`<CrOSTypeEntity>`](Collections-of-ChromeOS-Devices)
|
||||
|
||||
```BNF
|
||||
```
|
||||
<BrowserTokenPermanentID> ::= <String>
|
||||
<OrgUnitPath> ::= /|(/<String)+
|
||||
<QueryBrowser> ::= <String> See: https://support.google.com/chrome/a/answer/9681204#retrieve_all_chrome_devices_for_an_account
|
||||
@@ -41,6 +41,7 @@
|
||||
(query:<QueryBrowser>)|(query:orgunitpath:<OrgUnitPath>)|(query <QueryBrowser>) |
|
||||
(browserou <OrgUnitItem>) | (browserous <OrgUnitList>) |
|
||||
<FileSelector> | <CSVFileSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<BrowserAttribute> ::=
|
||||
(annotatedassetid|asset|assetid <String>)|
|
||||
@@ -136,7 +137,7 @@ gam csv UpdateBrowsers.csv gam update browser ~deviceId updatenotes "~~notes~~\n
|
||||
```
|
||||
gam move browsers ou|org|orgunit <OrgUnitPath>
|
||||
((ids <DeviceIDList>) |
|
||||
(queries <QueryBrowserList> [querytime.* <Time>]) |
|
||||
(queries <QueryBrowserList> [querytime<String> <Time>]) |
|
||||
(browserou <OrgUnitItem>) | (browserous <OrgUnitList>) |
|
||||
<FileSelector> | <CSVFileSelector>)
|
||||
[batchsize <Integer>]
|
||||
@@ -177,7 +178,7 @@ By default, Gam displays the information as an indented list of keys and values:
|
||||
```
|
||||
gam show browsers
|
||||
([ou|org|orgunit|browserou <OrgUnitPath>] [(query <QueryBrowser>)|(queries <QueryBrowserList>))|(select <BrowserEntity>))
|
||||
[querytime.* <Time>]
|
||||
[querytime<String> <Time>]
|
||||
[orderby <BrowserOrderByFieldName> [ascending|descending]]
|
||||
[basic|full|allfields|annotated] <BrowserFieldName>* [fields <BrowserFieldNameList>]
|
||||
[formatjson]
|
||||
@@ -204,7 +205,7 @@ The characters following `querytime` can be any combination of lowercase letters
|
||||
```
|
||||
gam print browsers [todrive <ToDriveAttribute>*]
|
||||
([ou|org|orgunit|browserou <OrgUnitPath>] [(query <QueryBrowser>)|(queries <QueryBrowserList>))|(select <BrowserEntity>))
|
||||
[querytime.* <Time>]
|
||||
[querytime<String> <Time>]
|
||||
[orderby <BrowserOrderByFieldName> [ascending|descending]]
|
||||
[basic|full|allfields|annotated] <BrowserFieldName>* [fields <BrowserFieldNameList>]
|
||||
[sortheaders] [formatjson [quotechar <Character>]]
|
||||
@@ -371,7 +372,7 @@ gam revoke browsertoken <BrowserTokenPermanentID>
|
||||
```
|
||||
gam show browsertokens
|
||||
([ou|org|orgunit|browserou <OrgUnitPath>] [(query <QueryBrowserToken)|(queries <QueryBrowserTokenList>)))
|
||||
[querytime.* <Time>]
|
||||
[querytime<String> <Time>]
|
||||
[orderby <BrowserTokenFieldName> [ascending|descending]]
|
||||
[allfields] <BrowserTokenFieldName>* [fields <BrowserTokenFieldNameList>]
|
||||
[formatjson]
|
||||
@@ -394,7 +395,7 @@ By default, Gam displays the information as an indented list of keys and values:
|
||||
```
|
||||
gam print browsertokens [todrive <ToDriveAttribute>*]
|
||||
([ou|org|orgunit|browserou <OrgUnitPath>] [(query <QueryBrowserToken)|(queries <QueryBrowserTokenList>)))
|
||||
[querytime.* <Time>]
|
||||
[querytime<String> <Time>]
|
||||
[orderby <BrowserTokenFieldName> [ascending|descending]]
|
||||
[allfields] <BrowserTokenFieldName>* [fields <BrowserTokenFieldNameList>]
|
||||
[sortheaders] [formatjson [quotechar <Character>]]
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
- [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)
|
||||
|
||||
@@ -19,6 +20,7 @@ the appropriate scope: `Chrome Management API - read only`.
|
||||
gam update project
|
||||
gam oauth create
|
||||
```
|
||||
To get installed app details you must authorize the scope: `Chrome Management API - AppDetails read only`.
|
||||
|
||||
## Definitions
|
||||
```
|
||||
@@ -47,6 +49,14 @@ Typically, you will enclose the entire list in double quotes and quote each item
|
||||
- Items, separated by spaces, with spaces, commas or single quotes in the items themselves
|
||||
* ```"'it em' 'it,em' \"it'em\""```
|
||||
|
||||
## Display Chrome installed app details
|
||||
```
|
||||
gam info chromeapp android|chrome|web <AppID>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
## Display Chrome installed apps counts
|
||||
```
|
||||
gam show chromeapps
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,6 @@
|
||||
- [API documentation](#api-documentation)
|
||||
- [Query documentation](#query-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Collections of ChromeOS Devices](Collections-of-ChromeOS-Devices)
|
||||
- [Definitions](#definitions)
|
||||
- [CrOS Query Searchable Fields](#cros-query-searchable-fields)
|
||||
- [ChromeOS device update OU error handling](#chromeos-device-update-ou-error-handling)
|
||||
@@ -24,6 +23,7 @@
|
||||
- [Print a header row and fields for selected CrOS devices](#print-a-header-row-and-fields-for-selected-cros-devices)
|
||||
- [Print a header row and fields for specified CrOS devices](#print-a-header-row-and-fields-for-specified-cros-devices)
|
||||
- [Display Examples](#display-examples)
|
||||
- [Display CrOS device counts](#display-cros-device-counts)
|
||||
- [Print ChromeOS device activity](#print-chromeos-device-activity)
|
||||
- [Print a header row and activity for selected CrOS devices](#print-a-header-row-and-activity-for-selected-cros-devices)
|
||||
- [Print a header row and activity for specified CrOS devices](#print-a-header-row-and-activity-for-specified-cros-devices)
|
||||
@@ -74,8 +74,9 @@ The first form allows more powerful selection of devices with `<CrOSTypeEntity>`
|
||||
The second form is backwards compatible with Standard GAM and selection with `<CrOSEntity>` is limited.
|
||||
|
||||
## Definitions
|
||||
|
||||
```BNF
|
||||
* [`<CrOSTypeEntity>`](Collections-of-ChromeOS-Devices)
|
||||
|
||||
```
|
||||
<OrgUnitPath> ::= /|(/<String)+
|
||||
<QueryCrOS> ::= <String> See: https://support.google.com/chrome/a/answer/1698333
|
||||
<CommandID> ::= <String>
|
||||
@@ -85,6 +86,7 @@ The second form is backwards compatible with Standard GAM and selection with `<C
|
||||
<SerialNumberList> ::= "<SerialNumber>(,<SerialNumber>)*"
|
||||
<SerialNumberEntity> ::=
|
||||
<SerialNumberList> | <FileSelector> | <CSVFileSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<CrOSEntity> ::=
|
||||
<CrOSIDList> | (cros_sn <SerialNumberList>) |
|
||||
@@ -108,6 +110,7 @@ The second form is backwards compatible with Standard GAM and selection with `<C
|
||||
deprovisionreason|
|
||||
devicefiles|
|
||||
deviceid|
|
||||
devicelicensetype|
|
||||
diskvolumereports|
|
||||
dockmacaddress|
|
||||
ethernetmacaddress|
|
||||
@@ -126,6 +129,7 @@ The second form is backwards compatible with Standard GAM and selection with `<C
|
||||
ordernumber|
|
||||
orgunitid|
|
||||
orgunitpath|org|ou|
|
||||
osupdatestatus|
|
||||
osversion|
|
||||
platformversion|
|
||||
recentusers|
|
||||
@@ -133,8 +137,8 @@ The second form is backwards compatible with Standard GAM and selection with `<C
|
||||
serialnumber|
|
||||
status|
|
||||
supportenddate|
|
||||
systemramtotal|
|
||||
systemramfreereports|
|
||||
systemramtotal|
|
||||
tpmversioninfo|
|
||||
willautorenew
|
||||
<CrOSFieldNameList> ::= "<CrOSFieldName>(,<CrOSFieldName>)*"
|
||||
@@ -156,8 +160,10 @@ The second form is backwards compatible with Standard GAM and selection with `<C
|
||||
```
|
||||
<CrOSAction> ::=
|
||||
deprovision_different_model_replace|
|
||||
deprovision_different_model_replacement|
|
||||
deprovision_retiring_device|
|
||||
deprovision_same_model_replace|
|
||||
deprovision_same_model_replacement|
|
||||
deprovision_upgrade_transfer|
|
||||
disable|
|
||||
reenable|
|
||||
@@ -244,7 +250,7 @@ Partial serial number searches are supported, as long as you enter at least thre
|
||||
### Status
|
||||
To view all provisioned or deprovisioned devices, select the status from the left drop-down, and all of the devices that fit this criterion will appear in the view. Alternatively, you can do the following searches from the All devices view:
|
||||
|
||||
`gam print cros query "status:[provisioned|disable|deprovisioned]"`
|
||||
`gam print cros query "status:[provisioned|disabled|deprovisioned]"`
|
||||
|
||||
### User
|
||||
Enter user: as the operator. For example, to match the name Joe, but not Joey, enter the following:
|
||||
@@ -399,13 +405,15 @@ gam update ou csvkmd cros.csv keyfield OU datafield deviceId add croscsvdata dev
|
||||
deprovision_same_model_replace|
|
||||
deprovision_upgrade_transfer|
|
||||
disable|
|
||||
reenable|
|
||||
pre_provisioned_disable|
|
||||
pre_provisioned_reenable
|
||||
reenable
|
||||
|
||||
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||
[actionbatchsize <Integer>]
|
||||
gam update cros <CrOSEntity> action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||
[actionbatchsize <Integer>]
|
||||
```
|
||||
As of GAM version `6.67.00`, the new API function `batchChangeStatus` replaces the old API function `action`; ChromeOS devices are now processed in batches.
|
||||
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
||||
|
||||
As deprovisioning ChromeOS devices is not reversible, you must enter `acknowledge_device_touch_requirement`
|
||||
when `<CrOSAction>` is `deprovision_same_model_replace`, `deprovision_different_model_replace`,
|
||||
@@ -534,7 +542,7 @@ gam <CrOSTypeEntity> print cros
|
||||
|
||||
```
|
||||
gam print cros [todrive <ToDriveAttribute>*]
|
||||
[(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime.* <Time>]
|
||||
[(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime<String> <Time>]
|
||||
[(limittoou|cros_ou <OrgUnitItem>)|(cros_ou_and_children <OrgUnitItem>)|
|
||||
(cros_ous <OrgUnitList>)|(cros_ous_and_children <OrgUnitList>)]]
|
||||
[orderby <CrOSOrderByFieldName> [ascending|descending]]
|
||||
@@ -554,9 +562,13 @@ is also specified, the query applies to devices within the OUs.
|
||||
|
||||
- `(query <QueryCrOS>)|(queries <QueryCrOSList>)` - Select CrOS devices that match a query
|
||||
- `limittoou|cros_ou <OrgUnitItem>` - Select CrOS devices directly in the OU `<OrgUnitItem>`
|
||||
- You can predefine this item with the `print_cros_ous` variable in `gam.cfg`.
|
||||
- `cros_ou_and_children <OrgUnitItem>` - Select CrOS devices in the OU `<OrgUnitItem>` and its sub OUs
|
||||
- You can predefine this item with the `print_cros_ous_and_children` variable in `gam.cfg`.
|
||||
- `cros_ous <OrgUnitList>` - Select CrOS devices directly in the OUs `<OrgUnitList>`
|
||||
- You can predefine this list with the `print_cros_ous` variable in `gam.cfg`.
|
||||
- `cros_ous_and_children <OrgUnitList>` - Select CrOS devices in the OUs `<OrgUnitList>` and their sub OUs
|
||||
- You can predefine this list with the `print_cros_ous_and_children` variable in `gam.cfg`.
|
||||
|
||||
Use the `querytime<String> <Time>` option to allow times, usually relative, to be substituted into the `query <QueryCrOS>` and `queries <QueryCrOSList>` options.
|
||||
The `querytime<String> <Time>` value replaces the string `#querytime<String>#` in any queries.
|
||||
@@ -671,13 +683,43 @@ Print information about CrOS devices synced between 45 days ago and 30 days ago:
|
||||
gam print cros query "sync:#querytime1#..#querytime2#" querytime1 -45d querytime2 -30d
|
||||
```
|
||||
|
||||
## Display CrOS device counts
|
||||
Display the number of CrOS devices in an entity.
|
||||
```
|
||||
gam <CrOSTypeEntity> show count
|
||||
gam <CrOSTypeEntity> print cros showitemcountonly
|
||||
gam print cros select <CrOSTypeEntity> showitemcountonly
|
||||
gam print cros
|
||||
[(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime<String> <Time>]
|
||||
[(limittoou|cros_ou <OrgUnitItem>)|(cros_ou_and_children <OrgUnitItem>)|
|
||||
(cros_ous <OrgUnitList>)|(cros_ous_and_children <OrgUnitList>)]]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print cros query "sync:..2020-01-01" showitemcountonly
|
||||
Getting all CrOS Devices that match query (sync:..2020-01-01) for /, may take some time on a large Organizational Unit...
|
||||
Got 77 CrOS Devices that matched query (sync:..2020-01-01) for /...
|
||||
Got 77 CrOS Devices that matched query (sync:..2020-01-01)
|
||||
77
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print cros query "sync:..2020-01-01" showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print cros query "sync:..2020-01-01" showitemcountonly
|
||||
```
|
||||
|
||||
## Print ChromeOS device activity
|
||||
|
||||
### Print a header row and activity for selected CrOS devices
|
||||
|
||||
```
|
||||
gam print crosactivity [todrive <ToDriveAttribute>*]
|
||||
[(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime.* <Time>]
|
||||
[(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime<String> <Time>]
|
||||
[(limittoou|cros_ou <OrgUnitItem>)|(cros_ou_and_children <OrgUnitItem>)|
|
||||
(cros_ous <OrgUnitList>)|(cros_ous_and_children <OrgUnitList>)]]
|
||||
[orderby <CrOSOrderByFieldName> [ascending|descending]]
|
||||
@@ -696,9 +738,13 @@ is also specified, the query applies to devices within the OUs.
|
||||
|
||||
- `(query <QueryCrOS>)|(queries <QueryCrOSList>)` - Select CrOS devices that match a query
|
||||
- `limittoou|cros_ou <OrgUnitItem>` - Select CrOS devices directly in the OU `<OrgUnitItem>`
|
||||
- You can predefine this item with the `print_cros_ous` variable in `gam.cfg`.
|
||||
- `cros_ou_and_children <OrgUnitItem>` - Select CrOS devices in the OU `<OrgUnitItem>` and its sub OUs
|
||||
- You can predefine this item with the `print_cros_ous_and_children` variable in `gam.cfg`.
|
||||
- `cros_ous <OrgUnitList>` - Select CrOS devices directly in the OUs `<OrgUnitList>`
|
||||
- You can predefine this list with the `print_cros_ous` variable in `gam.cfg`.
|
||||
- `cros_ous_and_children <OrgUnitList>` - Select CrOS devices in the OUs `<OrgUnitList>` and their sub OUs
|
||||
- You can predefine this list with the `print_cros_ous_and_children` variable in `gam.cfg`.
|
||||
|
||||
Use the `querytime<String> <Time>` option to allow times, usually relative, to be substituted into the `query <QueryCrOS>` and `queries <QueryCrOSList>` options.
|
||||
The `querytime<String> <Time>` value replaces the string `#querytime<String>#` in any queries.
|
||||
@@ -824,7 +870,7 @@ gam info crostelemetry <SerialNumber>
|
||||
### Display data about all or selected devices.
|
||||
```
|
||||
gam show crostelemetry
|
||||
[(ou|org|orgunit <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
||||
@@ -833,6 +879,7 @@ gam show crostelemetry
|
||||
Use these options to select CrOS devices; if none are chosen, all CrOS devices in the account are selected.
|
||||
|
||||
- `ou|org|orgunit <OrgUnitItem>` - Select CrOS devices directly in the OU `<OrgUnitItem>`
|
||||
- `ou_and_children <OrgUnitItem>` - Select CrOS devices in the OU `<OrgUnitItem>` and its sub OUs
|
||||
- `cros_sn <SerialNumber>` - Select the CrOS device with serial number `<SerialNumber>`.
|
||||
- `filter <String>` - Select the CrOS device with a filter.
|
||||
- `listlimit <Number>` - Limits the number of repetitions to `<Number>`; if not specified or `<Number>` equals zero, there is no limit.
|
||||
@@ -849,7 +896,7 @@ By default, Gam displays the information as an indented list of keys and values:
|
||||
### Print data about all or selected devices.
|
||||
```
|
||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||
[(ou|org|orgunit <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||
@@ -858,6 +905,7 @@ gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||
Use these options to select CrOS devices; if none are chosen, all CrOS devices in the account are selected.
|
||||
|
||||
- `ou|org|orgunit <OrgUnitItem>` - Select CrOS devices directly in the OU `<OrgUnitItem>`
|
||||
- `ou_and_children <OrgUnitItem>` - Select CrOS devices in the OU `<OrgUnitItem>` and its sub OUs
|
||||
- `cros_sn <SerialNumber>` - Select the CrOS device with serial number `<SerialNumber>`.
|
||||
- `filter <String>` - Select the CrOS device with a filter.
|
||||
- `listlimit <Number>` - Limits the number of repetitions to `<Number>`; if not specified or `<Number>` equals zero, there is no limit.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
- [Manage course aliases](#manage-course-aliases)
|
||||
- [Manage course topics](#manage-course-topics)
|
||||
- [Display courses](#display-courses)
|
||||
- [Display course counts](#display-course-counts)
|
||||
- [Display course announcements](#display-course-announcements)
|
||||
- [Display course materials](#display-course-materials)
|
||||
- [Display course topics](#display-course-topics)
|
||||
@@ -47,40 +48,50 @@ gam user user@domain.com check|update serviceaccount
|
||||
<CourseAliasList> ::= "<CourseAlias>(,<CourseAlias>)*"
|
||||
<CourseAliasEntity> ::=
|
||||
<CourseAliasList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseAnnouncementID> ::= <Number>
|
||||
<CourseAnnouncementIDList> ::= "<CourseAnnouncementID>(,<CourseAnnouncementID>)*"
|
||||
<CourseAnnouncementIDEntity> ::=
|
||||
<CourseAnnouncementIDList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVSubkeySelector>|<CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseAnnouncementState> ::= draft|published|deleted
|
||||
<CourseAnnouncementStateList> ::= all|"<CourseAnnouncementState>(,<CourseAnnouncementState>)*"
|
||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||
<CourseIDList> ::= "<CourseID>(,<CourseID>)*"
|
||||
<CourseEntity> ::=
|
||||
<CourseIDList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseMaterialID> ::= <Number>
|
||||
<CourseMaterialIDList> ::= "<CourseMaterialID>(,<CourseMaterialID>)*"
|
||||
<CourseMaterialState> ::= draft|published|deleted
|
||||
<CourseMaterialStateList> ::= all|"<CourseMaterialState>(,<CourseMaterialState>)*"
|
||||
<CourseMaterialIDEntity> ::= <CourseMaterialIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVSubkeySelector> | <CSVDataSelector>
|
||||
<CourseMaterialIDEntity> ::=
|
||||
<CourseMaterialIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVSubkeySelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseState> ::= active|archived|provisioned|declined|suspended
|
||||
<CourseStateList> ::= all|"<CourseState>(,<CourseState>)*"
|
||||
<CourseSubmissionID> ::= <Number>
|
||||
<CourseSubmissionIDList> ::= "<CourseSubmissionID>(,<CourseSubmissionID>)*"
|
||||
<CourseSubmissionIDEntity> ::=
|
||||
<CourseSubmissionIDList>|<FileSelector>|<CSVFileSelector>|<CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseSubmissionState> ::= new|created|turned_in|returned|reclaimed_by_student
|
||||
<CourseSubmissionStateList> ::= all|"<CourseSubmissionState>(,<CourseSubmissionState>)*"
|
||||
<CourseTopic> ::= <String>
|
||||
<CourseTopicList> ::= "<CourseTopic>(,<CourseTopic>)*"
|
||||
<CourseTopicEntity> ::= <CourseTopicList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<CourseTopicEntity> ::=
|
||||
<CourseTopicList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseTopicID> ::= <Number>
|
||||
<CourseTopicIDList> ::= "<CourseTopicID>(,<CourseTopicID>)*"
|
||||
<CourseTopicIDEntity> ::=
|
||||
<CourseTopicIDList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVSubkeySelector>|<CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseWorkID> ::= <Number>
|
||||
<CourseWorkIDList> ::= "<CourseWorkID>(,<CourseWorkID>)*"
|
||||
<CourseWorkIDEntity> ::=
|
||||
<CourseWorkIDList>|<FileSelector>|<CSVFileSelector>|<CSVkmdSelector>|<CSVSubkeySelector>|<CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseWorkState> ::= draft|published|deleted
|
||||
<CourseWorkStateList> ::= all|"<CourseWorkState>(,<CourseWorkState>)*"
|
||||
|
||||
@@ -268,7 +279,7 @@ gam create|add course [id|alias <CourseAlias>] <CourseAttribute>*
|
||||
[markdraftaspublished [<Boolean>]]
|
||||
[markpublishedasdraft [<Boolean>]]
|
||||
[members none|all|students|teachers]]
|
||||
[logdrivefileids [<Boolean>>]]
|
||||
[logdrivefileids [<Boolean>]]
|
||||
|
||||
gam update course <CourseID> <CourseAttribute>+
|
||||
[copyfrom <CourseID>
|
||||
@@ -282,7 +293,7 @@ gam update course <CourseID> <CourseAttribute>+
|
||||
[markdraftaspublished [<Boolean>]]
|
||||
[markpublishedasdraft [<Boolean>]]
|
||||
[members none|all|students|teachers]]
|
||||
[logdrivefileids [<Boolean>>]]
|
||||
[logdrivefileids [<Boolean>]]
|
||||
gam update courses <CourseEntity> <CourseAttribute>+
|
||||
[copyfrom <CourseID>
|
||||
[announcementstates <CourseAnnouncementStateList>]
|
||||
@@ -295,7 +306,7 @@ gam update courses <CourseEntity> <CourseAttribute>+
|
||||
[markdraftaspublished [<Boolean>]]
|
||||
[markpublishedasdraft [<Boolean>]]
|
||||
[members none|all|students|teachers]]
|
||||
[logdrivefileids [<Boolean>>]]
|
||||
[logdrivefileids [<Boolean>]]
|
||||
```
|
||||
`copyfrom <CourseID>` allows copying of course announcements, work, topics and members from one course to another.
|
||||
* Accouncements - By default, no course announcements are copied
|
||||
@@ -325,7 +336,7 @@ gam update courses <CourseEntity> <CourseAttribute>+
|
||||
* `members students` - Copy students
|
||||
* `members teachers` - Copy teachers
|
||||
|
||||
When true, `logdrivefileids [<Boolean>>]` generates a CSV file with headers `courseId,ownerId,fileId' that
|
||||
When true, `logdrivefileids [<Boolean>]` generates a CSV file with headers `courseId,ownerId,fileId' that
|
||||
lists all drive files in the course.
|
||||
|
||||
The Classroom API does not support course materials of type `form`, they will not be copied.
|
||||
@@ -422,6 +433,33 @@ 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 course counts
|
||||
Display the number of courses.
|
||||
```
|
||||
gam print courses
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
||||
[owneremailmatchpattern <RegularExpression>]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print courses states active showitemcountonly
|
||||
Getting all Courses that match query (Course State: ACTIVE), may take some time on a large Google Workspace Account...
|
||||
Got 268 Courses...
|
||||
Got 272 Courses...
|
||||
Got 272 Courses...
|
||||
272
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print courses states active showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print courses states active showitemcountonly
|
||||
```
|
||||
|
||||
## Display course announcements
|
||||
```
|
||||
gam print course-announcements [todrive <ToDriveAttribute>*]
|
||||
|
||||
@@ -20,11 +20,15 @@
|
||||
<UniqueID> ::= id:<String>
|
||||
<GuardianItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GuardianItemList> ::= "<GuardianItem>(,<GuardianItem>)*"
|
||||
<GuardianEntity> ::= <GuardianList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<GuardianEntity> ::=
|
||||
<GuardianList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<StudentItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GuardianInvitationID> ::= <String>
|
||||
<GuardianInvitationIDList> ::= "<GuardianInvitationId>(,<GuardianInvitationID>)*"
|
||||
<GuardianInvitationIDEntity> ::= <GuardianInvitationIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<GuardianInvitationIDEntity> ::=
|
||||
<GuardianInvitationIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GuardianState> ::= complete|pending
|
||||
<GuardianStateList> ::= "<GuardianState>(,<GuardianState>)*"
|
||||
```
|
||||
|
||||
@@ -33,11 +33,15 @@ The Classroom API does not support inviting users from outside your domain.
|
||||
<UniqueID> ::= id:<String>
|
||||
<ClassroomInvitationID> ::= <String>
|
||||
<ClassroomInvitationIDList> ::= "<ClassroomInvitationID>(,<ClassroomInvitationID>)*"
|
||||
<ClassroomInvitationIDEntity> ::= <ClassroomInvitationIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<ClassroomInvitationIDEntity> ::=
|
||||
<ClassroomInvitationIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseAlias> ::= <String>
|
||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||
<CourseIDList> ::= "<CourseID>(,<CourseID>)*"
|
||||
<CourseEntity> ::= <CourseIDList> | <FileSelector> | <CSVFileSelector | <CSVkmdSelector>
|
||||
<CourseEntity> ::=
|
||||
<CourseIDList> | <FileSelector> | <CSVFileSelector | <CSVkmdSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseState> ::= active|archived|provisioned|declined|suspended
|
||||
<CourseStateList> ::= all|"<CourseState>(,<CourseState>)*"
|
||||
```
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
- [Legacy manage membership](#legacy-manage-membership)
|
||||
- [Bulk membership changes](#bulk-membership-changes)
|
||||
- [Display course membership](#display-course-membership)
|
||||
- [Display course membership counts](#display-course-membership-counts)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/classroom/reference/rest/
|
||||
@@ -22,7 +23,9 @@
|
||||
<CourseAlias> ::= <String>
|
||||
<CourseID> ::= <Number>|d:<CourseAlias>
|
||||
<CourseIDList> ::= "<CourseID>(,<CourseID>)*"
|
||||
<CourseEntity> ::= <CourseIDList> | <FileSelector> | <CSVFileSelector | <CSVkmdSelector>
|
||||
<CourseEntity> ::=
|
||||
<CourseIDList> | <FileSelector> | <CSVFileSelector | <CSVkmdSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<CourseState> ::= active|archived|provisioned|declined|suspended
|
||||
<CourseStateList> ::= all|"<CourseState>(,<CourseState>)*"
|
||||
```
|
||||
@@ -129,3 +132,35 @@ the quote character itself, the column delimiter (comma by default) and new-line
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display course membership counts
|
||||
Display the number of course participants.
|
||||
```
|
||||
gam print course-participants
|
||||
(course|class <CourseID>)*|([teacher <UserItem>] [student <UserItem>]) [states <CourseStateList>]
|
||||
[show all|students|teachers]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print course-participants teacher asmith states active show students showitemcountonly
|
||||
Getting all Courses that match query (Teacher: asmith@domain.com, Course State: ACTIVE), may take some time on a large Google Workspace Account...
|
||||
Got 3 Courses...
|
||||
Getting Students for Course: 636981507234 (1/3)
|
||||
Got 30 Students...
|
||||
Got 43 Students...
|
||||
Getting Students for Course: 589346784341 (2/3)
|
||||
Got 22 Students...
|
||||
Getting Students for Course: 589345535881 (3/3)
|
||||
Got 23 Students...
|
||||
88
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print course-participants teacher asmith states active show students showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print course-participants teacher asmith states active show students showitemcountonly
|
||||
```
|
||||
|
||||
@@ -9,11 +9,13 @@
|
||||
- [Synchronize devices](#synchronize-devices)
|
||||
- [Display devices](#display-devices)
|
||||
- [Print devices](#print-devices)
|
||||
- [Display device counts](#display-device-counts)
|
||||
- [Approve or block device users](#approve-or-block-device-users)
|
||||
- [Delete device users](#delete-device-users)
|
||||
- [Wipe device users](#wipe-device-users)
|
||||
- [Perform device user actions](#perform-device-user-actions)
|
||||
- [Display device users](#display-device-users)
|
||||
- [Display device user counts](#display-device-user-counts)
|
||||
- [Print device users](#print-device-users)
|
||||
- [Display device user client state](#display-device-user-client-state)
|
||||
- [Update device user client state](#update-device-user-client-state)
|
||||
@@ -36,8 +38,9 @@
|
||||
See: https://support.google.com/a/answer/7549103
|
||||
<QueryDeviceList> ::= "<QueryDevice>(,<QueryDevice>)*"
|
||||
<DeviceID> ::= devices/<String>
|
||||
<DeviceIDList> ::= "<DeviceID>(,<DeviceID>)*"
|
||||
<DeviceEntity> ::=
|
||||
<DeviceIDList> |
|
||||
<DeviceIDList> | devicesn <String> |
|
||||
(query:<QueryDevice>)|(query <QueryDevice>)
|
||||
<DeviceType> ::= android|chrome_os|google_sync|linux|mac_os|windows
|
||||
<DeviceUserID> ::= devices/<String>/deviceUsers/<String>
|
||||
@@ -167,7 +170,7 @@ These two/three columns are used to match current company devices against the CS
|
||||
If `preview` is specified, the operations that would be performed are previewed but are not performed; use this to test.
|
||||
```
|
||||
gam sync devices
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime.* <Time>)*]
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime<String> <Time>)*]
|
||||
csvfile <FileName>
|
||||
(devicetype_column <String>)|(static_devicetype <DeviceType>)
|
||||
(serialnumber_column <String>)
|
||||
@@ -190,7 +193,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
## Print devices
|
||||
```
|
||||
gam print devices [todrive <ToDriveAttribute>*]
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime.* <Time>)*]
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime<String> <Time>)*]
|
||||
<DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
|
||||
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
||||
[all|company|personal|nocompanydevices|nopersonaldevices]
|
||||
@@ -224,6 +227,37 @@ 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 device counts
|
||||
Display the number of devices.
|
||||
```
|
||||
gam print devices
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime<String> <Time>)*]
|
||||
[all|company|personal|nocompanydevices|nopersonaldevices]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print devices queries "'model:Mac'" showitemcountonly
|
||||
Getting all Devices that match query (model:Mac), may take some time on a large Google Workspace Account...
|
||||
Got 100 Devices...
|
||||
Got 200 Devices...
|
||||
Got 300 Devices...
|
||||
...
|
||||
Got 900 Devices...
|
||||
Got 995 Devices...
|
||||
Got 995 Devices...
|
||||
995
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print devices queries "'model:Mac'" showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print devices queries "'model:Mac'" showitemcountonly
|
||||
```
|
||||
|
||||
## Approve or block device users
|
||||
Approve or block user profiles on a device.
|
||||
```
|
||||
@@ -266,7 +300,7 @@ gam info deviceuser <DeviceUserEntity>
|
||||
```
|
||||
gam print deviceusers [todrive <ToDriveAttribute>*]
|
||||
[select <DeviceID>]
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime.* <Time>)*]
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime<String> <Time>)*]
|
||||
<DeviceUserFieldName>* [fields <DeviceUserFieldNameList>]
|
||||
[orderby <DeviceOrderByFieldName> [ascending|descending]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
@@ -284,6 +318,38 @@ 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 device user counts
|
||||
Display the number of device users.
|
||||
```
|
||||
gam print deviceusers [todrive <ToDriveAttribute>*]
|
||||
[select <DeviceID>]
|
||||
[(query <QueryDevice>)|(queries <QueryDeviceList>) (querytime<String> <Time>)*]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print deviceusers queries "'model:Mac'" showitemcountonly
|
||||
Getting all Device Users that match query (model:Mac), may take some time on a large Google Workspace Account...
|
||||
Got 20 Device Users...
|
||||
Got 40 Device Users...
|
||||
Got 60 Device Users...
|
||||
...
|
||||
Got 980 Device Users...
|
||||
Got 995 Device Users...
|
||||
Got 995 Device Users...
|
||||
995
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print deviceusers queries "'model:Mac'" showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print deviceusers queries "'model:Mac'" showitemcountonly
|
||||
```
|
||||
|
||||
|
||||
## Display device user client state
|
||||
```
|
||||
gam info deviceuserstate <DeviceUserEntity> [clientid <String>]
|
||||
|
||||
@@ -61,7 +61,9 @@ and Cloud Identity Premium accounts. Unfortunately, even if you have the require
|
||||
<UniqueID> ::= id:<String>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
|
||||
<GroupList> ::= "<GroupItem>(,<GroupItem>)*"
|
||||
<GroupEntity> ::= <GroupList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<GroupEntity> ::=
|
||||
<GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GroupRole> ::= owner|manager|member
|
||||
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
||||
<CIGroupType> ::= customer|group|other|serviceaccount|user
|
||||
@@ -176,14 +178,18 @@ testgroup@domain.com,testuser4@domain.com,MEMBER,Remove Failed,Does not exist
|
||||
|
||||
## Synchronize members in a group
|
||||
A synchronize operation gets the current membership for a group and does adds and deletes as necessary to make it match `<UserTypeEntity>`.
|
||||
This is done by specific role except for a special case where role is ignored.
|
||||
```
|
||||
gam update cigroups <GroupEntity> sync [<GroupRole>]
|
||||
gam update cigroups <GroupEntity> sync [<GroupRole>|ignorerole]
|
||||
[usersonly|groupsonly] [addonly|removeonly]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[expire|expires <Time>] [preview] [actioncsv]
|
||||
<UserTypeEntity>
|
||||
```
|
||||
If `<GroupRole>` is not specified, `member` is assumed.
|
||||
If `ignorerole` is specified, GAM removes members regardless of role and adds new members with role MEMBER.
|
||||
This is a special purpose option, use with caution and ensure that `<UserTypeEntity>` specifies the full desired membership list of all roles.
|
||||
|
||||
If neither `<GroupRole>` nor `ignorerole` is specified, `member` is assumed.
|
||||
|
||||
When `<UserTypeEntity>` specifies a group or groups:
|
||||
* `usersonly` - Only the user members from the specified groups are added/deleted
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- [Manage groups](#manage-groups)
|
||||
- [Display information about individual groups](#display-information-about-individual-groups)
|
||||
- [Display information about multiple groups](#display-information-about-multiple-groups)
|
||||
- [Display group counts](#display-group-counts)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/admin-sdk/directory/reference/rest/v1/groups
|
||||
@@ -57,7 +58,9 @@ and Cloud Identity Premium accounts. Unfortunately, even if you have the require
|
||||
<UniqueID> ::= id:<String>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GroupList> ::= "<GroupItem>(,<GroupItem>)*"
|
||||
<GroupEntity> ::= <GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<GroupEntity> ::=
|
||||
<GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GroupRole> ::= owner|manager|member
|
||||
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
||||
<CIGroupType> ::= customer|group|other|serviceaccount|user
|
||||
@@ -365,7 +368,38 @@ 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 dynamic groups
|
||||
```
|
||||
gam print cigroups query "'cloudidentity.googleapis.com/groups.dynamic' in labels"
|
||||
```
|
||||
|
||||
### Display security groups
|
||||
```
|
||||
gam print cigroups query "'cloudidentity.googleapis.com/groups.security' in labels"
|
||||
```
|
||||
|
||||
## Display group counts
|
||||
Display the number of groups.
|
||||
```
|
||||
gam print cigroups
|
||||
[(cimember|showownedby <UserItem>)|(select <GroupEntity>)|(query <String>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print cigroups showitemcountonly
|
||||
Getting all Cloud Identity Groups, may take some time on a large Google Workspace Account...
|
||||
Got 242 Cloud Identity Groups: td.current@domain.com - postmaster@domain.com
|
||||
242
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print cigroups showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print cidgroups showitemcountonly
|
||||
```
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>])|
|
||||
@@ -100,7 +100,7 @@
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>])|
|
||||
@@ -117,7 +117,7 @@
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>])|
|
||||
@@ -128,7 +128,7 @@
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
@@ -263,7 +263,7 @@ croscsvfile
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -276,6 +276,7 @@ croscsvfile
|
||||
* `gcsdoc(:<FieldName>)+ <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object and the one or more columns that contain ChromeOS deviceIds
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
@@ -290,7 +291,7 @@ croscsvfile_sn
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -303,6 +304,7 @@ croscsvfile_sn
|
||||
* `gcsdoc(:<FieldName>)+ <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object and the one or more columns that contain ChromeOS serial numbers
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
@@ -334,7 +336,7 @@ csvdatafile
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -348,6 +350,7 @@ csvdatafile
|
||||
* `gcsdoc(:<FieldName>)+ <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object and the one or more columns that contain ChromeOS deviceIds
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
@@ -363,7 +366,7 @@ csvkmd
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
@@ -376,6 +379,7 @@ csvkmd
|
||||
* `gdoc <UserGoogleDoc>` - A Google Doc containing rows with columns of the type of item specified
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
|
||||
@@ -63,7 +63,7 @@ A CSV file with one or more columns per row that contain Items.
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -75,6 +75,7 @@ A CSV file with one or more columns per row that contain Items.
|
||||
* `gcsdoc(:<FieldName>)+ <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object and the one or more columns that contain Items
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
@@ -90,7 +91,7 @@ A CSV file with a key column that contains an Item and optional subkey and data
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
@@ -102,6 +103,7 @@ A CSV file with a key column that contains an Item and optional subkey and data
|
||||
* `gcscsv <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object containing rows with columns of items
|
||||
* `gcsdoc <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object containing rows with columns of items
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
@@ -165,10 +167,6 @@ Data fields identified in a `csvkmd` argument.
|
||||
<CrOSEntity> ::=
|
||||
<CrOSIDList> | (cros_sn <SerialNumberList>) |
|
||||
(query:<QueryCrOS>) | (query:orgunitpath:<OrgUnitPath>) | (query <QueryCrOS>)
|
||||
<DataStudioAssetIDEntity> ::=
|
||||
<DataStudioAssetIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<DataStudioPermissionEntity> ::=
|
||||
<DataStudioPermissionList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<DeviceIDEntity> ::=
|
||||
<DeviceIDList> | (device_sn <SerialNumber>)
|
||||
(query:<QueryDevice>) | (query <QueryDevice>)
|
||||
@@ -282,6 +280,10 @@ Data fields identified in a `csvkmd` argument.
|
||||
<LabelIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<LabelNameEntity> ::=
|
||||
<LabelNameList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<LookerStudioAssetIDEntity> ::=
|
||||
<LookerStudioAssetIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<LookerStudioPermissionEntity> ::=
|
||||
<LookerStudioPermissionList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<MessageIDEntity> ::=
|
||||
<MessageIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<MobileEntity> ::=
|
||||
@@ -332,8 +334,8 @@ Data fields identified in a `csvkmd` argument.
|
||||
<SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<SiteEntity> ::=
|
||||
<SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<TasklistIDEntity> ::=
|
||||
<TasklistIDList> | <FileSelector> | <CSVFileSelector>
|
||||
<TasklistEntity> ::=
|
||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||
<TasklistIDTaskIDEntity> ::=
|
||||
<TasklistIDTaskIDList> | <FileSelector> | <CSVFileSelector>
|
||||
<ThreadIDEntity> ::=
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>][quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>])|
|
||||
@@ -148,7 +148,7 @@
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>][quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>])|
|
||||
@@ -161,7 +161,7 @@
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>][quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
@@ -360,7 +360,7 @@ csvfile
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>][quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -373,7 +373,8 @@ csvfile
|
||||
* `gcsdoc(:<FieldName>)+ <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object and the one or more columns that contain Users
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote character is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
* `(matchfield|skipfield <FieldName> <RegularExpression>)*` - The criteria to select rows from the CSV file; can be used multiple times; if not specified, all rows are selected
|
||||
@@ -408,7 +409,7 @@ csvdatafile
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>][quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -422,7 +423,8 @@ csvdatafile
|
||||
* `gcsdoc(:<FieldName>)+ <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object and the one or more columns contain the type of item specified
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote character is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
* `(matchfield|skipfield <FieldName> <RegularExpression>)*` - The criteria to select rows from the CSV file; can be used multiple times; if not specified, all rows are selected
|
||||
@@ -439,7 +441,7 @@ csvkmd
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>][quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
@@ -454,7 +456,8 @@ csvkmd
|
||||
* `gcsdoc <StorageBucketObjectName>` - A Google Cloud Storage Bucket Object with columns of the type of item specified
|
||||
* `warnifnodata` - Issue message 'No CSV file data found' and exit with return code 60 if there is no data selected from the file
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote character is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `endcsv` - Use this option to signal the end of the csvfile parameters in the case that the next argument on the command line is `fields` but is specifying the output field list for the command not column headings
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
* `(keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>])+`
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
- [Windows Command Prompt](#windows-command-prompt)
|
||||
- [Windows PowerShell](#windows-powershell)
|
||||
- [List quoting rules](#list-quoting-rules)
|
||||
- [Queries example](#queries-example)
|
||||
|
||||
## Linux and MacOS
|
||||
|
||||
@@ -16,6 +17,10 @@ To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
||||
|
||||
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
||||
|
||||
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
||||
|
||||
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
||||
|
||||
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
||||
|
||||
## Windows Command Prompt
|
||||
@@ -56,3 +61,19 @@ Typically, you will enclose the entire list in double quotes and quote each item
|
||||
* ```"'it em' 'it,em' \"it'em\""```
|
||||
|
||||
Typical places where these rules apply are lists of OUs and Contact Groups.
|
||||
|
||||
## Queries example
|
||||
### Linux and MacOS
|
||||
```
|
||||
gam print users queries "\"orgUnitPath='/Students/Lower School/2027'\",\"orgUnitPath='/Students/Lower School/2028'\""
|
||||
```
|
||||
|
||||
### Windows Command Prompt
|
||||
```
|
||||
gam print users queries "\"orgUnitPath='/Students/Lower School/2027'\",\"orgUnitPath='/Students/Lower School/2028'\""
|
||||
```
|
||||
|
||||
### Windows Power Shell
|
||||
```
|
||||
gam print users queries "`"orgUnitPath=\'/Students/Lower\ School/2027\'`",`"orgUnitPath=\'/Students/Lower\ School/2028\'`""
|
||||
```
|
||||
|
||||
@@ -31,6 +31,7 @@ gam user user@domain.com check serviceaccount
|
||||
<PeopleResourceNameList> ::= "<PeopleResourceName>(,<PeopleResourceName>)*"
|
||||
<PeopleResourceNameEntity> ::=
|
||||
<PeopleResourceNameNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<PeopleSourceName> ::=
|
||||
contact|contacts|
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
<NoteContent> ::=
|
||||
((<String>)|
|
||||
(file <FileName> [charset <CharSet>])|
|
||||
(file <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
@@ -54,7 +54,8 @@
|
||||
<ContactID> ::= <String>
|
||||
<ContactIDList> ::= "<ContactID>(,<ContactID>)*"
|
||||
<ContactEntity> ::=
|
||||
<ContactIDList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<ContactIDList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<ContactSelection> ::=
|
||||
[query <QueryContact>]
|
||||
[emailmatchpattern <RegularExpression> [emailmatchtype work|home|other|<String>]]
|
||||
@@ -185,14 +186,29 @@
|
||||
## Create domain shared contacts
|
||||
```
|
||||
gam create contact <ContactAttribute>+
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*))| returnidonly]
|
||||
```
|
||||
By default, the domain name and contact ID are displayed on stdout.
|
||||
* `csv [todrive <ToDriveAttribute>*]` - Write domain name and contact ID values to a CSV file.
|
||||
* `addcsvdata <FieldName> <String>` - Add additional columns of data from the command line to the output
|
||||
* `returnidonly` - Display just the contact ID on stdout
|
||||
|
||||
To retrieve the contact ID with `returnidonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
contactId=$(gam create contact ... returnidonly)
|
||||
Windows PowerShell
|
||||
$contactId = & gam create contact ... returnidonly
|
||||
```
|
||||
|
||||
## Select domain shared contacts
|
||||
You specify contacts by ID or by selection qualifiers.
|
||||
```
|
||||
<ContactID> ::= <String>
|
||||
<ContactIDList> ::= "<ContactID>(,<ContactID>)*"
|
||||
<ContactEntity> ::=
|
||||
<ContactIDList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<ContactIDList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<ContactSelection> ::=
|
||||
[query <QueryContact>]
|
||||
[emailmatchpattern <RegularExpression> [emailmatchtype work|home|other|<String>]]
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
others_3p_shortcuts |
|
||||
others_items |
|
||||
writable_files
|
||||
|
||||
<SharedDriveID> ::= <String>
|
||||
<SharedDriveName> ::= <String>
|
||||
<SharedDriveIDEntity> ::= (teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||
@@ -200,6 +201,7 @@ By default, all types of files and folders are displayed; you can specify a list
|
||||
gfolder|gdirectory|
|
||||
gform|
|
||||
gfusion|
|
||||
gjam|
|
||||
gmap|
|
||||
gpresentation|
|
||||
gscript|
|
||||
@@ -218,6 +220,7 @@ This is the mapping from `<MimeTypeShortcut>` to MIME type.
|
||||
* `gfolder|gdirectory` - application/vnd.google-apps.folder
|
||||
* `gform` - application/vnd.google-apps.form
|
||||
* `gfusion|gfusiontable` - application/vnd.google-apps.fusiontable
|
||||
* `gjam` - application/vnd.google-apps.jam
|
||||
* `gmap` - application/vnd.google-apps.map
|
||||
* `gpresentation` - application/vnd.google-apps.presentation
|
||||
* `gscript` - application/vnd.google-apps.script
|
||||
@@ -304,6 +307,7 @@ You can select a list of file IDs by referencing files that contain file IDs.
|
||||
```
|
||||
<DriveFileEntity> ::=
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVSubkeySelector>) | <CSVDataSelector>)
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
```
|
||||
* [Collections of Items](Collections-of-Items)
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
# Update GAMADV-XTD3 to latest version
|
||||
Automatic update to the latest version on Linux/Mac OS/Google Cloud Shell/Raspberry Pi/ChromeOS:
|
||||
- Do not create project or authorizations, default path `$HOME/bin`
|
||||
@@ -8,7 +9,873 @@ Automatic update to the latest version on Linux/Mac OS/Google Cloud Shell/Raspbe
|
||||
By default, a folder, `gamadv-xtd3`, is created in the default or specified path and the files are downloaded into that folder.
|
||||
Add the `-s` option to the end of the above commands to suppress creating the `gamadv-xtd3` folder; the files are downloaded directly into the default or specified path.
|
||||
|
||||
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation.
|
||||
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation
|
||||
|
||||
### 6.67.24
|
||||
|
||||
Fixed bug that caused HTML password notification email messages to be displayed in raw form.
|
||||
|
||||
### 6.67.23
|
||||
|
||||
Use local copy of `googleapiclient` to remove static discovery documents to improve performance.
|
||||
|
||||
### 6.67.22
|
||||
|
||||
Added `permissionidlist <PermissionIDList>` to `<PermissionMatch>` that allows matching any permission ID in a list.
|
||||
|
||||
Added option `exportlinkeddrivefiles <Boolean>` to `gam create vaultexport` that is used with `corpus mail`.
|
||||
|
||||
### 6.67.21
|
||||
|
||||
Updated `gam remove aliases <EmailAddress> user|group <EmailAddressEntity>` to give a more informative
|
||||
error message when the target/alias combination does not exist.
|
||||
```
|
||||
Old: User: testsimple@rdschool.org, User Alias: tsalias@rdschool.org, Remove Failed: Invalid Input: resource_id
|
||||
New: User: testsimple@rdschool.org, User Alias: tsalias@rdschool.org, Remove Failed: Does not exist
|
||||
```
|
||||
|
||||
### 6.67.20
|
||||
|
||||
Added option `onelicenseperrow|onelicenceperrow` to `gam print users ... licenses` that causes GAM to print
|
||||
a seperate user information row for each license a user is assigned. This makes processing
|
||||
the licenses in a script possible and allows better sorting in a CSV File.
|
||||
|
||||
By default, all licenses for a user are displayed in a list on one row:
|
||||
```
|
||||
primaryEmail,LicensesCount,Licenses,LicensesDisplay
|
||||
user@domain.com,2,1010020020 1010330004,Google Workspace Enterprise Plus Google Voice Standard
|
||||
```
|
||||
With `onelicenseperrow|onelicenceperrow`, each license is on a separate row:
|
||||
```
|
||||
primaryEmail,License,LicenseDisplay
|
||||
user@domain.com,1010020020,Google Workspace Enterprise Plus
|
||||
user@domain.com 1010330004,Google Voice Standard
|
||||
```
|
||||
|
||||
### 6.67.19
|
||||
|
||||
Updated `gam create|update user ... notify` to encode the characters `<>&` in the password
|
||||
so that they display correctly when the notify message content is HTML.
|
||||
|
||||
### 6.67.18
|
||||
|
||||
Cleaned up `Getting/Got` messages for `gam print courses|course-participants`.
|
||||
|
||||
### 6.67.17
|
||||
|
||||
Added option `showitemcountonly` to various commands that causes GAM to display the
|
||||
item count on stdout; no CSV file is written.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Cloud-Identity-Groups#display-group-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Classroom-Courses#display-course-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Classroom-Membership#display-course-membership-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/ChromeOS-Devices#display-cros-device-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Cloud-Identity-Devices#display-device-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Cloud-Identity-Devices#display-device-user-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Groups#display-group-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Mobile-Devices#display-mobile-device-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Organizational-Units#display-organizational-unit-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Resources#display-resource-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users#display-user-counts
|
||||
|
||||
### 6.67.16
|
||||
|
||||
By default, `gam print group-members membernames` displays `Unknown` for members whose names can not be determined.
|
||||
Added option `unknownname <String>` that let's you specify an alternative value.
|
||||
|
||||
Further improved performance of `gam print group-members membernames cachememberinfo`.
|
||||
|
||||
### 6.67.15
|
||||
|
||||
Update `gam print group-members membernames` to handle the following error:
|
||||
```
|
||||
ERROR: 400: failedPrecondition - Precondition check failed.
|
||||
```
|
||||
|
||||
Added option `cachememberinfo [Boolean]` to `gam print group-members` that causes GAM to cache member info
|
||||
so that only one API call is made to get information for each user/group. This consumes
|
||||
more memory but dramatically reduces the number of API calls.
|
||||
|
||||
### 6.67.14
|
||||
|
||||
Updated reseller commands to handle the following error:
|
||||
```
|
||||
ERROR: 400: invalid - Customer domain [domain.com] is linked to one or more email verified customers, please provide a customer id.
|
||||
```
|
||||
|
||||
### 6.67.13
|
||||
|
||||
Updated `gam create domain <DomainName>` to handle the following error:
|
||||
```
|
||||
ERROR: 409: conflict - Domain in request is in use by an email verified customer.
|
||||
```
|
||||
|
||||
### 6.67.12
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to `gam print datatransfers` that adds
|
||||
additional columns of data to the CSV file output.
|
||||
|
||||
### 6.67.11
|
||||
|
||||
Updated various Gmail related commands to handle this error:
|
||||
```
|
||||
ERROR: 403: permissionDenied - Insufficient Permission
|
||||
```
|
||||
when the following service account scopes are selected:
|
||||
|
||||
```
|
||||
[ ] 23) Gmail API - Basic Settings (Filters,IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read
|
||||
[ ] 24) Gmail API - Full Access (Labels, Messages)
|
||||
[ ] 25) Gmail API - Full Access (Labels, Messages) except delete message
|
||||
[*] 26) Gmail API - Full Access - read only
|
||||
[ ] 27) Gmail API - Send Messages - including todrive
|
||||
[ ] 28) Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write
|
||||
```
|
||||
|
||||
### 6.67.10
|
||||
|
||||
Fixed bug that caused a trap when optional argument `charset <Charset>` was used with `emlfile <FileName>` in `gam <UserTypeEntity> draft|import|insert message`.
|
||||
|
||||
### 6.67.09
|
||||
|
||||
Added option `maxevents <Number>` to `gam report <ActivityApplictionName>` that limits
|
||||
the number of events displayed for each activity; the default is 0, no limit.
|
||||
Setting options `maxactivities 1 maxevents 1 maxresults 1` can be used to as efficiently as possible
|
||||
show the most recent activity/event; this can be useful when reporting drive activity for individual drive files.
|
||||
|
||||
### 6.67.08
|
||||
|
||||
Added optional argument `charset <Charset>` to `emlfile <FileName>` in `gam <UserTypeEntity> draft|import|insert message`;
|
||||
the default value is `ascii`.
|
||||
|
||||
### 6.67.07
|
||||
|
||||
Updated `gam <UserTypeEntity> delete message` to handle this error:
|
||||
```
|
||||
ERROR: 403: permissionDenied - Insufficient Permission
|
||||
```
|
||||
when the following service account scopes are selected:
|
||||
|
||||
```
|
||||
[ ] 24) Gmail API - Full Access (Labels, Messages)
|
||||
[*] 25) Gmail API - Full Access (Labels, Messages) except delete message
|
||||
```
|
||||
|
||||
### 6.67.06
|
||||
|
||||
Updated commands that create ACLs to handle the following error:
|
||||
```
|
||||
ERROR: 400: abusiveContentRestriction - Bad Request. User message: "You cannot share this item because it has been flagged as inappropriate."
|
||||
```
|
||||
|
||||
### 6.67.05
|
||||
|
||||
Updated the following commands:
|
||||
```
|
||||
gam <UserTypeEntity> create|delete|update delegate
|
||||
gam <UserTypeEntity> forward
|
||||
gam <UserTypeEntity> create|delete forwardingaddresses
|
||||
gam <UserTypeEntity> create|delete sendas
|
||||
```
|
||||
to handle this error:
|
||||
```
|
||||
ERROR: 403: permissionDenied - Insufficient Permission
|
||||
```
|
||||
when the following serice account scope is not enabled:
|
||||
```
|
||||
[ ] 28) Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write
|
||||
```
|
||||
|
||||
### 6.67.04
|
||||
|
||||
Updated user attribute `replace <Tag> <UserReplacement>` to allow `field:photourl` which allows
|
||||
embedding a link to a user's photo in their signature. Formatting the signature HTML
|
||||
to properly display the photo is left to the GAM admin.
|
||||
|
||||
### 6.67.03
|
||||
|
||||
Fixed bug introduced in 6.67.02 in `gam <UserTypeEntity> claim ownership` that caused a trap.
|
||||
|
||||
### 6.67.02
|
||||
|
||||
Added option `skipids <DriveFileEntity>` to `gam <UserTypeEntity> transfer drive` that handles special cases
|
||||
where you want to prevent ownership from being transferred for selected files/folders.
|
||||
|
||||
Added option `skipids <DriveFileEntity>` to `gam <UserTypeEntity> copy drivefile` that handles special cases
|
||||
where you want to prevent selected files/folders from being copied.
|
||||
|
||||
Updated commands that create files/folders on Shared Drives to handle the following errors:
|
||||
```
|
||||
storageQuotaExceeded
|
||||
teamDriveFileLimitExceeded
|
||||
teamDriveHierarchyTooDeep
|
||||
```
|
||||
* See: https://support.google.com/a/users/answer/7338880#shared_drives_file_folder_limits
|
||||
|
||||
### 6.67.01
|
||||
|
||||
Fixed bug in `gam print vaultcounts` that caused a trap.
|
||||
|
||||
### 6.67.00
|
||||
|
||||
Updated `gam <CrOSTypeEntity> update action <CrOSAction>` to use the new API function `batchChangeStatus`
|
||||
that replaces the old API function `action`; ChromeOS devices are now processed in batches.
|
||||
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
||||
|
||||
Updated `gam create vaultexport matter <MatterItem>` to support `corpus calendar`.
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Vault-Takeout#create-vault-exports
|
||||
|
||||
### 6.66.16
|
||||
|
||||
Added option `convertcrnl` to `gam update chromepolicy` to properly handle carriage returns (\r) and line feeds (\n)
|
||||
in value strings entered on the command line in the `<Field> <Value>` form.
|
||||
```
|
||||
gam update chromepolicy convertcrnl chrome.devices.DisabledDeviceReturnInstructions
|
||||
deviceDisabledMessage "Please return device to:\nSchool\n123 Main Street\nAnytown US" ou /Path/to/OU
|
||||
```
|
||||
|
||||
### 6.66.15
|
||||
|
||||
Added option `copysubfilesownedby any|me|others` to `gam <UserTypeEntity> copy drivefile` that allows
|
||||
specification of which source folder sub files to copy based on file ownership; the default is `any`.
|
||||
This only applies when files are being copied from a 'My Drive'.
|
||||
|
||||
### 6.66.14
|
||||
|
||||
Updated `gam <UserTypeEntity> modify messages` to recognize the following error:
|
||||
```
|
||||
ERROR: 400: invalid - Invalid label: SENT
|
||||
```
|
||||
|
||||
Updated `gam update alias <EmailAddressEntity> user|group|target <EmailAddress>`
|
||||
to avoid the following problem.
|
||||
```
|
||||
$ gam update alias testalias@domain.com user testuser
|
||||
User Alias: testalias@domain.com, Deleted
|
||||
User Alias: testalias@domain.com, User: testuser@domain.com, Update Failed: Duplicate, Email Address: testalias@domain.com
|
||||
```
|
||||
GAM updates an alias to point to a new target by deleting the alias and then recreating the alias pointing to the new target.
|
||||
Unfortunately, if these commands are executed back-to-back; Google generates the `Update Failed: Duplicate` error.
|
||||
Now, GAM waits 2 seconds between the delete and the insert which seems to eliminate the problem. If the problem persists,
|
||||
the option `waitafterdelete <Integer>` can be used to increase the wait time to a maximum of 10 seconds.
|
||||
|
||||
### 6.66.13
|
||||
|
||||
Updated functionality of option `preservefiletimes` in `gam <UserTypeEntity> update drivefile <DriveFileEntity>`.
|
||||
|
||||
* Current
|
||||
* `preservefiletimes localfile <FileName>` - `modifiedTime` of `<DriveFileEntity>` is set to that of `localfile <FileName>`
|
||||
* `preservefiletimes` - No effect
|
||||
* Updated
|
||||
* `preservefiletimes localfile <FileName>` - `modifiedTime` of `<DriveFileEntity>` is set to that of `localfile <FileName>`
|
||||
* `preservefiletimes` - `modifiedTime` of `<DriveFileEntity>` retains its current value
|
||||
|
||||
### 6.66.12
|
||||
|
||||
Upgraded to Python 3.12.1 where possible.
|
||||
|
||||
Updated all drive commands to handle the following error:
|
||||
```
|
||||
ERROR: 401: Active session is invalid. Error code: 4 - authError
|
||||
```
|
||||
This is due to the Drive SDK API being disabled in the user's OU.
|
||||
* See: https://support.google.com/a/answer/6105699
|
||||
|
||||
### 6.66.11
|
||||
|
||||
Fixed/improved handling of shortcuts in `gam <UserTypeEntity> transfer drive`.
|
||||
|
||||
### 6.66.10
|
||||
|
||||
Updated `gam create datatransfer` to handle the following error:
|
||||
```
|
||||
ERROR: 401: Active session is invalid. Error code: 4 - authError
|
||||
```
|
||||
|
||||
### 6.66.09
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filelist ... allfields` that caused a trap
|
||||
when `gam.cfg` contained `drive_v3_native_names = False`.
|
||||
|
||||
### 6.66.08
|
||||
|
||||
Added additional columns `isBase` and `baseId` to `gam <UserTypeEntity> print fileparenttree`
|
||||
to simplify processing the output in a script.
|
||||
|
||||
### 6.66.07
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print diskusage` that caused a trap.
|
||||
|
||||
### 6.66.06
|
||||
|
||||
Added a command the print the parent tree of file/folder.
|
||||
```
|
||||
gam <UserTypeEntity> print fileparenttree <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
[stripcrsfromname]
|
||||
```
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Drive-Files-Display#display-file-parent-tree
|
||||
|
||||
### 6.66.05
|
||||
|
||||
Added column `space.name` to `gam <UserTypeEntity> print chatmembers`.
|
||||
|
||||
### 6.66.04
|
||||
|
||||
Updated Chat info|show|print commands to display all time fields in local time if specified in `gam.cfg`.
|
||||
|
||||
### 6.66.03
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filelist select <DriveFileEntity>` where `stripcrsfromname` was not being
|
||||
applied to files below the selected folder.
|
||||
|
||||
### 6.66.02
|
||||
|
||||
Updated device commmands to handle the following error caused by an invalid query.
|
||||
```
|
||||
ERROR: 400: invalidArgument - Request contains an invalid argument.
|
||||
```
|
||||
|
||||
Added fields `deviceid` and `hostname` to `<DeviceFieldName>`.
|
||||
|
||||
### 6.66.01
|
||||
|
||||
Added the following variables to gam.cfg that allow control over whether `\` is used as an escape character
|
||||
when reading/writing CSV files.
|
||||
```
|
||||
csv_input_no_escape_char - default value True
|
||||
csv_output_no_escape_char - default value False
|
||||
todrive_no_escape_char - default value True
|
||||
```
|
||||
When the value is True, `\` is ignored as an escape character; when the value is False,
|
||||
`\\` on input is converted to `\`, `\` on output is converted to `\\`.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/CSV-Special-Characters
|
||||
|
||||
### 6.66.00
|
||||
|
||||
Added support for `Focus Time` and `Out of Office` status events in user's primary calendars.
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Calendars-Events#status-events
|
||||
This is a work-in-progress.
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show messages` to allow option `show_size` to be used with option `countsonly`
|
||||
to display the cumulative size of the messages selected.
|
||||
```
|
||||
gam user user@domain.com print messages query "newer_than:31d" countsonly showsize
|
||||
Getting all Messages for user@domain.com
|
||||
Got 16 Messagess for user@domain.com...
|
||||
User,messages,size
|
||||
user@domain.com,16,92806
|
||||
```
|
||||
|
||||
### 6.65.17
|
||||
|
||||
Added the option `mappermissionsdomain <DomainName1> <DomainName2>` to `gam <UserTypeEntity> create drivefileacl <DriveFileEntity>`
|
||||
that maps `<DomainName1>` to `<DomainName2>` in the `user <UserItem>)|(group <GroupItem>)|(domain <DomainName>)` options;
|
||||
`<UserItem>` and `<GroupItem>` must specify email addresses for the mapping to succeed.
|
||||
The option can be specified multiple times to provide different mappings. This option will be most useful
|
||||
when reading a CSV file containing ACLs referencing `<DomainName1>` and you want a new ACL with the same options but in `<DomainName2>`.
|
||||
|
||||
### 6.65.16
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filecounts` where `Item Cap` showed an incorrect value.
|
||||
|
||||
Added option `addorigfieldstosubject` to `gam <UserTypeEntity> forward messages|threads` that causes GAM
|
||||
to append the original `from`, `to` and `date` fields to the message subject.
|
||||
```
|
||||
Fwd: Ross to TestUser (Original From: Ross Scroggs <ross.scroggs@gmail.com> To: testuser@domain.com Date: Thu, 23 Nov 2023 07:01:59 -0800)
|
||||
```
|
||||
|
||||
### 6.65.15
|
||||
|
||||
Added additional options to `gam <UserTypeEntity> print|show youtubechannels`.
|
||||
|
||||
### 6.65.14
|
||||
|
||||
Fixed bug in gam <UserTypeEntity> copy|move drivefile` that caused a trap.
|
||||
```
|
||||
UnboundLocalError: cannot access local variable 'emailAddress' where it is not associated with a value
|
||||
```
|
||||
|
||||
### 6.65.13
|
||||
|
||||
Added support for user language `en-CA`.
|
||||
|
||||
|
||||
Added option `sizefield quotabytesused|size` to the following commands that specifies which
|
||||
file size field to use when totaling file sizes; the default value is `quotabytesused`; previous versions used `size`.
|
||||
```
|
||||
gam <UserTypeEntity> print|show filecounts
|
||||
gam <UserTypeEntity> print filelist
|
||||
gam <UserTypeEntity> print|show filetree
|
||||
gam <UserTypeEntity> print diskusage
|
||||
```
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Drive-Files-Display#file-size-fields
|
||||
|
||||
### 6.65.12
|
||||
|
||||
Additional updates on MacOS when a `gam csv` command is interrupted with a contol-C.
|
||||
|
||||
### 6.65.11
|
||||
|
||||
Updated multiprocessing to handle the following error that occurs on MacOS when a `gam csv` command
|
||||
is interrupted with a contol-C.
|
||||
```
|
||||
multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be N leaked semaphore objects to clean up at shutdown
|
||||
```
|
||||
|
||||
Fixed bug in `gam print|show crostelemetry` where no CrOS device data was displayed if no selection
|
||||
options were chosen; now, data is displayed for all CrOS devices as documented.
|
||||
|
||||
### 6.65.10
|
||||
|
||||
Fixed bug in `gam print crostelemetry` that caused a trap: `KeyError: 'reportTime'`.
|
||||
|
||||
### 6.65.09
|
||||
|
||||
Added option `noduplicate` to `gam <UserTypeEntity> create drivefile` that causes GAM
|
||||
to issue a warning and not perform the create if a non-trashed item with the same name (regardless of MIME type)
|
||||
exists in the parent folder.
|
||||
|
||||
Updated `gam <UserTypeEntity> get drivefile <DriveFileEntity>` to handle the following error
|
||||
that seems to occur when multiple tabs from a Google sheet are being downloaded in parallel.
|
||||
```
|
||||
Download Failed: HTTP Error: 429
|
||||
```
|
||||
|
||||
### 6.65.08
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to `gam report <ActivityApplicationName>` that adds
|
||||
additional columns of data to the CSV file output.
|
||||
|
||||
Added option `shownoactivities` to `gam report <ActivityApplicationName>` that causes GAM to display
|
||||
a row with a key value of `NoActivities` when there are no activities to report.
|
||||
|
||||
For example, to find Shared Drives with no activity, see: https://github.com/taers232c/GAMADV-XTD3/wiki/Reports#find-shared-drives-with-no-activity
|
||||
|
||||
### 6.65.07
|
||||
|
||||
Updated `gam delete building` to handle the following error:
|
||||
```
|
||||
ERROR: 412: conditionNotMet - Cannot delete building because there are Calendar resources associated with it.
|
||||
```
|
||||
|
||||
### 6.65.06
|
||||
|
||||
Improved error message when trying to add external students/teachers to a course.
|
||||
```
|
||||
gam courses 544906261666 add student user@gmail.com
|
||||
Course: 544906261666, Add 1 Student
|
||||
Course: 544906261666, Student: user@gmail.com, Add Failed: 403: permissionDenied - @CannotDirectAddUser Unable to directly add the user to the course. Please check that the user account exists and is within the course admin's domain. Add external user with: gam user user@gmail.com create classroominvitation courses 544906261666 role Student
|
||||
```
|
||||
|
||||
### 6.65.05
|
||||
|
||||
Updated `gam info users <UserTypeEntity>` to make option `grouptree` effective when used
|
||||
with option `formatjson`.
|
||||
|
||||
Added option `[formatjson [quotechar <Character>]]]`
|
||||
to these commands so that event details are displayed in CSV format.
|
||||
```
|
||||
gam print|show grouptree <GroupEntity>
|
||||
gam <UserTypeEntity> print|show grouptree
|
||||
```
|
||||
|
||||
Added option `querytime<String> <Date>` to all commands that process messages.
|
||||
For example, you can identify all messages within a particular time period, in this case, all messages unread
|
||||
in the last 30 days.
|
||||
```
|
||||
gam user user@domain.com print messages querytime30d -30d query "after:#querytime30d# is:unread"
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> import|insert message` to allow `replace <Tag> <UserReplacement>` as documented.
|
||||
|
||||
Updated non-owner permission handling in `gam <UserTypeEntity> copy|move drivefile`.
|
||||
|
||||
### 6.65.04
|
||||
|
||||
Fixed bug where license SKU `1010020031` (Google Workspace Frontline Standard) was improperly entered making it unusable;
|
||||
its alias `wsflwstan` was usable.
|
||||
|
||||
Added support for Google Workspace Additional Storage.
|
||||
* ProductID - 101043
|
||||
* SKUID - 1010430001 | gwas | plusstorage
|
||||
|
||||
### 6.65.03
|
||||
|
||||
Fixed bug in commands that display calendar events where event start and end times were not properly displayed
|
||||
when `gam.cfg` had `timezone utc`. The API returns the start and end times expressed in the calendar timezone
|
||||
but GAM replaced the timezone specifier with a `Z`; the date and time values were as expected. This became
|
||||
a problem when event data was exported and used to create or update events.
|
||||
|
||||
### 6.65.02
|
||||
|
||||
Updated `gam print|show browsers` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
### 6.65.01
|
||||
|
||||
Added option `showmimetypesize` to `gam <UserTypeEntity> print|show filecounts` and
|
||||
`gam <UserTypeEntity> print filelist countsonly` that displays the total file size for each MIME type.
|
||||
|
||||
### 6.65.00
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> create contact <JSONData>` that caused a trap when
|
||||
contacts were being copied from one user to another.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-People-Contacts-Profiles#copy-user-contacts-to-another-user
|
||||
|
||||
Updated the following commands to allow specification of a task list by its title.
|
||||
```
|
||||
<TaskListTitle> ::= tltitle:<String>
|
||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||
<TasklistEntity> ::=
|
||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||
|
||||
gam <UserTypeEntity> create task <TasklistEntity>
|
||||
gam <UserTypeEntity> show tasks [tasklists <TasklistEntity>]
|
||||
gam <UserTypeEntity> print tasks [tasklists <TasklistEntity>]
|
||||
gam <UserTypeEntity> update tasklist <TasklistEntity>
|
||||
gam <UserTypeEntity> delete tasklist <TasklistEntity>
|
||||
gam <UserTypeEntity> clear tasklist <TasklistEntity>
|
||||
gam <UserTypeEntity> info tasklist <TasklistEntity>
|
||||
```
|
||||
|
||||
Note the quoting in `<TasklistTitleList>`; the entire list should be enclosed in `"` and
|
||||
each `tltitle:<String>` must be enclosed in `'` if `<String>` contains a space.
|
||||
|
||||
### 6.64.16
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> create task <TasklistIDEntity>` that caused a trap
|
||||
when an invalid TaskListID was specified.
|
||||
|
||||
### 6.64.15
|
||||
|
||||
Updated `lookerstudioassets|lookerstudiopermissions` commands to handle the following error:
|
||||
```
|
||||
ERROR: 500: internalError - Internal error encountered.
|
||||
```
|
||||
|
||||
### 6.64.14
|
||||
|
||||
Cleaned up and renamed `gam info appdetails` to `gam info chromeapp`.
|
||||
|
||||
### 6.64.13
|
||||
|
||||
Added command to get customer app details.
|
||||
```
|
||||
gam info appdetails android|chrome|web <AppID> [formatjson]
|
||||
```
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Chrome-Installed-Apps
|
||||
|
||||
### 6.64.12
|
||||
|
||||
Upgraded to Python 3.12.0 where possible.
|
||||
Upgraded to OpenSSL 3.1.3 where possible.
|
||||
|
||||
### 6.64.11
|
||||
|
||||
Added support for Google Workspace Labs license.
|
||||
* ProductID - 101047
|
||||
* SKUID - 1010470002 | gwlabs | workspacelabs
|
||||
|
||||
### 6.64.10
|
||||
|
||||
Fixed bug introduced in 6.64.09 that caused a trap when `gam redirect csv <FileName> multiprocess` was used.
|
||||
|
||||
### 6.64.09
|
||||
|
||||
Eliminated extraneous `permisssions.0.xxxx` headers in `gam <UserTypeEntity> print filelist ... oneitemperrow`
|
||||
that appeared when some user in `<UserTypeEntity>` had no files to display.
|
||||
|
||||
### 6.64.08
|
||||
|
||||
Fixed bug in `redirect csv - todrive tdtitle "File Title" tdsheettitle "Sheet Title"` where
|
||||
"Sheet Title" was not assigned to the new sheet.
|
||||
|
||||
### 6.64.07
|
||||
|
||||
Updated `gam <UserTypeEntity> move drivefile` to handle the following error:
|
||||
```
|
||||
ERROR: 403: targetUserRoleLimitedByLicenseRestriction - Cannot set the requested role for that user as they lack the necessary license
|
||||
```
|
||||
|
||||
### 6.64.06
|
||||
|
||||
Added fields `devicelicensetype` and `osupdatestatus` to `<CrOSFieldName>`.
|
||||
|
||||
### 6.64.05
|
||||
|
||||
Added `matchfield organizerself <Boolean>` to `<EventMatchProperty>` to simplify selecting events
|
||||
where the user in the following commands is/is not the organizer of the event.
|
||||
```
|
||||
gam <UserTypeEntity> update events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> delete events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> purge events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> move events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> info events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> show events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> update calattendees <UserCalendarEntity> <EventEntity>
|
||||
```
|
||||
|
||||
### 6.64.04
|
||||
|
||||
Updated `gam calendars <CalendarEntity> move events` and `gam <UserTypeEntity> move events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
ERROR: 400: badRequest - Bad Request
|
||||
```
|
||||
|
||||
### 6.64.03
|
||||
|
||||
Updated `gam <UserTypeEntity> get drivefile` to allow downloading Jamboard files; they must be downloaded with `format pdf`.
|
||||
|
||||
### 6.64.02
|
||||
|
||||
Updated `gam <UserTypeEntity> transfer drive` to handle the following error:
|
||||
```
|
||||
ERROR: 400: Bad Request. User message: "The action cannot be performed on an item of mime-type: application/vnd.google-apps.shortcut" - invalidSharingRequest
|
||||
```
|
||||
|
||||
### 6.64.01
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show youtubechannels` to handle the following error:
|
||||
```
|
||||
ERROR: 403: unsupportedSupervisedAccount - Access Forbidden. The authenticated user cannot access this service.
|
||||
```
|
||||
|
||||
### 6.64.00
|
||||
|
||||
Added support for displaying users YouTube channels.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-YouTube
|
||||
|
||||
### 6.63.19
|
||||
|
||||
Fixed bug in `gam print vacation` where `endDate` value was not converted to `yyyy-mm-dd` format.
|
||||
|
||||
### 6.63.18
|
||||
|
||||
Updated `gam print|show ownership` to show the correct file owner when the most recent event is `change_owner`.
|
||||
|
||||
### 6.63.17
|
||||
|
||||
Added support for Duet AI license.
|
||||
* ProductID - 101047
|
||||
* SKUID - 1010470001 | duetai
|
||||
|
||||
Added `api_call_tries_limit` variable to `gam.cfg` that limits the number of tries
|
||||
for Google API calls that return an error that indicates a retry should be performed.
|
||||
The default value is 10 and the range of allowable values is 3-10.
|
||||
|
||||
### 6.63.16
|
||||
|
||||
Arguments `noinherit`, `blockinheritance` and `blockinheritance true` have been removed from the following
|
||||
commands due to an upcoming API change that no longer allows blocking OU setting inheritance.
|
||||
Arguments `inherit` and `blockinheritance false` are still valid.
|
||||
```
|
||||
gam create org <OrgUnitPath>
|
||||
gam update org <OrgUnitItem>
|
||||
gam update orgs <OrgUnitEntity>
|
||||
```
|
||||
|
||||
### 6.63.15
|
||||
|
||||
Added `print_cros_ous` and `print_cros_ous_and_children` variables to `gam.cfg` that provide a default list of OUs for these commands:
|
||||
```
|
||||
gam print cros
|
||||
gam print crosactivity
|
||||
```
|
||||
|
||||
Updated `group` commands that manage members to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
Updated Data Studio to Looker Studio; added the following command synonyms:
|
||||
* `lookerstudioassets` for `datastudioassets`
|
||||
* 'lookerstudiopermissions` for `datastudiopermissions`
|
||||
|
||||
Corrected error message in `gam add datastudiopermissions`:
|
||||
* Old -`ERROR: Missing argument: Expected <DataStudioAssetMembersEntity>`
|
||||
* New - `ERROR: Missing argument: Expected <LookerStudioPermissionEntity>
|
||||
|
||||
### 6.63.14
|
||||
|
||||
Added option `verifyorganizer [<Boolean>]` to `gam <UserTypeEntity> copy|move drivefile`. When a copy/move
|
||||
operation involves a Shared Drive, GAM verifies that the user is an organizer. Unfortunatley, this fails
|
||||
when the user is not a direct organizer but is a member of a group that is an organizer. Specifying
|
||||
`verifyorganizer false` suppresses the verification.
|
||||
|
||||
Updated the following commands to be able to specify a list of domains rather than a single domain:
|
||||
```
|
||||
gam print aliases
|
||||
gam print groups
|
||||
gam print|show group-members
|
||||
gam print users
|
||||
```
|
||||
Added `print_agu_domains` variable to `gam.cfg` that provides a default list of domains for these commands.
|
||||
|
||||
When multiple domains are specified and a query/queries are specified, an API call is made for each domain/query combination.
|
||||
```
|
||||
$ gam print users domains school.org,students.school.org queries "'email:admin*','email:test*'"
|
||||
Getting all Users that match query (domain=school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
|
||||
Got 3 Users: admin@school.org - admindirector@school.org
|
||||
Getting all Users that match query (domain=school.org, query="email:test*"), may take some time on a large Google Workspace Account...
|
||||
Got 20 Users: testusera@school.org - testuserx@school.org
|
||||
Getting all Users that match query (domain=students.school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
|
||||
Got 1 User: admin@students.school.org - admin@students.school.org
|
||||
Getting all Users that match query (domain=students.school.org, query="email:test*"), may take some time on a large Google Workspace Account...
|
||||
Got 1 User: testuser1@students.school.org - testuser1@students.school.org
|
||||
primaryEmail
|
||||
...
|
||||
```
|
||||
|
||||
### 6.63.13
|
||||
|
||||
Updated `gam <UserTypeEntity> print filelist ... showdrivename` and `gam <UserTypeEntity> show fileinfo <DriveFileEntity> ... showdrivename`
|
||||
to show the actual name of Shared Drives in other domains rather than `Drive`.
|
||||
|
||||
### 6.63.12
|
||||
|
||||
Updated commands that call the Reports API (including `gam info domain`) to handle a change
|
||||
in the Reports API that generated the following warning:
|
||||
```
|
||||
WARNING: End date greater than LastReportedDate.
|
||||
```
|
||||
|
||||
Added option `showdeleted [<Boolean>]' to `gam <UserTypeEntity> print|show chatmessages`.
|
||||
|
||||
### 6.63.11
|
||||
|
||||
Added option `ou_and_children <OrgUnitItem>` to `gam print|show crostelemetry` to simplify getting
|
||||
telemetry data for all ChromeOS devices in an OU and its children.
|
||||
|
||||
### 6.63.10
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to these commands. This adds additional columns of data to the CSV file output
|
||||
when the `csv` option is used. If a CSV file of calendar information is being used to specify the calenders, fields, e.g., summary
|
||||
can be added to the ACL output file.
|
||||
```
|
||||
gam <UserTypeEntity> print calendaracls <UserCalendarEntity>
|
||||
gam resource <ResourceID> print calendaracls
|
||||
gam resources <ResourceEntity> print calendaracls
|
||||
gam calendar <CalendarEntity> printacl
|
||||
gam calendars <CalendarEntity> print acls
|
||||
```
|
||||
|
||||
Added commands to show the number of CrOS devices or Users in an entity.
|
||||
```
|
||||
gam <CrOSTypeEntity> show count
|
||||
gam <UserTypeEntity> show count
|
||||
```
|
||||
|
||||
Updated `gam create project` to prompt user to mark `GAM Project Creation` as a trusted app.
|
||||
|
||||
### 6.63.09
|
||||
|
||||
Updated `gam create teamdrive` to handle the following error:
|
||||
```
|
||||
ERROR: 403: userCannotCreateTeamDrives - The authenticated user cannot create new shared drives.
|
||||
```
|
||||
|
||||
### 6.63.08
|
||||
|
||||
Updated `cigroup` commands to handle the following error:
|
||||
```
|
||||
ERROR: 400: invalidArgument - Request contains an invalid argument.
|
||||
```
|
||||
|
||||
### 6.63.07
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> append sheetrange` that caused a trap when appending to an empty sheet.
|
||||
|
||||
Upgraded to Python 3.11.5 where possible.
|
||||
|
||||
### 6.63.06
|
||||
|
||||
Updated `cigroup` commands to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
### 6.63.05
|
||||
|
||||
Updated `inboundsso` commands to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
### 6.63.04
|
||||
|
||||
Added option `ignorerole` to `gam update groups|cigroups <GroupEntity> sync [<GroupRole>|ignorerole] ... <UserTypeEntity>` that causes GAM
|
||||
to remove members regardless of role and add new members with role MEMBER. This is a special purpose option, use with caution
|
||||
and ensure that `<UserTypeEntity>` specifies the full desired membership list of all roles.
|
||||
|
||||
### 6.63.03
|
||||
|
||||
Added option `externalusersallowed <Boolean>` to `gam <UserTypeEntity> create chatspace`
|
||||
that allows creation of chat spaces that allow external users.
|
||||
|
||||
Updated commands that process chat members to allow external users.
|
||||
|
||||
### 6.63.02
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> collect orphans` where shortcuts were being created unnecessarily
|
||||
when `useshortcuts` was false; either by default or when explicitly set.
|
||||
|
||||
### 6.63.01
|
||||
|
||||
Added `process_wait_limit` variable to `gam.cfg` that controls how long (in seconds) GAM should wait for all batch|csv processes to complete
|
||||
after all have been started. If the limit is reached, GAM terminates any remaining processes. The default is 0 which specifies no limit.
|
||||
|
||||
Following Jay's lead, added option `alwaysevict` to `gam create|update user` that is used to specify GAM's
|
||||
behavior when `verifynotinvitable` is not specified and there is a conflict with an unmanaged account.
|
||||
|
||||
By default, when creating a user that has a conflict with an unmanaged account, GAM will honor the setting on this page:
|
||||
* https://admin.google.com/ac/accountsettings/conflictaccountmanagement
|
||||
|
||||
Specifying `alwaysevict` forces GAM to select this setting: `Replace conflicting unmanaged accounts with managed ones`
|
||||
|
||||
With `gam update user`, `alwaysevict` only applies if `createifnotfound` is specified and the user was not found to update and must be created.
|
||||
|
||||
### 6.63.00
|
||||
|
||||
Added support for calendar working location events.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Calendars-Events#working-location-events
|
||||
|
||||
### 6.62.08
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to these commands. This adds additional columns of data to the CSV file output
|
||||
when the `csv` option is used.
|
||||
```
|
||||
gam create contact
|
||||
gam <UserTypeEntity> create contact
|
||||
gam <UserTypeEntity> create contactgroup
|
||||
```
|
||||
|
||||
### 6.62.07
|
||||
|
||||
Added option `csv [todrive <ToDriveAttribute>*]` to these commands that causes GAM to output
|
||||
the contact creator and contact ID in CSV form. This will be useful when bulk contacts are created.
|
||||
|
||||
Added `returnidonly` to these commands that causes GAM to return just the
|
||||
contact ID as output. This will be useful in scripts that create a contact and then
|
||||
want to perform subsequent GAM commands on the contact.
|
||||
```
|
||||
gam create contact
|
||||
gam <UserTypeEntity> create contact
|
||||
gam <UserTypeEntity> create contactgroup
|
||||
```
|
||||
|
||||
### 6.62.06
|
||||
|
||||
Added output `Item cap` to `gam <UserTypeEntity> print filecounts select select <SharedDriveEntity>` that
|
||||
displays the total number of files/folders on the Shared Drive divided by 400000, the maximum number of file/folders on a Shared Drive.
|
||||
|
||||
### 6.62.05
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ gam show datatransfers|transfers
|
||||
gam print datatransfers|transfers [todrive <ToDriveAttribute>*]
|
||||
[olduser|oldowner <UserItem>] [newuser|newowner <UserItem>]
|
||||
[status completed|failed|inprogress|<String>] [delimiter <Character>]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
```
|
||||
By default, all data transfer operations are printed, use these options to select specific transfers.
|
||||
* `olduser|oldowner <UserItem>`
|
||||
@@ -72,3 +73,5 @@ By default, all data transfer operations are printed, use these options to selec
|
||||
By default, the entries in lists of items are separated by the `csv_output_field_delimiter` from `gam.cfg`.
|
||||
* `delimiter <Character>` - Separate list items with `<Character>`
|
||||
|
||||
Add additional columns of data from the command line to the output
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Groups - Membership
|
||||
Groups - Membership
|
||||
- [API documentation](#api-documentation)
|
||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
||||
- [Definitions](#definitions)
|
||||
@@ -19,6 +19,7 @@
|
||||
* https://developers.google.com/admin-sdk/directory/v1/reference/members
|
||||
|
||||
## Definitions
|
||||
See [Collections of Items](Collections-of-Items)
|
||||
```
|
||||
<DeliverySetting> ::=
|
||||
allmail|
|
||||
@@ -27,18 +28,24 @@
|
||||
disabled|
|
||||
none|nomail
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<DomainNameList> ::= "<DomainName>(,<DomainName>)*"
|
||||
<DomainNameEntity> ::=
|
||||
<DomainNameList> | <FileSelector> | <CSVFileSelector>
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<UniqueID> ::= id:<String>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GroupList> ::= "<GroupItem>(,<GroupItem>)*"
|
||||
<GroupEntity> ::= <GroupList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<GroupEntity> ::=
|
||||
<GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GroupRole> ::= owner|manager|member
|
||||
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
||||
<GroupType> ::= customer|group|user
|
||||
<GroupTypeList> ::= "<GroupType>(,<GroupType>)*"
|
||||
<QueryGroup> ::= <String>
|
||||
See: https://developers.google.com/admin-sdk/directory/v1/guides/search-groups
|
||||
<QueryGroupList> ::= "<QueryGroup>(,<QueryGroup>)*"
|
||||
|
||||
<MembersFieldName> ::=
|
||||
delivery|deliverysettings|
|
||||
@@ -106,7 +113,7 @@ users in a particular archived state. This option can be used with the following
|
||||
(query <QueryUser>)|
|
||||
(queries <QueryUserList>)
|
||||
```
|
||||
Prior to bersion `6.20.05`, the `notarchived|archived` option could only be used with the following `<UserTypeEntity>`:
|
||||
Prior to version `6.20.05`, the `notarchived|archived` option could only be used with the following `<UserTypeEntity>`:
|
||||
```
|
||||
(group|group_ns|group_susp <GroupItem>)|
|
||||
(groups|groups_ns|groups_susp <GroupList>)|
|
||||
@@ -211,8 +218,9 @@ testgroup@domain.com,testuser4@domain.com,MEMBER,Remove Failed,Does not exist
|
||||
|
||||
## Synchronize members in a group
|
||||
A synchronize operation gets the current membership for a group and does adds and deletes as necessary to make it match `<UserTypeEntity>`.
|
||||
This is done by specific role except for a special case where role is ignored.
|
||||
```
|
||||
gam update group|groups <GroupEntity> sync [<GroupRole>]
|
||||
gam update group|groups <GroupEntity> sync [<GroupRole>|ignorerole]
|
||||
[usersonly|groupsonly] [addonly|removeonly]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[remove_domain_nostatus_members]
|
||||
@@ -221,7 +229,10 @@ gam update group|groups <GroupEntity> sync [<GroupRole>]
|
||||
(additionalmembers [<GroupRole>] <EmailAddressEntity>)*
|
||||
<UserItem>|<UserTypeEntity>
|
||||
```
|
||||
If `<GroupRole>` is not specified, `member` is assumed.
|
||||
If `ignorerole` is specified, GAM removes members regardless of role and adds new members with role MEMBER.
|
||||
This is a special purpose option, use with caution and ensure that `<UserTypeEntity>` specifies the full desired membership list of all roles.
|
||||
|
||||
If neither `<GroupRole>` nor `ignorerole` is specified, `member` is assumed.
|
||||
|
||||
When `<UserTypeEntity>` specifies a group or groups:
|
||||
* `usersonly` - Only the user members from the specified groups are added/deleted
|
||||
@@ -557,7 +568,7 @@ gam info member|group-members <UserItem>|<UserTypeEntity> <GroupEntity>
|
||||
By default, delivery information is not displayed.
|
||||
```
|
||||
gam print group-members [todrive <ToDriveAttribute>*]
|
||||
[([domain <DomainName>] ([member|showownedby <EmailItem>]|[query <QueryGroup>]))|
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(group|group_ns|group_susp <GroupItem>)|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
@@ -572,13 +583,15 @@ gam print group-members [todrive <ToDriveAttribute>*]
|
||||
[userfields <UserFieldNameList>]
|
||||
[(recursive [noduplicates])|includederivedmembership] [nogroupemail]
|
||||
[peoplelookup|(peoplelookupuser <EmailAddress>)]
|
||||
[unknownname <String>] [cachememberinfo [Boolean]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, the group membership of all groups in the account are displayed, these options allow selection of subsets of groups:
|
||||
* `domain <DomainName>` - Limit display to groups in the domain `<DomainName>`
|
||||
* `domain|domains <DomainNameEntity>` - Limit display to groups in the domains specified by `<DomainNameEntity>`
|
||||
* You can predefine this list with the `print_agu_domains` variable in `gam.cfg`.
|
||||
* `member <EmailItem>` - Limit display to groups that contain `<EmailItem>` as a member; mutually exclusive with `query <QueryGroup>`
|
||||
* `showownedby <EmailItem>` - Limit display to groups that contain `<EmailItem>` as an owner; mutually exclusive with `query <QueryGroup>`
|
||||
* `query <QueryGroup>` - Limit display to groups that match `<QueryGroup>`, matching is done at Google; mutually exclusive with `member <UserItem>`
|
||||
* `(query <QueryGroup>)|(queries <QueryGroupList>)` - Limit groups to those that match a query; each query is run against each domain
|
||||
* `group <GroupItem>` - Limit display to the single group `<GroupItem>`
|
||||
* `group_ns <GroupItem>` - Limit display to the single group `<GroupItem>`, display non-suspended members
|
||||
* `group_susp <GroupItem>` - Limit display to the single group `<GroupItem>`, display suspended members
|
||||
@@ -634,11 +647,17 @@ these options specify which fields to display:
|
||||
* `delivery|deliverysettings` - Specify this field to get delivery information; an additional API call per member is required
|
||||
* `userfields <UserFieldNameList>` - For members that are users, display these user fields; an additional API call per member is required
|
||||
|
||||
The additional API calls can be reduced with the `cachememberinfo` option; a single API call is made for each user/group
|
||||
and the data is cached to eliminate to need to repeat the API call; this consumes more memory but dramatically reduces the number of API calls.
|
||||
|
||||
If member names are requested, names are not available for users not in the domain; you can request that GAM use the People API to retrieve
|
||||
names for these users. Names are not retrieved in all cases and success is dependent on what user is used to perform the retrievals.
|
||||
* `peoplelookup` - Use the administrator named in oauth2.txt to perform the retrievals
|
||||
* `peoplelookupuser <EmailAddress>` - Use `<EmailAddress>` to perform the retrievals
|
||||
|
||||
By default, when `membernames` is specified, GAM displays `Unknown` for members whose names can not be determined.
|
||||
Use `unknownname <String>` to specify an alternative value.
|
||||
|
||||
By default, the group email address is always shown, you can suppress it with the `nogroupemail` option.
|
||||
|
||||
By default, members that are groups are displayed as a single entry of type GROUP; this option recursively expands group members to display their user members.
|
||||
@@ -673,7 +692,7 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
## Display group membership in hierarchical format
|
||||
```
|
||||
gam show group-members
|
||||
[([domain <DomainName>] ([member|showownedby <EmailItem>]|[query <QueryGroup>]))|
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(group|group_ns|group_susp <GroupItem>)|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
@@ -686,10 +705,11 @@ gam show group-members
|
||||
[includederivedmembership]
|
||||
```
|
||||
By default, the group membership of all groups in the account are displayed, these options allow selection of subsets of groups:
|
||||
* `domain <DomainName>` - Limit display to groups in the domain `<DomainName>`
|
||||
* `domain|domains <DomainNameEntity>` - Limit display to groups in the domains specified by `<DomainNameEntity>`
|
||||
* You can predefine this list with the `print_agu_domains` variable in `gam.cfg`.
|
||||
* `member <EmailItem>` - Limit display to groups that contain `<EmailItem>` as a member; mutually exclusive with `query <QueryGroup>`
|
||||
* `showownedby <EmailItem>` - Limit display to groups that contain `<EmailItem>` as an owner; mutually exclusive with `query <QueryGroup>`
|
||||
* `query <QueryGroup>` - Limit display to groups that match `<QueryGroup>`, matching is done at Google; mutually exclusive with `member <UserItem>`
|
||||
* `(query <QueryGroup>)|(queries <QueryGroupList>)` - Limit groups to those that match a query; each query is run against each domain
|
||||
* `group <GroupItem>` - Limit display to the single group `<GroupItem>`
|
||||
* `group_ns <GroupItem>` - Limit display to the single group `<GroupItem>`, display non-suspended members
|
||||
* `group_susp <GroupItem>` - Limit display to the single group `<GroupItem>`, display suspended members
|
||||
|
||||
@@ -11,11 +11,12 @@
|
||||
- [GUI API Group settings mapping](#gui-api-group-settings-mapping)
|
||||
- [GUI API Group access type settings mapping](#gui-api-group-access-type-settings-mapping)
|
||||
- [Manage groups](#manage-groups)
|
||||
- [Update a group's settings with JSON data](#update-a-groups-settings-with-JSON-data)
|
||||
- [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)
|
||||
- [Display information about selected groups](#display-information-about-selected-groups)
|
||||
- [Display a group and its parents](#Display-a-group-and-its-parents)
|
||||
- [Examples](#Examples)
|
||||
- [Display group counts](#display-group-counts)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/admin-sdk/directory/reference/rest/v1/groups
|
||||
@@ -44,20 +45,27 @@
|
||||
* https://support.google.com/a/answer/167430
|
||||
|
||||
## Definitions
|
||||
See [Collections of Items](Collections-of-Items)
|
||||
```
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<DomainNameList> ::= "<DomainName>(,<DomainName>)*"
|
||||
<DomainNameEntity> ::=
|
||||
<DomainNameList> | <FileSelector> | <CSVFileSelector>
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<UniqueID> ::= id:<String>
|
||||
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GroupList> ::= "<GroupItem>(,<GroupItem>)*"
|
||||
<GroupEntity> ::= <GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<GroupEntity> ::=
|
||||
<GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GroupRole> ::= owner|manager|member
|
||||
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
||||
<GroupType> ::= customer|group|user
|
||||
<GroupTypeList> ::= "<GroupType>(,<GroupType>)*"
|
||||
<QueryGroup> ::= <String>
|
||||
See: https://developers.google.com/admin-sdk/directory/v1/guides/search-groups
|
||||
<QueryGroupList> ::= "<QueryGroup>(,<QueryGroup>)*"
|
||||
<QueryDynamicGroup> ::= <String>
|
||||
See: https://cloud.google.com/identity/docs/reference/rest/v1/groups#dynamicgroupquery
|
||||
|
||||
@@ -402,7 +410,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
This command displays information in CSV format.
|
||||
```
|
||||
gam print groups [todrive <ToDriveAttribute>*]
|
||||
[([domain <DomainName>] ([member|showownedby <EmailItem>]|[query <QueryGroup>]))|
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>] (matchsetting [not] <GroupAttribute>)*
|
||||
@@ -421,12 +429,12 @@ gam print groups [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, all groups in the account are displayed, these options allow selection of subsets of groups:
|
||||
* `domain <DomainName>` - Limit display to groups in the domain `<DomainName>`
|
||||
* `domain|domains <DomainNameEntity>` - Limit display to groups in the domains specified by `<DomainNameEntity>`
|
||||
* You can predefine this list with the `print_agu_domains` variable in `gam.cfg`.
|
||||
* `member <EmailItem>` - Limit display to groups that contain `<EmailItem>` as a member; mutually exclusive with `query <QueryGroup>`
|
||||
* `showownedby <EmailItem>` - Limit display to groups that contain `<EmailItem>` as an owner; mutually exclusive with `query <QueryGroup>`
|
||||
* `query <QueryGroup>` - Limit display to groups that match <QueryGroup>, matching is done at Google; mutually exclusive with `member <UserItem>`
|
||||
* `(query <QueryGroup>)|(queries <QueryGroupList>)` - Limit groups to those that match a query; each query is run against each domain
|
||||
* `select <GroupEntity>` - Limit display to the groups specified in `<GroupEntity>`
|
||||
* `showownedby <UserItem>` - Limit display to groups owned by `<UserItem>`
|
||||
|
||||
When using `query <QueryGroup>` with the `name:{PREFIX}*` query, `PREFIX` must contain at least three characters.
|
||||
|
||||
@@ -556,3 +564,31 @@ Group,Name,ParentsCount,Parents,ParentsName
|
||||
testgroup2@domain.com,Test - Group 2,2,testgroup1@domain.com|testgroup@domain.com,Test Group1|Test Group Org
|
||||
testgroup2@domain.com,Test - Group 2,1,testgroup@domain.net,Test Group Net
|
||||
```
|
||||
## Display group counts
|
||||
Display the number of groups.
|
||||
```
|
||||
gam print groups
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>] (matchsetting [not] <GroupAttribute>)*
|
||||
[admincreatedmatch <Boolean>]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print groups showitemcountonly
|
||||
Getting all Groups, may take some time on a large Google Workspace Account...
|
||||
Got 200 Groups: 1aparents@domain.com - students-genderfood@domain.com
|
||||
Got 238 Groups: students-worldculture@domain.com - xcarestaff@domain.com
|
||||
238
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print groups showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print groups showitemcountonly
|
||||
```
|
||||
|
||||
70
docs/Home.md
Normal file
70
docs/Home.md
Normal file
@@ -0,0 +1,70 @@
|
||||
- [Introduction](#introduction)
|
||||
- [Requirements](#requirements)
|
||||
- [Installation - First time GAM installation](#installation---first-time-gam-installation)
|
||||
- [Installation - Upgrading from a GAM version other than a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3](#installation---upgrading-from-a-gam-version-other-than-a-prior-version-of-gamadv-x-or-gamadv-xtd-or-gamadv-xtd3)
|
||||
- [Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3](#installation---upgrading-from-a-prior-version-of-gamadv-x-or-gamadv-xtd-or-gamadv-xtd3)
|
||||
|
||||
# Introduction
|
||||
GAMADV-XTD3 is a free, open source command line tool for Google Workspace Administrators to manage domain and user settings quickly and easily.
|
||||
|
||||
GAMADV-XTD3 is built with Python 3; as Python 2 support ends on 2020-01-01, this is the version of Advanced GAM that new/existing users should install.
|
||||
|
||||
This page provides simple instructions for downloading, installing and starting to use GAMADV-XTD3.
|
||||
|
||||
GAMADV-XTD3 requires paid, or Education/Non-profit, editions of Google Workspace. G Suite Legacy Free Edition has limited API support and not all GAM commands work.
|
||||
|
||||
GAMADV-XTD3 is a rewrite/extension of Jay Lee's [GAM], without his efforts, this version wouldn't exist.
|
||||
|
||||
GAMADV-XTD3 is backwards compatible with [GAM], meaning that if your command works with regular GAM, it will also work with GAMADV-XTD3. There may be differences in output, but the syntax is compatible.
|
||||
|
||||
# Documentation
|
||||
Basic GAM documentation is hosted in the [GitHub Wiki]. Documentation specifically for GAMADV-XTD3 is hosted in the [GitHub GAMADV-XTD3 Wiki] and in Gam*.txt files.
|
||||
|
||||
# Mailing List / Discussion group
|
||||
The GAM mailing list / discussion group is hosted on [Google Groups]. You can join the list and interact via email, or just post from the web itself.
|
||||
|
||||
# Source Repository
|
||||
The official GAMADV-XTD3 source repository is on [GitHub] in the master branch.
|
||||
|
||||
# Author
|
||||
GAMADV-XTD3 is maintained by <a href="mailto:ross.scroggs@gmail.com">Ross Scroggs</a>.
|
||||
|
||||
# Requirements
|
||||
To run all commands properly, GAMADV-XTD3 requires three things:
|
||||
* An API project which identifies your install of GAMADV-XTD3 to Google and keeps track of API quotas.
|
||||
* Authorization to act as your Google Workspace Administrator in order to perform management functions like add users, modify group settings and membership and pull domain reports.
|
||||
* A special service account that is authorized to act on behalf of your users in order to modify user-specific settings and data such as Drive files, Calendars and Gmail messages and settings like signatures.
|
||||
|
||||
# Installation - First time GAM installation
|
||||
Use these steps if you have never used any version of GAM in your domain. They will create a GAM project
|
||||
and all necessary authentications.
|
||||
|
||||
* Download: [Downloads](Downloads)
|
||||
* Configuration: [GAM Configuration](gam.cfg)
|
||||
* Install: [How to Install Advanced GAM](How-to-Install-Advanced-GAM)
|
||||
|
||||
# Installation - Upgrading from a GAM version other than a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3
|
||||
Use these steps if you have used any version of GAM in your domain. They will update your GAM project
|
||||
and all necessary authentications.
|
||||
|
||||
* Download: [Downloads](Downloads)
|
||||
* Configuration: [GAM Configuration](gam.cfg)
|
||||
* Upgrade: [How to Upgrade from Standard GAM](How-to-Upgrade-from-Standard-GAM)
|
||||
|
||||
# Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3
|
||||
Use these steps if you already use GAMADV-X or GAMADV-XTD or GAMADV-XTD3. The updates may tell you to update your GAM project
|
||||
or authentications because new features have been included.
|
||||
|
||||
* Updates: [GAM Updates]
|
||||
* Download: [Downloads](Downloads)
|
||||
|
||||
You can install multiple versions of GAM and GAMADV-XTD3 in different parallel directories.
|
||||
|
||||
[GAM]: https://github.com/GAM-team/GAM
|
||||
[GitHub Releases]: https://github.com/taers232c/GAMADV-XTD3/releases
|
||||
[GitHub]: https://github.com/taers232c/GAMADV-XTD3/tree/master
|
||||
[GitHub Wiki]: https://github.com/GAM-team/GAM/wiki/
|
||||
[GitHub GAMADV-XTD3 Wiki]: https://github.com/taers232c/GAMADV-XTD3/wiki/
|
||||
[Google Groups]: https://groups.google.com/group/google-apps-manager
|
||||
[GAM Updates]: https://github.com/taers232c/GAMADV-XTD3/wiki/GamUpdates
|
||||
|
||||
@@ -269,55 +269,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -348,35 +354,41 @@ Service Account Private Key Authentication
|
||||
Authentication PASS
|
||||
Service Account Private Key age; Google recommends rotating keys on a routine basis
|
||||
Service Account Private Key age: 0 days PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED!
|
||||
To authorize them, please go to:
|
||||
|
||||
@@ -404,35 +416,41 @@ System time status:
|
||||
Your system time differs from www.googleapis.com by less than 1 second PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
@@ -696,55 +714,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -771,35 +795,41 @@ Service Account Private Key Authentication
|
||||
Authentication PASS
|
||||
Service Account Private Key age; Google recommends rotating keys on a routine basis
|
||||
Service Account Private Key age: 0 days PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED!
|
||||
To authorize them, please go to:
|
||||
|
||||
@@ -827,35 +857,41 @@ System time status:
|
||||
Your system time differs from www.googleapis.com by less than 1 second PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
|
||||
@@ -104,55 +104,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -180,35 +186,41 @@ Service Account Private Key Authentication
|
||||
Authentication PASS
|
||||
Service Account Private Key age; Google recommends rotating keys on a routine basis
|
||||
Service Account Private Key age: 0 days PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED!
|
||||
To authorize them, please go to:
|
||||
|
||||
@@ -236,35 +248,41 @@ System time status:
|
||||
Your system time differs from www.googleapis.com by less than 1 second PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
@@ -369,55 +387,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -444,35 +468,41 @@ Service Account Private Key Authentication
|
||||
Authentication PASS
|
||||
Service Account Private Key age; Google recommends rotating keys on a routine basis
|
||||
Service Account Private Key age: 0 days PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED!
|
||||
To authorize them, please go to:
|
||||
|
||||
@@ -500,35 +530,41 @@ System time status:
|
||||
Your system time differs from www.googleapis.com by less than 1 second PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
|
||||
@@ -97,55 +97,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address?admin@domain.com
|
||||
|
||||
@@ -168,35 +174,41 @@ System time status:
|
||||
Your system time differs by less than 1 second from Google PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: user@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED! Please go to:
|
||||
|
||||
https://admin.google.com/domain.com/ManageOauthClients?clientScopeToAdd=https://mail.google.com/,https://sites.google.com/feeds,https://www.google.com/m8/feeds,https://www.googleapis.com/auth/activity,https://www.googleapis.com/auth/apps.alerts,https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/classroom.announcements,https://www.googleapis.com/auth/classroom.coursework.students,https://www.googleapis.com/auth/classroom.rosters,https://www.googleapis.com/auth/classroom.topics,https://www.googleapis.com/auth/cloudprint,https://www.googleapis.com/auth/contacts,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/drive.activity,https://www.googleapis.com/auth/gmail.modify,https://www.googleapis.com/auth/gmail.settings.basic,https://www.googleapis.com/auth/gmail.settings.sharing,https://www.googleapis.com/auth/iam,https://www.googleapis.com/auth/spreadsheets,https://www.googleapis.com/auth/userinfo.email&clientNameToAdd=SVCACCTID
|
||||
@@ -221,35 +233,41 @@ System time status:
|
||||
Your system time differs by less than 1 second from Google PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: user@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
|
||||
@@ -350,55 +368,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -421,35 +445,41 @@ System time status:
|
||||
Your system time differs by less than 1 second from Google PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: user@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED! Please go to:
|
||||
|
||||
https://admin.google.com/domain.com/ManageOauthClients?clientScopeToAdd=https://mail.google.com/,https://sites.google.com/feeds,https://www.google.com/m8/feeds,https://www.googleapis.com/auth/activity,https://www.googleapis.com/auth/apps.alerts,https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/classroom.announcements,https://www.googleapis.com/auth/classroom.coursework.students,https://www.googleapis.com/auth/classroom.rosters,https://www.googleapis.com/auth/classroom.topics,https://www.googleapis.com/auth/cloudprint,https://www.googleapis.com/auth/contacts,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/drive.activity,https://www.googleapis.com/auth/gmail.modify,https://www.googleapis.com/auth/gmail.settings.basic,https://www.googleapis.com/auth/gmail.settings.sharing,https://www.googleapis.com/auth/iam,https://www.googleapis.com/auth/spreadsheets,https://www.googleapis.com/auth/userinfo.email&clientNameToAdd=SVCACCTID
|
||||
@@ -474,35 +504,41 @@ System time status:
|
||||
Your system time differs by less than 1 second from Google PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: user@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
|
||||
|
||||
@@ -106,6 +106,7 @@ Section: DEFAULT
|
||||
admin_email = ''
|
||||
api_calls_rate_check = false
|
||||
api_calls_rate_limit = 100
|
||||
api_calls_tries_limit = 10
|
||||
auto_batch_min = 0
|
||||
bail_on_internal_error_tries = 2
|
||||
batch_size = 50
|
||||
@@ -174,6 +175,10 @@ Section: DEFAULT
|
||||
oauth2_txt = oauth2.txt ; /Users/admin/GAMConfig/oauth2.txt
|
||||
oauth2service_json = oauth2service.json ; /Users/admin/GAMConfig/oauth2service.json
|
||||
people_max_results = 100
|
||||
print_agu_domains = ''
|
||||
print_cros_ous = ''
|
||||
print_cros_ous_and_children = ''
|
||||
process_wait_limit = 0
|
||||
quick_cros_move = false
|
||||
quick_info_user = false
|
||||
reseller_id = ''
|
||||
@@ -329,10 +334,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.62.05 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.10.8 64-bit final
|
||||
MacOS High Sierra 10.13.6 x86_64
|
||||
Python 3.12.1 64-bit final
|
||||
MacOS Sonoma 14.2.1 x86_64
|
||||
Path: /Users/admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
|
||||
@@ -343,55 +348,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44[a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -419,35 +430,41 @@ Service Account Private Key Authentication
|
||||
Authentication PASS
|
||||
Service Account Private Key age; Google recommends rotating keys on a routine basis
|
||||
Service Account Private Key age: 0 days PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED!
|
||||
To authorize them, please go to:
|
||||
|
||||
@@ -475,35 +492,41 @@ System time status:
|
||||
Your system time differs from www.googleapis.com by less than 1 second PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
@@ -530,6 +553,7 @@ Section: DEFAULT
|
||||
admin_email = ''
|
||||
api_calls_rate_check = false
|
||||
api_calls_rate_limit = 100
|
||||
api_calls_tries_limit = 10
|
||||
auto_batch_min = 0
|
||||
bail_on_internal_error_tries = 2
|
||||
batch_size = 50
|
||||
@@ -595,6 +619,10 @@ Section: DEFAULT
|
||||
oauth2_txt = oauth2.txt ; /Users/admin/GAMConfig/oauth2.txt
|
||||
oauth2service_json = oauth2service.json ; /Users/admin/GAMConfig/oauth2service.json
|
||||
people_max_results = 100
|
||||
print_agu_domains = ''
|
||||
print_cros_ous = ''
|
||||
print_cros_ous_and_children = ''
|
||||
process_wait_limit = 0
|
||||
quick_cros_move = false
|
||||
quick_info_user = False
|
||||
reseller_id = ''
|
||||
@@ -727,6 +755,7 @@ Section: DEFAULT
|
||||
admin_email = ''
|
||||
api_calls_rate_check = false
|
||||
api_calls_rate_limit = 100
|
||||
api_calls_tries_limit = 10
|
||||
auto_batch_min = 0
|
||||
bail_on_internal_error_tries = 2
|
||||
batch_size = 50
|
||||
@@ -792,6 +821,10 @@ Section: DEFAULT
|
||||
oauth2_txt = oauth2.txt ; C:\GAMConfig\oauth2.txt
|
||||
oauth2service_json = oauth2service.json ; C:\GAMConfig\oauth2service.json
|
||||
people_max_results = 100
|
||||
print_agu_domains = ''
|
||||
print_cros_ous = ''
|
||||
print_cros_ous_and_children = ''
|
||||
process_wait_limit = 0
|
||||
quick_cros_move = false
|
||||
quick_info_user = False
|
||||
reseller_id = ''
|
||||
@@ -969,9 +1002,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.62.05 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
Python 3.12.1 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.com
|
||||
@@ -983,55 +1016,61 @@ Append an 'r' to grant read-only access or an 'a' to grant action-only access.
|
||||
|
||||
[*] 0) Calendar API (supports readonly)
|
||||
[*] 1) Chrome Browser Cloud Management API (supports readonly)
|
||||
[*] 2) Chrome Management API - Telemetry read only
|
||||
[*] 3) Chrome Management API - read only
|
||||
[*] 4) Chrome Policy API (supports readonly)
|
||||
[*] 5) Chrome Printer Management API (supports readonly)
|
||||
[*] 6) Chrome Version History API
|
||||
[*] 7) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 8) Classroom API - Course Topics (supports readonly)
|
||||
[*] 9) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 11) Classroom API - Courses (supports readonly)
|
||||
[*] 12) Classroom API - Profile Emails
|
||||
[*] 13) Classroom API - Profile Photos
|
||||
[*] 14) Classroom API - Rosters (supports readonly)
|
||||
[*] 15) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 16) Cloud Identity Groups API (supports readonly)
|
||||
[*] 17) Cloud Storage (Vault Export - read only)
|
||||
[*] 18) Contact Delegation API (supports readonly)
|
||||
[*] 19) Contacts API - Domain Shared and Users and GAL
|
||||
[*] 20) Data Transfer API (supports readonly)
|
||||
[*] 21) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 22) Directory API - Customers (supports readonly)
|
||||
[*] 23) Directory API - Domains (supports readonly)
|
||||
[*] 24) Directory API - Groups (supports readonly)
|
||||
[*] 25) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 26) Directory API - Organizational Units (supports readonly)
|
||||
[*] 27) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 28) Directory API - Roles (supports readonly)
|
||||
[*] 29) Directory API - User Schemas (supports readonly)
|
||||
[*] 30) Directory API - User Security
|
||||
[*] 31) Directory API - Users (supports readonly)
|
||||
[*] 32) Email Audit API
|
||||
[*] 33) Groups Migration API
|
||||
[*] 34) Groups Settings API
|
||||
[*] 35) License Manager API
|
||||
[*] 36) People API (supports readonly)
|
||||
[*] 37) People Directory API - read only
|
||||
[ ] 38) Pub / Sub API
|
||||
[*] 39) Reports API - Audit Reports
|
||||
[*] 40) Reports API - Usage Reports
|
||||
[ ] 41) Reseller API
|
||||
[*] 42) Site Verification API
|
||||
[*] 43) Sites API
|
||||
[*] 44) Vault API (supports readonly)
|
||||
[*] 2) Chrome Management API - AppDetails read only
|
||||
[*] 3) Chrome Management API - Telemetry read only
|
||||
[*] 4) Chrome Management API - read only
|
||||
[*] 5) Chrome Policy API (supports readonly)
|
||||
[*] 6) Chrome Printer Management API (supports readonly)
|
||||
[ ] 7) Chrome Version History API
|
||||
[*] 8) Classroom API - Course Announcements (supports readonly)
|
||||
[*] 9) Classroom API - Course Topics (supports readonly)
|
||||
[*] 10) Classroom API - Course Work/Materials (supports readonly)
|
||||
[*] 11) Classroom API - Course Work/Submissions (supports readonly)
|
||||
[*] 12) Classroom API - Courses (supports readonly)
|
||||
[*] 13) Classroom API - Profile Emails
|
||||
[*] 14) Classroom API - Profile Photos
|
||||
[*] 15) Classroom API - Rosters (supports readonly)
|
||||
[*] 16) Classroom API - Student Guardians (supports readonly)
|
||||
[*] 17) Cloud Channel API (supports readonly)
|
||||
[*] 18) Cloud Identity - Inbound SSO Settings (supports readonly)
|
||||
[*] 19) Cloud Identity Groups API (supports readonly)
|
||||
[*] 20) Cloud Identity OrgUnits API (supports readonly)
|
||||
[*] 21) Cloud Identity User Invitations API (supports readonly)
|
||||
[ ] 22) Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)
|
||||
[ ] 23) Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)
|
||||
[*] 24) Contact Delegation API (supports readonly)
|
||||
[*] 25) Contacts API - Domain Shared Contacts and GAL
|
||||
[*] 26) Data Transfer API (supports readonly)
|
||||
[*] 27) Directory API - Chrome OS Devices (supports readonly)
|
||||
[*] 28) Directory API - Customers (supports readonly)
|
||||
[*] 29) Directory API - Domains (supports readonly)
|
||||
[*] 30) Directory API - Groups (supports readonly)
|
||||
[*] 31) Directory API - Mobile Devices Directory (supports readonly and action)
|
||||
[*] 32) Directory API - Organizational Units (supports readonly)
|
||||
[*] 33) Directory API - Resource Calendars (supports readonly)
|
||||
[*] 34) Directory API - Roles (supports readonly)
|
||||
[*] 35) Directory API - User Schemas (supports readonly)
|
||||
[*] 36) Directory API - User Security
|
||||
[*] 37) Directory API - Users (supports readonly)
|
||||
[ ] 38) Email Audit API
|
||||
[*] 39) Groups Migration API
|
||||
[*] 40) Groups Settings API
|
||||
[*] 41) License Manager API
|
||||
[*] 42) People API (supports readonly)
|
||||
[*] 43) People Directory API - read only
|
||||
[ ] 44) Pub / Sub API
|
||||
[*] 45) Reports API - Audit Reports
|
||||
[*] 46) Reports API - Usage Reports
|
||||
[*] 47) Reseller API
|
||||
[*] 48) Site Verification API
|
||||
[ ] 49) Sites API
|
||||
[*] 50) Vault API (supports readonly)
|
||||
|
||||
s) Select all scopes
|
||||
u) Unselect all scopes
|
||||
e) Exit without changes
|
||||
c) Continue to authorization
|
||||
Please enter 0-44![a|r] or s|u|e|c: c
|
||||
Please enter 0-50[a|r] or s|u|e|c: c
|
||||
|
||||
Enter your Google Workspace admin email address? admin@domain.com
|
||||
|
||||
@@ -1059,35 +1098,41 @@ Service Account Private Key Authentication
|
||||
Authentication PASS
|
||||
Service Account Private Key age; Google recommends rotating keys on a routine basis
|
||||
Service Account Private Key age: 0 days PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels FAIL (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels FAIL (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
Some scopes FAILED!
|
||||
To authorize them, please go to:
|
||||
|
||||
@@ -1115,35 +1160,41 @@ System time status:
|
||||
Your system time differs from www.googleapis.com by less than 1 second PASS
|
||||
Service Account Private Key Authentication:
|
||||
Authentication PASS
|
||||
Domain-Wide Delegation authentication:, User: admin@domain.com, Scopes: 28
|
||||
https://mail.google.com/ PASS (1/28)
|
||||
https://sites.google.com/feeds PASS (2/28)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (3/28)
|
||||
https://www.googleapis.com/auth/calendar PASS (4/28)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (5/28)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (6/28)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (7/28)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (8/28)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (9/28)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (10/28)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (11/28)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (12/28)
|
||||
https://www.googleapis.com/auth/contacts PASS (13/28)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (14/28)
|
||||
https://www.googleapis.com/auth/datastudio PASS (15/28)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (16/28)
|
||||
https://www.googleapis.com/auth/documents PASS (17/28)
|
||||
https://www.googleapis.com/auth/drive PASS (18/28)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (19/28)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (20/28)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (21/28)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (22/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (23/28)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (24/28)
|
||||
https://www.googleapis.com/auth/keep PASS (25/28)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (26/28)
|
||||
https://www.googleapis.com/auth/tasks PASS (27/28)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (28/28)
|
||||
Domain-wide Delegation authentication:, User: admin@domain.com, Scopes: 34
|
||||
https://mail.google.com/ PASS (1/34)
|
||||
https://sites.google.com/feeds PASS (2/34)
|
||||
https://www.googleapis.com/auth/analytics.readonly PASS (3/34)
|
||||
https://www.googleapis.com/auth/apps.alerts PASS (4/34)
|
||||
https://www.googleapis.com/auth/calendar PASS (5/34)
|
||||
https://www.googleapis.com/auth/chat.delete PASS (6/34)
|
||||
https://www.googleapis.com/auth/chat.memberships PASS (7/34)
|
||||
https://www.googleapis.com/auth/chat.messages PASS (8/34)
|
||||
https://www.googleapis.com/auth/chat.spaces PASS (9/34)
|
||||
https://www.googleapis.com/auth/classroom.announcements PASS (10/34)
|
||||
https://www.googleapis.com/auth/classroom.coursework.students PASS (11/34)
|
||||
https://www.googleapis.com/auth/classroom.courseworkmaterials PASS (12/34)
|
||||
https://www.googleapis.com/auth/classroom.profile.emails PASS (13/34)
|
||||
https://www.googleapis.com/auth/classroom.rosters PASS (14/34)
|
||||
https://www.googleapis.com/auth/classroom.topics PASS (15/34)
|
||||
https://www.googleapis.com/auth/cloud-identity PASS (16/34)
|
||||
https://www.googleapis.com/auth/cloud-platform PASS (17/34)
|
||||
https://www.googleapis.com/auth/contacts PASS (18/34)
|
||||
https://www.googleapis.com/auth/contacts.other.readonly PASS (19/34)
|
||||
https://www.googleapis.com/auth/datastudio PASS (20/34)
|
||||
https://www.googleapis.com/auth/directory.readonly PASS (21/34)
|
||||
https://www.googleapis.com/auth/documents PASS (22/34)
|
||||
https://www.googleapis.com/auth/drive PASS (23/34)
|
||||
https://www.googleapis.com/auth/drive.activity PASS (24/34)
|
||||
https://www.googleapis.com/auth/drive.admin.labels PASS (25/34)
|
||||
https://www.googleapis.com/auth/drive.labels PASS (26/34)
|
||||
https://www.googleapis.com/auth/gmail.modify PASS (27/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.basic PASS (28/34)
|
||||
https://www.googleapis.com/auth/gmail.settings.sharing PASS (29/34)
|
||||
https://www.googleapis.com/auth/keep PASS (30/34)
|
||||
https://www.googleapis.com/auth/spreadsheets PASS (31/34)
|
||||
https://www.googleapis.com/auth/tasks PASS (32/34)
|
||||
https://www.googleapis.com/auth/userinfo.profile PASS (33/34)
|
||||
https://www.googleapis.com/auth/youtube.readonly PASS (34/34)
|
||||
All scopes PASSED!
|
||||
|
||||
Service Account Client name: SVCACCTID is fully authorized.
|
||||
@@ -1170,6 +1221,7 @@ Section: DEFAULT
|
||||
admin_email = ''
|
||||
api_calls_rate_check = false
|
||||
api_calls_rate_limit = 100
|
||||
api_calls_tries_limit = 10
|
||||
auto_batch_min = 0
|
||||
bail_on_internal_error_tries = 2
|
||||
batch_size = 50
|
||||
@@ -1237,6 +1289,10 @@ Section: DEFAULT
|
||||
output_dateformat = ''
|
||||
output_timeformat = ''
|
||||
people_max_results = 100
|
||||
print_agu_domains = ''
|
||||
print_cros_ous = ''
|
||||
print_cros_ous_and_children = ''
|
||||
process_wait_limit = 0
|
||||
quick_cros_move = false
|
||||
quick_info_user = False
|
||||
reseller_id = ''
|
||||
|
||||
@@ -24,11 +24,13 @@
|
||||
| Cloud Identity Free | 101001 |
|
||||
| Cloud Identity Premium | 101005 |
|
||||
| Cloud Search | 101035 |
|
||||
| Duet AI | 101047 |
|
||||
| Google Chrome Device Management | Google-Chrome-Device-Management |
|
||||
| Google Drive Storage | Google-Drive-storage |
|
||||
| Google Meet Global Dialing | 101036 |
|
||||
| Google Vault |Google-Vault |
|
||||
| Google Voice | 101033 |
|
||||
| Google Workspace Additional Storage | 101043 |
|
||||
| Google Workspace Archived User | 101034 |
|
||||
| Google Workspace for Education | 101031 |
|
||||
| Google Workspace for Education | 101037 |
|
||||
@@ -44,6 +46,7 @@
|
||||
| Cloud Identity Free | 1010010001 | cloudidentity |
|
||||
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
||||
| Cloud Search | 1010350001 | cloudsearch |
|
||||
| Duet AI | 1010470001 | duetai |
|
||||
| G Suite Basic | Google-Apps-For-Business | gsuitebasic |
|
||||
| G Suite Business | Google-Apps-Unlimited | gsuitebusiness |
|
||||
| G Suite Legacy | Google-Apps | standard |
|
||||
@@ -65,6 +68,7 @@
|
||||
| Google Voice Premier | 1010330002 | voicepremier |
|
||||
| Google Voice Standard | 1010330004 | voicestandard |
|
||||
| Google Voice Starter | 1010330003 | voicestarter |
|
||||
| Google Workspace Additional Storage | 1010430001 | gwas |
|
||||
| Google Workspace Business - Archived User | 1010340002 | gsuitebusinessarchived |
|
||||
| Google Workspace Business Plus | 1010020025 | wsbizplus |
|
||||
| Google Workspace Business Plus - Archived User | 1010340003 | wsbizplusarchived |
|
||||
@@ -92,6 +96,7 @@
|
||||
| Google Workspace for Education: Teaching and Learning Upgrade | 1010370001 | gwetlu |
|
||||
| Google Workspace Frontline Starter | 1010020030 | wsflw |
|
||||
| Google Workspace Frontline Standard | 1010020031 | wsflwstan |
|
||||
| Google Workspace Labs | 1010470002 | gwlabs | workspacelabs |
|
||||
|
||||
## Definitions
|
||||
```
|
||||
@@ -108,6 +113,8 @@
|
||||
101038 |
|
||||
101039 |
|
||||
101040 |
|
||||
101043 |
|
||||
101047 |
|
||||
Google-Apps |
|
||||
Google-Chrome-Device-Management |
|
||||
Google-Drive-storage |
|
||||
@@ -134,6 +141,7 @@
|
||||
cloudidentity | identity | 1010010001 |
|
||||
cloudidentitypremium | identitypremium | 1010050001 |
|
||||
cloudsearch | 1010350001 |
|
||||
duetai | 1010470001 |
|
||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 |
|
||||
@@ -149,6 +157,7 @@
|
||||
gwesstaff | workspaceeducationstandardstaff | 1010310006 |
|
||||
gwesstudent | workspaceeducationstandardstudent | 1010310007 |
|
||||
gwetlu | workspaceeducationupgrade | 1010370001 |
|
||||
gwlabs | workspacelabs | 1010470002
|
||||
meetdialing | googlemeetglobaldialing | 1010360001 |
|
||||
postini | gams | gsuitegams | gsuitepostini | gsuitemessagesecurity | Google-Apps-For-Postini |
|
||||
standard | free | Google-Apps |
|
||||
@@ -157,6 +166,7 @@
|
||||
voicepremier | gvpremier | googlevoicepremier | 1010330002 |
|
||||
voicestandard | gvstandard | googlevoicestandard | 1010330004 |
|
||||
voicestarter | gvstarter | googlevoicestarter | 1010330003 |
|
||||
wsas | plusstorage | 1010430001 |
|
||||
wsbizplus | workspacebusinessplus | 1010020025 |
|
||||
wsbizplusarchived | workspacebusinessplusarchived | 1010340003 |
|
||||
wsbizstan | workspacebusinessstandard | 1010020028 |
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
<CourseWorkIDList> ::= "<CourseWorkID>(,<CourseWorkID>)*"
|
||||
<CourseWorkStateList> ::= all|"<CourseWorkState>(,<CourseWorkState>)*"
|
||||
<CrOSIDList> ::= "<CrOSID>(,<CrOSID>)*"
|
||||
<DataStudioAssetIDList> ::= "<DataStudioAssetID>(,<DataStudioAssetID>)*"
|
||||
<DataStudioPermissionList> ::= "<DataStudioPermission>(,<DataStudioPermission>)*"
|
||||
<DeviceIDList> ::= "<DeviceID>(,<DeviceID>)*"
|
||||
<DeviceUserList> ::= "<DeviceUserID>(,<DeviceUserID>)*"
|
||||
<DomainNameList> ::= "<DomainName>(,<DomainName>)*"
|
||||
@@ -63,6 +61,8 @@
|
||||
<LabelIDList> ::= "<LabelID>(,<LabelID>)*"
|
||||
<LabelNameList> ::= "'<LabelName>'(,'<LabelName>')*"
|
||||
<LanguageList> ::= "<Language>(,<Language>)*"
|
||||
<LookerStudioAssetIDList> ::= "<LookerStudioAssetID>(,<LookerStudioAssetID>)*"
|
||||
<LookerStudioPermissionList> ::= "<LookerStudioPermission>(,<LookerStudioPermission>)*"
|
||||
<MatterItemList> ::= "<MatterItem>(,<MatterItem>)*"
|
||||
<MatterStateList> ::= "<MatterState>(,<MatterState>)*"
|
||||
<MessageIDList> ::= "<MessageID>(,<MessageID>)*"
|
||||
@@ -78,6 +78,7 @@
|
||||
<QueryBrowserList> ::= "<QueryBrowser>(,<QueryBrowser>)*"
|
||||
<QueryCrOSList> ::= "<QueryCrOS>(,<QueryCrOS>)*"
|
||||
<QueryDeviceList> ::= "<QueryDevice>(,<QueryDevice>)*"
|
||||
<QueryGroupList> ::= "<QueryGroup>(,<QueryGroup>)*"
|
||||
<QueryMobileList> ::= "<QueryMobile>(,<QueryMobile>)*"
|
||||
<QueryUserList> ::= "<QueryUser>(,<QueryUser>)*"
|
||||
<ResourceIDList> ::= "<ResourceID>(,<ResourceID>)*"
|
||||
@@ -92,10 +93,13 @@
|
||||
<SharedDriveIDList> ::= "<SharedDriveID>(,<SharedDriveID>)*"
|
||||
<StringList> ::= "<String>(,<String>)*"
|
||||
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
||||
<ThreadIDList> ::= "<ThreadID>(,<ThreadID>)*"
|
||||
<TimeList> ::= "<Time>(,<Time>)*"
|
||||
<URLList> ::= "<URL>(,<URL>)*"
|
||||
<UserList> ::= "<UserItem>(,<UserItem>)*"
|
||||
<YouTubeChannelIDList> ::= "<YouTubeChannelID>(,<YouTubeChannelID>)*"
|
||||
```
|
||||
## List quoting rules
|
||||
Items in a list can be separated by commas or spaces; if an item itself contains a comma, a space or a single quote, special quoting must be used.
|
||||
|
||||
@@ -112,7 +112,7 @@ You can redirect stdout and stderr to null and stderr can be redirected to stdou
|
||||
```
|
||||
<Redirect> ::=
|
||||
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[timestampcolumn <String>]
|
||||
[todrive <ToDriveAttribute>*] |
|
||||
redirect stdout <FileName> [multiprocess] [append] |
|
||||
@@ -141,8 +141,11 @@ subsequent GAM commands specify `append noheader`.
|
||||
The `charset <Charset>` subargument sets the character set of the CSV file; the default is the value of `charset`
|
||||
in `gam.cfg` which defaults to UTF-8.
|
||||
|
||||
The `columndelimiter <Character>` sets the intercolumn delimiter of the CSV file; the default value
|
||||
is the value of csv_output_column_delimiter` in `gam.cfg` which defaults to comma.
|
||||
The `columndelimiter <Character>` subargument sets the intercolumn delimiter of the CSV file; the default value
|
||||
is the value of `csv_output_column_delimiter` in `gam.cfg` which defaults to comma.
|
||||
|
||||
The `noescapechar <Boolean>` subargument controls whether `\` is used as an escape character when writing the CSV file; the default value
|
||||
is the value of `csv_output_no_escape_char` in `gam.cfg` which defaults to False.
|
||||
|
||||
The `quotechar <Character>` subargument sets the character used to quote fields in the CSV file
|
||||
that contaim special charactere; the default value is the value of `csv_output_quote_char` in `gam.cfg`
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
- [Manage mobile devices](#manage-mobile-devices)
|
||||
- [Display mobile devices](#display-mobile-devices)
|
||||
- [Print mobile devices](#print-mobile-devices)
|
||||
- [Display mobile device counts](#display-mobile-device-counts)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/admin-sdk/directory/reference/rest/v1/mobiledevices
|
||||
@@ -100,7 +101,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
## Print mobile devices
|
||||
```
|
||||
gam print mobile [todrive <ToDriveAttribute>*]
|
||||
[(query <QueryMobile>)|(queries <QueryMobileList>) (querytime.* <Time>)*]
|
||||
[(query <QueryMobile>)|(queries <QueryMobileList>) (querytime<String> <Time>)*]
|
||||
[orderby <MobileOrderByFieldName> [ascending|descending]]
|
||||
[basic|full|allfields] <MobileFieldName>* [fields <MobileFieldNameList>]
|
||||
[delimiter <Character>] [appslimit <Number>] [oneappperrow] [listlimit <Number>]
|
||||
@@ -150,3 +151,27 @@ 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 mobile device counts
|
||||
Display the number of mobile devices.
|
||||
```
|
||||
gam print mobile
|
||||
[(query <QueryMobile>)|(queries <QueryMobileList>) (querytime<String> <Time>)*]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print mobile showitemcountonly
|
||||
Getting all Mobile Devices, may take some time on a large Google Workspace Account...
|
||||
Got 100 Mobile Devices...
|
||||
Got 115 Mobile Devices
|
||||
115
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print mobile showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print mobile showitemcountonly
|
||||
```
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
- [Synchronize ChromeOS devices with an organizational unit](#synchronize-chromeos-devices-with-an-organizational-unit)
|
||||
- [Display organizational units](#display-organizational-units)
|
||||
- [Print organizational units](#print-organizational-units)
|
||||
- [Display orgamizational unit counts](#display-organizational-unit-counts)
|
||||
- [Display indented organizational unit tree](#display-indented-organizational-unit-tree)
|
||||
- [Special case handling for large number of organizational units](#special-case-handling-for-large-number-of-organizational-units)
|
||||
|
||||
@@ -70,15 +71,17 @@ See: [List Items](List-Items)
|
||||
Create, update and delete organization units.
|
||||
```
|
||||
gam create org|ou <OrgUnitPath> [description <String>]
|
||||
[parent <OrgUnitItem>] [inherit|noinherit|(blockinheritance <Boolean>)]
|
||||
[parent <OrgUnitItem>] [inherit|(blockinheritance False)]
|
||||
[buildpath]
|
||||
gam update org|ou <OrgUnitPath> [name <String>] [description <String>]
|
||||
[parent <OrgUnitItem>] [inherit|noinherit|(blockinheritance <Boolean>)]
|
||||
[parent <OrgUnitItem>] [inherit|(blockinheritance False)]
|
||||
gam delete org|ou <OrgUnitPath>
|
||||
gam update orgs|ous <OrgUnitEntity> [name <String>] [description <String>]
|
||||
[parent <OrgUnitItem>] [inherit|noinherit|(blockinheritance <Boolean>)]
|
||||
[parent <OrgUnitItem>] [inherit|(blockinheritance False)]
|
||||
gam delete orgs|ous <OrgUnitEntity>
|
||||
```
|
||||
Inheritance specifies whether sub-OUs of the specified OU inherit its settings.
|
||||
* `inherit|blockinheritance false` - Sub-OUs inherit settings from the specified OU; this is the default
|
||||
|
||||
## Add users to an organizational unit
|
||||
When adding users to an OU, Gam uses a batch method to speed up processing.
|
||||
@@ -235,6 +238,30 @@ Get file count summaries by OU; top level selector is ou, sub level selectors ar
|
||||
gam redirect csv ./TopLevelOUs.csv print ous showparent toplevelonly parentselector ou childselector ou_and_children fields orgunitpath
|
||||
gam redirect csv ./FileCounts.csv multiprocess csv ./TopLevelOUs.csv gam "~orgUnitSelector" "~orgUnitPath" print filecounts excludetrashed summary only summaryuser "~orgUnitPath"
|
||||
```
|
||||
## Display organizational unit counts
|
||||
Display the number of organizational units.
|
||||
```
|
||||
gam print orgs|ous
|
||||
[fromparent <OrgUnitItem>] [showparent [Boolean>]] [toplevelonly]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print orgs showitemcountonly
|
||||
Getting all Organizational Units, may take some time on a large Google Workspace Account...
|
||||
Got 98 Organizational Units
|
||||
98
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print orgs showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print orgs showitemcountonly
|
||||
```
|
||||
|
||||
## Display indented organizational unit tree
|
||||
```
|
||||
gam show orgtree [fromparent <OrgUnitItem>] [batchsuborgs [<Boolean>]]
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
[type <DriveFileACLType>] [role|notrole <DriveFileACLRole>]
|
||||
[allowfilediscovery|withlink <Boolean>]
|
||||
[emailaddress <RegularExpression>] [emailaddressList <EmailAddressList>]
|
||||
[permissionidlist <PermissionIDList>
|
||||
[name|displayname <String>]
|
||||
[domain|notdomain <RegularExpression>] [domainlist|notdomainlist <DomainNameList>]
|
||||
[expirationstart <Time>] [expirationend <Time>]
|
||||
@@ -77,6 +78,7 @@ In the `print/show drivefileacls` and `create/delete permissions` commands you c
|
||||
* `allowfilediscovery|withlink <Boolean>` - Whether a link is required or whether the file can be discovered through search.
|
||||
* `emailaddress <RegularExpression>` - For types user and group, the required email address.
|
||||
* `emailaddresslist <EmailAddressList>` - For types user and group, a list of required email addresses; any one of which must match.
|
||||
* `permissionidlist <PermissionIDListList>` - A list of required permission IDs; any one of which must match.
|
||||
* `name|displayname <RegularExpression>` - For types domain, user and group, the displayable name.
|
||||
* `domain <RegularExpression>` - For type domain, the required domain name. For types user and group, the required domain name in the email address.
|
||||
* `notdomain <RegularExpression>` - For type domain, any domain name that doesn't match. For types user and group, any domain name that doesn't match in the email address.
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
- [Introduction](#introduction)
|
||||
- [Requirements](#requirements)
|
||||
- [Installation - First time GAM installation](#installation---first-time-GAM-installation)
|
||||
- [Installation - Upgrading from a GAM version other than a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3](#installation---upgrading-from-a-gam-version-other-than-a-prior-version-of-gamadv-x-or-gamadv-xtd-or-gamadv-xtd3)
|
||||
- [Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3](#installation---upgrading-from-a-prior-version-of-gamadv-x-or-gamadv-xtd-or-gamadv-xtd3)
|
||||
|
||||
# Introduction
|
||||
GAMADV-XTD3 is a free, open source command line tool for Google Workspace Administrators to manage domain and user settings quickly and easily.
|
||||
GAMADV-XTD3 is a free, open source command line tool for Google Workspace (formerly G Suite) Administrators to manage domain and user settings quickly and easily.
|
||||
|
||||
GAMADV-XTD3 is built with Python 3; as Python 2 support ends on 2020-01-01, this is the version of Advanced GAM that new/existing users should install.
|
||||
GAMADV-XTD3 is built with Python 3.
|
||||
|
||||
This page provides simple instructions for downloading, installing and starting to use GAMADV-XTD3.
|
||||
|
||||
GAMADV-XTD3 requires paid, or Education/Non-profit, editions of Google Workspace. G Suite Legacy Free Edition has limited API support and not all GAM commands work.
|
||||
GAMADV-XTD3 runs on all versions of Google Workspace; Google Apps Free Edition has limited API support and not all GAM commands work.
|
||||
|
||||
GAMADV-XTD3 is a rewrite/extension of Jay Lee's [GAM], without his efforts, this version wouldn't exist.
|
||||
|
||||
GAMADV-XTD3 is backwards compatible with [GAM], meaning that if your command works with regular GAM, it will also work with GAMADV-XTD3. There may be differences in output, but the syntax is compatible.
|
||||
|
||||
# Documentation
|
||||
Basic GAM documentation is hosted in the [GitHub Wiki]. Documentation specifically for GAMADV-XTD3 is hosted in the [GitHub GAMADV-XTD3 Wiki] and in Gam*.txt files.
|
||||
Documentation for GAMADV-XTD3 is hosted in the [GitHub GAMADV-XTD3 Wiki] and in Gam*.txt files.
|
||||
|
||||
# Mailing List / Discussion group
|
||||
The GAM mailing list / discussion group is hosted on [Google Groups]. You can join the list and interact via email, or just post from the web itself.
|
||||
@@ -32,39 +26,48 @@ GAMADV-XTD3 is maintained by <a href="mailto:ross.scroggs@gmail.com">Ross Scrogg
|
||||
# Requirements
|
||||
To run all commands properly, GAMADV-XTD3 requires three things:
|
||||
* An API project which identifies your install of GAMADV-XTD3 to Google and keeps track of API quotas.
|
||||
* Authorization to act as your Google Workspace Administrator in order to perform management functions like add users, modify group settings and membership and pull domain reports.
|
||||
* Authorization to act as your G Suite Administrator in order to perform management functions like add users, modify group settings and membership and pull domain reports.
|
||||
* A special service account that is authorized to act on behalf of your users in order to modify user-specific settings and data such as Drive files, Calendars and Gmail messages and settings like signatures.
|
||||
|
||||
# Installation - First time GAM installation
|
||||
Use these steps if you have never used any version of GAM in your domain. They will create a GAM project
|
||||
and all necessary authentications.
|
||||
|
||||
* Download: [Downloads](Downloads)
|
||||
* Configuration: [GAM Configuration](gam.cfg)
|
||||
* Install: [How to Install Advanced GAM](How-to-Install-Advanced-GAM)
|
||||
| [Downloads] | [Configuration] | [Install] |
|
||||
| :---: | :---: | :---: |
|
||||
|
||||
# Installation - Upgrading from a GAM version other than a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3
|
||||
Use these steps if you have used any version of GAM in your domain. They will update your GAM project
|
||||
# Installation - Update Advanced GAM
|
||||
Use these steps to update your version of GAMADV-XTD3.
|
||||
|
||||
| [Downloads] | [Configuration] | [UpdateAdvanced] |
|
||||
| :---: | :---: | :---: |
|
||||
|
||||
# Installation - Upgrading from Standard GAM
|
||||
Use these steps if you have used any version of Standard GAM in your domain. They will update your GAM project
|
||||
and all necessary authentications.
|
||||
|
||||
* Download: [Downloads](Downloads)
|
||||
* Configuration: [GAM Configuration](gam.cfg)
|
||||
* Upgrade: [How to Upgrade from Standard GAM](How-to-Upgrade-from-Standard-GAM)
|
||||
| [Downloads] | [Configuration] | [UpgradeFromStandard] |
|
||||
| :---: | :---: | :---: |
|
||||
|
||||
# Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD or GAMADV-XTD3
|
||||
Use these steps if you already use GAMADV-X or GAMADV-XTD or GAMADV-XTD3. The updates may tell you to update your GAM project
|
||||
# Installation - Upgrading from a prior version of GAMADV-X or GAMADV-XTD
|
||||
Use these steps if you already use GAMADV-X or GAMADV-XTD. The updates may tell you to update your GAM project
|
||||
or authentications because new features have been included.
|
||||
|
||||
* Updates: [GAM Updates]
|
||||
* Download: [Downloads](Downloads)
|
||||
| [Updates] | [Downloads] | [UpgradeFromAdvanced] |
|
||||
| :---: | :---: | :---: |
|
||||
|
||||
# Multiple Versions
|
||||
You can install multiple versions of GAM and GAMADV-XTD3 in different parallel directories.
|
||||
|
||||
[GAM]: https://github.com/GAM-team/GAM
|
||||
[GitHub Releases]: https://github.com/taers232c/GAMADV-XTD3/releases
|
||||
[GitHub]: https://github.com/taers232c/GAMADV-XTD3/tree/master
|
||||
[GitHub Wiki]: https://github.com/GAM-team/GAM/wiki/
|
||||
[GitHub GAMADV-XTD3 Wiki]: https://github.com/taers232c/GAMADV-XTD3/wiki/
|
||||
[GitHub GAMADV-XTD3 Wiki]: https://github.com/taers232c/GAMADV-XTD3/wiki
|
||||
[Google Groups]: https://groups.google.com/group/google-apps-manager
|
||||
[GAM Updates]: https://github.com/taers232c/GAMADV-XTD3/wiki/GamUpdates
|
||||
|
||||
[Downloads]: https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads
|
||||
[Configuration]: https://github.com/taers232c/GAMADV-XTD3/wiki/gam.cfg
|
||||
[Install]: https://github.com/taers232c/GAMADV-XTD3/wiki/How-to-Install-Advanced-GAM
|
||||
[UpdateAdvanced]: https://github.com/taers232c/GAMADV-XTD3/wiki/How-to-Update-Advanced-GAM
|
||||
[UpgradeFromStandard]: https://github.com/taers232c/GAMADV-XTD3/wiki/How-to-Upgrade-from-Standard-GAM
|
||||
[Updates]: https://github.com/taers232c/GAMADV-XTD3/wiki/GAM-Updates
|
||||
[UpgradeFromAdvanced]: https://github.com/taers232c/GAMADV-XTD3/wiki/How-to-Upgrade-from-GAMADV-X-or-GAMADV-XTD
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Activity reports](#activity-reports)
|
||||
- [Find Shared Drives with no activity](#find-shared-drives-with-no-activity)
|
||||
- [Customer and user reports parameters](#customer-and-user-reports-parameters)
|
||||
- [Customer usage reports](#customer-usage-reports)
|
||||
- [Customer reports](#customer-reports)
|
||||
@@ -57,8 +58,9 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttributes>*]
|
||||
[filtertime.* <Time>] [filter|filters <String>]
|
||||
[event|events <EventNameList>] [ip <String>]
|
||||
[groupidfilter <String>]
|
||||
[maxactivities <Number>] [maxresults <Number>]
|
||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||
[countsonly [summary] [eventrowfilter]]
|
||||
(addcsvdata <FieldName> <String>)* [shownoactivities]
|
||||
```
|
||||
Select the application with `<ActivityApplicationName>`.
|
||||
|
||||
@@ -98,9 +100,21 @@ Limit to those users that are a member of at least one of a list of groups.
|
||||
Limit the total number of activites.
|
||||
* `maxactivities <Number>`
|
||||
|
||||
Limit the number of events per activity; this only applies when `countsonly` is False.
|
||||
* `maxevents <Number>`
|
||||
|
||||
Limit the number of activities downloaded per API call; infrequently used.
|
||||
* `maxresults <Number>`
|
||||
|
||||
Setting options `maxactivities 1 maxevents 1 maxresults 1` can be used to as efficiently as possible
|
||||
show the most recent activity/event; this can be useful when reporting drive activity for individual drive files.
|
||||
|
||||
Add additional columns of data from the command line to the output.
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
Display a row with a key value of `NoActivities` when there are no activities to report.
|
||||
* `shownoactivities`
|
||||
|
||||
By default, individual event details are displayed, these options modify what's displayed.
|
||||
* `countsonly` - Limit the display to the number of occurences of each event for each user
|
||||
* `countsonly summary` - Limit the display to the number of occurences of each event summarized across all users
|
||||
@@ -121,6 +135,43 @@ Number of files summarized across all users
|
||||
```
|
||||
gam config csv_output_row_filter "doc_title:regex:\.xyz" report drive event create yesterday countsonly summary eventrowfilter
|
||||
```
|
||||
## Find Shared Drives with no activity
|
||||
|
||||
Remember that activity events are only available for the past 180 days.
|
||||
|
||||
Get Shared Drives ID and Name
|
||||
```
|
||||
gam redirect csv ./SharedDrives.csv print shareddrives fields id,name
|
||||
```
|
||||
Options:
|
||||
* `maxactivities 1` - Limits the number of activities displayed for Shared Drives with activity.
|
||||
* `shownoactivities` - Displays a row for Shared Drives with no activity.
|
||||
* `addcsvdata shared_drive_id "~id"` adds the Shared Drive ID to the output.
|
||||
* `addcsvdata shared_drive_name "~name"` adds the Shared Drive name to the output.
|
||||
|
||||
Get activities with minimal activty data.
|
||||
```
|
||||
gam config csv_output_header_filter "name,id.time,shared_drive_id,shared_drive_name" redirect csv ./SharedDrivesActivity.csv multiprocess redirect stderr - multiprocess csv SharedDrives.csv gam report drive filter "shared_drive_id==~~id~~" maxactivities 1 shownoactivities addcsvdata shared_drive_id "~id" addcsvdata shared_drive_name "~name"
|
||||
|
||||
Example output from SharedDrivesActivity.csv:
|
||||
|
||||
name,id.time,shared_drive_id,shared_drive_name
|
||||
NoActivities,,0AERPpMc23znvUkPXYZ,Shared Drive 1
|
||||
view,2023-10-18T21:27:51-07:00,0AMhgLk82dhsuUkPXYZ,Shared Drive 2
|
||||
edit,2023-09-05T15:27:01-07:00,0AM8lpdkkJaKYUkPXYZ,Shared Drive 3
|
||||
```
|
||||
|
||||
Get activities with full activty data.
|
||||
```
|
||||
gam redirect csv ./SharedDrivesActivity.csv multiprocess redirect stderr - multiprocess csv SharedDrives.csv gam report drive filter "shared_drive_id==~~id~~" maxactivities 1 shownoactivities addcsvdata shared_drive_id "~id" addcsvdata shared_drive_name "~name"
|
||||
|
||||
Example output from SharedDrivesActivity.csv:
|
||||
|
||||
name,actor.callerType,actor.email,actor.key,actor.profileId,actor_is_collaborator_account,added_role,billable,destination_folder_id,destination_folder_title,doc_id,doc_title,doc_type,id.applicationName,id.customerId,id.time,id.uniqueQualifier,ipAddress,is_encrypted,membership_change_type,new_settings_state,old_settings_state,originating_app_id,owner,owner_is_shared_drive,owner_is_team_drive,owner_team_drive_id,primary_event,removed_role,shared_drive_id,shared_drive_name,shared_drive_settings_change_type,target,team_drive_id,team_drive_settings_change_type,type,visibility
|
||||
NoActivities,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0AERPpMc23znvUkPXYZ,Shared Drive 1,,,,,,
|
||||
view,,user1@domain.com,,100016760394505151666,False,,True,,,1SDNu-yzDapqjdJq4y4xKDUATJlOPRIBodpGGeGt1n4I,Digital Poetry Journal,document,drive,C03kt1z99,2023-10-18T21:27:51-07:00,-2856812962461786835,2600:1700:9580:f4b0:2127:3b2:dd21:3806,False,,,,263492796725,Shared Drive 2,True,True,0AMhgLk82dhsuUkPXYZ,True,,0AMhgLk82dhsuUkPXYZ,Shared Drive 2,,,0AMhgLk82dhsuUkPXYZ,,access,people_with_link
|
||||
edit,,user2@domain.com,,104066776037911136666,False,,True,,,1ZwHi_v-JVXH8W6zwgb7QYoUHrZD6NzIshJEqoTCaDD0,High School Scavenger Hunt,form,drive,C03kt1z99,2023-09-05T15:27:01-07:00,-1272095408714453395,50.204.178.246,False,,,,,Shared Drive 3,True,True,0AM8lpdkkJaKYUkPXYZ,True,,0AM8lpdkkJaKYUkPXYZ,Shared Drive 3,,,0AM8lpdkkJaKYUkPXYZ,,access,shared_internally
|
||||
```
|
||||
|
||||
## Customer and user reports parameters
|
||||
Display the valid parameters for customer and user reports.
|
||||
@@ -288,6 +339,9 @@ Select the users for whom information is desired.
|
||||
* `showorgunit` - Add a column labelled `orgUnitPath` to the output; an additional API call is made to get the email addresses of the users in `<OrgUnitPath>`
|
||||
* `select <UserTypeEntity>` - A selected collection of users, e.g., `select group staff@domain.com`; there is one API call per user
|
||||
|
||||
By default, when `user all` is specified (or no user specification in supplied), GAM backs up looking for data with a (basically) random user. If the randaom
|
||||
doesn't have any data, the command reports that no data was found. Use `allverifyuser <UserItem>` to specify a specific user to use to search for data.
|
||||
|
||||
Specify the report date; the default is today's date.
|
||||
* `date <Date>` - A single date; there is one API call
|
||||
* `range <Date> <Date>` - A range of dates; there is an API call per date
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Reseller
|
||||
- [API documentation](#api-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Manage Multiple Domains](#manage-multiple-domains)
|
||||
- [Definitions](#definitions)
|
||||
- [Manage Resold Customers](#manage-resold-customers)
|
||||
- [Display Resold Customers](#display-resold-customers)
|
||||
@@ -25,6 +26,11 @@ Prior to version 6.50.00, this is how the `seats <NumberOfSeats> <MaximumNumberO
|
||||
|
||||
Now, you can still use the above option which has been corrected or you can specify `seats <Number>` which will be properly passed in the correct form to the API based on plan name.
|
||||
|
||||
## Manage Multiple Domains
|
||||
Thanks to Duncan Isaksen-Loxton for a script to help manage multiple domains.
|
||||
|
||||
* See: https://gist.github.com/65/b5e9cee9b5812b487b8ae3e8256e262b
|
||||
|
||||
## Definitions
|
||||
```
|
||||
<CustomerID> ::= <String>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- [Display features](#display-features)
|
||||
- [Manage resources](#manage-resources)
|
||||
- [Display resources](#display-resources)
|
||||
- [Display resource counts](#display-resource-counts)
|
||||
- [Manage resource calendar ACLs](#manage-resource-calendar-acls)
|
||||
- [Display resource calendar ACLs](#display-resource-calendar-acls)
|
||||
|
||||
@@ -50,7 +51,9 @@ See [Collections of Items](Collections-of-Items)
|
||||
<FeatureNameList> ::= "'<FeatureName>'(,'<FeatureName>')*"
|
||||
<ResourceID> ::= <String>
|
||||
<ResourceIDList> ::= "<ResourceID>(,<ResourceID>)*"
|
||||
<ResourceEntity> ::= <ResourceIDList> | <FileSelector> | <CSVkmdSelector>
|
||||
<ResourceEntity> ::=
|
||||
<ResourceIDList> | <FileSelector> | <CSVkmdSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<BuildingFieldName> ::=
|
||||
address|
|
||||
@@ -163,7 +166,7 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
|
||||
## Manage features
|
||||
```
|
||||
gam create|add feature <Name>
|
||||
gam create|add feature name <Name>
|
||||
gam update feature <Name> name <Name>
|
||||
gam delete feature <Name>
|
||||
```
|
||||
@@ -192,10 +195,10 @@ When updating a resource, use the following options to manage the features.
|
||||
## Display resources
|
||||
```
|
||||
gam info resource <ResourceID>
|
||||
[acls]Documents/GoogleApps/GAM3/Docs/ [calendar]
|
||||
[acls] [noselfowner] [calendar]
|
||||
[formatjson]
|
||||
gam info resources <ResourceEntity>
|
||||
[acls]Documents/GoogleApps/GAM3/Docs/ [calendar]
|
||||
[acls] [noselfowner] [calendar]
|
||||
[formatjson]
|
||||
gam show resources
|
||||
[allfields|<ResourceFieldName>*|(fields <ResourceFieldNameList>)]
|
||||
@@ -243,6 +246,30 @@ Print all resources and their owners.
|
||||
gam config csv_output_row_filter "role:regex:owner" redirect csv Resource.csv print resources acls
|
||||
```
|
||||
|
||||
## Display resource counts
|
||||
Display the number of mobile devices.
|
||||
```
|
||||
gam print resources
|
||||
[query <String>]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print resources showitemcountonly
|
||||
Getting all Resource Calendars, may take some time on a large Google Workspace Account...
|
||||
Got 32 Resource Calendars: Back 50 - Video Cameras Class Set
|
||||
32
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print resources showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print resources showitemcountonly
|
||||
```
|
||||
|
||||
## Manage resource calendar ACLs
|
||||
These commands operate on a single resource calendar.
|
||||
```
|
||||
@@ -272,11 +299,14 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam resources <ResourceEntity> print acls|calendaracls [todrive <ToDriveAttribute>*]
|
||||
[noselfowner]
|
||||
[noselfowner] (addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
Option `noselfowner` suppresses the display of ACLs that reference the calendar itself as its owner.
|
||||
|
||||
Add additional columns of data from the command line to the output
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Running GAMADV-XTD3 securely on a Google Compute Engine
|
||||
- [Thanks](#Thanks)
|
||||
- [thanks](#thanks)
|
||||
- [Introduction](#introduction)
|
||||
- [Setup Steps](#setup-steps)
|
||||
|
||||
@@ -25,7 +25,7 @@ GAMADV-XTD3 version 6.50.00 or higher is required.
|
||||
* click on the Permissions tab.
|
||||
* click "Grant Access".
|
||||
* In the "New principals text box, paste the service account email you copied.
|
||||
* Give your service account the "Service Account Token Creator" and "View Service Accounts" roles.
|
||||
* Give your service account the "Service Account Key Admin", "Service Account Token Creator" and "View Service Accounts" roles.
|
||||
|
||||
4. [Create a Windows or Linux virtual machine](https://cloud.google.com/compute/docs/instances/create-start-instance).
|
||||
* You can choose a region physically close to you though you may be limited in your choices if you want to use the free tier.
|
||||
@@ -55,8 +55,8 @@ gam enable apis
|
||||
```
|
||||
You are given the option to enable them automatically or manually. Automatic enablement will ask you to authenticate to GAMADV-XTD3. You should authenticate as a user with rights to manage project APIs, probably a project owner. If you are not the project owner you can choose manual enablement and GAMADV-XTD3 will provide two or more URLs which you can send to the project owner. When the owner opens these URLs, they'll be prompted to enable all the APIs GAMADV-XTD3 needs.
|
||||
|
||||
9. Manage user data
|
||||
* Run ```gam user user@domain.com check serviceaccount``` and follow the instructions to perform domain-wide delegation.
|
||||
|
||||
10. Perform admin actions (manage users, groups, orgunits, Chrome devices, etc)
|
||||
9. Perform admin actions (manage users, groups, orgunits, Chrome devices, etc)
|
||||
* [Configure delegated admin service account (DASA)](https://github.com/taers232c/GAMADV-XTD3/wiki/Using-GAMADV-XTD3-with-a-delegated-admin-service-account); start at step 4.
|
||||
|
||||
10. Manage user data
|
||||
* Run ```gam user user@domain.com check serviceaccount``` and follow the instructions to perform domain-wide delegation.
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
<SchemaName> ::= <String>
|
||||
<FieldName> ::= <String>
|
||||
<SchemaNameList> ::= "<SchemaName>(,<SchemaName>)*"
|
||||
<SchemaEntity> ::= <SchemaNameList> | <FileSelector> | <CSVkmdSelector>
|
||||
<SchemaEntity> ::=
|
||||
<SchemaNameList> | <FileSelector> | <CSVkmdSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<SchemaFieldDefinition> ::=
|
||||
field <FieldName> [displayname <String>]
|
||||
|
||||
@@ -33,7 +33,9 @@ Added the option `mailbox <EmailAddress>` to `gam sendemail` to allow specifying
|
||||
<String>@<DomainName> |
|
||||
<String> <<String>@<DomainName>> # The outer <> around <String>@<DomainName> are literal, e.g., IT Group<group@domain.com>
|
||||
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::= <EmailAddressList> | <FileSelector> | <CSVkmdSelector>
|
||||
<EmailAddressEntity> ::=
|
||||
<EmailAddressList> | <FileSelector> | <CSVkmdSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users
|
||||
<RecipientEntity> ::= <EmailAddressEntity> | (select <UserTypeEntity>)
|
||||
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
|
||||
@@ -52,8 +54,7 @@ Added the option `mailbox <EmailAddress>` to `gam sendemail` to allow specifying
|
||||
(message|textmessage|htmlmessage <String>)|
|
||||
(file|textfile|htmlfile <FileName> [charset <Charset>])|
|
||||
(gdoc|ghtml <UserGoogleDoc>)|
|
||||
(gcsdoc|gcshtml <StorageBucketObjectName>)|
|
||||
(emlfile <FileName>)
|
||||
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
||||
```
|
||||
```
|
||||
<Time> ::=
|
||||
@@ -209,7 +210,7 @@ gam sendemail [recipient|to] <RecipientEntity>
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
@@ -265,7 +266,7 @@ gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>]
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
@@ -296,7 +297,7 @@ If `message` is not specified, the following value will be used:
|
||||
* `Hello #givenname# #familyname#,\n\nYou have a new account at #domain#\nAccount details:\n\nUsername\n#user#\n\nPassword\n#password#\n\n
|
||||
Start using your new account by signing in at\nhttps://www.google.com/accounts/AccountChooser?Email=#user#&continue=https://apps.google.com/user/hub\n`
|
||||
|
||||
If you want a language/organization specific message, use a template file: `message file <FileName> [charset <CharSet>]`
|
||||
If you want a language/organization specific message, use a template file: `message file <FileName> [charset <Charset>]`
|
||||
|
||||
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>`.
|
||||
@@ -344,7 +345,7 @@ gam <UserTypeEntity> sendemail recipient|to <RecipientEntity>
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
@@ -384,7 +385,7 @@ gam <UserTypeEntity> sendemail [from <EmailAddress>]
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
* https://developers.google.com/drive/api/v3/reference/teamdrives/list
|
||||
* https://support.google.com/a/answer/7374057
|
||||
* https://workspaceupdates.googleblog.com/2022/05/shared-drives-in-organizational-units-open-beta.html
|
||||
* https://support.google.com/a/users/answer/7338880
|
||||
|
||||
## Query documentation
|
||||
* https://developers.google.com/drive/api/v3/search-shareddrives
|
||||
@@ -89,17 +90,14 @@
|
||||
<DriveFilePermissionEntity> ::=
|
||||
<DriveFilePermissionList> |
|
||||
<JSONData> |
|
||||
<FileSelector> |
|
||||
<CSVFileSelector> |
|
||||
<CSVkmdSelector> |
|
||||
<CSVDataSelector>
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<DriveFilePermissionIDEntity> ::=
|
||||
<DriveFilePermissionIDList> |
|
||||
<JSONData> |
|
||||
<FileSelector> |
|
||||
<CSVFileSelector> |
|
||||
<CSVkmdSelector> |
|
||||
<CSVDataSelector>
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<DrivePermissionsFieldName> ::=
|
||||
additionalroles|
|
||||
|
||||
@@ -20,13 +20,15 @@
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<DomainNameList> ::= "<DomainName>(,<DomainName>)*"
|
||||
<DomainNameEntity> ::=
|
||||
<DomainNameList>|<FileSelector>|<CSVkmdSelector>| <CSVDataSelector>
|
||||
<DomainNameList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<SiteName> ::= [a-z,0-9,-]+
|
||||
<SiteItem> ::= [<DomainName>/]<SiteName>
|
||||
<SiteList> ::= "<SiteItem>(,<SiteItem>)*"
|
||||
<SiteEntity> ::=
|
||||
<SiteList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<SiteList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<SiteACLRole> ::= editor|owner|reader|writer
|
||||
<SiteACLRoleList> ::= "<SiteACLRole>(,<SiteACLRole>)*"
|
||||
@@ -43,7 +45,8 @@
|
||||
domain:<DomainName>|domain|default
|
||||
<SiteACLScopeList> ::= "<SiteACLScope>(,<SiteACLScope>)*"
|
||||
<SiteACLScopeEntity> ::=
|
||||
<SiteACLScopeList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<SiteACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
```
|
||||
## Manage classic sites
|
||||
```
|
||||
|
||||
@@ -130,8 +130,11 @@
|
||||
relation.<RelationSubfieldName>.<RelationSubfieldName>.<String>|
|
||||
sshkeys.<SSHkeysSubfieldName>.<SSHkeysSubfieldName>.<String>|
|
||||
website.<WebsiteSubfieldName>.<WebsiteSubfieldName>.<String>
|
||||
<UserReplacementField> ::=
|
||||
photourl
|
||||
<Tag> ::= <String>
|
||||
<UserReplacement> ::=
|
||||
(field:<UserReplacementField>)|
|
||||
(field:<UserReplacementFieldSubfield>)|
|
||||
(field:<UserReplacementFieldSubfieldMatchSubfield>)|
|
||||
(schema:<SchemaName>.<FieldName>)|
|
||||
@@ -145,7 +148,7 @@ This command allows simple text replacement in the message.
|
||||
```
|
||||
gam sendemail <EmailAddressEntity> [from <UserItem>] [replyto <EmailAddress>]
|
||||
[cc <EmailAddressEntity>] [bcc <EmailAddressEntity>] [singlemessage [<Boolean>]]
|
||||
[subject <String>] [message <String>|(file <FileName> [charset <CharSet>])]
|
||||
[subject <String>] [message <String>|(file <FileName> [charset <Charset>])]
|
||||
(replace <Tag> <String>)* [html [<Boolean>]] (attach <FileName>)*
|
||||
```
|
||||
* Every instance of `{Tag}` in the message will be replaced by `<String>`.
|
||||
@@ -162,30 +165,30 @@ These commands allow simple text replacement in the message/signature as well as
|
||||
```
|
||||
gam create user <EmailAddress> <UserAttribute>*
|
||||
[notify <EmailAddress>] [subject <String>]
|
||||
[message <String>|(file <FileName> [charset <CharSet>])] [html [<Boolean>]]
|
||||
[message <String>|(file <FileName> [charset <Charset>])] [html [<Boolean>]]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
gam update user <UserItem> <UserAttribute>
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName>] [clearschema <SchemaName>.<FieldName>]
|
||||
[createifnotfound] [notify <EmailAddress>] [subject <String>]
|
||||
[message <String>|(file <FileName> [charset <CharSet>])] [html [<Boolean>]]
|
||||
[message <String>|(file <FileName> [charset <Charset>])] [html [<Boolean>]]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
|
||||
gam <UserTypeEntity> draft message (<SMTPDateHeader> <Time>)*
|
||||
(<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
(textmessage|message <String>)|(textfile|file <FileName> [charset <CharSet>])
|
||||
(htmlmessage <String>)|(htmlfile <FileName> [charset <CharSet>])
|
||||
(replace <Tag> <UserReplacement>)* (attach <FileName> [charset <CharSet>])*
|
||||
(textmessage|message <String>)|(textfile|file <FileName> [charset <Charset>])
|
||||
(htmlmessage <String>)|(htmlfile <FileName> [charset <Charset>])
|
||||
(replace <Tag> <UserReplacement>)* (attach <FileName> [charset <Charset>])*
|
||||
gam <UserTypeEntity> import message (<SMTPDateHeader> <Time>)*
|
||||
(<SMTPHeader> <String>)*
|
||||
(header <String> <String>)*
|
||||
(addlabel <LabelName>)*
|
||||
(textmessage <String>)|(textfile <FileName> [charset <CharSet>])
|
||||
(htmlmessage <String>)|(htmlfile <FileName> [charset <CharSet>])
|
||||
(textmessage <String>)|(textfile <FileName> [charset <Charset>])
|
||||
(htmlmessage <String>)|(htmlfile <FileName> [charset <Charset>])
|
||||
(replace <Tag> <UserReplacement>)* (attach <FileName>)*
|
||||
[deleted [<Boolean>]] [nevermarkspam [<Boolean>]]
|
||||
[processforcalendar [<Boolean>]]
|
||||
@@ -194,19 +197,19 @@ gam <UserTypeEntity> insert message
|
||||
(<SMTPHeader> <String>)*
|
||||
(header <String> <String>)*
|
||||
(addlabel <LabelName>)*
|
||||
(textmessage <String>)|(textfile <FileName> [charset <CharSet>])
|
||||
(htmlmessage <String>)|(htmlfile <FileName> [charset <CharSet>])
|
||||
(textmessage <String>)|(textfile <FileName> [charset <Charset>])
|
||||
(htmlmessage <String>)|(htmlfile <FileName> [charset <Charset>])
|
||||
(replace <Tag> <UserReplacement>)* (attach <FileName>)*
|
||||
[deleted [<Boolean>]]
|
||||
|
||||
gam <UserTypeEntity> [create|add] sendas <EmailAddress> <String>
|
||||
[signature|sig <String>|(file <FileName> [charset <CharSet>])
|
||||
[signature|sig <String>|(file <FileName> [charset <Charset>])
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
[html [<Boolean>]] [replyto <EmailAddress>]
|
||||
[default] [treatasalias <Boolean>]
|
||||
|
||||
gam <UserTypeEntity> update sendas <EmailAddress>
|
||||
[name <String>] [signature|sig <String>|(file <FileName> [charset <CharSet>])
|
||||
[name <String>] [signature|sig <String>|(file <FileName> [charset <Charset>])
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
|
||||
@@ -216,7 +219,7 @@ gam <UserTypeEntity> signature|sig <String>|(file <FileName> [charset <Charset>]
|
||||
[default] [primary] [treatasalias <Boolean>]
|
||||
|
||||
gam <UserTypeEntity> vacation <TrueValues> subject <String>
|
||||
[message <String>|(file <FileName> [charset <CharSet>])]
|
||||
[message <String>|(file <FileName> [charset <Charset>])]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
[html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
|
||||
[startdate <Date>|Started] [enddate <Date>|NotSpecified]
|
||||
|
||||
@@ -132,6 +132,9 @@ todrive_nobrowser
|
||||
todrive_noemail
|
||||
Enable/disable sending an email when todrive is specified
|
||||
Default: True
|
||||
todrive_no_escape_char
|
||||
When writing a CSV file to Google Drive, should `\` be ignored as an escape character.
|
||||
Default: True
|
||||
todrive_parent
|
||||
Parent folder for CSV files when todrive is specified;
|
||||
can be id:<DriveFolderID> or <DriveFolderName>
|
||||
@@ -180,6 +183,7 @@ direct the uploaded file to a particular user and location and add a timestamp t
|
||||
(tdlocale <Locale>)|
|
||||
(tdnobrowser [<Boolean>])|
|
||||
(tdnoemail [<Boolean>])|
|
||||
(tdnoescapechar [<Boolean>])|
|
||||
(tdparent (id:<DriveFolderID>)|<DriveFolderName>)|
|
||||
(tdretaintitle [<Boolean>])|
|
||||
(tdshare <EmailAddress> commenter|reader|writer)|
|
||||
@@ -233,6 +237,9 @@ If `tdfileid <DriveFileID>` is not specified, a new file is created.
|
||||
* `tdnobrowser` - If False, a browser is opened to view the file uploaded to Google Drive; if not specified, the `todrive_nobrowser` value from gam.cfg is used.
|
||||
* `tdnoemail` - If False, an email is sent to `tduser` informing them of name and URL of the uploaded file; if not specified, the `todrive_noemail` value from gam.cfg is used.
|
||||
|
||||
## Escape character
|
||||
* `tdnoescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `todrive_no_escape_char` from `gam.cfg` will be used
|
||||
|
||||
## Local copy
|
||||
* `tdlocalcopy` - Should a local copy of the CSV file be saved in addition to the file uploaded to Google Drive; if not specified, the `todrive_localcopy` value from gam.cfg is used.
|
||||
|
||||
@@ -265,7 +272,7 @@ If `tdfileid <DriveFileID>` is not specified, a new file is created.
|
||||
You can specify `todrive` options in conjunction with `redirect csv`.
|
||||
```
|
||||
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[todrive <ToDriveAttribute>*]
|
||||
```
|
||||
If you are doing `redirect csv <FileName> multiprocess`, it is more efficient to specify `todrive <ToDriveAttribute>*` as part of
|
||||
@@ -274,6 +281,8 @@ the redirect as verification of the `todrive` settings, which can invole several
|
||||
`columndelimiter <Character>` and `quotechar <Character>` will not generally be used with `todrive` as
|
||||
Google Sheets only recognizes `,` as the column delimiter and `"` as the quote character.
|
||||
|
||||
`noescapechar true` will generally be used with `todrive` as Google Sheets does not recognize `\\` as an escaped `\`.
|
||||
|
||||
## Examples
|
||||
Generate a list of user IDs and names, title the file "User IDs and Names", upload it to the "GAM Reports" folder of usermgr@domain.com, add a timestamp to the title.
|
||||
```
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
## API documentation
|
||||
* https://support.google.com/a/answer/6178640
|
||||
* https://support.google.com/a/answer/11112794
|
||||
* https://cloud.google.com/identity/docs/how-to/manage-user-invitations
|
||||
* https://cloud.google.com/identity/docs/reference/rest/v1beta1/customers.userinvitations
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Users - Analytics Admin
|
||||
- [API documentation](#api-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Display Analytic Accounts](#display-analytic-accounts)
|
||||
- [Display Analytic Account Summaries](#display-analytic-account-summaries)
|
||||
- [Display Analytic Properties](#display-analytic-properties)
|
||||
@@ -19,6 +19,9 @@ gam update project
|
||||
gam user user@domain.com check serviceaccount
|
||||
```
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
|
||||
## Display Analytic Accounts
|
||||
```
|
||||
gam <UserTypeEntity> show analyticaccounts
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Users - Application Specific Passwords
|
||||
- [API documentation](#api-documentation)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Manage application specific passwords](#manage-application-specific-passwords)
|
||||
- [Display application specific passwords](#display-application-specific-passwords)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Users - Backup Verification Codes
|
||||
- [API documentation](#api-documentation)
|
||||
- [Definitions](#definitions)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Manage backup verification codes](#manage-backup-verification-codes)
|
||||
- [Display backup verification codes](#display-backup-verification-codes)
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Users - Calendars - Access
|
||||
- [Notes](#Notes)
|
||||
- [API documentation](#api-documentation)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Calendar selection](#calendar-selection)
|
||||
- [Manage calendar access](#manage-calendar-access)
|
||||
@@ -99,7 +98,7 @@ gam <UserTypeEntity> add calendaracls <UserCalendarEntity>
|
||||
gam <UserTypeEntity> update calendaracls <UserCalendarEntity>
|
||||
<CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||
gam <UserTypeEntity> delete calendaracls <UserCalendarEntity>
|
||||
<CalendarACLRole>] <CalendarACLScopeEntity>
|
||||
[<CalendarACLRole>] <CalendarACLScopeEntity>
|
||||
```
|
||||
By default, when you add or update a calendar ACL, notification is sent to the members referenced in the `<CalendarACLScopeEntity>`.
|
||||
Use `sendnotifications false` to suppress sending the notification.
|
||||
@@ -118,11 +117,14 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam <UserTypeEntity> print calendaracls <UserCalendarEntity> [todrive <ToDriveAttribute>*]
|
||||
[noselfowner]
|
||||
[noselfowner] (addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
Option `noselfowner` suppresses the display of ACLs that reference the calendar itself as its owner.
|
||||
|
||||
Add additional columns of data from the command line to the output
|
||||
* `addcsvdata <FieldName> <String>`
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Users - Calendars - Events
|
||||
- [API documentation](#api-documentation)
|
||||
- [Python Regular Expressions](Python-Regular-Expressions) Search function
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Recurrence rules](#recurrence-rules)
|
||||
- [Event colors](#event-colors)
|
||||
@@ -11,17 +10,22 @@
|
||||
- [Update calendar events](#update-calendar-events)
|
||||
- [Add calendar attendees](#add-calendar-attendees)
|
||||
- [Update calendar attendees](#update-calendar-attendees)
|
||||
- [Specify calendar attendees with JSON data](#specify-calendar-attendees-with-JSON-data)
|
||||
- [Specify calendar attendees with JSON data](#specify-calendar-attendees-with-json-data)
|
||||
- [Delete selected calendar events](#delete-selected-calendar-events)
|
||||
- [Delete all calendar events](#delete-all-calendar-events)
|
||||
- [Move calendar events to another calendar](#move-calendar-events-to-another-calendar)
|
||||
- [Empty calendar trash](#empty-calendar-trash)
|
||||
- [Display calendar events](#display-calendar-events)
|
||||
- [Update calendar event attendees](#update-calendar-event-attendees)
|
||||
- [Status events](#status-events)
|
||||
- [Focus time events](#focus-time-events)
|
||||
- [Out of officeevents](#out-of-office-events)
|
||||
- [Working location events](#working-location-events)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/calendar/v3/reference/events
|
||||
* https://developers.google.com/calendar/v3/reference/events/import
|
||||
* https://developers.google.com/calendar/api/guides/working-hours-and-location
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
@@ -44,7 +48,7 @@
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
|
||||
<CSVFileSelector> ::=
|
||||
@@ -53,7 +57,7 @@
|
||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||
(gcscsv(:<FieldName>)+ <StorageBucketObjectName>)|
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [quotechar <Character>]
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
[delimiter <Character>]
|
||||
@@ -90,8 +94,9 @@
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::=
|
||||
<EmailAddressList>|<FileSelector>|<CSVFileSelector>|
|
||||
<CSVkmdSelector>|<CSVDataSelector>
|
||||
<EmailAddressList> | <FileSelector> | <CSVFileSelector> |
|
||||
<CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users
|
||||
<CalendarItem> ::= <EmailAddress>
|
||||
<CalendarList> ::= "<CalendarItem>(,<CalendarItem>)*"
|
||||
<CourseAlias> ::= <String>
|
||||
@@ -125,7 +130,7 @@
|
||||
(resource <ResourceID>)|
|
||||
(resources <ResourceIDList>)|
|
||||
((calendars <CalendarList>)|<FileSelector>|<CSVFileSelector>|
|
||||
<CSVkmdSelector>|<CSVDataSelector>)|
|
||||
<CSVkmdSelector> | <CSVDataSelector>)|
|
||||
<CalendarSelectProperty>+
|
||||
```
|
||||
```
|
||||
@@ -162,12 +167,21 @@
|
||||
creator.id|
|
||||
creator.self
|
||||
|
||||
<EventFocusTimePropertiesSubfieldName> ::=
|
||||
focustimeproperties.chatstatus|
|
||||
focustimeproperties.declinemode|
|
||||
focustimeproperties.declinemessage
|
||||
|
||||
<EventOrganizerSubfieldName> ::=
|
||||
organizer.displayname|
|
||||
organizer.email|
|
||||
organizer.id|
|
||||
organizer.self
|
||||
|
||||
<EventOutOfOfficePropertiesSubfieldName> ::=
|
||||
outofoffice.declinemode|
|
||||
outofoffice.declinemessage
|
||||
|
||||
<EventWorkingLocationPropertiesSubfieldName> ::=
|
||||
workinglocationproperties.homeoffice|
|
||||
workinglocationproperties.customlocation|
|
||||
@@ -191,6 +205,7 @@
|
||||
endtimeunspecified|
|
||||
extendedproperties|
|
||||
eventtype|
|
||||
<EventFocusTimePropertiesSubfieldName>
|
||||
gadget|
|
||||
guestscaninviteothers|
|
||||
guestscanmodify|
|
||||
@@ -204,6 +219,7 @@
|
||||
organizer|
|
||||
<EventOrganizerSubfieldName>|
|
||||
originalstart|originalstarttime|
|
||||
<EventOutOfOfficePropertiesSubfieldName>
|
||||
privatecopy|
|
||||
recurrence|
|
||||
recurringeventid|
|
||||
@@ -224,9 +240,17 @@
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
```
|
||||
```
|
||||
<EventType> ::=
|
||||
default|
|
||||
focustime|
|
||||
outofoffice|
|
||||
workinglocation
|
||||
<EventTypeList> ::= "<EventType>(,<EventType>)*"
|
||||
|
||||
<EventSelectProperty> ::=
|
||||
(after|starttime|timemin <Time>)|
|
||||
(before|endtime|timemax <Time>)|
|
||||
(eventtype|eventtypes <EventTypeList>)|
|
||||
(query <QueryCalendar>)|
|
||||
(privateextendedproperty <String>)|
|
||||
(sharedextendedproperty <String>)|
|
||||
@@ -246,6 +270,7 @@
|
||||
(matchfield location <RegularExpression>)|
|
||||
(matchfield organizeremail <RegularExpression>)|
|
||||
(matchfield organizername <RegularExpression>)|
|
||||
(matchfield organizerself <Boolean>)|
|
||||
(matchfield status <RegularExpression>)|
|
||||
(matchfield summary <RegularExpression>)|
|
||||
(matchfield transparency <RegularExpression>)|
|
||||
@@ -255,7 +280,7 @@
|
||||
(id|eventid <EventId>) |
|
||||
(event|events <EventIdList> |
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVSubkeySelector> | <CSVDataSelector>)
|
||||
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<EventSelectEntity> ::=
|
||||
(<EventSelectProperty>+ <EventMatchProperty>*)
|
||||
|
||||
@@ -271,6 +296,7 @@
|
||||
<TimeZone> ::= <String>
|
||||
|
||||
<EventAttribute> ::=
|
||||
(allday <Date>)|
|
||||
(anyonecanaddself [<Boolean>])|
|
||||
(attachment <String> <URL>)|
|
||||
(attendee <EmailAddress>)|
|
||||
@@ -279,7 +305,7 @@
|
||||
(color <EventColorName>)|
|
||||
(colorindex|colorid <EventColorIndex>)|
|
||||
(description <String>)|
|
||||
(end (allday <Date>)|<Time>)|
|
||||
(end|endtime (allday <Date>)|<Time>)|
|
||||
(guestscaninviteothers <Boolean>)|
|
||||
guestscantinviteothers|
|
||||
(guestscanmodify <Boolean>)|
|
||||
@@ -294,16 +320,18 @@
|
||||
(optionalattendee <EmailAddress>)|
|
||||
(originalstart|originalstarttime (allday <Date>)|<Time>)|
|
||||
(privateproperty <PropertyKey> <PropertyValue>)|
|
||||
(range <Date> <Date>)|
|
||||
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
||||
(reminder <Number> email|popup))|
|
||||
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
||||
(sequence <Integer>)|
|
||||
(sharedproperty <PropertyKey> <PropertyValue>)|
|
||||
(source <String> <URL>)|
|
||||
(start (allday <Date>)|<Time>)|
|
||||
(start|starttime (allday <Date>)|<Time>)|
|
||||
(status confirmed|tentative|cancelled)|
|
||||
(summary <String>)|
|
||||
tentative|
|
||||
(timerange <Time> <Time>)|
|
||||
(timezone <TimeZone>)|
|
||||
(transparency opaque|transparent)|
|
||||
(visibility default|public|private)
|
||||
@@ -321,8 +349,8 @@ The following attributes are equivalent:
|
||||
|
||||
<EventUpdateAttribute> ::=
|
||||
<EventAttribute>|
|
||||
clearattendees|
|
||||
clearattachments|
|
||||
clearattendees|
|
||||
clearhangoutsmeet|
|
||||
(clearprivateproperty <PropertyKey>)|
|
||||
(clearsharedproperty <PropertyKey>)|
|
||||
@@ -353,10 +381,12 @@ This is dense reading; a simpler approach is to define a test event in Google Ca
|
||||
the recurrence rule that you want, then use `gam calendar <EmailAddress> info events eventid <EventId>` to get the recurrence rule and use it in subsequent commands.
|
||||
|
||||
```
|
||||
RRULE:FREQ=DAILY
|
||||
RRULE:FREQ=DAILY;COUNT=30
|
||||
RRULE:FREQ=WEEKLY;BYDAY=WE
|
||||
RRULE:FREQ=WEEKLY;WKST=SU;COUNT=13;BYDAY=WE
|
||||
RRULE:FREQ=DAILY - Daily
|
||||
RRULE:FREQ=DAILY;COUNT=30 - Daily for 30 days
|
||||
RRULE:FREQ=WEEKLY - Weekly on the same day of the week as the starting day; e.g., every Wednesday
|
||||
RRULE:FREQ=WEEKLY;COUNT=13 - Weekly on the same day of the week as the starting day; e.g., every Wednesday, for 13 weeks
|
||||
RRULE:FREQ=MONTHLY - Monthly on the same day of the month as the starting day; e.g., every 15th of the month
|
||||
RRULE:FREQ=MONTHLY;BYDAY=4TH - Monthly on the fourth instance of the starting day; e.g., every 4th Thursday
|
||||
```
|
||||
|
||||
## Event colors
|
||||
@@ -397,6 +427,7 @@ If none of the following options are selected, all events are selected.
|
||||
The Google Calendar API processes `<EventSelectProperty>*`; you may specify none or multiple properties.
|
||||
* `after|starttime|timemin <Time>` - Lower bound (inclusive) for an event's end time to filter by. If timeMax is set, timeMin must be smaller than timeMax.
|
||||
* `before|endtime|timemax <Time>` - Upper bound (exclusive) for an event's start time to filter by. If timeMin is set, timeMax must be greater than timeMin.
|
||||
* `eventtypes <EventTypeList>` - Select events based on their type.
|
||||
* `query <QueryCalendar>` - Free text search terms to find events that match these terms in any field, except for extended properties
|
||||
* `privateextendedproperty <String>` - A required private property; `<String>` must be of the form `propertyName=value`
|
||||
* `sharedextendedproperty <String>` - A required shared property; `<String>` must be of the form `propertyName=value`
|
||||
@@ -540,8 +571,8 @@ No events are deleted unless you specify the `doit` option; omit `doit` to verif
|
||||
|
||||
When events are deleted from a calendar, they are moved to the calendar's trash and are only permanently deleted (purged) after 30 days.
|
||||
Following a suggestion here (https://stackoverflow.com/questions/41043053/how-to-empty-calendar-trash-via-google-services) you can permanently delete
|
||||
calendar events. This is achieved by creating a temporary calendar, deleting the events, moving the deleted events to the temporary calendar
|
||||
and then deleting the temporary calendar.
|
||||
calendar events with `purge events`. This is achieved by creating a temporary calendar, deleting the events, moving the deleted events to the temporary calendar
|
||||
and then deleting the temporary calendar.
|
||||
|
||||
## Delete all calendar events
|
||||
For a user's primary calendar:
|
||||
@@ -554,13 +585,6 @@ gam <UserTypeEntity> delete events <UserCalendarEntity> [doit] [<EventNotificati
|
||||
```
|
||||
No events are deleted unless you specify the `doit` option; omit `doit` to verify that you properly selected the events to delete.
|
||||
|
||||
## Move calendar events to another calendar
|
||||
Generally you won't move all events from one calendar to another; typically, you'll move events created by the event creator
|
||||
using `matchfield creatoremail <RegularExpression>` in conjunction with other `<EventSelectProperty>` and `<EventMatchProperty>` options.
|
||||
```
|
||||
gam <UserTypeEntity> move events <UserCalendarEntity> [<EventEntity>] destination|to <CalendarItem> [<EventNotificationAttribute>]
|
||||
```
|
||||
|
||||
## Empty calendar trash
|
||||
A user signed in to Google Calendar can empty the calendar trash but there is no direct API support for this operation.
|
||||
To empty the calendar trash a temporary calendar is created, the deleted events are moved to the temporary calendar and then the temporary calendar is deleted.
|
||||
@@ -682,3 +706,175 @@ option causes GAM to make two updates to the attendee list; the first removes th
|
||||
the second adds the primary email.
|
||||
|
||||
The attendee changes are displayed but not processed unless `doit` is specified.
|
||||
|
||||
## Status events
|
||||
|
||||
## Focus time events
|
||||
|
||||
## Manage focus time events
|
||||
You can create and delete focus time events; they can not be updated.
|
||||
To update a working location event, delete the working location event and recreate it.
|
||||
```
|
||||
gam <UserTypeEntity> create focustime
|
||||
[chatstatus available|donotdisturb]|
|
||||
[declinemode none|all|new] [declinemessage <String>]|
|
||||
(timerange <Time> <Time>)+
|
||||
|
||||
gam <UserTypeEntity> delete focustime
|
||||
(timerange <Time> <Time>)+
|
||||
```
|
||||
|
||||
focus time events span a time range:
|
||||
* `timerange <Time> <Time>` - A time range, may span multiple days
|
||||
|
||||
## Display focus time events
|
||||
```
|
||||
gam <UserTypeEntity> show focustime
|
||||
(timerange <Time> <Time>)+
|
||||
[showdayofweek]
|
||||
[formatjson]
|
||||
```
|
||||
`showdayofweek` displays `dayOfWeek` when event start and end times are displayed.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print focustime
|
||||
(timerange <Time> <Time>)+
|
||||
[showdayofweek]
|
||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
`showdayofweek` displays columns `start.dayOfWeek` and `end.dayOfWeek` when event start and end times are displayed.
|
||||
|
||||
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, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
||||
|
||||
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.
|
||||
|
||||
## Out of office events
|
||||
|
||||
## Manage out of office events
|
||||
You can create and delete out of office events; they can not be updated.
|
||||
To update a working location event, delete the working location event and recreate it.
|
||||
```
|
||||
gam <UserTypeEntity> create outofoffice
|
||||
[declinemode none|all|new] [declinemessage <String>]|
|
||||
(timerange <Time> <Time>)+
|
||||
|
||||
gam <UserTypeEntity> delete outofoffice
|
||||
(timerange <Time> <Time>)+
|
||||
```
|
||||
|
||||
out of office events span a time range:
|
||||
* `timerange <Time> <Time>` - A time range, may span multiple days
|
||||
|
||||
## Display out of office events
|
||||
```
|
||||
gam <UserTypeEntity> show outofoffice
|
||||
(timerange <Time> <Time>)+
|
||||
[showdayofweek]
|
||||
[formatjson]
|
||||
```
|
||||
`showdayofweek` displays `dayOfWeek` when event start and end times are displayed.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print outofoffice
|
||||
(timerange <Time> <Time>)+
|
||||
[showdayofweek]
|
||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
`showdayofweek` displays columns `start.dayOfWeek` and `end.dayOfWeek` when event start and end times are displayed.
|
||||
|
||||
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, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
||||
|
||||
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.
|
||||
|
||||
## Working location events
|
||||
|
||||
## Manage working location events
|
||||
You can create and delete working location events; they can not be updated.
|
||||
To update a working location event, delete the working location event and recreate it.
|
||||
```
|
||||
gam <UserTypeEntity> create workinglocation
|
||||
(home|
|
||||
(custom <String>)|
|
||||
(office <String> [building|buildingid <String>] [floor|floorname <String>]
|
||||
[section|floorsection <String>] [desk|deskcode <String>]))
|
||||
((date yyyy-mm-dd)|
|
||||
(range yyyy-mm-dd yyyy-mm-dd)|
|
||||
(daily yyyy-mm-dd <Number>)|
|
||||
(weekly yyyy-mm-dd <Number>)|
|
||||
(timerange <Time> <Time>))+
|
||||
|
||||
gam <UserTypeEntity> delete workinglocation
|
||||
((date yyyy-mm-dd)|
|
||||
(range yyyy-mm-dd yyyy-mm-dd)|
|
||||
(daily yyyy-mm-dd <Number>)|
|
||||
(weekly yyyy-mm-dd <Number>)|
|
||||
(timerange <Time> <Time>))+
|
||||
```
|
||||
|
||||
Use one of `home`, `custom <String>` and `office <String>` to specify the working location event label.
|
||||
|
||||
Working location events are either single all day events or span a time range:
|
||||
* `date yyyy-mm-dd` - A specific day
|
||||
* `range yyyy-mm-dd yyyy-mm-dd` - Every day in the range
|
||||
* `daily yyyy-mm-dd <Number>` - Every day starting on the date for `<Number>` total days
|
||||
* `weekly yyyy-mm-dd <Number>` - A day per week starting on the date for `<Number>` total weeks
|
||||
* `timerange <Time> <Time>` - A time range, may span multiple days
|
||||
|
||||
## Display working location events
|
||||
```
|
||||
gam <UserTypeEntity> show workinglocation
|
||||
((date yyyy-mm-dd)|
|
||||
(range yyyy-mm-dd yyyy-mm-dd)|
|
||||
(daily yyyy-mm-dd <Number>)|
|
||||
(weekly yyyy-mm-dd <Number>)|
|
||||
(timerange <Time> <Time>))+
|
||||
[showdayofweek]
|
||||
[formatjson]
|
||||
```
|
||||
`showdayofweek` displays `dayOfWeek` when event start and end times are displayed.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print workinglocation
|
||||
((date yyyy-mm-dd)|
|
||||
(range yyyy-mm-dd yyyy-mm-dd)|
|
||||
(daily yyyy-mm-dd <Number>)|
|
||||
(weekly yyyy-mm-dd <Number>)|
|
||||
(timerange <Time> <Time>))+
|
||||
[showdayofweek]
|
||||
[formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
`showdayofweek` displays columns `start.dayOfWeek` and `end.dayOfWeek` when event start and end times are displayed.
|
||||
|
||||
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, Gam displays event details, use `countsonly` to display only the number of events. `formatjson` does not apply in this case.
|
||||
|
||||
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.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Users - Calendars
|
||||
- [API documentation](#api-documentation)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Calendar colors](#calendar-colors)
|
||||
- [Calendar selection](#calendar-selection)
|
||||
@@ -56,6 +55,7 @@
|
||||
(resources <ResourceIDList>)|
|
||||
((calendars <CalendarList>) | <FileSelector> | <CSVFileSelector> |
|
||||
<CSVkmdSelector> | <CSVDataSelector>)
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<UserCalendarEntity> ::=
|
||||
allcalendars|
|
||||
@@ -72,6 +72,7 @@
|
||||
((calendars <CalendarList>) | <FileSelector> | <CSVFileSelector> |
|
||||
<CSVkmdSelector> | <CSVDataSelector>)|
|
||||
<CalendarSelectProperty>*
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<UserCalendarSettingsField> ::=
|
||||
autoaddhangouts|
|
||||
|
||||
@@ -59,7 +59,7 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
|
||||
<ChatContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <CharSet>])|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
@@ -82,6 +82,7 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
||||
```
|
||||
gam <UserTypeEntity> create chatspace
|
||||
[type <ChatSpaceType>]
|
||||
[externalusersallowed <Boolean>]
|
||||
[members <UserTypeEntity>]
|
||||
[displayname <String>]
|
||||
[description <String>] [guidelines <String>]
|
||||
@@ -178,12 +179,34 @@ 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
|
||||
```
|
||||
# Local file
|
||||
gam config auto_batch_min 1 redirect csv ./AllChatSpaces.csv multiprocess redirect stdout - multiprocess redirect stderr stdout all users print chatspaces
|
||||
# Google sheet
|
||||
gam config auto_batch_min 1 redirect csv - todrive <ToDriveAttribute>* multiprocess redirect stdout - multiprocess redirect stderr stdout all users print chatspaces
|
||||
```
|
||||
Add these options as desired:
|
||||
```
|
||||
[types <ChatSpaceTypeList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Manage Chat Members
|
||||
### Add members to a chat space
|
||||
```
|
||||
gam <UserTypeEntity> create chatmember <ChatSpace>
|
||||
[type human|bot]
|
||||
((user <UserItem>)|(members <UserTypeEntity>))*
|
||||
[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.
|
||||
@@ -191,10 +214,11 @@ By default, Gam displays the information about the chatmember as an indented lis
|
||||
* `returnidonly` - Display the chatmember name only
|
||||
|
||||
### Delete members from a chat space
|
||||
Delete members by specifying a chat space and user email addresses.
|
||||
Delete members by specifying a chat space and user/group email addresses.
|
||||
```
|
||||
gam <UserTypeEntity> delete chatmember <ChatSpace>
|
||||
((user <UserItem>)|(members <UserTypeEntity>))+
|
||||
((user <UserItem>)|(members <UserTypeEntity>)|
|
||||
(group <GroupItem>)|(groups <GroupEntity>))+
|
||||
```
|
||||
|
||||
Delete members by specifying chatmember names.
|
||||
@@ -214,7 +238,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
### Display information about all chat members in a chat space
|
||||
```
|
||||
gam <UserTypeEntity> show chatmembers <ChatSpace>
|
||||
[showinvited [<Boolean>]] [filter <String>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[formatjson]
|
||||
```
|
||||
|
||||
@@ -223,7 +247,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print chatmembers [todrive <ToDriveAttribute>*] <ChatSpace>
|
||||
[showinvited [<Boolean>]] [filter <String>]
|
||||
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
|
||||
@@ -277,7 +301,7 @@ gam <UserTypeEntity> create chatmessage <ChatSpace>
|
||||
```
|
||||
Specify the text of the message: `<ChatContent>`
|
||||
* `text <String>` - The message is `<String>`
|
||||
* `textfile <FileName> [charset <CharSet>]` - The message is read from a local file
|
||||
* `textfile <FileName> [charset <Charset>]` - The message is read from a local file
|
||||
* `gdoc <UserGoogleDoc>` - The message is read from a Google Doc.
|
||||
* `gcsdoc <StorageBucketObjectName>` - The message is read from a Google Cloud Storage file.
|
||||
|
||||
@@ -320,7 +344,7 @@ gam <UserTypeEntity> update chatmessage name <ChatMessage>
|
||||
```
|
||||
Specify the text of the message: `<ChatContent>`
|
||||
* `text <String>` - The message is `<String>`
|
||||
* `textfile <FileName> [charset <CharSet>]` - The message is read from a local file
|
||||
* `textfile <FileName> [charset <Charset>]` - The message is read from a local file
|
||||
* `gdoc <UserGoogleDoc>` - The message is read from a Google Doc.
|
||||
* `gcsdoc <StorageBucketObjectName>` - The message is read from a Google Cloud Storage file.
|
||||
|
||||
|
||||
@@ -24,7 +24,9 @@ Contact delegation must be enabled, see the following:
|
||||
<UniqueID> ::= id:<String>
|
||||
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<UserList> ::= "<UserItem>(,<UserItem>)*"
|
||||
<UserEntity> ::= <UserList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<UserEntity> ::=
|
||||
<UserList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users
|
||||
```
|
||||
## Create contact delegates
|
||||
```
|
||||
|
||||
@@ -55,7 +55,7 @@ As of version `6.14.04`, There is now support for managing "Other Contacts".
|
||||
|
||||
<NoteContent> ::=
|
||||
((<String>)|
|
||||
(file <FileName> [charset <CharSet>])|
|
||||
(file <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>)
|
||||
```
|
||||
|
||||
@@ -78,7 +78,7 @@ gam <UserTypeEntity> print|show driveactivity [v2] [todrive <ToDriveAttributes>*
|
||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||
[action|actions [not] <DriveActivityActionList>]
|
||||
[consolidationstrategy legacy|none]
|
||||
[idmapfile <FileName>|(gsheet <UserGoogleSheet>) [charset <String>] [columndelimiter <Character>] [quotechar <Character>]]
|
||||
[idmapfile <FileName>|(gsheet <UserGoogleSheet>) [charset <String>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, Drive Activity API v2 is used; the `v2` option is ignored.
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
## API documentation
|
||||
* https://developers.google.com/drive/api/v3/reference/files
|
||||
* https://support.google.com/a/answer/7374057
|
||||
* https://support.google.com/a/users/answer/7338880
|
||||
|
||||
## Definitions
|
||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||
@@ -66,11 +67,13 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
||||
[summary [<Boolean>]] [showpermissionmessages [<Boolean>]]
|
||||
[<DriveFileParentAttribute>]
|
||||
[mergewithparent [<Boolean>]] [recursive [depth <Number>]]
|
||||
<DriveFileCopyAttribute>*
|
||||
[skipids <DriveFileEntity>]
|
||||
[copysubfiles [<Boolean>]] [filenamematchpattern <RegularExpression>]
|
||||
[filemimetype [not] <MimeTypeList>]
|
||||
[copysubfilesownedby any|me|others]
|
||||
[copysubfolders [<Boolean>]] [foldernamematchpattern <RegularExpression>]
|
||||
[copysubshortcuts [<Boolean>]] [shortcutnamematchpattern <RegularExpression>]
|
||||
<DriveFileCopyAttribute>*
|
||||
[duplicatefiles overwriteolder|overwriteall|duplicatename|uniquename|skip]
|
||||
[duplicatefolders merge|duplicatename|uniquename|skip]
|
||||
[copiedshortcutspointtocopiedfiles [<Boolean>]]
|
||||
@@ -92,6 +95,7 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
[sendemailifrequired [<Boolean>]]
|
||||
[verifyorganizer [<Boolean>]]
|
||||
```
|
||||
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being copied.
|
||||
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being copied recursively, the files/folders that it contains are referred as `sub`.
|
||||
@@ -100,6 +104,10 @@ At its simplest, you copy files/folders by giving the copy a new name and parent
|
||||
|
||||
By default, files/folders in the Trash are copied; use `excludetrashed` to prevent these files/folders from being copied.
|
||||
|
||||
When a copy operation involves a Shared Drive, GAM verifies that the user is an organizer. Unfortunatley, this fails
|
||||
when the user is not a direct organizer but is a member of a group that is an organizer. Specifying
|
||||
`verifyorganizer false` suppresses the verification.
|
||||
|
||||
When copying folders, you have three modes of operation:
|
||||
|
||||
### Copy the top folder but none of its sub files/folders
|
||||
@@ -119,6 +127,9 @@ The `depth <Number>` argument controls which files or folders within the top fol
|
||||
* `depth 0` - the files or folders in the top folder are copied, no descendants of folders are copied.
|
||||
* `depth N` - the files and folders within the top folder and those files and folders N levels below the top folder are copied.
|
||||
|
||||
### This option handles special cases where you want to prevent selected files/folders from being copied.
|
||||
* `skipids <DriveFileEntity>` - Do not copy files/folders with the specified IDs.
|
||||
|
||||
### By default, when recursively copying a top folder, all sub files, folders and shortcuts are copied, subject to the `depth` option.
|
||||
You can specify whether sub files, folders and shortcuts are copied. If sub folders are not copied, their contents are not copied.
|
||||
* `copysubfiles false` - Sub files are not copied
|
||||
@@ -132,21 +143,21 @@ By default, GAM displays a message referencing files and folders not selected fo
|
||||
* `suppressnotselectedmessages false` - Do not suppress these messages; this is the default
|
||||
* `suppressnotselectedmessages [true]` - Suppress these messages
|
||||
|
||||
### By default, when copying sub files, all files, regardless of MIME type, are copied. You can specify
|
||||
restrictions on the MIME types to be copied.
|
||||
### By default, when copying sub files, all files, regardless of MIME type, are copied.
|
||||
You can specify restrictions on the MIME types to be copied.
|
||||
* `filemimetypes <MimeTypeList>` - Copy sub files with the specified MIME types
|
||||
* `filemimetypes not <MimeTypeList>` - Copy sub files with MIME types other than those specified
|
||||
* `filemimetypes not <MimeTypeList>` - Copy sub files with MIME types other than those specified
|
||||
|
||||
that limit the items copied based on their name.
|
||||
### By default, when copying sub files, folders and shortcuts, all are copied.
|
||||
You can specify `<RegularExpression>` patterns that limit the items copied based on their name.
|
||||
* `filenamematchpattern <RegularExpression>` - Only files whose name matches `<RegularExpression>` are copied
|
||||
* `foldernamematchpattern <RegularExpression>` - Only folders whose name matches `<RegularExpression>` are copied
|
||||
* `shortcutnamematchpattern <RegularExpression>` - Only shortcuts whose name matches `<RegularExpression>` are copied
|
||||
|
||||
### By default, when copying sub files, folders and shortcuts, all are copied. You can specify `<RegularExpression>` patterns
|
||||
that limit the items copied based on their name.
|
||||
* `filenamematchpattern <RegularExpression>` - Only files whose name matches `<RegularExpression>` are copied
|
||||
* `foldernamematchpattern <RegularExpression>` - Only folders whose name matches `<RegularExpression>` are copied
|
||||
* `shortcutnamematchpattern <RegularExpression>` - Only shortcuts whose name matches `<RegularExpression>` are copied
|
||||
### By default, when copying sub files, all files, regardless of ownership, are copied.
|
||||
* `copysubfilesownedby any` - All files, regardless of ownership, are copied.
|
||||
* `copysubfilesownedby me` - Only files owned by `<UserTypeEntity>` are copied.
|
||||
* `copysubfilesownedby others` - Only files not owned by `<UserTypeEntity>` are copied.
|
||||
|
||||
### Specify a new name for the file/folder
|
||||
* `newfilename <DriveFileName>` - The copied file/folder will be named `<DriveFileName>`
|
||||
@@ -197,6 +208,7 @@ In previous versions, copying shortcuts caused an error because shortcuts can't
|
||||
|
||||
If a shortcut in the source structure points to a file/folder that is not in the source structure:
|
||||
* The shortcut is re-created to point to the original file/folder.
|
||||
|
||||
If a shortcut in the source structure points to a file/folder that is in the source structure:
|
||||
* `copiedshortcutspointtocopiedfiles` omitted or `copiedshortcutspointtocopiedfiles true` - The shortcut is re-created to point to the copied file/folder.
|
||||
* `copiedshortcutspointtocopiedfiles false` - The shortcut is re-created to point to the original file/folder.
|
||||
@@ -448,12 +460,17 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
||||
[updatefilepermissions [<Boolean>]]
|
||||
[retainsourcefolders [<Boolean>]]
|
||||
[sendemailifrequired [<Boolean>]]
|
||||
[verifyorganizer [<Boolean>]]
|
||||
```
|
||||
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being moved.
|
||||
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being moved, the files/folders that it contains are referred as `sub`.
|
||||
|
||||
At its simplest, you move files/folders by giving them a new name and parent location.
|
||||
|
||||
When a move operation involves a Shared Drive, GAM verifies that the user is an organizer. Unfortunatley, this fails
|
||||
when the user is not a direct organizer but is a member of a group that is an organizer. Specifying
|
||||
`verifyorganizer false` suppresses the verification.
|
||||
|
||||
When moving folders, you have two modes of operation:
|
||||
|
||||
### Move the top folder and its sub files/folders
|
||||
@@ -605,7 +622,7 @@ Moving a Drive folder to a Shared Drive is not directly supported by the API; GA
|
||||
recursively adjust the files/folders within it to point to the new parent folder. Once the original folder is emptied, it is deleted unless `retainsourcefolders` is specified.
|
||||
|
||||
### Move content of a Shared Drive to another Shared Drive
|
||||
Suppose you have a source Shared Drive called 0AC_1AB with multiple files and folders, and want to move all of its content to the target Shared Drive 0AE_9ZX.
|
||||
Suppose you have a source Shared Drive with ID 0AC_1AB with multiple files and folders, and want to move all of its content to the target Shared Drive with ID 0AE_9ZX.
|
||||
|
||||
The following command will change the parents of the top level files and folders from 0AC_1AB to 0AE_9ZX; the sub files and folders will move along with their top level folder.
|
||||
|
||||
@@ -614,3 +631,7 @@ The following command will change the parents of the top level files and folders
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX mergewithparent
|
||||
```
|
||||
|
||||
If you want the source Shared Drive with ID 0AC_1AB to be contained in a top level folder of the target Shared Drive with ID 0AE_9ZX, omit the `mergewithparent` argument.
|
||||
```
|
||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX
|
||||
```
|
||||
|
||||
@@ -5,9 +5,10 @@
|
||||
- [Permission Matches](Permission-Matches)
|
||||
- [Definitions](#definitions)
|
||||
- [Return Codes](#return-codes)
|
||||
- [File size fields](#file-size-fields)
|
||||
- [Display file information](#display-file-information)
|
||||
- [Display file paths](#display-file-paths)
|
||||
- [Select files for Display file counts, list, tree](#select-files-for-Display-file-counts-list-tree)
|
||||
- [Select files for Display file counts, list, tree](#select-files-for-display-file-counts-list-tree)
|
||||
- [File selection definitions](#file-selection-definitions)
|
||||
- [File selection defaults](#file-selection-defaults)
|
||||
- [File selection by query](#file-selection-by-query)
|
||||
@@ -23,6 +24,7 @@
|
||||
- [Display file share counts](#display-file-share-counts)
|
||||
- [Display file tree](#display-file-tree)
|
||||
- [File selection starting point for Display file tree](#file-selection-starting-point-for-display-file-tree)
|
||||
- [Display file parent tree](#display-file-parent-tree)
|
||||
- [Display file list](#display-file-list)
|
||||
- [File selection by name and entity shortcuts for Display file list](#file-selection-by-name-and-entity-shortcuts-for-display-file-list)
|
||||
- [File selection starting point for Display file list](#file-selection-starting-point-for-display-file-list)
|
||||
@@ -32,6 +34,7 @@
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/drive/api/v3/reference/files
|
||||
* https://support.google.com/a/answer/6105699
|
||||
|
||||
## Definitions
|
||||
* [`<DriveFileEntity>`](Drive-File-Selection)
|
||||
@@ -59,6 +62,7 @@
|
||||
gfolder|gdirectory|
|
||||
gform|
|
||||
gfusion|
|
||||
gjam|
|
||||
gmap|
|
||||
gpresentation|
|
||||
gscript|
|
||||
@@ -77,6 +81,7 @@
|
||||
canaddfolderfromanotherdrive|
|
||||
canaddmydriveparent|
|
||||
canchangecopyrequireswriterpermission|
|
||||
canchangecopyrequireswriterpermissionrestriction|
|
||||
canchangedomainusersonlyrestriction|
|
||||
canchangedrivebackground|
|
||||
canchangedrivemembersonlyrestriction|
|
||||
@@ -94,11 +99,14 @@
|
||||
canmanagemembers|
|
||||
canmodifycontent|
|
||||
canmodifycontentrestriction|
|
||||
canmodifyeditorcontentrestriction|
|
||||
canmodifylabels|
|
||||
canmodifyownercontentrestriction|
|
||||
canmovechildrenoutofdrive|
|
||||
canmovechildrenoutofteamdrive|
|
||||
canmovechildrenwithindrive|
|
||||
canmovechildrenwithinteamdrive|
|
||||
canmoveitemintodrive|
|
||||
canmoveitemintoteamdrive|
|
||||
canmoveitemoutofdrive|
|
||||
canmoveitemoutofteamdrive|
|
||||
@@ -110,6 +118,7 @@
|
||||
canreadrevisions|
|
||||
canreadteamdrive|
|
||||
canremovechildren|
|
||||
canremovecontentrestriction|
|
||||
canremovemydriveparent|
|
||||
canrename|
|
||||
canrenamedrive|
|
||||
@@ -318,7 +327,7 @@ you can specify `permissions` to get all of the fields, enumerate the specific f
|
||||
specify `basicpermissions` and additional permission fields, e.g., `permissions.displayName`.
|
||||
|
||||
```
|
||||
<<DriveOrderByFieldName> ::=
|
||||
<DriveOrderByFieldName> ::=
|
||||
createddate|createdtime|
|
||||
folder|
|
||||
modifiedbyme|modifiedbymedate|modifiedbymetime|modifiedbyuser|
|
||||
@@ -357,6 +366,29 @@ $ echo $?
|
||||
60
|
||||
```
|
||||
|
||||
## File size fields
|
||||
The Drive API defines two fields that relate to file size: `quotaBytesUsed` and `size`.
|
||||
```
|
||||
quotaBytesUsed - The number of storage quota bytes used by the file.
|
||||
This includes the head revision as well as previous revisions with keepForever enabled.
|
||||
size - Size in bytes of blobs and first party editor files.
|
||||
```
|
||||
Previously, GAM used the `size` field when totaling file sizes, it now uses the `quotaBytesUsed` field.
|
||||
The option `sizefield quotabytesused|size` allows you to select which field to use.
|
||||
|
||||
For most MIME types, the values are the same; for the following MIME types, `quotabytesused` is larger.
|
||||
```
|
||||
application/pdf
|
||||
application/vnd.ms-powerpoint
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
application/zip
|
||||
audio/mpeg
|
||||
image/jpeg
|
||||
image/png
|
||||
```
|
||||
|
||||
## Display file information
|
||||
Display file details in indented keyword: value format. The two forms are equivalent.
|
||||
```
|
||||
@@ -482,6 +514,7 @@ See: [Drive File Selection](Drive-File-Selection) for details of `<DriveFileName
|
||||
<DriveFileQueryShortcut> ::=
|
||||
all_files |
|
||||
all_folders |
|
||||
all_forms |
|
||||
all_google_files |
|
||||
all_non_google_files |
|
||||
all_shortcuts |
|
||||
@@ -489,13 +522,16 @@ See: [Drive File Selection](Drive-File-Selection) for details of `<DriveFileName
|
||||
all_items |
|
||||
my_files |
|
||||
my_folders |
|
||||
my_forms |
|
||||
my_google_files |
|
||||
my_non_google_files |
|
||||
my_shortcuts |
|
||||
my_3p_shortcuts |
|
||||
my_items |
|
||||
my_forms |
|
||||
others_files |
|
||||
others_folders |
|
||||
others_forms |
|
||||
others_google_files |
|
||||
others_non_google_files |
|
||||
others_shortcuts |
|
||||
@@ -612,29 +648,35 @@ gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
||||
[corpora <CorporaAttribute>]
|
||||
[select <SharedDriveEntity>]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[showmimetype [not] <MimeTypeList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[summary none|only|plus] [summaryuser <String>] [showsize]
|
||||
[showsize] [showmimetypesize]
|
||||
[summary none|only|plus] [summaryuser <String>]
|
||||
gam <UserTypeEntity> show filecounts
|
||||
[((query <QueryDriveFile>) | (fullquery <QueryDriveFile>) | <DriveFileQueryShortcut>)
|
||||
(querytime<String> <Time>)*]
|
||||
[corpora <CorporaAttribute>]
|
||||
[select <SharedDriveEntity>]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[showmimetype [not] <MimeTypeList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[summary none|only|plus] [summaryuser <String>] [showsize]
|
||||
[showsize] [showmimetypesize]
|
||||
[summary none|only|plus] [summaryuser <String>]
|
||||
```
|
||||
|
||||
By default, print filecounts displays counts of all files owned by the specified `<UserTypeEntity>`.
|
||||
By default, print filecounts displays counts of all files owned by the specified [`<UserTypeEntity>`](Collections-of-Users).
|
||||
|
||||
The `showsize` option displays the total size (in bytes) of the files counted.
|
||||
|
||||
See [Select files for Display file counts, list, tree](#select-files-for-Display-file-counts-list-tree)
|
||||
The showmimetypesize' displays the total size (in bytes) of each MIME type counted.
|
||||
|
||||
See [Select files for Display file counts, list, tree](#select-files-for-display-file-counts-list-tree)
|
||||
|
||||
Use the `excludetrashed` option to suppress counting files in the trash.
|
||||
|
||||
@@ -646,7 +688,83 @@ that can display a summarization of file counts across all users specified in th
|
||||
|
||||
The `summaryuser <String>` option replaces the default summary user `Summary` with `<String>`.
|
||||
|
||||
### Example
|
||||
### Examples
|
||||
Show file counts for a user.
|
||||
```
|
||||
$ gam user testuser@domain.com show filecounts showsize
|
||||
Getting all Drive Files/Folders that match query ('me' in owners) for testuser@domain.com
|
||||
Got 261 Drive Files/Folders that matched query ('me' in owners) for testuser@domain.com...
|
||||
User: testuser@domain.com, Drive Files/Folders: 261, Size: 13822521
|
||||
application/octet-stream: 8
|
||||
application/pdf: 1
|
||||
application/vnd.google-apps.document: 98
|
||||
application/vnd.google-apps.drawing: 2
|
||||
application/vnd.google-apps.drive-sdk.423565144751: 1
|
||||
application/vnd.google-apps.folder: 68
|
||||
application/vnd.google-apps.form: 3
|
||||
application/vnd.google-apps.jam: 1
|
||||
application/vnd.google-apps.presentation: 1
|
||||
application/vnd.google-apps.shortcut: 14
|
||||
application/vnd.google-apps.site: 1
|
||||
application/vnd.google-apps.spreadsheet: 24
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: 1
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document: 3
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.template: 1
|
||||
application/x-gzip: 4
|
||||
application/zip: 2
|
||||
image/jpeg: 8
|
||||
image/vnd.adobe.photoshop: 1
|
||||
text/csv: 2
|
||||
text/plain: 13
|
||||
text/rtf: 3
|
||||
text/x-sh: 1
|
||||
```
|
||||
Show file counts for a user including sizes for each MIME type.
|
||||
```
|
||||
$ gam user testuser@domain.com show filecounts showmimetypesize
|
||||
Getting all Drive Files/Folders that match query ('me' in owners) for testuser@domain.com
|
||||
Got 261 Drive Files/Folders that matched query ('me' in owners) for testuser@domain.com...
|
||||
User: testuser@domain.com, Drive Files/Folders: 261, Size: 13822521
|
||||
application/octet-stream: 8, 17
|
||||
application/pdf: 1, 9879
|
||||
application/vnd.google-apps.document: 98, 52858
|
||||
application/vnd.google-apps.drawing: 2, 2048
|
||||
application/vnd.google-apps.drive-sdk.423565144751: 1, 0
|
||||
application/vnd.google-apps.folder: 68, 0
|
||||
application/vnd.google-apps.form: 3, 0
|
||||
application/vnd.google-apps.jam: 1, 1024
|
||||
application/vnd.google-apps.presentation: 1, 0
|
||||
application/vnd.google-apps.shortcut: 14, 0
|
||||
application/vnd.google-apps.site: 1, 0
|
||||
application/vnd.google-apps.spreadsheet: 24, 11264
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: 1, 8157
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document: 3, 34407
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.template: 1, 25906
|
||||
application/x-gzip: 4, 2768
|
||||
application/zip: 2, 765
|
||||
image/jpeg: 8, 16498
|
||||
image/vnd.adobe.photoshop: 1, 13613198
|
||||
text/csv: 2, 397
|
||||
text/plain: 13, 41461
|
||||
text/rtf: 3, 1738
|
||||
text/x-sh: 1, 136
|
||||
```
|
||||
Print file counts for a user.
|
||||
```
|
||||
$ gam user testuser@domain,com print filecounts showsize
|
||||
Getting all Drive Files/Folders that match query ('me' in owners) for testuser@domain.com
|
||||
Got 261 Drive Files/Folders that matched query ('me' in owners) for testuser@domain.com...
|
||||
User,Total,Size,application/octet-stream,application/pdf,application/vnd.google-apps.document,application/vnd.google-apps.drawing,application/vnd.google-apps.drive-sdk.423565144751,application/vnd.google-apps.folder,application/vnd.google-apps.form,application/vnd.google-apps.jam,application/vnd.google-apps.presentation,application/vnd.google-apps.shortcut,application/vnd.google-apps.site,application/vnd.google-apps.spreadsheet,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.wordprocessingml.template,application/x-gzip,application/zip,image/jpeg,image/vnd.adobe.photoshop,text/csv,text/plain,text/rtf,text/x-sh
|
||||
testuser@domain.com,261,13822521,8,1,98,2,1,68,3,1,1,14,1,24,1,3,1,4,2,8,1,2,13,3,1
|
||||
```
|
||||
Print file counts for a user including sizes for each MIME type.
|
||||
```
|
||||
$ gam user testuser@domain.com print filecounts showmimetypesize
|
||||
Getting all Drive Files/Folders that match query ('me' in owners) for testuser@domain.com
|
||||
Got 261 Drive Files/Folders that matched query ('me' in owners) for testuser@domain.com...
|
||||
User,Total,Size,application/octet-stream,application/octet-stream-size,application/pdf,application/pdf-size,application/vnd.google-apps.document,application/vnd.google-apps.document-size,application/vnd.google-apps.drawing,application/vnd.google-apps.drawing-size,application/vnd.google-apps.drive-sdk.423565144751,application/vnd.google-apps.drive-sdk.423565144751-size,application/vnd.google-apps.folder,application/vnd.google-apps.folder-size,application/vnd.google-apps.form,application/vnd.google-apps.form-size,application/vnd.google-apps.jam,application/vnd.google-apps.jam-size,application/vnd.google-apps.presentation,application/vnd.google-apps.presentation-size,application/vnd.google-apps.shortcut,application/vnd.google-apps.shortcut-size,application/vnd.google-apps.site,application/vnd.google-apps.site-size,application/vnd.google-apps.spreadsheet,application/vnd.google-apps.spreadsheet-size,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet-size,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.wordprocessingml.document-size,application/vnd.openxmlformats-officedocument.wordprocessingml.template,application/vnd.openxmlformats-officedocument.wordprocessingml.template-size,application/x-gzip,application/x-gzip-size,application/zip,application/zip-size,image/jpeg,image/jpeg-size,image/vnd.adobe.photoshop,image/vnd.adobe.photoshop-size,text/csv,text/csv-size,text/plain,text/plain-size,text/rtf,text/rtf-size,text/x-sh,text/x-sh-size
|
||||
testuser@domain.com,261,13822521,8,17,1,9879,98,52858,2,2048,1,0,68,0,3,0,1,1024,1,0,14,0,1,0,24,11264,1,8157,3,34407,1,25906,4,2768,2,765,8,16498,1,13613198,2,397,13,41461,3,1738,1,136
|
||||
```
|
||||
Get file count summaries by OU; top level selector is ou, sub level selectors are ou_and_children
|
||||
```
|
||||
gam redirect csv ./TopLevelOUs.csv print ous showparent toplevelonly parentselector ou childselector ou_and_children fields orgunitpath
|
||||
@@ -775,7 +893,8 @@ gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
||||
[select <DriveFileEntity> [selectsubquery <QueryDriveFile>]
|
||||
[depth <Number>]]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[showmimetype [not] <MimeTypeList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
@@ -786,7 +905,8 @@ gam <UserTypeEntity> show filetree
|
||||
[select <DriveFileEntity> [selectsubquery <QueryDriveFile>]
|
||||
[depth <Number>]]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[showmimetype [not] <MimeTypeList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
@@ -796,7 +916,7 @@ gam <UserTypeEntity> show filetree
|
||||
```
|
||||
By default, the file tree starting at the root and all orphans are shown.
|
||||
|
||||
See [Select files for Display file counts, list, tree](#select-files-for-Display-file-counts-list-tree)
|
||||
See [Select files for Display file counts, list, tree](#select-files-for-display-file-counts-list-tree)
|
||||
|
||||
## File selection starting point for Display file tree
|
||||
You can specify a specific folder from which to select files.
|
||||
@@ -825,7 +945,7 @@ The `stripcrsfromname` option strips nulls, carriage returns and linefeeds from
|
||||
This option is special purpose and will not generally be used.
|
||||
|
||||
### Examples
|
||||
Show full file tree including the file id and mimetype:
|
||||
Show full file tree including the file id and MIME type:
|
||||
```
|
||||
gam user testuser show filetree fields id,mimetype
|
||||
```
|
||||
@@ -833,6 +953,40 @@ Show file tree starting at the folder named "Middle Folder" and 2 levels deeper
|
||||
```
|
||||
gam user testuser show filetree select drivefilename "Middle Folder" depth 2
|
||||
```
|
||||
## Display file parent tree
|
||||
Print the parent tree of file/folder.
|
||||
```
|
||||
gam <UserTypeEntity> print fileparenttree <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
[stripcrsfromname]
|
||||
```
|
||||
### Examples
|
||||
```
|
||||
# My Drive file
|
||||
$ gam user user@domain.com print fileparenttree 1tDGtnaBXc1qx_9NjBSZOUUNZ7FoRc2u6
|
||||
User: user@domain.com, Print 1 File Parent Tree
|
||||
Owner,id,name,parentId,depth,isRoot
|
||||
user@domain.com,1tDGtnaBXc1qx_9NjBSZOUUNZ7FoRc2u6,Bottom Folder,1HvAJtmQ2KZrKJhzY8aeZVScHhZ3HBJLp,4,False
|
||||
user@domain.com,1HvAJtmQ2KZrKJhzY8aeZVScHhZ3HBJLp,Middle Folder,1CVqOJJLNQtxX4QEPdpDfbkjiq1oUsxne,3,False
|
||||
user@domain.com,1CVqOJJLNQtxX4QEPdpDfbkjiq1oUsxne,TopCopy,0AHYenC8f12ALUk9PVA,2,False
|
||||
user@domain.com,0AHYenC8f12ALUk9PVA,My Drive,,1,True
|
||||
|
||||
# Shared Drive file
|
||||
$ gam user user@domain.com print fileparenttree 1kAHa7Q801KXRF1DfoofNlW05UWDzddhVP_u_L2xGfFQ
|
||||
User: user@domain.com, Print 1 File Parent Tree
|
||||
Owner,id,name,parentId,depth,isRoot
|
||||
user@domain.com,1kAHa7Q801KXRF1DfoofNlW05UWDzddhVP_u_L2xGfFQ,Middle Doc,1DShPJ6iG1TnNsgiBn-Oy1OVE2BahYlPr,4,False
|
||||
user@domain.com,1DShPJ6iG1TnNsgiBn-Oy1OVE2BahYlPr,Middle Folder,1s3g64uWfuQrpXRPf82B-bWCB5VuyrOmQ,3,False
|
||||
user@domain.com,1s3g64uWfuQrpXRPf82B-bWCB5VuyrOmQ,Top Folder,0AL5LiIe4dqxZUk9PVA,2,False
|
||||
user@domain.com,0AL5LiIe4dqxZUk9PVA,TS Shared Drive 1,,1,True
|
||||
|
||||
# Shared with Me file
|
||||
$ gam user user@domain.com print fileparenttree 1S2D97pyG1vAil4hgNnGGLD2ldCwTOzXUM9D7XbeUv0s
|
||||
User: user@domain.com, Print 1 File Parent Tree
|
||||
Owner,id,name,parentId,depth,isRoot
|
||||
user@domain.com,1S2D97pyG1vAil4hgNnGGLD2ldCwTOzXUM9D7XbeUv0s,GooGoo,0B0NlVEBUkz-hfjVudlF4VHlYYWlmOEdCUUxDaHdLdXhJTF84YWQwbmpRWmZ3Qm0wZnpHSGs,2,False
|
||||
user@domain.com,0B0NlVEBUkz-hfjVudlF4VHlYYWlmOEdCUUxDaHdLdXhJTF84YWQwbmpRWmZ3Qm0wZnpHSGs,FooBar,,1,False
|
||||
```
|
||||
|
||||
## Display file list
|
||||
Display a list of file/folder details in CSV format.
|
||||
```
|
||||
@@ -844,12 +998,14 @@ gam <UserTypeEntity> print|show filelist [todrive <ToDriveAttribute>*]
|
||||
[select <DriveFileEntity> [selectsubquery <QueryDriveFile>]
|
||||
[(norecursion [<Boolean>])|(depth <Number>)] [showparent]]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[showmimetype [not] <MimeTypeList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>] [pmfilter] [oneitemperrow]
|
||||
[excludetrashed]
|
||||
[maxfiles <Integer>] [nodataheaders <String>]
|
||||
[countsonly [summary none|only|plus] [summaryuser <String>] [showsource] [showsize]] [countsrowfilter]
|
||||
[countsonly [summary none|only|plus] [summaryuser <String>]
|
||||
[showsource] [showsize] [showmimetypesize]] [countsrowfilter]
|
||||
[filepath|fullpath [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||
[showdrivename] [showshareddrivepermissions]
|
||||
@@ -860,13 +1016,13 @@ gam <UserTypeEntity> print|show filelist [todrive <ToDriveAttribute>*]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, `print filelist` displays all files owned by the specified `<UserTypeEntity>`.
|
||||
By default, `print filelist` displays all files owned by the specified [`<UserTypeEntity>`](https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users)
|
||||
|
||||
When `allfields` is specified (or no fields are specified), use `showshareddrivepermissions` to display permissions
|
||||
when shared drives are queried/selected. In this case, the Drive API returns the permission IDs
|
||||
but not the permissions themselves so GAM makes an additional API call per file to get the permissions.
|
||||
|
||||
See [Select files for Display file counts, list, tree](#select-files-for-Display-file-counts-list-tree)
|
||||
See [Select files for Display file counts, list, tree](#select-files-for-display-file-counts-list-tree)
|
||||
|
||||
## File selection by name and entity shortcuts for Display file list
|
||||
Select a subset of files by pre-defined queries.
|
||||
@@ -926,6 +1082,12 @@ Use the following option to select a subset of files based on their permissions.
|
||||
* `<PermissionMatch>* [<PermissionMatchAction>]` - Use permission matching to select files
|
||||
|
||||
## File selection starting point for Display file list
|
||||
You can limit the selection for files on a specific Shared drive.
|
||||
Any query will be applied to the Shared drive.
|
||||
```
|
||||
select <SharedDriveEntity>
|
||||
```
|
||||
|
||||
You can specify a specific folder from which to select files.
|
||||
```
|
||||
select <DriveFileEntity> [selectsubquery <QueryDriveFile>]
|
||||
@@ -1006,7 +1168,7 @@ The `labels` column indicates the number of drive labels a file has and there ar
|
||||
```
|
||||
...labels,labelsIds,...
|
||||
```
|
||||
The `labels` column indicates the number of drive labels a file has and the `labelssIds` column is a list of the drive label IDs
|
||||
The `labels` column indicates the number of drive labels a file has and the `labelsIds` column is a list of the drive label IDs
|
||||
separated by `delimiter <Character>`; the default value is `csv_output_field_delimiter` from `gam.cfg`.
|
||||
|
||||
By default, all ACLS are displayed; use the following option in conjunction with `<PermissionMatch>* [<PermissionMatchAction>]`
|
||||
@@ -1021,7 +1183,7 @@ By default, all ACLs are displayed with the other file fields on a single row.
|
||||
* `oneitemperrow` - Display each of a files ACls on a separate row with all of the other file fields.
|
||||
This produces a CSV file that can be used in subsequent commands without further script processing.
|
||||
|
||||
The `countsonly` option doesn't display any indididual file data, it lists the total number of files that the use can access
|
||||
The `countsonly` option doesn't display any indididual file data, it lists the total number of files that the user can access
|
||||
and the mumber of files by MIME type.
|
||||
|
||||
The `countsonly` suboption `summary none|only|plus` specifies display of a summarization of file counts across all users specified in the command.
|
||||
@@ -1035,6 +1197,8 @@ The `countsonly` suboption `showsource` adds additional columns `Source` and `Na
|
||||
|
||||
The `countsonly` suboption `showsize` adds an additional column `Size` that indicates the total size (in bytes) of the files represented on the row.
|
||||
|
||||
The `countsonly` suboption `showmimetypesize` adds additional columns `<MimeType>:Size` that indicate the total size (in bytes) of each MIME type.
|
||||
|
||||
By default, when `countsonly` is specified, GAM applies `config csv_output_row_filter` to the file details to select which files are counted.
|
||||
Use the `countsrowfilter` option to have GAM to apply `config csv_output_row_filter` to the file counts rather than the file details.
|
||||
|
||||
@@ -1355,11 +1519,12 @@ BadNews-NoData
|
||||
```
|
||||
gam <UserTypeEntity> print diskusage <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[sizefield quotabytesused|size]
|
||||
[pathdelimiter <Character>] [excludetrashed] [stripcrsfromname]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
[noprogress] [show all|summary|summaryandtrash]
|
||||
```
|
||||
For each folder in `<DiskFileEntity>`, the following items are displayed:
|
||||
For each folder in `<DriveFileEntity>`, the following items are displayed:
|
||||
* `User` - The email address of the user in `<UserTypeEntity>`
|
||||
* `Owner` - The email address of the owner of the folder; omitted when displaying disk usage on Shared Drives
|
||||
* `ownedByMe` - True if the folder is owned by `User`, False otherwise; omitted when displaying disk usage on Shared Drives
|
||||
@@ -1411,9 +1576,9 @@ Add additional columns of data from the command line to the output:
|
||||
By default, progress messages are displayed for each folder, use `noprogress` to suppress these messages.
|
||||
|
||||
Use the `show` option to control the display of data:
|
||||
* `all` - Display a row for every folder in `<DriveFileEntity>` and a row detailing items in the trash when `excludetrashed` is omitted. This is the default.
|
||||
* `summary` - Display a single row for the first folder in `<DriveFileEntity>`
|
||||
* `summaryandtrash` - Display a single row for the first folder in `<DriveFileEntity>` and a row detailing items in the trash when `excludetrashed` is omitted.
|
||||
* `show all` - Display a row for every folder in `<DriveFileEntity>` and a row detailing items in the trash when `excludetrashed` is omitted. This is the default.
|
||||
* `show summary` - Display a single row for the first folder in `<DriveFileEntity>`
|
||||
* `show summaryandtrash` - Display a single row for the first folder in `<DriveFileEntity>` and a row detailing items in the trash when `excludetrashed` is omitted.
|
||||
|
||||
### Examples
|
||||
```
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
* https://developers.google.com/drive/api/v3/ref-single-parent
|
||||
* https://developers.google.com/drive/api/v3/shared-drives-diffs
|
||||
* https://developers.google.com/drive/api/v3/shortcuts
|
||||
* https://support.google.com/a/answer/6105699
|
||||
* https://support.google.com/a/answer/7374057
|
||||
* https://support.google.com/a/users/answer/7338880
|
||||
* https://developers.google.com/docs/api/reference/rest
|
||||
|
||||
## Definitions
|
||||
@@ -93,6 +95,7 @@
|
||||
gfolder|gdirectory|
|
||||
gform|
|
||||
gfusion|
|
||||
gjam|
|
||||
gmap|
|
||||
gpresentation|
|
||||
gscript|
|
||||
@@ -164,7 +167,7 @@
|
||||
gam <UserTypeEntity> create|add drivefile
|
||||
[(localfile <FileName>|-)|(url <URL>)]
|
||||
[(drivefilename|newfilename <DriveFileName>) | (replacefilename <RegularExpression> <String>)*]
|
||||
[stripnameprefix <String>]
|
||||
[stripnameprefix <String>] [noduplicate]
|
||||
<DriveFileCreateAttribute>*
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) |
|
||||
(returnidonly|returnlinkonly|returneditlinkonly|showdetails)]
|
||||
@@ -200,6 +203,18 @@ These are the naming rules:
|
||||
|
||||
If `stripnameprefix <String>` is specified, `<String>` will be stripped from the front of the Google Drive file name if present.
|
||||
|
||||
If `noduplicate` is specfied, GAM will issue a warning and not perform the create if a non-trashed item with the same name (regardless of MIME type)
|
||||
exists in the parent folder.
|
||||
|
||||
By default, when files are uploaded from local content, they are created with `binary` format, i.e., the data is uploaded
|
||||
without any conversion. Standard GAM had an option `convert` that was passed to the Drive API v2 that it used.
|
||||
* convert - Whether to convert this file to the corresponding Docs Editors format
|
||||
|
||||
Advanced GAM uses Drive API v3 that doesn't support the `convert` option; it uses the `mimetype` argument to cause conversions.
|
||||
* `mimetype gdoc` - Convert the uploaded content to a Google Doc; e.g., convert a Word (.docx) or text (.txt) file to a Google Doc
|
||||
* `mimetype gsheet` - Convert the uploaded content to a Google Sheet; e.g., convert an Excel (.xlsx) or CSV (.csv) file to a Google Sheet
|
||||
* `mimetype gpresentation` - Convert the uploaded content to a Google Slides; e.g., convert a PowerPoint (.pptx) file to a Google Slides
|
||||
|
||||
By default, the user, file name and id values are displayed on stdout.
|
||||
* `returnidonly` - Display just the file ID of the created file on stdout
|
||||
* `returnlinkonly` - Display just the file webViewLink of the created file on stdout
|
||||
@@ -224,19 +239,19 @@ The file ID will only be valid when the return code of the command is 0; program
|
||||
Google Drive folders to GAM are just like files, with the MimeType for a folder. To create a folder `FooFolder` in the root of the Drive for user `Fred`:
|
||||
|
||||
```
|
||||
user Fred@yourdomain.com create drivefile drivefilename FooFolder mimetype gfolder
|
||||
gam user Fred@yourdomain.com create drivefile drivefilename FooFolder mimetype gfolder
|
||||
```
|
||||
|
||||
The same, but created in the existing folder `BarFolder`:
|
||||
|
||||
```
|
||||
user Fred@yourdomain.com create drivefile drivefilename FooFolder mimetype gfolder parentname BarFolder
|
||||
gam user Fred@yourdomain.com create drivefile drivefilename FooFolder mimetype gfolder parentname BarFolder
|
||||
```
|
||||
|
||||
This only works if the folder name for the parent is unique. An alternative is to use the folder ID:
|
||||
|
||||
```
|
||||
user Fred@yourdomain.com create drivefile drivefilename FooFolder mimetype gfolder parentid <FolderID>
|
||||
gam user Fred@yourdomain.com create drivefile drivefilename FooFolder mimetype gfolder parentid <FolderID>
|
||||
```
|
||||
|
||||
## Bulk Create Files and Folders
|
||||
@@ -449,7 +464,7 @@ gam <UserTypeEntity> update drivefile <DriveFileEntity> [copy] [returnidonly|ret
|
||||
[stripnameprefix <String>]
|
||||
<DriveFileUpdateAttribute>*
|
||||
[(gsheet|csvsheet <SheetEntity> [clearfilter])|(addsheet <String>)]
|
||||
[charset <CharSet>] [columndelimiter <Character>]
|
||||
[charset <Charset>] [columndelimiter <Character>]
|
||||
```
|
||||
By default, an existing file's attributes are updated.
|
||||
|
||||
@@ -479,7 +494,8 @@ From the Google Drive API documentation.
|
||||
By default, Google assigns the current time to the attribute `modifiedTime`; you can assign your own value
|
||||
with `modifiedtime <Time>`.
|
||||
|
||||
The option `preservefiletimes`, when used with `localfile <FileName>`, will set the `modifiedTime` attribute from the local file.
|
||||
* `preservefiletimes localfile <FileName>` - `modifiedTime` of `<DriveFileEntity>` is set to that of `localfile <FileName>`
|
||||
* `preservefiletimes` - `modifiedTime` of `<DriveFileEntity>` retains its current value
|
||||
|
||||
These are the naming rules when updating from a local file:
|
||||
* `update drivefile drivefilename "GoogleFile.csv" localfile "NewLocalFile.csv"` - Google Drive file "GoogleFile.csv" is renamed "NewLocalFile.csv"
|
||||
@@ -500,7 +516,7 @@ You can update a specific sheet within a Google spreadsheet or add a new sheet t
|
||||
* `gsheet|csvsheet id:<Number>` - Specify a sheet by ID in a Google Sheets file to be updated
|
||||
* `clearfilter` - When updating a sheet, this option causes GAM to clear the spreadsheet basic filter so hidden data will be overwritten
|
||||
* `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
|
||||
* `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`.
|
||||
|
||||
|
||||
@@ -35,12 +35,13 @@ Supported editions for this feature: Business Standard and Business Plus; Enterp
|
||||
<DriveLabelNameList> ::= "<DriveLabelName>(,<DriveLabelName)*"
|
||||
<DriveLabelNameEntity> ::=
|
||||
<DriveLabelNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<DriveLabelFieldID> ::= <String>
|
||||
<DriveLabelSelectionID> ::= <String>
|
||||
<DriveLabelSelectionIDList> ::= "<DriveLabelSelectionID>(,<DriveLabelSelectionID)*"
|
||||
|
||||
<DriveLabelLanguageCode> ::=
|
||||
<BCP47LanguageCode> ::=
|
||||
ar-sa| # Arabic Saudi Arabia
|
||||
cs-cz| # Czech Czech Republic
|
||||
da-dk| # Danish Denmark
|
||||
@@ -93,12 +94,12 @@ Three forms of the commands are available:
|
||||
|
||||
```
|
||||
gam [<UserTypeEntity>] info drivelabels <DriveLabelNameEntity>
|
||||
[[basic|full] [languagecode <DriveLabelLanguageCode>]
|
||||
[[basic|full] [languagecode <BCP47LanguageCode>]
|
||||
[formatjson] [adminaccess|asadmin]
|
||||
```
|
||||
* `basic` - Display fields: name,id,revisionId,labelType,properties.*; this is the default
|
||||
* `full` - Display all possible fields
|
||||
* `languagecode <DriveLabelLanguageCode>` - The BCP-47 language code to use for evaluating localized Field labels. When not specified, values in the default configured language will be used.
|
||||
* `languagecode <BCP47LanguageCode>` - The BCP-47 language code to use for evaluating localized Field labels. When not specified, values in the default configured language will be used.
|
||||
* `adminaccess|asadmin` - Use the user's admin credentials. This will return all Labels within the customer.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
@@ -106,13 +107,13 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam [<UserTypeEntity>] show drivelabels
|
||||
[basic|full] [languagecode <DriveLabelLanguageCode>]
|
||||
[basic|full] [languagecode <BCP47LanguageCode>]
|
||||
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
|
||||
[formatjson] [adminaccess|asadmin]
|
||||
```
|
||||
* `basic` - Display fields: name,id,revisionId,labelType,properties.*; this is the default
|
||||
* `full` - Display all possible fields
|
||||
* `languagecode <DriveLabelLanguageCode>` - The BCP-47 language code to use for evaluating localized Field labels. When not specified, values in the default configured language will be used.
|
||||
* `languagecode <BCP47LanguageCode>` - The BCP-47 language code to use for evaluating localized Field labels. When not specified, values in the default configured language will be used.
|
||||
* `minimumrole applier|editor|organizer|reader` - Specifies the level of access the user must have on the returned Labels. Defaults to READER.
|
||||
* `adminaccess|asadmin` - Use the user's admin credentials. This will return all Labels within the customer.
|
||||
|
||||
@@ -121,13 +122,13 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
|
||||
```
|
||||
gam [<UserTypeEntity>] print drivelabels [todrive <ToDriveAttribute>*]
|
||||
[basic|full] [languagecode <DriveLabelLanguageCode>]
|
||||
[basic|full] [languagecode <BCP47LanguageCode>]
|
||||
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
|
||||
[formatjson [quotechar <Character>]] [adminaccess|asadmin]
|
||||
```
|
||||
* `basic` - Display fields: name,id,revisionId,labelType,properties.*; this is the default
|
||||
* `full` - Display all possible fields
|
||||
* `languagecode <DriveLabelLanguageCode>` - The BCP-47 language code to use for evaluating localized Field labels. When not specified, values in the default configured language will be used.
|
||||
* `languagecode <BCP47LanguageCode>` - The BCP-47 language code to use for evaluating localized Field labels. When not specified, values in the default configured language will be used.
|
||||
* `minimumrole applier|editor|organizer|reader` - Specifies the level of access the user must have on the returned Labels. Defaults to READER.
|
||||
* `adminaccess|asadmin` - Use the user's admin credentials. This will return all Labels within the customer.
|
||||
|
||||
|
||||
@@ -107,9 +107,9 @@ By default, files in the trash are not transferred.
|
||||
Specify order of file processing.
|
||||
* `(orderby <DriveOrderByFieldName> [ascending|descending])*`
|
||||
|
||||
These options handle special cases where you want to prevent ownership from being transferred for selected files.
|
||||
* `skipids <DriveFileEntity>` - Do not transfer ownership for files with the specified IDs.
|
||||
* `skipusers <UserTypeEntity>` - Do not transfer ownership for files owned by the specified users.
|
||||
These options handle special cases where you want to prevent ownership from being transferred for selected files/folders.
|
||||
* `skipids <DriveFileEntity>` - Do not transfer ownership for files/folders with the specified IDs.
|
||||
* `skipusers <UserTypeEntity>` - Do not transfer ownership for files/folders owned by the specified users.
|
||||
|
||||
By default, only files owned by users in the same domain as the claiming user have their ownership transferred.
|
||||
* `subdomains <DomainNameEntity>` - Transfer ownership for files in the selected sub-domains.
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
- [Manage file permissions/sharing](#manage-file-permissionssharing)
|
||||
- [Display file permissions/sharing](#display-file-permissionssharing)
|
||||
- [Delete all ACLs except owner from a file](#delete-all-acls-except-owner-from-a-file)
|
||||
- [Change shares to User1 to shares to User2](#change-shares-to-user1-to-shares-to-user2)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/drive/api/v3/reference/permissions
|
||||
* https://developers.google.com/drive/api/v3/ref-single-parent
|
||||
@@ -104,17 +106,13 @@ specify `basicpermissions` and additional permission fields, e.g., `permissions.
|
||||
<DriveFilePermissionEntity> ::=
|
||||
<DriveFilePermissionList> |
|
||||
(json [charset <Charset>] <JSONData>)|(json file <FileName> [charset <Charset>]) |
|
||||
<FileSelector> |
|
||||
<CSVFileSelector> |
|
||||
<CSVkmdSelector> |
|
||||
<CSVDataSelector>
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<DriveFilePermissionIDEntity> ::=
|
||||
<DriveFilePermissionIDList> |
|
||||
(json [charset <Charset>] <JSONData>)|(json file <FileName> [charset <Charset>]) |
|
||||
<FileSelector> |
|
||||
<CSVFileSelector> |
|
||||
<CSVkmdSelector> |
|
||||
<CSVDataSelector>
|
||||
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
```
|
||||
## GUI API permission name mapping
|
||||
|
||||
@@ -133,11 +131,18 @@ specify `basicpermissions` and additional permission fields, e.g., `permissions.
|
||||
gam <UserTypeEntity> create|add drivefileacl <DriveFileEntity>
|
||||
anyone|(user <UserItem>)|(group <GroupItem>)|(domain <DomainName>) (role <DriveFileACLRole>)
|
||||
[withlink|(allowfilediscovery|discoverable [<Boolean>])] [expiration <Time>]
|
||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||
[movetonewownersroot [<Boolean>]]
|
||||
[sendemail] [emailmessage <String>]
|
||||
[updatesheetprotectedranges [<Boolean>]]
|
||||
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
||||
```
|
||||
The option `mappermissionsdomain <DomainName1> <DomainName2>` maps `<DomainName1>` to `<DomainName2>` in the
|
||||
`user <UserItem>)|(group <GroupItem>)|(domain <DomainName>)` options;
|
||||
`<UserItem>` and `<GroupItem>` must specify email addresses for the mapping to succeed.
|
||||
The option can be specified multiple times to provide different mappings. This option will be most useful
|
||||
when reading a CSV file containing ACLs referencing `<DomainName1>` and you want a new ACL with the same options but in `<DomainName2>`.
|
||||
|
||||
From the Google Drive API documentation.
|
||||
* `movetonewownersroot` - This parameter only takes effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item.
|
||||
* `false` - Parents are not changed. The file is an orphan for the new owner. This is the default.
|
||||
@@ -300,3 +305,15 @@ Inspect Permissions.csv, verify that you want to proceed.
|
||||
```
|
||||
gam config csv_input_row_drop_filter "permission.role:regex:(owner)|(organizer)" csv ./Permissions.csv gam user "~Owner" delete drivefileacl "~id" "id:~~permission.id~~"
|
||||
```
|
||||
|
||||
## Change shares to User1 to shares to User2
|
||||
```
|
||||
# Get files shared to User1
|
||||
gam redirect csv ./FilesSharedWithU1.csv user user1@domain.com print filelist choose sharedwithme fields id,name,mimetype,owners.emailaddress
|
||||
# For each of these files, get the sharing settings for U1
|
||||
gam redirect csv ./FilesSharedWithU1Settings.csv multiprocess csv FilesSharedWithU1.csv gam user "~owners.0.emailAddress" print drivefileacls "~id" pm emailaddress "~Owner" em
|
||||
# For each of these files, delete the share to User1
|
||||
gam redirect stdout ./DeleteU1Sharing.txt multiprocess redirect stderr stdout csv FilesSharedWithU1Settings.csv gam user "~Owner" delete drivefileacl "~id" "~permissions.0.emailAddress"
|
||||
# For each of these files, add the share to User2 with the same role that User1 had
|
||||
gam redirect stdout ./AddUser2Sharing.txt multiprocess redirect stderr stdout csv FilesSharedWithU1Settings.csv gam user "~Owner" create drivefileacl "~id" user user2@domain.com role "~permissions.0.role"
|
||||
```
|
||||
@@ -37,8 +37,8 @@ gam <UserTypeEntity> transfer drive <UserItem> [select <DriveFileEntity>]
|
||||
By default, all of the source users files will be transferred except those in the trash. If you want to transfer a subset of
|
||||
the source users files, use the `select <DriveFileEntity>` option.
|
||||
|
||||
This option handles special cases where you want to prevent selected files from being transferred.
|
||||
* `skipids <DriveFileEntity>` - Do not transfer files with the specified IDs.
|
||||
This option handles special cases where you want to prevent selected files/folders from being transferred.
|
||||
* `skipids <DriveFileEntity>` - Do not transfer files/folders with the specified IDs.
|
||||
|
||||
You can specify the access that the source user retains to the files that it owns.
|
||||
If no option is specified, the source user retains no access to the transferred files.
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
- [Delete Gmail delegates](#delete-gmail-delegates)
|
||||
- [Update Gmail delegates](#update-gmail-delegates)
|
||||
- [Display Gmail delegates](#display-gmail-delegates)
|
||||
- [Delete all delegates for a user](#delete-all-delegates-for-a-user)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/gmail/api/v1/reference/users/settings/delegates
|
||||
@@ -20,7 +21,9 @@
|
||||
<UniqueID> ::= id:<String>
|
||||
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<UserList> ::= "<UserItem>(,<UserItem>)*"
|
||||
<UserEntity> ::= <UserList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<UserEntity> ::=
|
||||
<UserList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users
|
||||
```
|
||||
## Aliases
|
||||
|
||||
@@ -64,3 +67,19 @@ This involves an extra API call per delegate email address.
|
||||
|
||||
By default, `show delegates` displays indented keys and values; use the `csv` option to have just the values
|
||||
shown as a comma separated list.
|
||||
|
||||
## Delete all delegates for a user
|
||||
```
|
||||
$ gam redirect csv ./Delegates.csv user testsimple print delegates
|
||||
Getting all Delegates for testsimple@domain.com
|
||||
$ gam redirect stdout - multiprocess csv Delegates.csv gam user "~User" delete delegate "~delegateAddress"
|
||||
2023-11-10T06:56:04.118-08:00,0/3,Using 3 processes...
|
||||
2023-11-10T06:56:04.123-08:00,0,Processing item 3/3
|
||||
User: testsimple@domain.com, Delete 1 Delegate
|
||||
User: testsimple@domain.com, Delegate: testuser1@domain.com, Deleted
|
||||
User: testsimple@domain.com, Delete 1 Delegate
|
||||
User: testsimple@domain.com, Delegate: testuser2@domain.com, Deleted
|
||||
User: testsimple@domain.com, Delete 1 Delegate
|
||||
User: testsimple@domain.com, Delegate: testgroup@domain.com, Deleted
|
||||
2023-11-10T06:56:07.253-08:00,0/3,Processing complete
|
||||
```
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
|
||||
<FilterID> ::= <String>
|
||||
<FilterIDList> ::= "<FilterID>(,<FilterID>)*"
|
||||
<FilterIDEntity> ::= <FilterIDList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<FilterIDEntity> ::=
|
||||
<FilterIDList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<GmailCategory> ::=
|
||||
forums|
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::= <EmailAddressList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<EmailAddressEntity> ::=
|
||||
<EmailAddressList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users
|
||||
```
|
||||
## Introduction
|
||||
An email address must be defined as a forwarding address before it can be used to forward.
|
||||
|
||||
@@ -40,10 +40,12 @@
|
||||
<LabelIDList> ::= "<LabelID>(,<LabelID)*"
|
||||
<LabelIDEntity> ::=
|
||||
<LabelIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<LabelName> ::= <String>
|
||||
<LabelNameList> ::= "'<LabelName>'(,'<LabelName>')*"
|
||||
<LabelNameEntity> ::=
|
||||
<LabelNameList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
```
|
||||
## Special quoting
|
||||
You specify a single label name with `label <LabelName>` and a list of labels with `labellist <LabelNameList>`.
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
- [Display a selected set of messages](#display-a-selected-set-of-messages)
|
||||
- [Choose information to display](#choose-information-to-display)
|
||||
- [Display message content](#display-message-content)
|
||||
- [Display message count](#display-message-count)
|
||||
- [Display message counts](#display-message-counts)
|
||||
- [Display label counts](#display-label-counts)
|
||||
- [Print only options](#print-only-options)
|
||||
- [Show only options](#show-only-options)
|
||||
@@ -148,7 +148,9 @@
|
||||
|
||||
<MessageID> ::= <String>
|
||||
<MessageIDList> ::= "<MessageID>(,<MessageID>)*"
|
||||
<MessageIDEntity> ::= <MessageIDList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<MessageIDEntity> ::=
|
||||
<MessageIDList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<ThreadID> ::= <String>
|
||||
<ThreadIDList> ::= "<ThreadID>(,<ThreadID>)*"
|
||||
<ThreadIDEntity> ::= <ThreadIDList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
@@ -169,8 +171,24 @@
|
||||
(file|textfile|htmlfile <FileName> [charset <Charset>])|
|
||||
(gdoc|ghtml <UserGoogleDoc>)|
|
||||
(gcsdoc|gcshtml <StorageBucketObjectName>)|
|
||||
(emlfile <FileName>)
|
||||
(emlfile <FileName> [charset <Charset>]))
|
||||
```
|
||||
## Message queries with dates
|
||||
```
|
||||
query <QueryGmail> [querytime<String> <Date>]*
|
||||
```
|
||||
* `query "xxx"` - ` xxx` is appended to the current query; you can repeat the query argument to build up a longer query.
|
||||
|
||||
Use the `querytime<String> <Date>` option to allow dates, usually relative, to be substituted into the `query <QueryGmail>` option.
|
||||
The `querytime<String> <Date>` value replaces the string `#querytime<String>#` in any queries.
|
||||
The characters following `querytime` can be any combination of lowercase letters and numbers. This is most useful in scripts
|
||||
where you can specify a relative date without having to change the script.
|
||||
|
||||
For example, query for messages from moree than 5 years ago:
|
||||
```
|
||||
querytime5years -5y query "before:#querytime5years#"
|
||||
```
|
||||
|
||||
## Subject and label queries
|
||||
Using a query to select messages by subject or label requires some attention in order to achieve the desired effect.
|
||||
* https://support.google.com/mail/answer/7190
|
||||
@@ -186,21 +204,24 @@ You can also replace ` ` with `-` but it doesn't seem to be required.
|
||||
|
||||
* `query "label:Foo -Bar-"` - Select messages with label `Foo (Bar)`
|
||||
|
||||
You can have GAM do the substitutions for you with the `matchlabel <LabelName>` option.
|
||||
* `matchlabel "Foo (Bar)"` is converted to `query "label:Foo -Bar-"`
|
||||
|
||||
## Draft messages
|
||||
Add a draft message to a user's mailbox.
|
||||
```
|
||||
gam <UserTypeEntity> draft message
|
||||
<MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(attach <FileName> [charset <CharSet>])*
|
||||
<MessageContent>
|
||||
(attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
```
|
||||
`<MessageContent>` is the message, there are five ways to specify it:
|
||||
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the message
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the message from `<FileName>`
|
||||
* `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>` - Read the message from the EML message file `<FileName>`. SMTP headers specified in the command will replace those in the message file.
|
||||
* `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`.
|
||||
|
||||
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>`.
|
||||
@@ -223,20 +244,20 @@ Your command line will have: `embedimage file1.jpg image1` embedimage file2.jpg
|
||||
Import a message into a user's mailbox, with standard email delivery scanning and classification similar to receiving via SMTP.
|
||||
```
|
||||
gam <UserTypeEntity> import message
|
||||
<MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
(attach <FileName> [charset <CharSet>])*
|
||||
<MessageContent>
|
||||
(attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[deleted [<Boolean>]] [checkspam [<Boolean>]] [processforcalendar [<Boolean>]]
|
||||
```
|
||||
|
||||
`<MessageContent>` is the message, there are five ways to specify it:
|
||||
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the message
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the message from `<FileName>`
|
||||
* `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>` - Read the message from the EML message file `<FileName>`. SMTP headers specified in the command will replace those in the message.
|
||||
* `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. The default `chatser` is `ascii`.
|
||||
|
||||
When `emlfile` is not specified:
|
||||
* If `to` is not specified, it is set to the user email addresses in `<UserTypeEntity>`.
|
||||
@@ -271,20 +292,20 @@ Your command line will have: `embedimage file1.jpg image1` embedimage file2.jpg
|
||||
Insert a message into a user's mailbox similar to IMAP APPEND, bypassing most scanning and classification.
|
||||
```
|
||||
gam <UserTypeEntity> insert message
|
||||
<MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
(attach <FileName> [charset <CharSet>])*
|
||||
<MessageContent>
|
||||
(attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[deleted [<Boolean>]]
|
||||
```
|
||||
|
||||
`<MessageContent>` is the message, there are five ways to specify it:
|
||||
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the message
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the message from `<FileName>`
|
||||
* `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>` - Read the message from the EML message file `<FileName>`. SMTP headers specified in the command will replace those in the message file.
|
||||
* `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`.
|
||||
|
||||
When `emlfile` is not specified:
|
||||
* If `to` is not specified, it is set to the user email addresses in `<UserTypeEntity>`.
|
||||
@@ -314,7 +335,7 @@ Your command line will have: `embedimage file1.jpg image1` embedimage file2.jpg
|
||||
## Archive messages
|
||||
```
|
||||
gam <UserTypeEntity> archive messages <GroupItem>
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_archive <Number>])|(ids <MessageIDEntity>)
|
||||
```
|
||||
|
||||
@@ -326,10 +347,10 @@ See below for message selection.
|
||||
Export messages in EML format.
|
||||
```
|
||||
gam <UserTypeEntity> export message|messages
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [doit] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [doit] [max_to_export <Number>])|(ids <MessageIDEntity>)
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||
gam <UserTypeEntity> export thread|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+ [quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||
```
|
||||
|
||||
@@ -352,45 +373,50 @@ See below for message selection.
|
||||
## Forward messages/threads
|
||||
```
|
||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||
[subject <String>]
|
||||
[subject <String>] [addorigfieldstosubject]
|
||||
gam <UserTypeEntity> forward thread|threads recipient|to <RecipientEntity>
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||
[subject <String>]
|
||||
[subject <String>] [addorigfieldstosubject]
|
||||
```
|
||||
|
||||
By default, the message subject has `Fwd: ` prepended; use `subject <String>` to specify a new subject.
|
||||
|
||||
All `Cc` addresses are removed from the forwarded message.
|
||||
|
||||
If `addorigfieldstosubject` is specified, GAM appends the original `from`, `to` and `date` fields to the message subject.
|
||||
```
|
||||
Fwd: Ross to TestUser (Original From: Ross Scroggs <ross.scroggs@gmail.com> To: testuser@domain.com Date: Thu, 23 Nov 2023 07:01:59 -0800)
|
||||
```
|
||||
|
||||
See below for message selection.
|
||||
|
||||
## Manage messages/threads
|
||||
```
|
||||
gam <UserTypeEntity> delete messages|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_delete <Number>])|(ids <MessageIDEntity>)
|
||||
gam <UserTypeEntity> modify messages|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_modify <Number>])|(ids <MessageIDEntity>)
|
||||
(addlabel <LabelName>)* (removelabel <LabelName>)*
|
||||
gam <UserTypeEntity> spam messages|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_spam <Number>])|(ids <MessageIDEntity>)
|
||||
gam <UserTypeEntity> trash messages|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_trash <Number>])|(ids <MessageIDEntity>)
|
||||
gam <UserTypeEntity> untrash messages|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||
[quick|notquick] [doit] [max_to_untrash <Number>])|(ids <MessageIDEntity>)
|
||||
```
|
||||
### Manage a specific set of messages
|
||||
* `ids <MessageIDEntity>` - A list of message ids
|
||||
|
||||
### Manage a selected set of messages
|
||||
* `((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `max_to_xxx` - Limit the number of messages that will be processed; use a value of 0 for no limit
|
||||
* `doit` - No messages are processed unless you specify `doit`. By not specifying `doit`, you can preview the messages selected to verify that the results match your expectations.
|
||||
|
||||
@@ -437,7 +463,7 @@ gam config auto_batch_min 1 groups_inde EastOffice delete message query "rfc822m
|
||||
## Display messages/threads
|
||||
```
|
||||
gam <UserTypeEntity> show messages|threads
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])*
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <RegularExpression>] [sendermatchpattern <RegularExpression>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
@@ -447,7 +473,7 @@ gam <UserTypeEntity> show messages|threads
|
||||
[saveattachments [attachmentnamepattern <RegularExpression>]]
|
||||
[targetfolder <FilePath>] [overwrite [<Boolean>]]
|
||||
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
||||
(((query <QueryGmail>) (matchlabel <LabelName>) [or|and])*
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <RegularExpression>] [sendermatchpattern <RegularExpression>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
@@ -465,7 +491,7 @@ By default, Gam displays all messages.
|
||||
* `ids <MessageIDEntity>` - A list of message ids
|
||||
|
||||
## Display a selected set of messages
|
||||
* `((query <QueryGmail>) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+` - Criteria to select messages
|
||||
* `max_to_xxx` - Limit the number of messages that will be displayed
|
||||
* `includespamtrash` - Include messages in the Spam and Trash folders
|
||||
* `labelmatchpattern <RegularExpression>` - Only display messages with some label that matches `<RegularExpression>`
|
||||
@@ -516,13 +542,15 @@ The `dateheaderconverttimezone [<Boolean>]>` option converts `<SMTPDateHeader>`
|
||||
* `showsize` - Display the message size
|
||||
* `showsnippet` - Display the message snippet
|
||||
|
||||
### Display message count
|
||||
### Display message counts
|
||||
* `countsonly` - Display the count of the number of messages
|
||||
* `showsize` - Display the cumulative message size
|
||||
|
||||
### Display label counts
|
||||
* `showlabels` - Display the message labels
|
||||
* `countsonly` - Display all message label counts
|
||||
* `positivecountsonly` - Display message label counts that are greater than 0
|
||||
* `showsize` - Display the cumulative message size for each label
|
||||
* `useronly` - Do not display system labels
|
||||
|
||||
## Print only options
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
## API documentation
|
||||
* https://developers.google.com/gmail/api/reference/rest/v1/users.settings.sendAs
|
||||
* https://developers.google.com/gmail/api/v1/reference/users/settings
|
||||
* https://support.google.com/a/answer/1710338
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
@@ -24,7 +25,8 @@
|
||||
<EmailAddress> ::= <String>@<DomainName>
|
||||
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::=
|
||||
<EmailAddressList>|<FileSelector>|<CSVkmdSelector>|<CSVDataSelector>
|
||||
<EmailAddressList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Users
|
||||
<Charset> ::= ascii|mbcs|utf-8|utf-8-sig|utf-16|<String>
|
||||
<Password> ::= <String>
|
||||
<SMTPHostName> ::= <String>
|
||||
@@ -80,12 +82,14 @@ of the sendas address.
|
||||
|
||||
`<SendAsContent>` is the signature, there are four ways to specify it:
|
||||
* `sig|signature|htmlsig <String>` - Use `<String>` as the signature
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the signature from `<FileName>`
|
||||
* `file|htmlfile <FileName> [charset <Charset>]` - Read the signature from `<FileName>`
|
||||
* `gdoc|ghtml <UserGoogleDoc>` - Read the signature from `<UserGoogleDoc>`
|
||||
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the signature from the Google Cloud Storage file `<StorageBucketObjectName>`
|
||||
|
||||
The `default` option sets `<EmailAddress>` as the default sendas address for the user.
|
||||
|
||||
For `treatasalias`, see: https://support.google.com/a/answer/1710338
|
||||
|
||||
You can allow users to send mail through an external SMTP server when configuring a sendas address hosted outside your email domains. You must enable
|
||||
this capability in Admin Console/Apps/Google Workspace/Gmail/Advanced settings/End User Access/Allow per-user outbound gateways.
|
||||
|
||||
@@ -138,12 +142,14 @@ gam <UserTypeEntity> signature|sig
|
||||
```
|
||||
`<SignatureContent>` is the signature, there are four ways to specify it:
|
||||
* `<String>` - Use `<String>` as the signature
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the signature from `<FileName>`
|
||||
* `file|htmlfile <FileName> [charset <Charset>]` - Read the signature from `<FileName>`
|
||||
* `gdoc|ghtml <UserGoogleDoc>` - Read the signature from `<UserGoogleDoc>`
|
||||
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the signature from the Google Cloud Storage file `<StorageBucketObjectName>`
|
||||
|
||||
The `default` option sets `<EmailAddress>` as the default sendas address for the user.
|
||||
|
||||
For `treatasalias`, see: https://support.google.com/a/answer/1710338
|
||||
|
||||
When `<UserTypeEntity>` specifies an alias, the `primary` option causes the primary
|
||||
email address signature rather than the alias signature to be set.
|
||||
|
||||
@@ -210,7 +216,7 @@ gam <UserTypeEntity> vacation <Boolean> subject <String>
|
||||
```
|
||||
`<VacationMessageContent>` is the vacation message, there are four ways to specify it:
|
||||
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the vacation message
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the vacation message from `<FileName>`
|
||||
* `file|htmlfile <FileName> [charset <Charset>]` - Read the vacation message from `<FileName>`
|
||||
* `gdoc|ghtml <UserGoogleDoc>` - Read the vacation message from `<UserGoogleDoc>`
|
||||
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the vacation message from the Google Cloud Storage file `<StorageBucketObjectName>`
|
||||
|
||||
|
||||
@@ -35,7 +35,9 @@
|
||||
<UniqueID> ::= id:<String>
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GroupList> ::= "<GroupItem>(,<GroupItem>)*"
|
||||
<GroupEntity> ::= <GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<GroupEntity> ::=
|
||||
<GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GroupRole> ::= owner|manager|member
|
||||
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
||||
```
|
||||
|
||||
@@ -42,7 +42,7 @@ gam user user@domain.com check serviceaccount
|
||||
|
||||
<NoteContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <CharSet>])|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>)|
|
||||
<JSONData>)
|
||||
@@ -51,6 +51,7 @@ gam user user@domain.com check serviceaccount
|
||||
<NotesNameList> ::= "<NotesName>(,<NotesName)*"
|
||||
<NotesNameEntity> ::=
|
||||
<NotesNameList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<NotesField> ::=
|
||||
attachments|
|
||||
@@ -89,7 +90,7 @@ gam <UserTypeEntity> create note [title <String>]
|
||||
```
|
||||
`<NoteContent>` is the note text, there are four ways to specify it:
|
||||
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the note text
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the note text from `<FileName>`
|
||||
* `file|htmlfile <FileName> [charset <Charset>]` - Read the note text from `<FileName>`
|
||||
* `gdoc|ghtml <UserGoogleDoc>` - Read the note text from `<UserGoogleDoc>`
|
||||
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the note text from the Google Cloud Storage file `<StorageBucketObjectName>`
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
# Users - Data Studio
|
||||
# Users - Looker Studio
|
||||
- [API documentation](#api-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Definitions](#definitions)
|
||||
- [Display Data Studio assets](#display-data-studio-assets)
|
||||
- [Manage Data Studio permissions](#manage-data-studio-permissions)
|
||||
- [Display Looker Studio assets](#display-looker-studio-assets)
|
||||
- [Manage Looker Studio permissions](#manage-looker-studio-permissions)
|
||||
- [Add Permissions](#add-permissions)
|
||||
- [Delete Permissions](#delete-permissions)
|
||||
- [Update Permissions](#update-permissions)
|
||||
- [Display Data Studio permissions](#display-data-studio-permissions)
|
||||
- [Display Looker Studio permissions](#display-looker-studio-permissions)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/datastudio/api/reference
|
||||
* https://developers.google.com/looker-studio/integrate/api/reference
|
||||
|
||||
## Notes
|
||||
To use these commands you must add the 'Data Studio API' to your project and update your service account authorization.
|
||||
To use these commands you must add the 'Looker Studio API' to your project and update your service account authorization.
|
||||
```
|
||||
gam update project
|
||||
gam user user@domain.com check serviceaccount
|
||||
@@ -27,31 +27,33 @@ gam user user@domain.com check serviceaccount
|
||||
<UniqueID> ::= id:<String>
|
||||
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
|
||||
<DataStudioAssetID> ::= <String>
|
||||
<DataStudioAssetIDList> ::= "<DataStudioAssetID>(,<DataStudioAssetID>)*"
|
||||
<DataStudioAssetIDEntity> ::=
|
||||
<DataStudioAssetIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<LookerStudioAssetID> ::= <String>
|
||||
<LookerStudioAssetIDList> ::= "<LookerStudioAssetID>(,<LookerStudioAssetID>)*"
|
||||
<LookerStudioAssetIDEntity> ::=
|
||||
<LookerStudioAssetIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<DataStudioPermission> ::=
|
||||
<LookerStudioPermission> ::=
|
||||
user:<EmailAddress>|
|
||||
group:<EmailAddress>|
|
||||
domain:<DomainName>|
|
||||
serviceAccount:<EmailAddress>
|
||||
<DataStudioPermissionList> ::= "<DataStudioPermission>(,<DataStudioPermission>)*"
|
||||
<DataStudioPermissionEntity> ::=
|
||||
<DataStudioPermissionList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<LookerStudioPermissionList> ::= "<LookerStudioPermission>(,<LookerStudioPermission>)*"
|
||||
<LookerStudioPermissionEntity> ::=
|
||||
<LookerStudioPermissionList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
```
|
||||
|
||||
Data Studio assets have an ID that is referred to by Google as its `name`; this is the value
|
||||
you will use wherever `<DataStudioAssetID>` is required.
|
||||
Looker Studio assets have an ID that is referred to by Google as its `name`; this is the value
|
||||
you will use wherever `<LookerStudioAssetID>` is required.
|
||||
|
||||
## Display Data Studio assets
|
||||
## Display Looker Studio assets
|
||||
```
|
||||
gam <UserTypeEntity> show datastudioassets
|
||||
gam <UserTypeEntity> show lookerstudioassets
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity>)]
|
||||
(assetids <LookerStudioAssetIDEntity>)]
|
||||
[stripcrsfromtitle]
|
||||
[formatjson]
|
||||
```
|
||||
@@ -63,7 +65,7 @@ By default, all assets of type `report` not in the trash are displayed; use the
|
||||
* `includetrashed` - Display assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Display a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Display a specific list of `assetids`
|
||||
|
||||
The `stripcrsfromtitle` option strips nulls, carriage returns and linefeeds from asset titles.
|
||||
Use this option if you discover asset titles containing these special characters; it is not common.
|
||||
@@ -71,11 +73,11 @@ Use this option if you discover asset titles containing these special characters
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam <UserTypeEntity> print datastudioassets [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> print lookerstudioassets [todrive <ToDriveAttribute>*]
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity>)]
|
||||
(assetids <LookerStudioAssetIDEntity>)]
|
||||
[stripcrsfromtitle]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
@@ -87,7 +89,7 @@ By default, all assets of type `report` not in the trash are displayed; use the
|
||||
* `includetrashed` - Display assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Display a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Display a specific list of `assetids`
|
||||
|
||||
The `stripcrsfromtitle` option strips nulls, carriage returns and linefeeds from asset titles.
|
||||
Use this option if you discover asset titles containing these special characters; it is not common.
|
||||
@@ -98,22 +100,22 @@ When using the `formatjson` option, double quotes are used extensively in the da
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Manage Data Studio permissions
|
||||
## Manage Looker Studio permissions
|
||||
* The owner of an asset can not have it's role changed.
|
||||
* The owner of an asset can not be deleted.
|
||||
* A new owner can not be added to an asset.
|
||||
|
||||
`<EmailAddress>` in `<DataStudioPermission>` must be complete, GAM will not add a domain name.
|
||||
`<EmailAddress>` in `<LookerStudioPermission>` must be complete, GAM will not add a domain name.
|
||||
|
||||
A viewer can not manage permissions.
|
||||
### Add permissions
|
||||
```
|
||||
gam <UserTypeEntity> add datastudiopermissions
|
||||
gam <UserTypeEntity> add lookerstudiopermissions
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity)]
|
||||
(role editor|viewer <DataStudioPermissionEntity>)+
|
||||
(assetids <LookerStudioAssetIDEntity)]
|
||||
(role editor|viewer <LookerStudioPermissionEntity>)+
|
||||
[nodetails]
|
||||
```
|
||||
By default, the permission is added to all assets of type `report` not in the trash; use the following options to select a subset of assets.
|
||||
@@ -124,19 +126,19 @@ By default, the permission is added to all assets of type `report` not in the tr
|
||||
* `includetrashed` - Add permission to assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Add permission to a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Add permission to a specific list of `assetids`
|
||||
|
||||
By default, when a permission is added, GAM outputs details of the permission. The `nodetails` option
|
||||
suppresses this output.
|
||||
|
||||
### Delete permissions
|
||||
```
|
||||
gam <UserTypeEntity> delete datastudiopermissions
|
||||
gam <UserTypeEntity> delete lookerstudiopermissions
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity)]
|
||||
(role any <DataStudioPermissionEntity>)+
|
||||
(assetids <LookerStudioAssetIDEntity)]
|
||||
(role any <LookerStudioPermissionEntity>)+
|
||||
[nodetails]
|
||||
```
|
||||
By default, the permission is deleted from all assets of type `report` not in the trash; use the following options to select a subset of assets.
|
||||
@@ -147,7 +149,7 @@ By default, the permission is deleted from all assets of type `report` not in th
|
||||
* `includetrashed` - Delete permission from assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Delete permission from a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Delete permission from a specific list of `assetids`
|
||||
|
||||
By default, when a permission is deleted, GAM outputs details of the permission. The `nodetails` option
|
||||
suppresses this output.
|
||||
@@ -155,12 +157,12 @@ suppresses this output.
|
||||
### Update permissions
|
||||
A permission is updated by deleting the existing permission and then adding the new permission.
|
||||
```
|
||||
gam <UserTypeEntity> update datastudiopermissions
|
||||
gam <UserTypeEntity> update lookerstudiopermissions
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity)]
|
||||
(role editor|viewer <DataStudioPermissionEntity>)+
|
||||
(assetids <LookerStudioAssetIDEntity)]
|
||||
(role editor|viewer <LookerStudioPermissionEntity>)+
|
||||
[nodetails]
|
||||
```
|
||||
By default, the permission is updated in all assets of type `report` not in the trash; use the following options to select a subset of assets.
|
||||
@@ -171,20 +173,20 @@ By default, the permission is updated in all assets of type `report` not in the
|
||||
* `includetrashed` - Update permission in assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Update permission in a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Update permission in a specific list of `assetids`
|
||||
|
||||
By default, when a permission is updated, GAM outputs details of the permission. The `nodetails` option
|
||||
suppresses this output.
|
||||
|
||||
## Display Data Studio permissions
|
||||
## Display Looker Studio permissions
|
||||
|
||||
A viewer can not display permissions.
|
||||
```
|
||||
gam <UserTypeEntity> show datastudiopermissions
|
||||
gam <UserTypeEntity> show lookerstudiopermissions
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity>)]
|
||||
(assetids <LookerStudioAssetIDEntity>)]
|
||||
[role editor|owner|viewer]
|
||||
[formatjson]
|
||||
```
|
||||
@@ -196,19 +198,19 @@ By default, permissions for all assets of type `report` not in the trash are dis
|
||||
* `includetrashed` - Display permissions for assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Display permissions for a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Display permissions for a specific list of `assetids`
|
||||
|
||||
The Data Studio API defines this parameter `role editor|owner|viewer` but it doesn't seem to have any effect.
|
||||
The Looker Studio API defines this parameter `role editor|owner|viewer` but it doesn't seem to have any effect.
|
||||
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print datastudiopermissions [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> print lookerstudiopermissions [todrive <ToDriveAttribute>*]
|
||||
[([assettype report|datasource|all] [title <String>]
|
||||
[owner <Emailddress>] [includetrashed]
|
||||
[orderby title [ascending|descending]]) |
|
||||
(assetids <DataStudioAssetIDEntity>)]
|
||||
(assetids <LookerStudioAssetIDEntity>)]
|
||||
[role editor|owner|viewer]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
@@ -220,9 +222,9 @@ By default, permissions for all assets of type `report` not in the trash are dis
|
||||
* `includetrashed` - Display permissions for assets in the trash
|
||||
* `orderby title [ascending|descending]` - Order of assets
|
||||
* Specific
|
||||
* `assetids <DataStudioAssetIDEntity>` - Display permissions for a specific list of `assetids`
|
||||
* `assetids <LookerStudioAssetIDEntity>` - Display permissions for a specific list of `assetids`
|
||||
|
||||
The Data Studio API defines this parameter `role editor|owner|viewer` but it doesn't seem to have any effect.
|
||||
The Looker Studio API defines this parameter `role editor|owner|viewer` but it doesn't seem to have any effect.
|
||||
|
||||
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.
|
||||
@@ -21,6 +21,7 @@
|
||||
- [Manage User Contact Groups](#manage-user-contact-groups)
|
||||
- [Display User Contact Groups](#display-user-contact-groups)
|
||||
- [Display User People Profile](#display-user-people-profile)
|
||||
- [Copy User Contacts to another User](#copy-user-contacts-to-another-user)
|
||||
|
||||
## Notes
|
||||
As of version `6.08.00`, GAM uses the People API to manage user contacts rather than the Contacts API.
|
||||
@@ -63,6 +64,7 @@ gam user user@domain.com check serviceaccount
|
||||
<PeopleResourceNameList> ::= "<PeopleResourceName>(,<PeopleResourceName>)*"
|
||||
<PeopleResourceNameEntity> ::=
|
||||
<PeopleResourceNameNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<PeopleContactGroupName> ::= <String>
|
||||
<PeopleContactGroupResourceName> ::= (contactgroup/<String>)|<String>
|
||||
@@ -70,6 +72,7 @@ gam user user@domain.com check serviceaccount
|
||||
<PeopleContactGroupList> ::= "<PeopleContactGroupItem>(,<PeopleContactGroupItem>)*"
|
||||
<PeopleContactGroupEntity> ::=
|
||||
<PeopleContactGroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<PeopleUserContactSelection> ::=
|
||||
[(selectcontactgroup <PeopleContactGroupItem>)|
|
||||
[query <QueryContact>]]
|
||||
@@ -175,6 +178,7 @@ gam user user@domain.com check serviceaccount
|
||||
<OtherContactsResourceNameList> ::= "<OtherContactsResourceName>(,<OtherContactsResourceName>)*"
|
||||
<OtherContactsResourceNameEntity> ::=
|
||||
<OtherContactsResourceNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<OtherContactsSelection> ::=
|
||||
[query <QueryContact>]
|
||||
@@ -250,10 +254,24 @@ then filters the list to only those in `<PeopleContactGroupItem>`; quota limits
|
||||
gam <UserTypeEntity> create contact
|
||||
[<PeopleContactAttribute>+]
|
||||
(contactgroup <PeopleContactGroupItem>)*
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*))| returnidonly]
|
||||
```
|
||||
You may specify zero or more contact groups with `(contactgroup <PeopleContactGroupItem>)*`;
|
||||
these contact groups define the complete contact group list for the contact.
|
||||
|
||||
By default, the user name and contact ID are displayed on stdout.
|
||||
* `csv [todrive <ToDriveAttribute>*]` - Write user name and contact ID values to a CSV file.
|
||||
* `addcsvdata <FieldName> <String>` - Add additional columns of data from the command line to the output
|
||||
* `returnidonly` - Display just the contact ID on stdout
|
||||
|
||||
To retrieve the contact ID with `returnidonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
contactId=$(gam user user@domain.com create contact ... returnidonly)
|
||||
Windows PowerShell
|
||||
$contactId = & gam user user@domain.com create contact ... returnidonly
|
||||
```
|
||||
|
||||
## Update User Contacts
|
||||
```
|
||||
gam <UserTypeEntity> update contacts
|
||||
@@ -344,6 +362,11 @@ If `<PeopleUserContactSelection>` specifies `emailmatchpattern <RegularExpressio
|
||||
are updated.
|
||||
|
||||
## Display User Contacts
|
||||
### User Contact Group information
|
||||
In the following commands, specifying `allfields` or including `memberships` in `fields <PeopleFieldNameList>`
|
||||
yields contact group information but only gives the contact group ID. Use the `showgroups` option to have GAM
|
||||
make additional API calls to get the contact group name associated with the ID.
|
||||
|
||||
### Display as an indented list of keys and values.
|
||||
```
|
||||
gam <UserTypeEntity> info contacts
|
||||
@@ -546,6 +569,21 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
||||
## Manage User Contact Groups
|
||||
```
|
||||
gam <UserTypeEntity> create contactgroup <PeopleContactGroupAttribute>+
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*))| returnidonly]
|
||||
```
|
||||
By default, the user name and contactgroup ID are displayed on stdout.
|
||||
* `csv [todrive <ToDriveAttribute>*]` - Write user name and contactgroup ID values to a CSV file.
|
||||
* `addcsvdata <FieldName> <String>` - Add additional columns of data from the command line to the output
|
||||
* `returnidonly` - Display just the contactgroup ID on stdout
|
||||
|
||||
To retrieve the contactgroup ID with `returnidonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
contactGroupId=$(gam user user@domain.com create contactgroup ... returnidonly)
|
||||
Windows PowerShell
|
||||
$contactGroupId = & gam user user@domain.com create contactgroup ... returnidonly
|
||||
```
|
||||
```
|
||||
gam <UserTypeEntity> update contactgroup <PeopleContactGroupItem> <PeopleContactGroupAttribute>+
|
||||
gam <UserTypeEntity> delete contactgroups <PeopleContactGroupEntity>
|
||||
```
|
||||
@@ -615,3 +653,15 @@ 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.
|
||||
|
||||
## Copy User Contacts to another User
|
||||
|
||||
To copy one user's contacts to another user perform the following steps.
|
||||
```
|
||||
# Copy contact groups
|
||||
gam redirect csv ./ContactGroups.csv user sourceuser@domain.com print contactgroups formatjson
|
||||
gam redirect stdout ./CopyContactGroups.txt multiprocess redirect stderr stdout csv ContactGroups.csv gam user targetuser@domain.com create contactgroup json "~JSON"
|
||||
|
||||
# Copy contacts
|
||||
gam redirect csv ./Contacts.csv user sourceuser@domain.com print contacts selectmaincontacts allfields showgroups formatjson
|
||||
gam redirect stdout ./CopyContacts.txt multiprocess redirect stderr stdout csv Contacts.csv gam user targetuser@domain.com create contact json "~JSON"
|
||||
```
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
- [Display Shared Drive access](#display-shared-drive-access)
|
||||
- [Display Shared Drive access for specific Shared Drives](#display-shared-drive-access-for-specific-shared-drives)
|
||||
- [Display Shared Drive access for selected Shared Drives](#display-shared-drive-access-for-selected-shared-drives)
|
||||
- [Change User1 Shared Drive access to User2](#change-user1-shared-drive-access-to-user2)
|
||||
- [Display empty folders on a Shared Drive](#display-empty-folders-on-a-shared-drive)
|
||||
- [Delete empty folders on a Shared Drive](#delete-empty-folders-on-a-shared-drive)
|
||||
- [Empty the trash on a Shared Drive](#empty-the-trash-on-a-shared-drive)
|
||||
@@ -25,6 +26,7 @@
|
||||
* https://developers.google.com/drive/v3/web/manage-teamdrives#managing_team_drives_for_domain_administrators
|
||||
* https://support.google.com/a/answer/7374057
|
||||
* https://workspaceupdates.googleblog.com/2022/05/shared-drives-in-organizational-units-open-beta.html
|
||||
* https://support.google.com/a/users/answer/7338880
|
||||
|
||||
## Query documentation
|
||||
* https://developers.google.com/drive/api/v3/search-shareddrives
|
||||
@@ -428,6 +430,17 @@ This command must be issued by a user with Shared Drive permission role organize
|
||||
gam <UserTypeEntity> print emptydrivefolders [todrive <ToDriveAttribute>*]
|
||||
select <SharedDriveEntity>
|
||||
```
|
||||
|
||||
## Change User1 Shared Drive access to User2
|
||||
```
|
||||
# Get Shared Drives for User1
|
||||
gam redirect csv ./U1SharedDrives.csv user user1@domain.com print shareddriveacls pm emailaddress user1@domain.com em oneitemperrow
|
||||
# For each of those Shared Drives, delete User1 access
|
||||
gam redirect stdout ./DeleteU1SharedDriveAccess.txt multiprocess redirect stderr stdout gam delete drivefileacl "~id" "~permission.emailAddress"
|
||||
# For each of those Shared Drives, add User2 with the same role that User1 had
|
||||
gam redirect stdout ./AddU2SharedDriveAccess.txt multiprocess redirect stderr stdout gam create drivefileacl "~id" user user2@domain.com role "~permission.role"
|
||||
```
|
||||
|
||||
## Delete empty folders on a Shared Drive
|
||||
This command must be issued by a user with Shared Drive permission role organizer.
|
||||
```
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Users - Tasks
|
||||
- [API documentation](#api-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Specifying task lists](#specifying-task-lists)
|
||||
- [Create Tasks](#create-tasks)
|
||||
- [Update Tasks](#update-tasks)
|
||||
- [Delete Tasks](#delete-tasks)
|
||||
@@ -29,13 +29,17 @@ gam user user@domain.com check serviceaccount
|
||||
```
|
||||
<TaskID> ::= <String>
|
||||
<TaskListID> ::= <String>
|
||||
<TaskListTitle> ::= tltitle:<String>
|
||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||
<TasklistIDTaskID> ::= <TasklistID>/<TaskID>
|
||||
<TasklistIDList> ::= "<TasklistID>(,<TasklistID>)*"
|
||||
<TasklistIDTaskIDList> ::= "<TasklistIDTaskID>(,<TasklistIDTaskID>)*"
|
||||
<TasklistIDEntity> ::=
|
||||
<TasklistIDList> | <FileSelector> | <CSVFileSelector>
|
||||
<TasklistEntity> ::=
|
||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<TasklistIDTaskIDEntity> ::=
|
||||
<TasklistIDTaskIDList> | <FileSelector> | <CSVFileSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
|
||||
<TaskAttribute> ::=
|
||||
(title <String>)|
|
||||
@@ -46,9 +50,22 @@ gam user user@domain.com check serviceaccount
|
||||
<TasklistAttribute> ::=
|
||||
(title <String>)
|
||||
```
|
||||
## Specifying task lists
|
||||
|
||||
The Tasks API requires that a task list be specified by its ID; GAM allows specification of a task list
|
||||
by its title and makes an additional API call to convert the title to an ID.
|
||||
|
||||
Note the quoting in `<TasklistTitleList>`; the entire list should be enclosed in `"` and
|
||||
each `tltitle:<String>` must be enclosed in `'` if `<String>` contains a space.
|
||||
|
||||
```
|
||||
gam user user@domain.com create task "'tltitle:My Tasks'" title "Task title" notes "Task Notes"
|
||||
gam user user@domain.com info tasklist "'tltitle:My Tasks'"
|
||||
```
|
||||
|
||||
## Create Tasks
|
||||
```
|
||||
gam <UserTypeEntity> create task <TasklistIDEntity>
|
||||
gam <UserTypeEntity> create task <TasklistEntity>
|
||||
<TaskAttribute>* [parent <TaskID>] [previous <TaskID>]
|
||||
[compact|formatjson|returnidonly]
|
||||
```
|
||||
@@ -94,7 +111,7 @@ By default, Gam displays the tasks as an indented list of keys and values; the t
|
||||
|
||||
### Display all tasks
|
||||
```
|
||||
gam <UserTypeEntity> show tasks [tasklists <TasklistIDEntity>]
|
||||
gam <UserTypeEntity> show tasks [tasklists <TasklistEntity>]
|
||||
[completedmin <Time>] [completedmax <Time>]
|
||||
[duemin <Time>] [duemax <Time>]
|
||||
[updatedmin <Time>]
|
||||
@@ -117,7 +134,7 @@ By default, only tasks with status `needsAction` are displayed.
|
||||
* `showcompleted` - Add completed tasks to the display. `showHidden` must also be True to show tasks completed in first party clients, such as the web UI and Google's mobile apps.
|
||||
* `showall` - Equivalent to `showdeleted` `showhidden` `showcompleted`
|
||||
```
|
||||
gam <UserTypeEntity> print tasks [tasklists <TasklistIDEntity>] [todrive <ToDriveAttribute>*]
|
||||
gam <UserTypeEntity> print tasks [tasklists <TasklistEntity>] [todrive <ToDriveAttribute>*]
|
||||
[completedmin <Time>] [completedmax <Time>]
|
||||
[duemin <Time>] [duemax <Time>]
|
||||
[updatedmin <Time>]
|
||||
@@ -136,6 +153,9 @@ By default, only tasks with status `needsAction` are displayed.
|
||||
* `showcompleted` - Add completed tasks to the display. `showHidden` must also be True to show tasks completed in first party clients, such as the web UI and Google's mobile apps.
|
||||
* `showall` - Equivalent to `showdeleted` `showhidden` `showcompleted`
|
||||
|
||||
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.
|
||||
@@ -154,7 +174,7 @@ By default, Gam displays the created task list as an indented list of keys and v
|
||||
|
||||
## Update Task Lists
|
||||
```
|
||||
gam <UserTypeEntity> update tasklist <TasklistIDEntity>
|
||||
gam <UserTypeEntity> update tasklist <TasklistEntity>
|
||||
<TasklistAttribute>*
|
||||
[formatjson]
|
||||
```
|
||||
@@ -163,19 +183,19 @@ By default, Gam displays the updated task list as an indented list of keys and v
|
||||
|
||||
## Delete Task Lists
|
||||
```
|
||||
gam <UserTypeEntity> delete tasklist <TasklistIDEntity>
|
||||
gam <UserTypeEntity> delete tasklist <TasklistEntity>
|
||||
```
|
||||
|
||||
## Clear Task Lists
|
||||
Clears all completed tasks from the specified task lists.
|
||||
```
|
||||
gam <UserTypeEntity> clear tasklist <TasklistIDEntity>
|
||||
gam <UserTypeEntity> clear tasklist <TasklistEntity>
|
||||
```
|
||||
|
||||
## Display Task Lists
|
||||
### Display selected task lists
|
||||
```
|
||||
gam <UserTypeEntity> info tasklist <TasklistIDEntity>
|
||||
gam <UserTypeEntity> info tasklist <TasklistEntity>
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the task lists as an indented list of keys and values.
|
||||
@@ -193,6 +213,9 @@ By default, Gam displays the task lists as an indented list of keys and values.
|
||||
gam <UserTypeEntity> print tasklists [todrive <ToDriveAttribute>*]
|
||||
[countsonly | (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.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Users - Tokens
|
||||
- [API documentation](#api-documentation)
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [Delete a user's token](#delete-a-users-token)
|
||||
- [Display individual user's tokens](#display-individual-users-tokens)
|
||||
|
||||
146
docs/Users-YouTube.md
Normal file
146
docs/Users-YouTube.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Users - YouTube
|
||||
- [API documentation](#api-documentation)
|
||||
- [Notes](#notes)
|
||||
- [Definitions](#definitions)
|
||||
- [Display Selected YouTube Channels](#display-selected-youtube-channels)
|
||||
- [Display Owned YouTube Channels](#display-owned-youtube-channels)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/youtube/v3/docs/channels/list
|
||||
|
||||
## Notes
|
||||
To use these commands you must add the 'YouTube API' to your project and update your service account authorization.
|
||||
```
|
||||
gam update project
|
||||
gam user user@domain.com update serviceaccount
|
||||
```
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
```
|
||||
<BCP47LanguageCode> ::=
|
||||
ar-sa| # Arabic Saudi Arabia
|
||||
cs-cz| # Czech Czech Republic
|
||||
da-dk| # Danish Denmark
|
||||
de-de| # German Germany
|
||||
el-gr| # Modern Greek Greece
|
||||
en-au| # English Australia
|
||||
en-gb| # English United Kingdom
|
||||
en-ie| # English Ireland
|
||||
en-us| # English United States
|
||||
en-za| # English South Africa
|
||||
es-es| # Spanish Spain
|
||||
es-mx| # Spanish Mexico
|
||||
fi-fi| # Finnish Finland
|
||||
fr-ca| # French Canada
|
||||
fr-fr| # French France
|
||||
he-il| # Hebrew Israel
|
||||
hi-in| # Hindi India
|
||||
hu-hu| # Hungarian Hungary
|
||||
id-id| # Indonesian Indonesia
|
||||
it-it| # Italian Italy
|
||||
ja-jp| # Japanese Japan
|
||||
ko-kr| # Korean Republic of Korea
|
||||
nl-be| # Dutch Belgium
|
||||
nl-nl| # Dutch Netherlands
|
||||
no-no| # Norwegian Norway
|
||||
pl-pl| # Polish Poland
|
||||
pt-br| # Portuguese Brazil
|
||||
pt-pt| # Portuguese Portugal
|
||||
ro-ro| # Romanian Romania
|
||||
ru-ru| # Russian Russian Federation
|
||||
sk-sk| # Slovak Slovakia
|
||||
sv-se| # Swedish Sweden
|
||||
th-th| # Thai Thailand
|
||||
tr-tr| # Turkish Turkey
|
||||
zh-cn| # Chinese China
|
||||
zh-hk| # Chinese Hong Kong
|
||||
zh-tw # Chinese Taiwan
|
||||
|
||||
<YouTubeChannelID> ::= <String>
|
||||
<YouTubeChannelIDList> ::= "<YouTubeChannelID>(,<YouTubeChannelID>)*"
|
||||
|
||||
<YouTubeChannelFieldName> ::=
|
||||
brandingsettings|
|
||||
contentdetails|
|
||||
contentownerdetails|
|
||||
id|
|
||||
localizations|
|
||||
snippet|
|
||||
statistics|
|
||||
status|
|
||||
topicdetails
|
||||
<YouTubeChannelFieldNameList> ::= "<YouTubeChannelFieldName>(,<YouTubeChannelFieldName>)*"
|
||||
```
|
||||
## Display Selected YouTube Channels
|
||||
Display YouTube channels selected by ID.
|
||||
```
|
||||
gam <UserTypeEntity> show youtubechannels
|
||||
(mine|
|
||||
(ids|channels <YouTubeChannelIDList>)|
|
||||
(forusername <String>)|
|
||||
(managedbyme <String>))
|
||||
[languagecode <BCP47LanguageCode>]
|
||||
[allfields|(fields <YouTubeChannelFieldNameList>)]
|
||||
[formatjson]
|
||||
```
|
||||
By default, only the YouTube channel ID is displayed; use `allfields|fields` to select additional fields for display.
|
||||
|
||||
By default, Gam displays the YouTube channels as an indented list of keys and values.
|
||||
* `formatjson` - Display the YouTube channels in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print youtubechannels [todrive <ToDriveAttribute>*]
|
||||
(mine|
|
||||
(ids|channels <YouTubeChannelIDList>)|
|
||||
(forusername <String>)|
|
||||
(managedbyme <String>))
|
||||
[languagecode <BCP47LanguageCode>]
|
||||
[allfields|(fields <YouTubeChannelFieldNameList>)]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, only the YouTube channel ID is displayed; use `allfields|fields` to select additional fields for display.
|
||||
|
||||
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/proces output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/procesable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
## Display Owned YouTube Channels
|
||||
Display YouTube channels owned by a user.
|
||||
```
|
||||
gam <UserTypeEntity> show youtubechannels
|
||||
[languagecode <BCP47LanguageCode>]
|
||||
[allfields|(fields <YouTubeChannelFieldNameList>)]
|
||||
[formatjson]
|
||||
```
|
||||
By default, only the YouTube channel ID is displayed; use `allfields|fields` to select additional fields for display.
|
||||
|
||||
By default, Gam displays the YouTube channels as an indented list of keys and values.
|
||||
* `formatjson` - Display the YouTube channels in JSON format
|
||||
|
||||
```
|
||||
gam <UserTypeEntity> print youtubechannels [todrive <ToDriveAttribute>*]
|
||||
(mine|
|
||||
(ids|channels <YouTubeChannelIDList>)|
|
||||
(forusername <String>)|
|
||||
(managedbyme <String>))
|
||||
[languagecode <BCP47LanguageCode>]
|
||||
[allfields|(fields <YouTubeChannelFieldNameList>)]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
By default, only the YouTube channel ID is displayed; use `allfields|fields` to select additional fields for display.
|
||||
|
||||
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/proces output.
|
||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/procesable output.
|
||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||
|
||||
156
docs/Users.md
156
docs/Users.md
@@ -4,7 +4,6 @@
|
||||
- [Query documentation](#query-documentation)
|
||||
- [Quoting rules](#quoting-rules)
|
||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function and Search function
|
||||
- [Collections of Users](Collections-of-Users)
|
||||
- [Definitions](#definitions)
|
||||
- [User Attributes](#user-attributes)
|
||||
- [Admin Console User Info](#admin-console-user-info)
|
||||
@@ -13,7 +12,7 @@
|
||||
- [Define schema fields](#define-schema-fields)
|
||||
- [Clear schema fields](#clear-schema-fields)
|
||||
- [Create a user](#create-a-user)
|
||||
- [Specify a user's attributes with JSON data](#specify-a-users-attributes-with-JSON-data)
|
||||
- [Specify a user's attributes with JSON data](#specify-a-users-attributes-with-json-data)
|
||||
- [Verify mailbox creation](#verify-mailbox-creation)
|
||||
- [Update a user](#update-a-user)
|
||||
- [Special case processing for update user](#special-case-processing-for-update-user)
|
||||
@@ -21,9 +20,9 @@
|
||||
- [Update a user's name](#update-a-users-name)
|
||||
- [Update a user's password](#update-a-users-password)
|
||||
- [Update a user's primary email address](#update-a-users-primary-email-address)
|
||||
- [Update a user's attributes with JSON data](#update-a-users-attributes-with-JSON-data)
|
||||
- [Update a user's attributes with JSON data](#update-a-users-attributes-with-json-data)
|
||||
- [Update a user's OU based on group membership](#update-a-users-ou-based-on-group-membership)
|
||||
- [Do not update a user's OU if currently in a special purpose OU](#do-not-update-a-users-OU-if-currently-in-a-special-purpose-ou)
|
||||
- [Do not update a user's OU if currently in a special purpose OU](#do-not-update-a-users-ou-if-currently-in-a-special-purpose-ou)
|
||||
- [Delete or suspend users](#delete-or-suspend-users)
|
||||
- [Undelete or unsuspend users](#undelete-or-unsuspend-users)
|
||||
- [Display information about users](#display-information-about-users)
|
||||
@@ -34,11 +33,12 @@
|
||||
- [Print a header row and primaryEmail for all users](#print-a-header-row-and-primaryemail-for-all-users)
|
||||
- [Print user details](#print-user-details)
|
||||
- [Print a header row and fields for selected users](#print-a-header-row-and-fields-for-selected-users)
|
||||
- [Print a header row and fields for users specified by `<UserTypeEntity>`](#print-a-header-row-and-fields-for-users-specified-by-UserTypeEntity)
|
||||
- [Print a header row and fields for users specified by `<UserTypeEntity>`](#print-a-header-row-and-fields-for-users-specified-by-usertypeentity)
|
||||
- [Print user domain counts](#print-user-domain-counts)
|
||||
- [Print domain counts for users in a specific domain and/or selected by a query](#print-domain-counts-for-users-in-a-specific-domain-and-or-selected-by-a-query)
|
||||
- [Print domain counts for users specified by `<UserTypeEntity>`](#print-domain-counts-for-users-specified-by-UserTypeEntity)
|
||||
- [Print domain counts for users specified by `<UserTypeEntity>`](#print-domain-counts-for-users-specified-by-usertypeentity)
|
||||
- [Print user list](#print-user-list)
|
||||
- [Display user counts](#display-user-counts)
|
||||
|
||||
## API documentation
|
||||
* https://developers.google.com/admin-sdk/directory/reference/rest/v1/users
|
||||
@@ -64,11 +64,18 @@ Typically, you will enclose the entire list in double quotes and quote each item
|
||||
* ```"'it em' 'it,em' \"it'em\""```
|
||||
|
||||
For example, a list of queries for Org Units where the Org Unit names contain spaces:
|
||||
|
||||
* Linux and MacOS and Windows Command Prompt
|
||||
```
|
||||
queries "\"orgUnitPath='/Students/Middle School'\",\"orgUnitPath='/Students/Lower School'\""
|
||||
```
|
||||
* Windows Power Shell
|
||||
```
|
||||
queries "`"orgUnitPath=\'/Students/Lower\ School/2027\'`",`"orgUnitPath=\'/Students/Lower\ School/2028\'`""
|
||||
```
|
||||
|
||||
## Definitions
|
||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||
* [Command data from Google Docs/Sheets/Storage](Command-Data-From-Google-Docs-Sheets-Storage)
|
||||
```
|
||||
<DeliverySetting> ::=
|
||||
@@ -79,6 +86,9 @@ queries "\"orgUnitPath='/Students/Middle School'\",\"orgUnitPath='/Students/Low
|
||||
none|nomail
|
||||
|
||||
<DomainName> ::= <String>(.<String>)+
|
||||
<DomainNameList> ::= "<DomainName>(,<DomainName>)*"
|
||||
<DomainNameEntity> ::=
|
||||
<DomainNameList> | <FileSelector> | <CSVFileSelector>
|
||||
<EmailAddress> ::=
|
||||
<String>@<DomainName> |
|
||||
<String> <<String>@<DomainName>> # The outer <> around <String>@<DomainName> are literal, e.g., IT Group<group@domain.com>
|
||||
@@ -89,6 +99,7 @@ queries "\"orgUnitPath='/Students/Middle School'\",\"orgUnitPath='/Students/Low
|
||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<GroupList> ::= "<GroupItem>(,<GroupItem>)*"
|
||||
<GroupEntity> ::= <GroupList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<GroupRole> ::= owner|manager|member
|
||||
|
||||
<OrgUnitID> ::= id:<String>
|
||||
@@ -360,7 +371,8 @@ When creating a user or updating a user's password, you can send a message with
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
[notifyonupdate [<Boolean>]]
|
||||
@@ -373,7 +385,7 @@ If subject is not specified, the following value will be used:
|
||||
|
||||
`<NotifyMessageContent>` is the message, there are four ways to specify it:
|
||||
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the message
|
||||
* `file|htmlfile <FileName> [charset <CharSet>]` - Read the message from `<FileName>`
|
||||
* `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>`
|
||||
|
||||
@@ -409,6 +421,7 @@ is sent when the user is updated or created. Use `notifyonupdate false` to suppr
|
||||
|
||||
By default, the email is sent from the admin user identified in oauth2.txt, `gam oauth info` will show the value.
|
||||
Use `from <EmailAddress>` to specify an alternate from address.
|
||||
Use `mailbox <EmailAddress>` if `from <EmailAddress>` specifies a group; GAM has to login as a user to be able to send a message.
|
||||
Gam gets no indication as to the status of the message delivery; the from user will get a non-delivery receipt if the message could not be sent to the `notify <EmailAddressList>`.
|
||||
|
||||
By default, messages are sent as plain text, use `html` or `html true` to indicate that the message is HTML.
|
||||
@@ -475,7 +488,7 @@ clearschema <SchemaName>.<FieldName>
|
||||
## Create a user
|
||||
```
|
||||
gam create user <EmailAddress> [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable]
|
||||
[verifynotinvitable|alwaysevict]
|
||||
(groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
|
||||
[alias|aliases <EmailAddressList>]
|
||||
[license <SKUIDList> [product|productid <ProductID>]]
|
||||
@@ -483,15 +496,22 @@ gam create user <EmailAddress> [ignorenullpassword] <UserAttribute>*
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
[lograndompassword <FileName>]
|
||||
[addnumericsuffixonduplicate <Number>]
|
||||
```
|
||||
When `verifynotinvitable` is specified, GAM verifies that the email address being updated is not that of an unmanaged account;
|
||||
When `verifynotinvitable` is specified, GAM verifies that the email address being created is not that of an unmanaged account;
|
||||
if it is, the command is not performed.
|
||||
|
||||
By default, when creating a user that has a conflict with an unmanaged account, GAM will honor the setting as described on these pages.
|
||||
* https://support.google.com/a/answer/11112794
|
||||
* https://admin.google.com/ac/accountsettings/conflictaccountmanagement
|
||||
|
||||
Specifying `alwaysevict` forces GAM to select this setting: `Replace conflicting unmanaged accounts with managed ones`
|
||||
|
||||
The user will be added to the groups specified by `groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>`.
|
||||
|
||||
The user aliases in `alias|aliases <EmailAddressList>` will be created.
|
||||
@@ -534,6 +554,14 @@ gam redirect stdout CreateUsers.log multiprocess redirect stderr stdout csv Crea
|
||||
gam create user "~useremail" firstname "~firstname" lastname "~lastname" ou "~ou" password "~password"
|
||||
notify "~~notifyemail~~,helpdesk@domain.com"
|
||||
```
|
||||
### Create users in bulk in OU with forced 2FA, notify each user and send a second email with backup codes. Log each step.
|
||||
OU needs to be already set with forced 2FA, else you can't create backup codes in step 2.
|
||||
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"
|
||||
```
|
||||
|
||||
## Specify a user's attributes with JSON data
|
||||
When creating a user, you may have a set of attributes that you'd like to assign to the user without having to specify
|
||||
@@ -575,10 +603,10 @@ If the mailbox is setup, a zero return code is returned; if the retries are exha
|
||||
## Update a user
|
||||
```
|
||||
gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable] [noactionifalias]
|
||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName>] [clearschema <SchemaName>.<FieldName>]
|
||||
[createifnotfound] [notfoundpassword random|<Password>]
|
||||
@@ -588,6 +616,7 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
@@ -595,10 +624,10 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
[lograndompassword <FileName>]
|
||||
gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable] [noactionifalias]
|
||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName>] [clearschema <SchemaName>.<FieldName>]
|
||||
[createifnotfound] [notfoundpassword random|<Password>]
|
||||
@@ -608,6 +637,7 @@ gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
@@ -615,10 +645,10 @@ gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
[lograndompassword <FileName>]
|
||||
gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable] [noactionifalias]
|
||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName>] [clearschema <SchemaName>.<FieldName>]
|
||||
[createifnotfound] [notfoundpassword random|<Password>]
|
||||
@@ -628,6 +658,7 @@ gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
@@ -639,6 +670,14 @@ gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||
When `verifynotinvitable` is specified, GAM verifies that the email address being updated is not that of an unmanaged account;
|
||||
if it is, the command is not performed.
|
||||
|
||||
If `createifnotfound` is specified and the user was not found to update and must be created, the following applies.
|
||||
|
||||
By default, when creating a user that has a conflict with an unmanaged account, GAM will honor the setting as described on these pages.
|
||||
* https://support.google.com/a/answer/11112794
|
||||
* https://admin.google.com/ac/accountsettings/conflictaccountmanagement
|
||||
|
||||
Specifying `alwaysevict` forces GAM to select this setting: `Replace conflicting unmanaged accounts with managed ones`
|
||||
|
||||
When `noactionifalias` is specified, no action is performed if `<UserItem>` or `<UserTypeEntity>` specifies an alias rather than a primary email address.
|
||||
|
||||
**Note that when `changepassword true` is specified, the user is immediately logged out.**
|
||||
@@ -782,12 +821,13 @@ groupz@domain.com,/Path/To/OUz
|
||||
No update is performed if a user does not belong to any group in the CSV file or belongs to multiple groups in the CSV file.
|
||||
|
||||
```
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[columndelimiter <Character>] [quotechar <Character>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
```
|
||||
* `<FileName>` - A CSV file containing rows with columns of items
|
||||
* `columndelimiter <Character>` - Columns are separated by `<Character>`; if not specified, the value of `csv_input_column_delimiter` from `gam.cfg` will be used
|
||||
* `noescapechar <Boolean>` - Should `\` be ignored as an escape character; if not specified, the value of `csv_input_no_escape_char` from `gam.cfg` will be used
|
||||
* `quotechar <Character>` - The column quote characer is `<Character>`; if not specified, the value of `csv_input_quote_char` from `gam.cfg` will be used
|
||||
* `fields <FieldNameList>` - The column headings of a CSV file that does not contain column headings
|
||||
* `keyfield <FieldName>` - The column heading of the group column; the default is Group
|
||||
@@ -937,10 +977,12 @@ gam print users
|
||||
See: https://developers.google.com/admin-sdk/directory/v1/guides/search-users
|
||||
```
|
||||
gam print users [todrive <ToDriveAttribute>*]
|
||||
([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
[limittoou <OrgUnitPath>|<OrgUnitID>] [deleted_only|only_deleted])
|
||||
([domain|domains <DomainNameEntity>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
[limittoou <OrgUnitItem>] [deleted_only|only_deleted])
|
||||
[orderby <UserOrderByFieldName> [ascending|descending]]
|
||||
[groups|groupsincolumns] [license|licenses|licence|licences]
|
||||
[groups|groupsincolumns]
|
||||
[license|licenses|licence|licences]
|
||||
[onelicenseperrow|onelicenceperrow]
|
||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||
[emailpart|emailparts|username]
|
||||
[userview] [allfields|basic|full|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||
@@ -950,9 +992,10 @@ gam print users [todrive <ToDriveAttribute>*]
|
||||
```
|
||||
|
||||
By default, users in all domains in the account are selected; these options allow selection of subsets of users:
|
||||
* `domain <DomainName>` - Limit users to those in `<DomainName>`
|
||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Limit users to those that match a query
|
||||
* `limittoou <OrgUnitPath>|<OrgUnitID>` - Limit users to those in the specified `<OrgUnitPath>|<OrgUnitID>`
|
||||
* `domain|domains <DomainNameEntity>` - Limit users to those in the domains specified by `<DomainNameEntity>`
|
||||
* You can predefine this list with the `print_agu_domains` variable in `gam.cfg`.
|
||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Limit users to those that match a query; each query is run against each domain
|
||||
* `limittoou <OrgUnitPath>|<OrgUnitID>` - Limit users to those in the specified `<OrgUnitItem>>`
|
||||
* `deleted_only|only_deleted` - Only display deleted users
|
||||
* `issuspended <Boolean>` - Limit users based on their status
|
||||
|
||||
@@ -962,6 +1005,7 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
||||
[orderby <UserOrderByFieldName> [ascending|descending]]
|
||||
[groups|groupsincolumns]
|
||||
[license|licenses|licence|licences|licensebyuser|licensesbyuser|licencebyuser|licencesbyuser]
|
||||
[onelicenseperrow|onelicenceperrow]
|
||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||
[emailpart|emailparts|username][schemas|custom all|<SchemaNameList>]
|
||||
@@ -973,6 +1017,7 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
||||
[orderby <UserOrderByFieldName> [ascending|descending]]
|
||||
[groups|groupsincolumns]
|
||||
[license|licenses|licence|licences|licensebyuser|licensesbyuser|licencebyuser|licencesbyuser]
|
||||
[onelicenseperrow|onelicenceperrow]
|
||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||
[emailpart|emailparts|username]
|
||||
@@ -1006,7 +1051,7 @@ By default, Gam displays fields that only an adminstrator can view.
|
||||
|
||||
By default, Gam displays only the primary email address for each user.
|
||||
* `allfields|basic` - Display all non custom schema fields for each user.
|
||||
* `full` - Display all non custom schema fields and all custom schema fields for each user.
|
||||
* `full` - Display all fields including all custom schema fields for each user.
|
||||
* `<UserFieldName>* [fields <UserFieldNameList>]` - Only display selected fields.
|
||||
* `schemas|custom all` - Get custom schema information for all schemas.
|
||||
* `schemas|custom <SchemaNameList>` - Get custom schema information for a selected list of schemas.
|
||||
@@ -1017,6 +1062,17 @@ to limit the display of aliases to those that match `<RegularExpression>`.
|
||||
By default, the entries in lists of groups and licenses are separated by the `csv_output_field_delimiter` from `gam.cfg`.
|
||||
* `delimiter <Character>` - Separate list items with `<Character>`
|
||||
|
||||
By default, all licenses for a user are displayed in a list on one row:
|
||||
```
|
||||
primaryEmail,LicensesCount,Licenses,LicensesDisplay
|
||||
user@domain.com,2,1010020020 1010330004,Google Workspace Enterprise Plus Google Voice Standard
|
||||
```
|
||||
With `onelicenseperrow|onelicenceperrow`, each license is on a separate row:
|
||||
```
|
||||
primaryEmail,License,LicenseDisplay
|
||||
user@domain.com,1010020020,Google Workspace Enterprise Plus
|
||||
user@domain.com 1010330004,Google Voice Standard
|
||||
```
|
||||
In the output, primaryEmail is the always the first column; these options control the sorting of the remaining columns.
|
||||
* `allfields|basic|full` - All other columns are sorted by name.
|
||||
* `sortheaders [true]` - All other columns are sorted by name.
|
||||
@@ -1044,15 +1100,16 @@ Print a CSV file with headers `domain,count` that gives the number of users in e
|
||||
### Print domain counts for users in a specific domain and/or selected by a query
|
||||
```
|
||||
gam print users [todrive <ToDriveAttribute>*]
|
||||
([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
[limittoou <OrgUnitPath>|<OrgUnitID>] [deleted_only|only_deleted])
|
||||
([domain|domains <DomainNameEntity>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
[limittoou <OrgUnitItem>] [deleted_only|only_deleted])
|
||||
[formatjson [quotechar <Character>]] [countonly]
|
||||
[issuspended <Boolean>]
|
||||
```
|
||||
By default, users in all domains in the account are selected; these options allow selection of subsets of users:
|
||||
* `domain <DomainName>` - Limit users to those in `<DomainName>`
|
||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Limit users to those that match a query
|
||||
* `limittoou <OrgUnitPath>|<OrgUnitID>` - Limit users to those in the specified `<OrgUnitPath>|<OrgUnitID>`
|
||||
* `domain|domains <DomainNameEntity>` - Limit users to those in the domains specified by `<DomainNameEntity>`
|
||||
* You can predefine this list with the `print_agu_domains` variable in `gam.cfg`.
|
||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Limit users to those that match a query; each query is run against each domain
|
||||
* `limittoou <OrgUnitPath>|<OrgUnitID>` - Limit users to those in the specified `<OrgUnitItem>>`
|
||||
* `deleted_only|only_deleted` - Only display deleted users
|
||||
* `issuspended <Boolean>` - Limit users based on their status
|
||||
|
||||
@@ -1072,7 +1129,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.
|
||||
|
||||
### Print user list
|
||||
## Print user list
|
||||
Print a CSV file with headers `title,count,users` that displays the list of users in `<UserTypeEntity>` in a single row.
|
||||
```
|
||||
gam <UserTypeEntity> print userlist [todrive <ToDriveAttribute>*]
|
||||
@@ -1162,4 +1219,33 @@ Got 12 Users in the Organizational Unit for /Test...
|
||||
Got 4 Users directly in the Organizational Unit for /Test
|
||||
$ more UsersList.csv
|
||||
["testuser1@domain.org", "testuser2@domain.org", "testuser3@domain.org", "testuser4@domain.org"]
|
||||
```
|
||||
```
|
||||
|
||||
## Display user counts
|
||||
Display the number of users in an entity.
|
||||
```
|
||||
gam <UserTypeEntity> show count
|
||||
gam <UserTypeEntity> print users showitemcountonly
|
||||
gam print users select <UserTypeEntity> showitemcountonly
|
||||
gam print users
|
||||
([domain|domains <DomainNameEntity>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
[limittoou <OrgUnitItem>] [deleted_only|only_deleted])|[select <UserTypeEntity>]
|
||||
[issuspended <Boolean>]
|
||||
showitemcountonly
|
||||
```
|
||||
Example
|
||||
```
|
||||
$ gam print users query "orgUnitPath='/Students/Middle School'" showitemcountonly
|
||||
Getting all Users that match query (query="orgUnitPath='/Students/Middle School'"), may take some time on a large Google Workspace Account...
|
||||
Got 221 Users: aaron-first@domain.com - zoe-last@domain.com
|
||||
221
|
||||
```
|
||||
The `Getting` and `Got` messages are written to stderr, the count is writtem to stdout.
|
||||
|
||||
To retrieve the count with `showitemcountonly`:
|
||||
```
|
||||
Linux/MacOS
|
||||
count=$(gam print users query "orgUnitPath='/Students/Middle School'" showitemcountonly)
|
||||
Windows PowerShell
|
||||
count = & gam print users query "orgUnitPath='/Students/Middle School'" showitemcountonly
|
||||
```
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# Using GAMADV-XTD3 with a YubiKey
|
||||
- [Thanks](#Thanks)
|
||||
- [Thanks](#thanks)
|
||||
- [Yubikey ykman PIV Commands](https://docs.yubico.com/software/yubikey/tools/ykman/PIV_Commands.html)
|
||||
- [Introduction](#introduction)
|
||||
- [FAQs](#faqs)
|
||||
- [Setup Steps](#setup-steps)
|
||||
@@ -42,11 +43,11 @@ When using domain-wide delegation with GAMADV-XTD3, the service account and anyo
|
||||
4. **If you are already using the YubiKey and wish to preserve the PIV app data and keys**
|
||||
1. You need to configure one of the PIV slots for a private key GAMADV-XTD3 can use.
|
||||
* [ykman piv keys generate](https://docs.yubico.com/software/yubikey/tools/ykman/PIV_Commands.html#ykman-piv-keys-options-command-args)
|
||||
`ykman piv keys generate -P some_pin --pin-policy ALWAYS --touch-policy NEVER --algorithm RSA2048 9a new_pubkey.txt`
|
||||
`ykman piv keys generate -P <Text> --pin-policy ALWAYS --touch-policy NEVER --algorithm RSA2048 9a new_pubkey.txt`
|
||||
* Use `9a` for the `AUTHENTICATION` slot, `9c` for the `SIGNATURE` slot
|
||||
2. You need to generate a certificate for that slot.
|
||||
* [ykman piv certificates generate](https://docs.yubico.com/software/yubikey/tools/ykman/PIV_Commands.html#ykman-piv-certificates-generate-options-slot-public-key)
|
||||
`ykman piv certificates generate -P some_pin --subject "GAM Service Account" -d 36500 9a new_pubkey.txt`
|
||||
`ykman piv certificates generate -P <Text> --subject "GAM Service Account" -d 36500 9a new_pubkey.txt`
|
||||
* Use `9a` for the `AUTHENTICATION` slot, `9c` for the `SIGNATURE` slot
|
||||
|
||||
5. Now that you have a private key on your YubiKey, tell GAMADV-XTD3 to use that instead of the private_key stored in oauth2service.json. We can do that by rotating the key:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Using GAMADV-XTD3 with a delegated admin service account
|
||||
- [Thanks](#Thanks)
|
||||
- [Thanks](#thanks)
|
||||
- [Introduction](#introduction)
|
||||
- [Advantages](#advantages)
|
||||
- [Disadvantages](#disadvantages)
|
||||
|
||||
@@ -37,10 +37,12 @@
|
||||
|
||||
## Definitions
|
||||
```
|
||||
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
||||
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||
<EmailItemList> ::= "<EmailItem>(,<EmailItem>)*"
|
||||
<EmailAddressList> ::= "<EmailAddess>(,<EmailAddress>)*"
|
||||
<EmailAddressEntity> ::= <EmailAddressList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Collections-of-Items
|
||||
<TimeZone> ::= <String>
|
||||
See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
<UniqueID> ::= id:<String>
|
||||
@@ -51,6 +53,7 @@
|
||||
<MatterItem> ::= <UniqueID>|<String>
|
||||
<MatterState> ::= open|closed|deleted
|
||||
<MatterStateList> ::= "<MatterState>(,<MatterState>)*"
|
||||
<URLList> ::= "<URL>(,<URL>)*"
|
||||
|
||||
<QueryVaultCorpus> ::= <String>
|
||||
See: https://developers.google.com/vault/reference/rest/v1/matters.holds#CorpusQuery
|
||||
@@ -191,12 +194,9 @@ This command can be useful for discovering legacy former employee accounts which
|
||||
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||
matter <MatterItem> corpus mail|groups
|
||||
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
||||
(shareddrives|teamdrives <SharedDriveIDList>) | (rooms <RoomList>)
|
||||
[scope <all_data|held_data|unprocessed_data>]
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||
[excludedrafts <Boolean>]
|
||||
[includerooms <Boolean>]
|
||||
[includeshareddrives|includeteamdrives <Boolean>] [driveversiondate <Date>|<Time>]
|
||||
[wait <Integer>]
|
||||
```
|
||||
Check the status of a previous count operation with the name from a previous command.
|
||||
@@ -209,16 +209,18 @@ gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||
## Create Vault Exports
|
||||
Create a Google Vault export request.
|
||||
```
|
||||
gam create vaultexport|export matter <MatterItem> [name <String>] corpus drive|mail|groups|hangouts_chat|voice
|
||||
gam create vaultexport|export matter <MatterItem> [name <String>] corpus calendar|drive|mail|groups|hangouts_chat|voice
|
||||
(accounts <EmailAddressEntity>) | (orgunit|org|ou <OrgUnitPath>) | everyone
|
||||
(shareddrives|teamdrives <SharedDriveIDList>) | (rooms <RoomList>)
|
||||
[scope <all_data|held_data|unprocessed_data>]
|
||||
(shareddrives|teamdrives <SharedDriveIDList>) | (rooms <RoomList>) | (sitesurl <URLList>)
|
||||
[scope all_data|held_data|unprocessed_data]
|
||||
[terms <String>] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>] [timezone <TimeZone>]
|
||||
[excludedrafts <Boolean>] [format mbox|pst]
|
||||
[showconfidentialmodecontent <Boolean>] [usenewexport <Boolean>]
|
||||
[includerooms <Boolean>]
|
||||
[covereddata calllogs|textmessages|voicemails]
|
||||
[locationquery <StringList>] [peoplequery <StringList>] [minuswords <StringList>]
|
||||
[responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*] [calendarversiondate <Date>|<Time>]
|
||||
[includeshareddrives <Boolean>] [driveversiondate <Date>|<Time>] [includeaccessinfo <Boolean>]
|
||||
[includerooms <Boolean>]
|
||||
[excludedrafts <Boolean>] [format mbox|pst]
|
||||
[showconfidentialmodecontent <Boolean>] [usenewexport <Boolean>] [exportlinkeddrivefiles <Boolean>]
|
||||
[covereddata calllogs|textmessages|voicemails]
|
||||
[region any|europe|us] [showdetails|returnidonly]
|
||||
```
|
||||
<MatterItem> specifies the matter name or ID the export should be associated with.
|
||||
@@ -227,7 +229,8 @@ Specify the name of the export:
|
||||
* `name <String>` - The export will be named `<String>`
|
||||
* `default` - The export will be named `GAM <corpus> Export - <Time>`
|
||||
|
||||
Specify the corpus of data, this option is required::
|
||||
Specify the corpus of data, this option is required:
|
||||
* `calendar`
|
||||
* `drive`
|
||||
* `mail`
|
||||
* `groups`
|
||||
@@ -240,17 +243,43 @@ Specify the search method, this option is required:
|
||||
* `everyone` - Search for all accounts in the organization
|
||||
* `shareddrives|teamdrives <SharedDriveIDList>` - Search for all accounts in the Shared Drives specified in `<SharedDriveIDList>`
|
||||
* `rooms <RoomList>` - Search in the Room specified in the chat rooms specified in `<RoomList>`
|
||||
* `sitesurl <URLList>` - Search the published site URLs of new Google Sites
|
||||
|
||||
Specify the scope of data to include in the export:
|
||||
* `all_data` - All available data; this is the default
|
||||
* `held_data` - Data on Hold
|
||||
* `unprocessed_data` - Data not processed
|
||||
|
||||
You can specify search terms to limit the scope of data:
|
||||
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||
|
||||
Specify time limits on the scope of data:
|
||||
* `start|starttime <Date>|<Time>` - The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
|
||||
* `end|endtime <Date>|<Time>` - The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
|
||||
* `timezone <TimeZone>` - The time zone name. It should be an IANA TZ name, such as "America/Los_Angeles"
|
||||
|
||||
For `corpus calendar`, you can specify advanced search options:
|
||||
* `locationquery <StringList>`
|
||||
* Matches only those events whose location contains all of the words in the given set.
|
||||
* If the string contains quoted phrases, this method only matches those events whose location contain the exact phrase.
|
||||
* Entries in the set are considered in "and".
|
||||
* Word splitting example: ["New Zealand"] vs ["New","Zealand"] "New Zealand": matched by both "New and better Zealand": only matched by the latter.
|
||||
* `peoplequery <StringList>`
|
||||
* Matches only those events whose attendees contain all of the words in the given set.
|
||||
* Entries in the set are considered in "and".
|
||||
* `minuswords <StringList>`
|
||||
* Matches only those events that do not contain any of the words in the given set in title, description, location, or attendees.
|
||||
* Entries in the set are considered in "or".
|
||||
* `responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*
|
||||
* Matches only events for which the custodian gave one of these responses. If the set is empty, there will be no filtering on responses.
|
||||
* `calendarversiondate <Date>|<Time>`
|
||||
* Search the current version of the Calendar event, but export the contents of the last version saved before 12:00 AM UTC on the specified date.
|
||||
* Enter the date in UTC.
|
||||
|
||||
For `corpus calendar`, you can specify the format of the exported data:
|
||||
* `format ics` - Export in ICS format, this is the default
|
||||
* `format pst` - Export in PST format
|
||||
|
||||
For `corpus drive`, you can specify advanced search options:
|
||||
* `driveversiondate <Date>|<Time>` - Search the versions of the Drive file as of the reference date. These timestamps are in GMT and rounded down to the given date.
|
||||
* `includeshareddrives False` - Do not include Shared Drives in the search, this is the default.
|
||||
@@ -264,9 +293,6 @@ For `corpus hangouts_chat` you can specify advanced search options:
|
||||
* `includerooms False` - Do not include rooms, this is the default
|
||||
* `includerooms True` - Include rooms
|
||||
|
||||
For `corpus mail`, you can specify search terms to limit the scope of data:
|
||||
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||
|
||||
For `corpus mail`, you can specify whether to exclude draft messages:
|
||||
* `excludedrafts False` - Do not exclude drafts, this is the default
|
||||
* `excludedrafts True` - Exclude drafts
|
||||
@@ -279,9 +305,13 @@ For `corpus mail`, you can specify whether to use the new export system:
|
||||
* `usenewexport false` - Do not use the new export system
|
||||
* `usenewexport true` - Use the new export system
|
||||
|
||||
For `corpus mail`, you can specify whether to enable exporting linked Drive files:
|
||||
* `exportlinkeddrivefiles false` - Do not export linked Drive files
|
||||
* `exportlinkeddrivefiles true` - Export linked Drive files
|
||||
|
||||
See: https://support.google.com/vault/answer/4388708#new_gmail_export&zippy=%2Cfebruary-new-gmail-export-system-available
|
||||
|
||||
For `corpus mail`, `corpus groups` and `corpus hangouts_chat`, you can specify the format of the exported data:
|
||||
For `corpus mail`, `corpus groups`, `corpus hangouts_chat`and `corpus voice`, you can specify the format of the exported data:
|
||||
* `format mbox` - Export in MBOX format, this is the default
|
||||
* `format pst` - Export in PST format
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
\
|
||||
# Version and Help
|
||||
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
gam version
|
||||
GAMADV-XTD3 6.22.00 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Python 3.12.1 64-bit final
|
||||
MacOS Sonoma 14.2.1 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
@@ -15,10 +16,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.22.00 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Python 3.12.1 64-bit final
|
||||
MacOS Sonoma 14.2.1 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
Your system time differs from www.googleapis.com by less than 1 second
|
||||
@@ -27,17 +28,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.22.00 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Python 3.12.1 64-bit final
|
||||
MacOS Sonoma 14.2.1 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, 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.0
|
||||
filelock 3.12.1
|
||||
google-api-python-client 2.88.0
|
||||
google-auth-httplib2 0.1.0
|
||||
google-auth-oauthlib 1.0.0
|
||||
@@ -64,7 +65,7 @@ MacOS High Sierra 10.13.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 6.22.00
|
||||
Latest: 6.67.24
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@@ -72,7 +73,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
6.22.00
|
||||
6.67.24
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@@ -82,10 +83,10 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
gam help
|
||||
GAM 6.22.00 - https://github.com/taers232c/GAMADV-XTD3
|
||||
GAM 6.67.24 - https://github.com/taers232c/GAMADV-XTD3
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Python 3.12.1 64-bit final
|
||||
MacOS Sonoma 14.2.1 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
|
||||
@@ -17,6 +17,7 @@ Installation
|
||||
Configuration
|
||||
* [Authorization](Authorization)
|
||||
* [GAM Configuration](gam.cfg)
|
||||
* [Multiple Customers and Domains](https://github.com/taers232c/GAMADV-XTD3/wiki/gam.cfg#multiple-customers-and-domains)
|
||||
* [Running GAMADV-XTD3 securely on a Google Compute Engine](Running-GAMADV-XTD3-securely-on-a-Google-Compute-Engine)
|
||||
* [Using GAMADV-XTD3 with a delegated admin service account](Using-GAMADV-XTD3-with-a-delegated-admin-service-account)
|
||||
* [Using GAMADV-XTD3 with a YubiKey](Using-GAMADV-XTD3-with-a-YubiKey)
|
||||
@@ -42,6 +43,7 @@ Command Processing
|
||||
* [Command Line Parsing](Command-Line-Parsing)
|
||||
* [Command Logging and Progress](Command-Logging-Progress)
|
||||
* [Command data from Google Docs/Sheets/Storage](Command-Data-From-Google-Docs-Sheets-Storage)
|
||||
* [CSV Special Characters](CSV-Special-Characters)
|
||||
* [CSV Input Filtering](CSV-Input-Filtering)
|
||||
* [CSV Output Filtering](CSV-Output-Filtering)
|
||||
* [Meta Commands and File Redirection](Meta-Commands-and-File-Redirection)
|
||||
@@ -66,7 +68,7 @@ Client Access
|
||||
* [Chrome Auto Update Expiration Counts](Chrome-AUE-Counts)
|
||||
* [Chrome Browser Cloud Management](Chrome-Browser-Cloud-Management)
|
||||
* [Chrome Device Needs Attention Counts](Chrome-Needs-Attention-Counts)
|
||||
* [Chrome Installed Apps Counts](Chrome-Installed-Apps-Counts)
|
||||
* [Chrome Installed Apps](Chrome-Installed-Apps)
|
||||
* [Chrome Policies](Chrome-Policies)
|
||||
* [Chrome Printers](Chrome-Printers)
|
||||
* [Chrome Version Counts](Chrome-Version-Counts)
|
||||
@@ -124,7 +126,6 @@ Service Account Access
|
||||
* [Users - Deprovision](Users-Deprovision)
|
||||
* [Users - Contacts](Users-People-Contacts-Profiles)
|
||||
* [Users - Contacts - Delegates](Users-Contacts-Delegates)
|
||||
* [Users - Data Studio](Users-DataStudio)
|
||||
* [Users - Drive - File Selection](Drive-File-Selection)
|
||||
* [Users - Drive - Activity/Settings](Users-Drive-Activity-Settings)
|
||||
* [Users - Drive - Cleanup](Users-Drive-Cleanup)
|
||||
@@ -151,6 +152,7 @@ Service Account Access
|
||||
* [Users - Gmail - Settings](Users-Gmail-Settings)
|
||||
* [Users - Group Membership](Users-Group-Membership)
|
||||
* [Users - Keep](Users-Keep)
|
||||
* [Users - Looker Studio](Users-Looker-Studio)
|
||||
* [Users - People - Contacts & Profiles](Users-People-Contacts-Profiles)
|
||||
* [Users - Photo](Users-Photo)
|
||||
* [Users - Profile Sharing](Users-Profile-Sharing)
|
||||
@@ -158,3 +160,4 @@ Service Account Access
|
||||
* [Users - Spreadsheets](Users-Spreadsheets)
|
||||
* [Users - Tasks](Users-Tasks)
|
||||
* [Users - Tokens](Users-Tokens)
|
||||
* [Users - YouTube](Users-YouTube)
|
||||
|
||||
@@ -61,6 +61,11 @@ api_calls_rate_limit
|
||||
Limit on number of Google API calls per 60 seconds
|
||||
Default: 1000
|
||||
Range: 100 - Unlimited
|
||||
api_calls_tries_limit
|
||||
Limit the number of tries for Google API calls that return an error
|
||||
that indicates a retry should be performed
|
||||
Default: 10
|
||||
Range: 3-10
|
||||
auto_batch_min
|
||||
Automatically generate gam batch command if number of users
|
||||
specified in gam users xxx command exceeds this number
|
||||
@@ -143,6 +148,10 @@ csv_input_column_delimiter
|
||||
All places where an input CSV file can be specified have an
|
||||
argument columndelimiter <String> that can override this value.
|
||||
Default: ','
|
||||
csv_input_no_escape_char
|
||||
When reading a CSV file, should `\` be ignored as an escape character.
|
||||
Set this to False if the input file data was written using `\` as an escape character.
|
||||
Default: True
|
||||
csv_input_quote_char
|
||||
A one-character string used to quote fields containing special characters,
|
||||
such as the csv_input_column_delimiter or csv_input_quote_char, or newline characters.
|
||||
@@ -204,11 +213,15 @@ csv_output_header_force
|
||||
for inclusion in the CSV file written by a gam print command
|
||||
Default: ''
|
||||
csv_output_line_terminator
|
||||
Allowed values: cr, lf, crlf
|
||||
p Allowed values: cr, lf, crlf
|
||||
Designates character(s) used to terminate the lines of a CSV file.
|
||||
For Linux and Mac OS, this would typically be lf.
|
||||
For Windows, this would typically be crlf.
|
||||
Default: lf
|
||||
csv_output_no_escape_char
|
||||
When writing a CSV file, should `\` be ignored as an escape character.
|
||||
Set this to True if the output file data is to be read by a non-Python program.
|
||||
Default: False
|
||||
csv_output_quote_char
|
||||
A one-character string used to quote fields containing special characters,
|
||||
such as the csv_output_column_delimiter or csv_output_quote_char
|
||||
@@ -401,6 +414,31 @@ people_max_results
|
||||
how many should be retrieved in each API call
|
||||
Default: 100
|
||||
Range: 1 - 1000
|
||||
print_agu_domains
|
||||
A comma separated list of domain names that are used in these commands:
|
||||
gam print aliases
|
||||
gam print groups
|
||||
gam print|show group-members
|
||||
gam print users
|
||||
This allows predefining the list of domains so they don't have to be specified in each command.
|
||||
Default: Blank
|
||||
print_cros_ous
|
||||
A comma separated list of org unit that are used in these commands:
|
||||
gam print cros
|
||||
gam print crosactivity
|
||||
This allows predefining the list of org units so they don't have to be specified in each command.
|
||||
Default: Blank
|
||||
print_cros_ous_and_children
|
||||
A comma separated list of org unit names that are used in these commands:
|
||||
gam print cros
|
||||
gam print crosactivity
|
||||
This allows predefining the list of org units so they don't have to be specified in each command.
|
||||
Default: Blank
|
||||
process_wait_limit
|
||||
When processing batch/CSV files, how long (in seconds) GAM should wait for all batch|csv processes to complete
|
||||
after all have been started. If the limit is reached, GAM terminates any remaining processes.
|
||||
Default: 0: no limit
|
||||
Range: 0 - Unlimited
|
||||
quick_cros_move
|
||||
Default value for "quickcrosmove [<Boolean>]" in commands that update Chromebook OUs.
|
||||
Default: False
|
||||
@@ -497,6 +535,9 @@ todrive_nobrowser
|
||||
todrive_noemail
|
||||
Enable/disable sending an email when todrive is specified
|
||||
Default: True
|
||||
todrive_no_escape_char
|
||||
When writing a CSV file to Google Drive, should `\` be ignored as an escape character.
|
||||
Default: True
|
||||
todrive_parent
|
||||
Parent folder for CSV files when todrive is specified;
|
||||
can be id:<DriveFolderID> or <DriveFolderName>
|
||||
@@ -557,6 +598,7 @@ Section: DEFAULT
|
||||
admin_email = ''
|
||||
api_calls_rate_check = false
|
||||
api_calls_rate_limit = 100
|
||||
api_calls_tries_limit = 10
|
||||
auto_batch_min = 0
|
||||
bail_on_internal_error_tries = 2
|
||||
batch_size = 50
|
||||
@@ -574,6 +616,7 @@ Section: DEFAULT
|
||||
config_dir = /Users/admin/.gam
|
||||
contact_max_results = 100
|
||||
csv_input_column_delimiter = ,
|
||||
csv_input_no_escape_char = true
|
||||
csv_input_quote_char = '"'
|
||||
csv_input_row_drop_filter = ''
|
||||
csv_input_row_drop_filter = ''
|
||||
@@ -588,6 +631,7 @@ Section: DEFAULT
|
||||
csv_output_header_filter = ''
|
||||
csv_output_header_force = ''
|
||||
csv_output_line_terminator = lf
|
||||
csv_output_no_escape_char = false
|
||||
csv_output_quote_char = '"'
|
||||
csv_output_row_drop_filter = ''
|
||||
csv_output_row_drop_filter_mode = anymatch
|
||||
@@ -628,6 +672,10 @@ Section: DEFAULT
|
||||
output_dateformat = ''
|
||||
output_timeformat = ''
|
||||
people_max_results = 100
|
||||
print_agu_domains = ''
|
||||
print_cros_ous = ''
|
||||
print_cros_ous_and_children = ''
|
||||
process_wait_limit = 0
|
||||
quick_cros_move = false
|
||||
quick_info_user = false
|
||||
reseller_id = ''
|
||||
@@ -654,6 +702,7 @@ Section: DEFAULT
|
||||
todrive_locale = ''
|
||||
todrive_nobrowser = false
|
||||
todrive_noemail = true
|
||||
todrive_no_escape_char = true
|
||||
todrive_parent = root
|
||||
todrive_sheet_timeformat = ''
|
||||
todrive_sheet_timestamp = false
|
||||
@@ -744,6 +793,7 @@ activity_max_results = 100
|
||||
admin_email = ''
|
||||
api_calls_rate_check = false
|
||||
api_calls_rate_limit = 1000
|
||||
api_calls_tries_limit = 10
|
||||
auto_batch_min = 0
|
||||
bail_on_internal_error_tries = 2
|
||||
batch_size = 50
|
||||
@@ -761,6 +811,7 @@ clock_skew_in_seconds = 10
|
||||
config_dir = /Users/admin/.gam
|
||||
contact_max_results = 100
|
||||
csv_input_column_delimiter = ,
|
||||
csv_input_no_escape_char = true
|
||||
csv_input_quote_char = '"'
|
||||
csv_input_row_drop_filter = ''
|
||||
csv_input_row_filter = ''
|
||||
@@ -771,6 +822,7 @@ csv_output_header_drop_filter = ''
|
||||
csv_output_header_filter = ''
|
||||
csv_output_header_force = ''
|
||||
csv_output_line_terminator = lf
|
||||
csv_output_no_escape_char = false
|
||||
csv_output_quote_char = '"'
|
||||
csv_output_row_drop_filter =
|
||||
csv_output_row_filter = ''
|
||||
@@ -808,6 +860,10 @@ oauth2service_json = oauth2service.json
|
||||
output_dateformat = ''
|
||||
output_timeformat = ''
|
||||
people_max_results = 100
|
||||
print_agu_domains = ''
|
||||
print_cros_ous = ''
|
||||
print_cros_ous_and_children = ''
|
||||
process_wait_limit = 0
|
||||
quick_cros_move = False
|
||||
quick_info_user = False
|
||||
reseller_id = ''
|
||||
@@ -833,6 +889,7 @@ todrive_localcopy = false
|
||||
todrive_locale = ''
|
||||
todrive_nobrowser = false
|
||||
todrive_noemail = true
|
||||
todrive_no_escape_char = true
|
||||
todrive_parent = root
|
||||
todrive_sheet_timeformat = ''
|
||||
todrive_sheet_timestamp = false
|
||||
@@ -986,7 +1043,7 @@ $gam csv NewGooUsers.csv gam select goo create user ~Email firstname ~FirstName
|
||||
```
|
||||
The gam loop command and the select and redirect arguments can be combined to perform powerful operations in a single command line.
|
||||
```
|
||||
gam loop (-|<FileName>) [charset <CharSet>] (matchfield|skipfield <FieldName> <RegularExpression>)* gam <GAM argument list>
|
||||
gam loop (-|<FileName>) [charset <Charset>] (matchfield|skipfield <FieldName> <RegularExpression>)* gam <GAM argument list>
|
||||
```
|
||||
Suppose you have the following CSV file, InfoDomains.csv:
|
||||
```
|
||||
|
||||
94
docs~
94
docs~
@@ -1,94 +0,0 @@
|
||||
# Version and Help
|
||||
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
gam version
|
||||
GAMADV-XTD3 6.61.18 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
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.61.18 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
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.61.18 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, 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.0
|
||||
google-api-python-client 2.88.0
|
||||
google-auth-httplib2 0.1.0
|
||||
google-auth-oauthlib 1.0.0
|
||||
google-auth 2.19.1
|
||||
httplib2 0.22.0
|
||||
passlib 1.7.4
|
||||
python-dateutil 2.8.2
|
||||
yubikey-manager 5.1.1
|
||||
admin.googleapis.com connects using TLSv1.3 TLS_AES_256_GCM_SHA384
|
||||
```
|
||||
|
||||
Print the current and latest versions of Gam and:
|
||||
* set the return code to 0 if the current version is the latest version
|
||||
* set the return code to 1 if the current version is not the latest
|
||||
```
|
||||
gam version checkrc
|
||||
GAM 5.35.08 - https://github.com/taers232c/GAMADV-XTD3
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.8.1 64-bit final
|
||||
google-api-python-client 2.77.0
|
||||
httplib2 0.16.0
|
||||
oauth2client 4.1.3
|
||||
MacOS High Sierra 10.13.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 6.61.18
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
6.61.18
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
VER=`gam version simple`
|
||||
echo $VER
|
||||
```
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
gam help
|
||||
GAM 6.61.18 - https://github.com/taers232c/GAMADV-XTD3
|
||||
Ross Scroggs <ross.scroggs@gmail.com>
|
||||
Python 3.11.4 64-bit final
|
||||
MacOS Monterey 12.6.6 x86_64
|
||||
Path: /Users/Admin/bin/gamadv-xtd3
|
||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain.com
|
||||
Time: 2023-06-02T21:10:00-07:00
|
||||
Help: Syntax in file /Users/Admin/bin/gamadv-xtd3/GamCommands.txt
|
||||
Help: Documentation is at https://github.com/taers232c/GAMADV-XTD3/wiki
|
||||
```
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,866 @@
|
||||
|
||||
Merged GAM-Team version
|
||||
|
||||
6.67.24
|
||||
|
||||
Fixed bug that caused HTML password notification email messages to be displayed in raw form.
|
||||
|
||||
6.67.23
|
||||
|
||||
Use local copy of `googleapiclient` to remove static discovery documents to improve performance.
|
||||
|
||||
6.67.22
|
||||
|
||||
Added `permissionidlist <PermissionIDList>` to `<PermissionMatch>` that allows matching any permission ID in a list.
|
||||
|
||||
Added option `exportlinkeddrivefiles <Boolean>` to `gam create vaultexport` that is used with `corpus mail`.
|
||||
|
||||
6.67.21
|
||||
|
||||
Updated `gam remove aliases <EmailAddress> user|group <EmailAddressEntity>` to give a more informative
|
||||
error message when the target/alias combination does not exist.
|
||||
```
|
||||
Old: User: testsimple@rdschool.org, User Alias: tsalias@rdschool.org, Remove Failed: Invalid Input: resource_id
|
||||
New: User: testsimple@rdschool.org, User Alias: tsalias@rdschool.org, Remove Failed: Does not exist
|
||||
```
|
||||
|
||||
6.67.20
|
||||
|
||||
Added option `onelicenseperrow|onelicenceperrow` to `gam print users ... licenses` that causes GAM to print
|
||||
a seperate user information row for each license a user is assigned. This makes processing
|
||||
the licenses in a script possible and allows better sorting in a CSV File.
|
||||
|
||||
By default, all licenses for a user are displayed in a list on one row:
|
||||
```
|
||||
primaryEmail,LicensesCount,Licenses,LicensesDisplay
|
||||
user@domain.com,2,1010020020 1010330004,Google Workspace Enterprise Plus Google Voice Standard
|
||||
```
|
||||
With `onelicenseperrow|onelicenceperrow`, each license is on a separate row:
|
||||
```
|
||||
primaryEmail,License,LicenseDisplay
|
||||
user@domain.com,1010020020,Google Workspace Enterprise Plus
|
||||
user@domain.com 1010330004,Google Voice Standard
|
||||
```
|
||||
|
||||
6.67.19
|
||||
|
||||
Updated `gam create|update user ... notify` to encode the characters `<>&` in the password
|
||||
so that they display correctly when the notify message content is HTML.
|
||||
|
||||
6.67.18
|
||||
|
||||
Cleaned up `Getting/Got` messages for `gam print courses|course-participants`.
|
||||
|
||||
6.67.17
|
||||
|
||||
Added option `showitemcountonly` to various commands that causes GAM to display the
|
||||
item count on stdout; no CSV file is written.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Cloud-Identity-Groups#display-group-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Classroom-Courses#display-course-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Classroom-Membership#display-course-membership-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/ChromeOS-Devices#display-cros-device-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Cloud-Identity-Devices#display-device-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Cloud-Identity-Devices#display-device-user-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Groups#display-group-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Mobile-Devices#display-mobile-device-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Organizational-Units#display-organizational-unit-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Resources#display-resource-counts
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users#display-user-counts
|
||||
|
||||
6.67.16
|
||||
|
||||
By default, `gam print group-members membernames` displays `Unknown` for members whose names can not be determined.
|
||||
Added option `unknownname <String>` that let's you specify an alternative value.
|
||||
|
||||
Further improved performance of `gam print group-members membernames cachememberinfo`.
|
||||
|
||||
6.67.15
|
||||
|
||||
Update `gam print group-members membernames` to handle the following error:
|
||||
```
|
||||
ERROR: 400: failedPrecondition - Precondition check failed.
|
||||
```
|
||||
|
||||
Added option `cachememberinfo [Boolean]` to `gam print group-members` that causes GAM to cache member info
|
||||
so that only one API call is made to get information for each user/group. This consumes
|
||||
more memory but dramatically reduces the number of API calls.
|
||||
|
||||
6.67.14
|
||||
|
||||
Updated reseller commands to handle the following error:
|
||||
```
|
||||
ERROR: 400: invalid - Customer domain [domain.com] is linked to one or more email verified customers, please provide a customer id.
|
||||
```
|
||||
|
||||
6.67.13
|
||||
|
||||
Updated `gam create domain <DomainName>` to handle the following error:
|
||||
```
|
||||
ERROR: 409: conflict - Domain in request is in use by an email verified customer.
|
||||
```
|
||||
|
||||
6.67.12
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to `gam print datatransfers` that adds
|
||||
additional columns of data to the CSV file output.
|
||||
|
||||
6.67.11
|
||||
|
||||
Updated various Gmail related commands to handle this error:
|
||||
```
|
||||
ERROR: 403: permissionDenied - Insufficient Permission
|
||||
```
|
||||
when the following service account scopes are selected:
|
||||
|
||||
```
|
||||
[ ] 23) Gmail API - Basic Settings (Filters,IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read
|
||||
[ ] 24) Gmail API - Full Access (Labels, Messages)
|
||||
[ ] 25) Gmail API - Full Access (Labels, Messages) except delete message
|
||||
[*] 26) Gmail API - Full Access - read only
|
||||
[ ] 27) Gmail API - Send Messages - including todrive
|
||||
[ ] 28) Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write
|
||||
```
|
||||
|
||||
6.67.10
|
||||
|
||||
Fixed bug that caused a trap when optional argument `charset <Charset>` was used with `emlfile <FileName>` in `gam <UserTypeEntity> draft|import|insert message`.
|
||||
|
||||
6.67.09
|
||||
|
||||
Added option `maxevents <Number>` to `gam report <ActivityApplictionName>` that limits
|
||||
the number of events displayed for each activity; the default is 0, no limit.
|
||||
Setting options `maxactivities 1 maxevents 1 maxresults 1` can be used to as efficiently as possible
|
||||
show the most recent activity/event; this can be useful when reporting drive activity for individual drive files.
|
||||
|
||||
6.67.08
|
||||
|
||||
Added optional argument `charset <Charset>` to `emlfile <FileName>` in `gam <UserTypeEntity> draft|import|insert message`;
|
||||
the default value is `ascii`.
|
||||
|
||||
6.67.07
|
||||
|
||||
Updated `gam <UserTypeEntity> delete message` to handle this error:
|
||||
```
|
||||
ERROR: 403: permissionDenied - Insufficient Permission
|
||||
```
|
||||
when the following service account scopes are selected:
|
||||
|
||||
```
|
||||
[ ] 24) Gmail API - Full Access (Labels, Messages)
|
||||
[*] 25) Gmail API - Full Access (Labels, Messages) except delete message
|
||||
```
|
||||
|
||||
6.67.06
|
||||
|
||||
Updated commands that create ACLs to handle the following error:
|
||||
```
|
||||
ERROR: 400: abusiveContentRestriction - Bad Request. User message: "You cannot share this item because it has been flagged as inappropriate."
|
||||
```
|
||||
|
||||
6.67.05
|
||||
|
||||
Updated the following commands:
|
||||
```
|
||||
gam <UserTypeEntity> create|delete|update delegate
|
||||
gam <UserTypeEntity> forward
|
||||
gam <UserTypeEntity> create|delete forwardingaddresses
|
||||
gam <UserTypeEntity> create|delete sendas
|
||||
```
|
||||
to handle this error:
|
||||
```
|
||||
ERROR: 403: permissionDenied - Insufficient Permission
|
||||
```
|
||||
when the following serice account scope is not enabled:
|
||||
```
|
||||
[ ] 28) Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write
|
||||
```
|
||||
|
||||
6.67.04
|
||||
|
||||
Updated user attribute `replace <Tag> <UserReplacement>` to allow `field:photourl` which allows
|
||||
embedding a link to a user's photo in their signature. Formatting the signature HTML
|
||||
to properly display the photo is left to the GAM admin.
|
||||
|
||||
6.67.03
|
||||
|
||||
Fixed bug introduced in 6.67.02 in `gam <UserTypeEntity> claim ownership` that caused a trap.
|
||||
|
||||
6.67.02
|
||||
|
||||
Added option `skipids <DriveFileEntity>` to `gam <UserTypeEntity> copy drivefile` that handles special cases
|
||||
where you want to prevent selected files/folders from being copied.
|
||||
|
||||
Updated commands that create files/folders on Shared Drives to handle the following errors:
|
||||
```
|
||||
storageQuotaExceeded
|
||||
teamDriveFileLimitExceeded
|
||||
teamDriveHierarchyTooDeep
|
||||
```
|
||||
* See: https://support.google.com/a/users/answer/7338880#shared_drives_file_folder_limits
|
||||
|
||||
6.67.01
|
||||
|
||||
Fixed bug in `gam print vaultcounts` that caused a trap.
|
||||
|
||||
6.67.00
|
||||
|
||||
Updated `gam <CrOSTypeEntity> update action <CrOSAction>` to use the new API function `batchChangeStatus`
|
||||
that replaces the old API function `action`; ChromeOS devices are now processed in batches.
|
||||
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
||||
|
||||
Updated `gam create vaultexport matter <MatterItem>` to support `corpus calendar`.
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Vault-Takeout#create-vault-exports
|
||||
|
||||
6.66.16
|
||||
|
||||
Added option `convertcrnl` to `gam update chromepolicy` to properly handle carriage returns (\r) and line feeds (\n)
|
||||
in value strings entered on the command line in the `<Field> <Value>` form.
|
||||
```
|
||||
gam update chromepolicy convertcrnl chrome.devices.DisabledDeviceReturnInstructions
|
||||
deviceDisabledMessage "Please return device to:\nSchool\n123 Main Street\nAnytown US" ou /Path/to/OU
|
||||
```
|
||||
|
||||
6.66.15
|
||||
|
||||
Added option `copysubfilesownedby any|me|others` to `gam <UserTypeEntity> copy drivefile` that allows
|
||||
specification of which source folder sub files to copy based on file ownership; the default is `any`.
|
||||
This only applies when files are being copied from a 'My Drive'.
|
||||
|
||||
6.66.14
|
||||
|
||||
Updated `gam <UserTypeEntity> modify messages` to recognize the following error:
|
||||
```
|
||||
ERROR: 400: invalid - Invalid label: SENT
|
||||
```
|
||||
|
||||
Updated `gam update alias <EmailAddressEntity> user|group|target <EmailAddress>`
|
||||
to avoid the following problem.
|
||||
```
|
||||
$ gam update alias testalias@domain.com user testuser
|
||||
User Alias: testalias@domain.com, Deleted
|
||||
User Alias: testalias@domain.com, User: testuser@domain.com, Update Failed: Duplicate, Email Address: testalias@domain.com
|
||||
```
|
||||
GAM updates an alias to point to a new target by deleting the alias and then recreating the alias pointing to the new target.
|
||||
Unfortunately, if these commands are executed back-to-back; Google generates the `Update Failed: Duplicate` error.
|
||||
Now, GAM waits 2 seconds between the delete and the insert which seems to eliminate the problem. If the problem persists,
|
||||
the option `waitafterdelete <Integer>` can be used to increase the wait time to a maximum of 10 seconds.
|
||||
|
||||
6.66.13
|
||||
|
||||
Updated functionality of option `preservefiletimes` in `gam <UserTypeEntity> update drivefile <DriveFileEntity>`.
|
||||
|
||||
* Current
|
||||
* `preservefiletimes localfile <FileName>` - `modifiedTime` of `<DriveFileEntity>` is set to that of `localfile <FileName>`
|
||||
* `preservefiletimes` - No effect
|
||||
* Updated
|
||||
* `preservefiletimes localfile <FileName>` - `modifiedTime` of `<DriveFileEntity>` is set to that of `localfile <FileName>`
|
||||
* `preservefiletimes` - `modifiedTime` of `<DriveFileEntity>` retains its current value
|
||||
|
||||
6.66.12
|
||||
|
||||
Upgraded to Python 3.12.1 where possible.
|
||||
|
||||
Updated all drive commands to handle the following error:
|
||||
```
|
||||
ERROR: 401: Active session is invalid. Error code: 4 - authError
|
||||
```
|
||||
This is due to the Drive SDK API being disabled in the user's OU.
|
||||
* See: https://support.google.com/a/answer/6105699
|
||||
|
||||
6.66.11
|
||||
|
||||
Fixed/improved handling of shortcuts in `gam <UserTypeEntity> transfer drive`.
|
||||
|
||||
6.66.10
|
||||
|
||||
Updated `gam create datatransfer` to handle the following error:
|
||||
```
|
||||
ERROR: 401: Active session is invalid. Error code: 4 - authError
|
||||
```
|
||||
|
||||
6.66.09
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filelist ... allfields` that caused a trap
|
||||
when `gam.cfg` contained `drive_v3_native_names = False`.
|
||||
|
||||
6.66.08
|
||||
|
||||
Added additional columns `isBase` and `baseId` to `gam <UserTypeEntity> print fileparenttree`
|
||||
to simplify processing the output in a script.
|
||||
|
||||
6.66.07
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print diskusage` that caused a trap.
|
||||
|
||||
6.66.06
|
||||
|
||||
Added a command the print the parent tree of file/folder.
|
||||
```
|
||||
gam <UserTypeEntity> print fileparenttree <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||
[stripcrsfromname]
|
||||
```
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Drive-Files-Display#display-file-parent-tree
|
||||
|
||||
6.66.05
|
||||
|
||||
Added column `space.name` to `gam <UserTypeEntity> print chatmembers`.
|
||||
|
||||
6.66.04
|
||||
|
||||
Updated Chat info|show|print commands to display all time fields in local time if specified in `gam.cfg`.
|
||||
|
||||
6.66.03
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filelist select <DriveFileEntity>` where `stripcrsfromname` was not being
|
||||
applied to files below the selected folder.
|
||||
|
||||
6.66.02
|
||||
|
||||
Updated device commmands to handle the following error caused by an invalid query.
|
||||
```
|
||||
ERROR: 400: invalidArgument - Request contains an invalid argument.
|
||||
```
|
||||
|
||||
Added fields `deviceid` and `hostname` to `<DeviceFieldName>`.
|
||||
|
||||
6.66.01
|
||||
|
||||
Added the following variables to gam.cfg that allow control over whether `\` is used as an escape character
|
||||
when reading/writing CSV files.
|
||||
```
|
||||
csv_input_no_escape_char - default value True
|
||||
csv_output_no_escape_char - default value False
|
||||
todrive_no_escape_char - default value True
|
||||
```
|
||||
When the value is True, `\` is ignored as an escape character; when the value is False,
|
||||
`\\` on input is converted to `\`, `\` on output is converted to `\\`.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/CSV-Special-Characters
|
||||
|
||||
6.66.00
|
||||
|
||||
Added support for `Focus Time` and `Out of Office` status events in user's primary calendars.
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Calendars-Events#status-events
|
||||
This is a work-in-progress.
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show messages` to allow option `show_size` to be used with option `countsonly`
|
||||
to display the cumulative size of the messages selected.
|
||||
```
|
||||
gam user user@domain.com print messages query "newer_than:31d" countsonly showsize
|
||||
Getting all Messages for user@domain.com
|
||||
Got 16 Messagess for user@domain.com...
|
||||
User,messages,size
|
||||
user@domain.com,16,92806
|
||||
```
|
||||
|
||||
6.65.17
|
||||
|
||||
Added the option `mappermissionsdomain <DomainName1> <DomainName2>` to `gam <UserTypeEntity> create drivefileacl <DriveFileEntity>`
|
||||
that maps `<DomainName1>` to `<DomainName2>` in the `user <UserItem>)|(group <GroupItem>)|(domain <DomainName>)` options;
|
||||
`<UserItem>` and `<GroupItem>` must specify email addresses for the mapping to succeed.
|
||||
The option can be specified multiple times to provide different mappings. This option will be most useful
|
||||
when reading a CSV file containing ACLs referencing `<DomainName1>` and you want a new ACL with the same options but in `<DomainName2>`.
|
||||
|
||||
6.65.16
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> print filecounts` where `Item Cap` showed an incorrect value.
|
||||
|
||||
Added option `addorigfieldstosubject` to `gam <UserTypeEntity> forward messages|threads` that causes GAM
|
||||
to append the original `from`, `to` and `date` fields to the message subject.
|
||||
```
|
||||
Fwd: Ross to TestUser (Original From: Ross Scroggs <ross.scroggs@gmail.com> To: testuser@domain.com Date: Thu, 23 Nov 2023 07:01:59 -0800)
|
||||
```
|
||||
|
||||
6.65.15
|
||||
|
||||
Added additional options to `gam <UserTypeEntity> print|show youtubechannels`.
|
||||
|
||||
6.65.14
|
||||
|
||||
Fixed bug in gam <UserTypeEntity> copy|move drivefile` that caused a trap.
|
||||
```
|
||||
UnboundLocalError: cannot access local variable 'emailAddress' where it is not associated with a value
|
||||
```
|
||||
|
||||
6.65.13
|
||||
|
||||
Added support for user language `en-CA`.
|
||||
|
||||
Added option `sizefield quotabytesused|size` to the following commands that specifies which
|
||||
file size field to use when totaling file sizes; the default value is `quotabytesused`; previous versions used `size`.
|
||||
```
|
||||
gam <UserTypeEntity> print|show filecounts
|
||||
gam <UserTypeEntity> print filelist
|
||||
gam <UserTypeEntity> print|show filetree
|
||||
gam <UserTypeEntity> print diskusage
|
||||
```
|
||||
See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Drive-Files-Display#file-size-fields
|
||||
|
||||
6.65.12
|
||||
|
||||
Additional updates on MacOS when a `gam csv` command is interrupted with a contol-C.
|
||||
|
||||
6.65.11
|
||||
|
||||
Updated multiprocessing to handle the following error that occurs on MacOS when a `gam csv` command
|
||||
is interrupted with a contol-C.
|
||||
```
|
||||
multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be N leaked semaphore objects to clean up at shutdown
|
||||
```
|
||||
|
||||
Fixed bug in `gam print|show crostelemetry` where no CrOS device data was displayed if no selection
|
||||
options were chosen; now, data is displayed for all CrOS devices as documented.
|
||||
|
||||
6.65.10
|
||||
|
||||
Fixed bug in `gam print crostelemetry` that caused a trap: `KeyError: 'reportTime'`.
|
||||
|
||||
6.65.09
|
||||
|
||||
Added option `noduplicate` to `gam <UserTypeEntity> create drivefile` that causes GAM
|
||||
to issue a warning and not perform the create if a non-trashed item with the same name (regardless of MIME type)
|
||||
exists in the parent folder.
|
||||
|
||||
Updated `gam <UserTypeEntity> get drivefile <DriveFileEntity>` to handle the following error
|
||||
that seems to occur when multiple tabs from a Google sheet are being downloaded in parallel.
|
||||
```
|
||||
Download Failed: HTTP Error: 429
|
||||
```
|
||||
|
||||
6.65.08
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to `gam report <ActivityApplicationName>` that adds
|
||||
additional columns of data to the CSV file output.
|
||||
|
||||
Added option `shownoactivities` to `gam report <ActivityApplicationName>` that causes GAM to display
|
||||
a row with a key value of `NoActivities` when there are no activities to report.
|
||||
|
||||
For example, to find Shared Drives with no activity, see: https://github.com/taers232c/GAMADV-XTD3/wiki/Reports#find-shared-drives-with-no-activity
|
||||
|
||||
6.65.07
|
||||
|
||||
Updated `gam delete building` to handle the following error:
|
||||
```
|
||||
ERROR: 412: conditionNotMet - Cannot delete building because there are Calendar resources associated with it.
|
||||
```
|
||||
|
||||
6.65.06
|
||||
|
||||
Improved error message when trying to add external students/teachers to a course.
|
||||
```
|
||||
gam courses 544906261666 add student user@gmail.com
|
||||
Course: 544906261666, Add 1 Student
|
||||
Course: 544906261666, Student: user@gmail.com, Add Failed: 403: permissionDenied - @CannotDirectAddUser Unable to directly add the user to the course. Please check that the user account exists and is within the course admin's domain. Add external user with: gam user user@gmail.com create classroominvitation courses 544906261666 role Student
|
||||
```
|
||||
|
||||
6.65.05
|
||||
|
||||
Updated `gam info users <UserTypeEntity>` to make option `grouptree` effective when used
|
||||
with option `formatjson`.
|
||||
|
||||
Added option `[formatjson [quotechar <Character>]]]`
|
||||
to these commands so that event details are displayed in CSV format.
|
||||
```
|
||||
gam print|show grouptree <GroupEntity>
|
||||
gam <UserTypeEntity> print|show grouptree
|
||||
```
|
||||
|
||||
Added option `querytime<String> <Date>` to all commands that process messages.
|
||||
For example, you can identify all messages within a particular time period, in this case, all messages unread
|
||||
in the last 30 days.
|
||||
```
|
||||
gam user user@domain.com print messages querytime30d -30d query "after:#querytime30d# is:unread"
|
||||
```
|
||||
|
||||
Updated `gam <UserTypeEntity> import|insert message` to allow `replace <Tag> <UserReplacement>` as documented.
|
||||
|
||||
Updated non-owner permission handling in `gam <UserTypeEntity> copy|move drivefile`.
|
||||
|
||||
6.65.04
|
||||
|
||||
Fixed bug where license SKU `1010020031` (Google Workspace Frontline Standard) was improperly entered making it unusable;
|
||||
its alias `wsflwstan` was usable.
|
||||
|
||||
Added support for Google Workspace Additional Storage.
|
||||
* ProductID - 101043
|
||||
* SKUID - 1010430001 | gwas | plusstorage
|
||||
|
||||
6.65.03
|
||||
|
||||
Fixed bug in commands that display calendar events where event start and end times were not properly displayed
|
||||
when `gam.cfg` had `timezone utc`. The API returns the start and end times expressed in the calendar timezone
|
||||
but GAM replaced the timezone specifier with a `Z`; the date and time values were as expected. This became
|
||||
a problem when event data was exported and used to create or update events.
|
||||
|
||||
6.65.02
|
||||
|
||||
Updated `gam print|show browsers` to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
6.65.01
|
||||
|
||||
Added option `showmimetypesize` to `gam <UserTypeEntity> print|show filecounts` and
|
||||
`gam <UserTypeEntity> print filelist countsonly` that displays the total file size for each MIME type.
|
||||
|
||||
6.65.00
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> create contact <JSONData>` that caused a trap when
|
||||
contacts were being copied from one user to another.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-People-Contacts-Profiles#copy-user-contacts-to-another-user
|
||||
|
||||
Updated the following commands to allow specification of a task list by its title.
|
||||
```
|
||||
<TaskListTitle> ::= tltitle:<String>
|
||||
<TasklistTitleList> ::= "'<TasklistTitle>'(,'<TasklistTitle>')*"
|
||||
<TasklistEntity> ::=
|
||||
<TasklistIDList> | <TaskListTitleList> | <FileSelector> | <CSVFileSelector>
|
||||
|
||||
gam <UserTypeEntity> create task <TasklistEntity>
|
||||
gam <UserTypeEntity> show tasks [tasklists <TasklistEntity>]
|
||||
gam <UserTypeEntity> print tasks [tasklists <TasklistEntity>]
|
||||
gam <UserTypeEntity> update tasklist <TasklistEntity>
|
||||
gam <UserTypeEntity> delete tasklist <TasklistEntity>
|
||||
gam <UserTypeEntity> clear tasklist <TasklistEntity>
|
||||
gam <UserTypeEntity> info tasklist <TasklistEntity>
|
||||
```
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Tasks#specifying-task-lists
|
||||
|
||||
6.64.16
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> create task <TasklistIDEntity>` that caused a trap
|
||||
when an invalid TaskListID was specified.
|
||||
|
||||
6.64.15
|
||||
|
||||
Updated `lookerstudioassets|lookerstudiopermissions` commands to handle the following error:
|
||||
```
|
||||
ERROR: 500: internalError - Internal error encountered.
|
||||
```
|
||||
|
||||
6.64.14
|
||||
|
||||
Cleaned up and renamed `gam info appdetails` to `gam info chromeapp`.
|
||||
|
||||
6.64.13
|
||||
|
||||
Added command to get chrome app details.
|
||||
```
|
||||
gam info appdetails android|chrome|web <AppID> [formatjson]
|
||||
```
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Chrome-Installed-Apps
|
||||
|
||||
6.64.12
|
||||
|
||||
Upgraded to Python 3.12.0 where possible.
|
||||
Upgraded to OpenSSL 3.1.3 where possible.
|
||||
|
||||
6.64.11
|
||||
|
||||
Added support for Google Workspace Labs license.
|
||||
* ProductID - 101047
|
||||
* SKUID - 1010470002 | gwlabs | workspacelabs
|
||||
|
||||
6.64.10
|
||||
|
||||
Fixed bug introduced in 6.64.09 that caused a trap when `gam redirect csv <FileName> multiprocess` was used.
|
||||
|
||||
6.64.09
|
||||
|
||||
Eliminated extraneous `permisssions.0.xxxx` headers in `gam <UserTypeEntity> print filelist ... oneitemperrow`
|
||||
that appeared when some user in `<UserTypeEntity>` had no files to display.
|
||||
|
||||
6.64.08
|
||||
|
||||
Fixed bug in `redirect csv - todrive tdtitle "File Title" tdsheettitle "Sheet Title"` where
|
||||
"Sheet Title" was not assigned to the new sheet.
|
||||
|
||||
6.64.07
|
||||
|
||||
Updated `gam <UserTypeEntity> move drivefile` to handle the following error:
|
||||
```
|
||||
ERROR: 403: targetUserRoleLimitedByLicenseRestriction - Cannot set the requested role for that user as they lack the necessary license
|
||||
```
|
||||
|
||||
6.64.06
|
||||
|
||||
Added fields `devicelicensetype` and `osupdatestatus` to `<CrOSFieldName>`.
|
||||
|
||||
6.64.05
|
||||
|
||||
Added `matchfield organizerself <Boolean>` to `<EventMatchProperty>` to simplify selecting events
|
||||
where the user in the following commands is/is not the organizer of the event.
|
||||
```
|
||||
gam <UserTypeEntity> update events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> delete events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> purge events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> move events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> info events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> show events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>]
|
||||
gam <UserTypeEntity> update calattendees <UserCalendarEntity> <EventEntity>
|
||||
```
|
||||
|
||||
6.64.04
|
||||
|
||||
Updated `gam calendars <CalendarEntity> move events` and `gam <UserTypeEntity> move events <UserCalendarEntity>`
|
||||
to handle the following error:
|
||||
```
|
||||
ERROR: 400: badRequest - Bad Request
|
||||
```
|
||||
|
||||
6.64.03
|
||||
|
||||
Updated `gam <UserTypeEntity> get drivefile` to allow downloading Jamboard files; they must be downloaded with `format pdf`.
|
||||
|
||||
6.64.02
|
||||
|
||||
Updated `gam <UserTypeEntity> transfer drive` to handle the following error:
|
||||
```
|
||||
ERROR: 400: Bad Request. User message: "The action cannot be performed on an item of mime-type: application/vnd.google-apps.shortcut" - invalidSharingRequest
|
||||
```
|
||||
|
||||
6.64.01
|
||||
|
||||
Updated `gam <UserTypeEntity> print|show youtubechannels` to handle the following error:
|
||||
```
|
||||
ERROR: 403: unsupportedSupervisedAccount - Access Forbidden. The authenticated user cannot access this service.
|
||||
```
|
||||
|
||||
6.64.00
|
||||
|
||||
Added support for displaying users YouTube channels.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-YouTube
|
||||
|
||||
6.63.19
|
||||
|
||||
Fixed bug in `gam print vacation` where `endDate` value was not converted to `yyyy-mm-dd` format.
|
||||
|
||||
6.63.18
|
||||
|
||||
Updated `gam print|show ownership` to show the correct file owner when the most recent event is `change_owner`.
|
||||
|
||||
6.63.17
|
||||
|
||||
Added support for Duet AI license.
|
||||
* ProductID - 101047
|
||||
* SKUID - 1010470001 | duetai
|
||||
|
||||
Added `api_call_tries_limit` variable to `gam.cfg` that limits the number of tries
|
||||
for Google API calls that return an error that indicates a retry should be performed.
|
||||
The default value is 10 and the range of allowable values is 3-10.
|
||||
|
||||
6.63.16
|
||||
|
||||
Arguments `noinherit`, `blockinheritance` and `blockinheritance true` have been removed from the following
|
||||
commands due to an upcoming API change that no longer allows blocking OU setting inheritance.
|
||||
Arguments `inherit` and `blockinheritance false` are still valid.
|
||||
```
|
||||
gam create org <OrgUnitPath>
|
||||
gam update org <OrgUnitItem>
|
||||
gam update orgs <OrgUnitEntity>
|
||||
```
|
||||
|
||||
6.63.15
|
||||
|
||||
Added `print_cros_ous` and `print_cros_ous_and_children` variables to `gam.cfg` that provide a default list of OUs for these commands:
|
||||
```
|
||||
gam print cros
|
||||
gam print crosactivity
|
||||
```
|
||||
|
||||
Updated `group` commands that manage members to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
Updated Data Studio to Looker Studio; added the following command synonyms:
|
||||
* `lookerstudioassets` for `datastudioassets`
|
||||
* 'lookerstudiopermissions` for `datastudiopermissions`
|
||||
|
||||
Corrected error message in `gam add datastudiopermissions`:
|
||||
* Old -`ERROR: Missing argument: Expected <DataStudioAssetMembersEntity>`
|
||||
* New - `ERROR: Missing argument: Expected <LookerStudioPermissionEntity>
|
||||
|
||||
6.63.14
|
||||
|
||||
Added option `verifyorganizer [<Boolean>]` to `gam <UserTypeEntity> copy|move drivefile`. When a copy/move
|
||||
operation involves a Shared Drive, GAM verifies that the user is an organizer. Unfortunatley, this fails
|
||||
when the user is not a direct organizer but is a member of a group that is an organizer. Specifying
|
||||
`verifyorganizer false` suppresses the verification.
|
||||
|
||||
Updated the following commands to be able to specify a list of domains rather than a single domain:
|
||||
```
|
||||
gam print alias|aliases
|
||||
gam print groups
|
||||
gam print|show group-members
|
||||
gam print users
|
||||
```
|
||||
Added `print_agu_domains` variable to `gam.cfg` that provides a default list of domains for these commands.
|
||||
|
||||
When multiple domains are specified and a query/queries are specified, an API call is made for each domain/query combination.
|
||||
```
|
||||
$ gam print users domains school.org,students.school.org queries "'email:admin*','email:test*'"
|
||||
Getting all Users that match query (domain=school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
|
||||
Got 3 Users: admin@school.org - admindirector@school.org
|
||||
Getting all Users that match query (domain=school.org, query="email:test*"), may take some time on a large Google Workspace Account...
|
||||
Got 20 Users: testusera@school.org - testuserx@school.org
|
||||
Getting all Users that match query (domain=students.school.org, query="email:admin*"), may take some time on a large Google Workspace Account...
|
||||
Got 1 User: admin@students.school.org - admin@students.school.org
|
||||
Getting all Users that match query (domain=students.school.org, query="email:test*"), may take some time on a large Google Workspace Account...
|
||||
Got 1 User: testuser1@students.school.org - testuser1@students.school.org
|
||||
primaryEmail
|
||||
...
|
||||
```
|
||||
|
||||
6.63.13
|
||||
|
||||
Updated `gam <UserTypeEntity> print filelist ... showdrivename` and `gam <UserTypeEntity> show fileinfo <DriveFileEntity> ... showdrivename`
|
||||
to show the actual name of Shared Drives in other domains rather than `Drive`.
|
||||
|
||||
6.63.12
|
||||
|
||||
Updated commands that call the Reports API (including `gam info domain`) to handle a change
|
||||
in the Reports API that generated the following warning:
|
||||
```
|
||||
WARNING: End date greater than LastReportedDate.
|
||||
```
|
||||
|
||||
Added option `showdeleted [<Boolean>]' to `gam <UserTypeEntity> print|show chatmessages`.
|
||||
|
||||
6.63.11
|
||||
|
||||
Added option `ou_and_children <OrgUnitItem>` to `gam print|show crostelemetry` to simplify getting
|
||||
telemetry data for all ChromeOS devices in an OU and its children.
|
||||
|
||||
6.63.10
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to these commands. This adds additional columns of data to the CSV file output
|
||||
when the `csv` option is used. If a CSV file of calendar information is being used to specify the calenders, fields, e.g., summary
|
||||
can be added to the ACL output file.
|
||||
```
|
||||
gam <UserTypeEntity> print calendaracls <UserCalendarEntity>
|
||||
gam resource <ResourceID> print calendaracls
|
||||
gam resources <ResourceEntity> print calendaracls
|
||||
gam calendar <CalendarEntity> printacl
|
||||
gam calendars <CalendarEntity> print acls
|
||||
```
|
||||
|
||||
Added commands to show the number of CrOS devices or Users in an entity.
|
||||
```
|
||||
gam <CrOSTypeEntity> show count
|
||||
gam <UserTypeEntity> show count
|
||||
```
|
||||
|
||||
Updated `gam create project` to prompt user to mark `GAM Project Creation` as a trusted app.
|
||||
|
||||
6.63.09
|
||||
|
||||
Updated `gam create teamdrive` to handle the following error:
|
||||
```
|
||||
ERROR: 403: userCannotCreateTeamDrives - The authenticated user cannot create new shared drives.
|
||||
```
|
||||
|
||||
6.63.08
|
||||
|
||||
Updated `cigroup` commands to handle the following error:
|
||||
```
|
||||
ERROR: 400: invalidArgument - Request contains an invalid argument.
|
||||
```
|
||||
|
||||
6.63.07
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> append sheetrange` that caused a trap when appending to an empty sheet.
|
||||
|
||||
Upgraded to Python 3.11.5 where possible.
|
||||
|
||||
6.63.06
|
||||
|
||||
Updated `cigroup` commands to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
6.63.05
|
||||
|
||||
Updated `inboundsso` commands to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable.
|
||||
```
|
||||
|
||||
6.63.04
|
||||
|
||||
Added option `ignorerole` to `gam update groups|cigroups <GroupEntity> sync [<GroupRole>|ignorerole] ... <UserTypeEntity>` that causes GAM
|
||||
to remove members regardless of role and add new members with role MEMBER. This is a special purpose option, use with caution
|
||||
and ensure that `<UserTypeEntity>` specifies the full desired membership list of all roles.
|
||||
|
||||
6.63.03
|
||||
|
||||
Added option `externalusersallowed <Boolean>` to `gam <UserTypeEntity> create chatspace`
|
||||
that allows creation of chat spaces that allow external users.
|
||||
|
||||
Updated commands that process chat members to allow external users.
|
||||
|
||||
6.63.02
|
||||
|
||||
Fixed bug in `gam <UserTypeEntity> collect orphans` where shortcuts were being created unnecessarily
|
||||
when `useshortcuts` was false; either by default or when explicitly set.
|
||||
|
||||
6.63.01
|
||||
|
||||
Added `process_wait_limit` variable to `gam.cfg` that controls how long (in seconds) GAM should wait for all batch|csv processes to complete
|
||||
after all have been started. If the limit is reached, GAM terminates any remaining processes. The default is 0 which specifies no limit.
|
||||
|
||||
Following Jay's lead, added option `alwaysevict` to `gam create|update user` that is used to specify GAM's
|
||||
behavior when `verifynotinvitable` is not specified and there is a conflict with an unmanaged account.
|
||||
|
||||
By default, when creating a user that has a conflict with an unmanaged account, GAM will honor the setting on this page:
|
||||
* https://admin.google.com/ac/accountsettings/conflictaccountmanagement
|
||||
|
||||
Specifying `alwaysevict` forces GAM to select this setting: `Replace conflicting unmanaged accounts with managed ones`
|
||||
|
||||
With `gam update user`, `alwaysevict` only applies if `createifnotfound` is specified and the user was not found to update and must be created.
|
||||
|
||||
6.63.00
|
||||
|
||||
Added support for calendar working location events.
|
||||
|
||||
* See: https://github.com/taers232c/GAMADV-XTD3/wiki/Users-Calendars-Events#working-location-events
|
||||
|
||||
6.62.08
|
||||
|
||||
Added option `addcsvdata <FieldName> <String>` to these commands. This adds additional columns of data to the CSV file output
|
||||
when the `csv` option is used.
|
||||
```
|
||||
gam create contact
|
||||
gam <UserTypeEntity> create contact
|
||||
gam <UserTypeEntity> create contactgroup
|
||||
```
|
||||
|
||||
6.62.07
|
||||
|
||||
Added option `csv [todrive <ToDriveAttribute>*]` to these commands that causes GAM to output
|
||||
the contact creator and contact ID in CSV form. This will be useful when bulk contacts are created.
|
||||
|
||||
Added `returnidonly` to these commands that causes GAM to return just the
|
||||
contact ID as output. This will be useful in scripts that create a contact and then
|
||||
want to perform subsequent GAM commands on the contact.
|
||||
```
|
||||
gam create contact
|
||||
gam <UserTypeEntity> create contact
|
||||
gam <UserTypeEntity> create contactgroup
|
||||
```
|
||||
|
||||
6.62.06
|
||||
|
||||
Added output `Item cap` to `gam <UserTypeEntity> print filecounts select select <SharedDriveEntity>` that
|
||||
displays the total number of files/folders on the Shared Drive divided by 400000, the maximum number of file/folders on a Shared Drive.
|
||||
|
||||
6.62.05
|
||||
|
||||
Added progress messages (suppressible) to `gam <UserTypeEntity> print diskusage`.
|
||||
@@ -4723,7 +5583,7 @@ Updated `gam [<UserTypeEntity>] create teamdrive <Name>` to output the name of t
|
||||
Team Drive in addition to its ID.
|
||||
```
|
||||
$ gam user user@domain.com create teamdrive Test
|
||||
User: user@domain.com, Shared Drive Name: Test, Shared Drive ID: 0ALHCDtCDTx_4Uk9PVA, Created
|
||||
User: user@domain.com, Shared Drive Name: Test, Shared Drive ID: 0ALHCDtCDTx_4Uk9XYZ, Created
|
||||
```
|
||||
|
||||
6.03.20
|
||||
|
||||
@@ -818,16 +818,16 @@ smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
||||
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||
# Label: "COMODO Certification Authority"
|
||||
# Serial: 104350513648249232941998508985834464573
|
||||
# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75
|
||||
# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b
|
||||
# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66
|
||||
# Serial: 43390818032842818540635488309124489234
|
||||
# MD5 Fingerprint: 20:E7:4F:82:C2:7E:94:80:34:82:8A:13:A9:17:1D:97
|
||||
# SHA1 Fingerprint EE:86:93:87:FF:FD:83:49:AB:5A:D1:43:22:58:87:89:A4:57:B0:12
|
||||
# SHA256 Fingerprint: 1A:0D:20:44:5D:E5:BA:18:62:D1:9E:F8:80:85:8C:BC:E5:01:02:B3:6E:8F:0A:04:0C:3C:69:E7:45:22:FE:6E
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
|
||||
MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
|
||||
gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
|
||||
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
|
||||
BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
|
||||
MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
|
||||
BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
|
||||
MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
|
||||
YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
|
||||
RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
|
||||
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
|
||||
@@ -836,16 +836,14 @@ UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
|
||||
Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
|
||||
+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
|
||||
DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
|
||||
nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
|
||||
/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
|
||||
PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
|
||||
QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
|
||||
SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
|
||||
IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
||||
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
|
||||
zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
|
||||
BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
|
||||
ZQ==
|
||||
nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
|
||||
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
||||
ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
|
||||
t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
|
||||
HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
|
||||
Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
|
||||
pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
|
||||
R1uUq27UlTMdphVx8fiUylQ5PsE=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Operating CA: Sectigo
|
||||
|
||||
5345
src/gam/__init__.py
5345
src/gam/__init__.py
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user