mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-03 22:01:39 +00:00
Compare commits
17 Commits
20260527.1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
42ee41d218 | ||
|
|
d8f0666e70 | ||
|
|
3d15d2a820 | ||
|
|
0c593b5809 | ||
|
|
d76ef999c5 | ||
|
|
ddaad4d655 | ||
|
|
36a1bdc56b | ||
|
|
089a5994aa | ||
|
|
3e9b46b650 | ||
|
|
7ca3b4d7da | ||
|
|
22d70ca2c3 | ||
|
|
b3acdf5955 | ||
|
|
c13a5215fe | ||
|
|
45750b591a | ||
|
|
c76f1b2128 | ||
|
|
e85e7f6868 | ||
|
|
055c74ed2e |
@@ -16,9 +16,9 @@ dependencies = [
|
|||||||
"google-api-python-client==2.196.0",
|
"google-api-python-client==2.196.0",
|
||||||
"google-auth-httplib2==0.4.0",
|
"google-auth-httplib2==0.4.0",
|
||||||
"google-auth-oauthlib==1.4.0",
|
"google-auth-oauthlib==1.4.0",
|
||||||
"google-auth==2.52.0",
|
"google-auth==2.53.0",
|
||||||
"httplib2==0.31.2",
|
"httplib2==0.31.2",
|
||||||
"lxml==6.1.0",
|
"lxml==6.1.1",
|
||||||
"passlib==1.7.4",
|
"passlib==1.7.4",
|
||||||
"pathvalidate==3.3.1",
|
"pathvalidate==3.3.1",
|
||||||
"pysocks==1.7.1",
|
"pysocks==1.7.1",
|
||||||
|
|||||||
@@ -1665,11 +1665,15 @@ gam <UserTypeEntity> show analyticdatastreams
|
|||||||
<CalendarEntity> ::=
|
<CalendarEntity> ::=
|
||||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer|none
|
<CalendarACLRole> ::=
|
||||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScope> ::=
|
||||||
<CalendarACLScopeEntity> ::=
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
domain:<DomainName>|domain|default
|
||||||
|
<CalendarACLScopeList> ::=
|
||||||
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
|
<CalendarACLScopeEntity>::=
|
||||||
|
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
|
||||||
gam calendars <CalendarEntity> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam calendars <CalendarEntity> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
gam calendars <CalendarEntity> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam calendars <CalendarEntity> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
@@ -2511,6 +2515,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
|||||||
autoupdateexpiration|
|
autoupdateexpiration|
|
||||||
autoupdatethrough|
|
autoupdatethrough|
|
||||||
backlightinfo|
|
backlightinfo|
|
||||||
|
bluetoothadapterinfo|
|
||||||
bootmode|
|
bootmode|
|
||||||
chromeostype|
|
chromeostype|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
@@ -2544,6 +2549,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
|||||||
orgunitpath|org|ou|
|
orgunitpath|org|ou|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
osversion|
|
osversion|
|
||||||
|
osversioncompliance|
|
||||||
platformversion|
|
platformversion|
|
||||||
recentusers|
|
recentusers|
|
||||||
screenshotfiles|
|
screenshotfiles|
|
||||||
@@ -2725,25 +2731,30 @@ gam <CrOSTypeEntity> get devicefile [select <DeviceFileEntity>] [targetfolder <F
|
|||||||
Print telemetry data for specified CrOS devices.
|
Print telemetry data for specified CrOS devices.
|
||||||
|
|
||||||
<CrOSTelemetryFieldName> ::=
|
<CrOSTelemetryFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
batteryinfo|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootPerformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
customer|
|
customer|
|
||||||
deviceid|
|
deviceid|
|
||||||
graphicsinfo|
|
graphicsinfo|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memoryinfo|
|
memoryinfo|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
name|
|
name|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkinfo|
|
networkinfo|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
orgunitid|
|
orgunitid|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
|
runtimecountersreport|
|
||||||
serialnumber|
|
serialnumber|
|
||||||
storageinfo|
|
storageinfo|
|
||||||
storagestatusreport|
|
storagestatusreport|
|
||||||
@@ -2751,20 +2762,22 @@ Print telemetry data for specified CrOS devices.
|
|||||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryListFieldName> ::=
|
<CrOSTelemetryListFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootperformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
storagestatusreport|
|
runtimecountersreport|
|
||||||
thunderboltinfo
|
storagestatusreport
|
||||||
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
||||||
|
|
||||||
gam info crostelemetry <SerialNumber>
|
gam info crostelemetry <SerialNumber>
|
||||||
@@ -2781,7 +2794,7 @@ gam show crostelemetry
|
|||||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
@@ -4885,10 +4898,15 @@ gam print resources [todrive <ToDriveAttribute>*] [allfields|<ResourceFieldName>
|
|||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer|none
|
<CalendarACLRole> ::=
|
||||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScope> ::=
|
||||||
<CalendarACLScopeEntity> ::= <CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
|
domain:<DomainName>|domain|default
|
||||||
|
<CalendarACLScopeList> ::=
|
||||||
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
|
<CalendarACLScopeEntity>::=
|
||||||
|
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
|
||||||
gam resource <ResourceID> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam resource <ResourceID> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
gam resource <ResourceID> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam resource <ResourceID> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
@@ -6117,7 +6135,8 @@ gam <UserTypeEntity> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
# Users - Calendars
|
# Users - Calendars
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
<CalendarACLRole> ::=
|
||||||
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
|
|
||||||
<CalendarSelectProperty> ::=
|
<CalendarSelectProperty> ::=
|
||||||
(minaccessrole <CalendarACLRole>)|
|
(minaccessrole <CalendarACLRole>)|
|
||||||
|
|||||||
@@ -1,3 +1,27 @@
|
|||||||
|
7.44.03
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>`; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
|
7.44.02
|
||||||
|
|
||||||
|
Added fields `bluetoothadapterinfo` and `osversioncompliance` to `<CrOSFieldName>` for use
|
||||||
|
in `gam info|print cros`.
|
||||||
|
|
||||||
|
7.44.01
|
||||||
|
|
||||||
|
Added option `oneitemperrow` to `gam print crostelemetry` to have each of a device's
|
||||||
|
report field entries displayed on a separate row with all of the other device fields.
|
||||||
|
|
||||||
|
Added additional fields to `<CrOSTelemetryFieldName>`and `<CrOSTelemetryListFieldName>`:
|
||||||
|
```
|
||||||
|
appreport
|
||||||
|
heartbeatstatusreport
|
||||||
|
kioskappstatusreport
|
||||||
|
networkbandwidthreport
|
||||||
|
runtimecountersreport
|
||||||
|
```
|
||||||
|
|
||||||
7.44.00
|
7.44.00
|
||||||
|
|
||||||
Added support for User data `archivalTime` and `suspensionTime` that is available
|
Added support for User data `archivalTime` and `suspensionTime` that is available
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.44.00'
|
__version__ = '7.44.03'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
# pylint: disable=wrong-import-position
|
# pylint: disable=wrong-import-position
|
||||||
@@ -24649,7 +24649,7 @@ def _getFilterDateTime():
|
|||||||
return (filterDate, filterDate.replace(tzinfo='UTC'))
|
return (filterDate, filterDate.replace(tzinfo='UTC'))
|
||||||
|
|
||||||
CROS_FIELDS_CHOICE_MAP = {
|
CROS_FIELDS_CHOICE_MAP = {
|
||||||
'activetimeranges': ['activeTimeRanges.activeTime', 'activeTimeRanges.date'],
|
'activetimeranges': 'activeTimeRanges',
|
||||||
'annotatedassetid': 'annotatedAssetId',
|
'annotatedassetid': 'annotatedAssetId',
|
||||||
'annotatedlocation': 'annotatedLocation',
|
'annotatedlocation': 'annotatedLocation',
|
||||||
'annotateduser': 'annotatedUser',
|
'annotateduser': 'annotatedUser',
|
||||||
@@ -24658,12 +24658,13 @@ CROS_FIELDS_CHOICE_MAP = {
|
|||||||
'autoupdateexpiration': 'autoUpdateExpiration',
|
'autoupdateexpiration': 'autoUpdateExpiration',
|
||||||
'autoupdatethrough': 'autoUpdateThrough',
|
'autoupdatethrough': 'autoUpdateThrough',
|
||||||
'backlightinfo': 'backlightInfo',
|
'backlightinfo': 'backlightInfo',
|
||||||
|
'bluetoothadapterinfo': 'bluetoothAdapterInfo',
|
||||||
'bootmode': 'bootMode',
|
'bootmode': 'bootMode',
|
||||||
'chromeostype': 'chromeOsType',
|
'chromeostype': 'chromeOsType',
|
||||||
'cpuinfo': 'cpuInfo',
|
'cpuinfo': 'cpuInfo',
|
||||||
'cpustatusreports': 'cpuStatusReports',
|
'cpustatusreports': 'cpuStatusReports',
|
||||||
'deprovisionreason': 'deprovisionReason',
|
'deprovisionreason': 'deprovisionReason',
|
||||||
'devicefiles': ['deviceFiles.type', 'deviceFiles.createTime'],
|
'devicefiles': 'deviceFiles',
|
||||||
'deviceid': 'deviceId',
|
'deviceid': 'deviceId',
|
||||||
'devicelicensetype': 'deviceLicenseType',
|
'devicelicensetype': 'deviceLicenseType',
|
||||||
'diskspaceusage': 'diskSpaceUsage',
|
'diskspaceusage': 'diskSpaceUsage',
|
||||||
@@ -24693,9 +24694,10 @@ CROS_FIELDS_CHOICE_MAP = {
|
|||||||
'orgunitpath': 'orgUnitPath',
|
'orgunitpath': 'orgUnitPath',
|
||||||
'osupdatestatus': 'osUpdateStatus',
|
'osupdatestatus': 'osUpdateStatus',
|
||||||
'osversion': 'osVersion',
|
'osversion': 'osVersion',
|
||||||
|
'osversioncompliance': 'osVersionCompliance',
|
||||||
'ou': 'orgUnitPath',
|
'ou': 'orgUnitPath',
|
||||||
'platformversion': 'platformVersion',
|
'platformversion': 'platformVersion',
|
||||||
'recentusers': ['recentUsers.email', 'recentUsers.type'],
|
'recentusers': 'recentUsers',
|
||||||
'screenshotfiles': 'screenshotFiles',
|
'screenshotfiles': 'screenshotFiles',
|
||||||
'serialnumber': 'serialNumber',
|
'serialnumber': 'serialNumber',
|
||||||
'status': 'status',
|
'status': 'status',
|
||||||
@@ -24703,11 +24705,11 @@ CROS_FIELDS_CHOICE_MAP = {
|
|||||||
'systemramfreereports': 'systemRamFreeReports',
|
'systemramfreereports': 'systemRamFreeReports',
|
||||||
'systemramtotal': 'systemRamTotal',
|
'systemramtotal': 'systemRamTotal',
|
||||||
'tag': 'annotatedAssetId',
|
'tag': 'annotatedAssetId',
|
||||||
'timeranges': ['activeTimeRanges.activeTime', 'activeTimeRanges.date'],
|
'timeranges': 'activeTimeRanges',
|
||||||
'times': ['activeTimeRanges.activeTime', 'activeTimeRanges.date'],
|
'times': 'activeTimeRanges',
|
||||||
'tpmversioninfo': 'tpmVersionInfo',
|
'tpmversioninfo': 'tpmVersionInfo',
|
||||||
'user': 'annotatedUser',
|
'user': 'annotatedUser',
|
||||||
'users': ['recentUsers.email', 'recentUsers.type'],
|
'users': 'recentUsers',
|
||||||
'willautorenew': 'willAutoRenew',
|
'willautorenew': 'willAutoRenew',
|
||||||
}
|
}
|
||||||
CROS_BASIC_FIELDS_LIST = ['deviceId', 'annotatedAssetId', 'annotatedLocation', 'annotatedUser', 'lastSync', 'notes', 'serialNumber', 'status']
|
CROS_BASIC_FIELDS_LIST = ['deviceId', 'annotatedAssetId', 'annotatedLocation', 'annotatedUser', 'lastSync', 'notes', 'serialNumber', 'status']
|
||||||
@@ -24728,6 +24730,7 @@ CROS_SCALAR_PROPERTY_PRINT_ORDER = [
|
|||||||
'firmwareVersion',
|
'firmwareVersion',
|
||||||
'platformVersion',
|
'platformVersion',
|
||||||
'osVersion',
|
'osVersion',
|
||||||
|
'osVersionCompliance',
|
||||||
'bootMode',
|
'bootMode',
|
||||||
'meid',
|
'meid',
|
||||||
'dockMacAddress',
|
'dockMacAddress',
|
||||||
@@ -24976,6 +24979,9 @@ def infoCrOSDevices(entityList):
|
|||||||
backlightInfo = _filterBasicList(cros, 'backLightInfo', True, listLimit)
|
backlightInfo = _filterBasicList(cros, 'backLightInfo', True, listLimit)
|
||||||
if backlightInfo:
|
if backlightInfo:
|
||||||
showJSON('backlightInfo', backlightInfo, dictObjectsKey={'backlightInfo': 'path'})
|
showJSON('backlightInfo', backlightInfo, dictObjectsKey={'backlightInfo': 'path'})
|
||||||
|
bluetoothAdapterInfo = _filterBasicList(cros, 'bluetoothAdapterInfo', True, listLimit)
|
||||||
|
if bluetoothAdapterInfo:
|
||||||
|
showJSON('bluetoothAdapterInfo', bluetoothAdapterInfo, dictObjectsKey={'bluetoothAdapterInfo': 'address'})
|
||||||
fanInfo = _filterBasicList(cros, 'fanInfo', True, listLimit)
|
fanInfo = _filterBasicList(cros, 'fanInfo', True, listLimit)
|
||||||
if fanInfo:
|
if fanInfo:
|
||||||
showJSON('fanInfo', fanInfo)
|
showJSON('fanInfo', fanInfo)
|
||||||
@@ -25205,7 +25211,8 @@ CROS_ENTITIES_MAP = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CROS_INDEXED_TITLES = ['activeTimeRanges', 'recentUsers', 'deviceFiles',
|
CROS_INDEXED_TITLES = ['activeTimeRanges', 'recentUsers', 'deviceFiles',
|
||||||
'cpuStatusReports', 'cpuInfo', 'backlightInfo', 'fanInfo', 'diskVolumeReports', 'lastKnownNetwork', 'screenshotFiles', 'systemRamFreeReports']
|
'cpuStatusReports', 'cpuInfo', 'backlightInfo', 'bluetoothAdapterInfo', 'fanInfo',
|
||||||
|
'diskVolumeReports', 'lastKnownNetwork', 'screenshotFiles', 'systemRamFreeReports']
|
||||||
|
|
||||||
# gam print cros [todrive <ToDriveAttribute>*]
|
# gam print cros [todrive <ToDriveAttribute>*]
|
||||||
# [(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime<String> <Time>]
|
# [(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime<String> <Time>]
|
||||||
@@ -25279,7 +25286,7 @@ def doPrintCrOSDevices(entityList=None):
|
|||||||
return
|
return
|
||||||
row = {}
|
row = {}
|
||||||
for attrib in cros:
|
for attrib in cros:
|
||||||
if attrib in {'cpuInfo', 'backlightInfo', 'fanInfo'}:
|
if attrib in {'cpuInfo', 'backlightInfo', 'bluetoothAdapterInfo', 'fanInfo'}:
|
||||||
flattenJSON({attrib: cros[attrib]}, flattened=row)
|
flattenJSON({attrib: cros[attrib]}, flattened=row)
|
||||||
elif attrib not in {'kind', 'etag', 'diskSpaceUsage', 'osUpdateStatus', 'tpmVersionInfo', 'activeTimeRanges', 'recentUsers',
|
elif attrib not in {'kind', 'etag', 'diskSpaceUsage', 'osUpdateStatus', 'tpmVersionInfo', 'activeTimeRanges', 'recentUsers',
|
||||||
'deviceFiles', 'cpuStatusReports', 'diskVolumeReports', 'lastKnownNetwork', 'screenshotFiles', 'systemRamFreeReports'}:
|
'deviceFiles', 'cpuStatusReports', 'diskVolumeReports', 'lastKnownNetwork', 'screenshotFiles', 'systemRamFreeReports'}:
|
||||||
@@ -25311,7 +25318,7 @@ def doPrintCrOSDevices(entityList=None):
|
|||||||
for key in ['email', 'type']:
|
for key in ['email', 'type']:
|
||||||
new_row[f'recentUsers{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{key}'] = recentUsers[i][key]
|
new_row[f'recentUsers{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{key}'] = recentUsers[i][key]
|
||||||
if i < lenDF:
|
if i < lenDF:
|
||||||
for key in ['type', 'createTime']:
|
for key in ['name', 'type', 'downloadUrl', 'createTime']:
|
||||||
new_row[f'deviceFiles{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{key}'] = deviceFiles[i][key]
|
new_row[f'deviceFiles{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{key}'] = deviceFiles[i][key]
|
||||||
if i < lenCSR:
|
if i < lenCSR:
|
||||||
new_row[f'cpuStatusReports{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}reportTime'] = cpuStatusReports[i]['reportTime']
|
new_row[f'cpuStatusReports{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}reportTime'] = cpuStatusReports[i]['reportTime']
|
||||||
@@ -25827,6 +25834,7 @@ def doPrintCrOSEntity(entityList):
|
|||||||
doPrintCrOSActivity(entityList)
|
doPrintCrOSActivity(entityList)
|
||||||
|
|
||||||
CROS_TELEMETRY_FIELDS_CHOICE_MAP = {
|
CROS_TELEMETRY_FIELDS_CHOICE_MAP = {
|
||||||
|
'appreport': 'appReport',
|
||||||
'audiostatusreport': 'audioStatusReport',
|
'audiostatusreport': 'audioStatusReport',
|
||||||
'batteryinfo': 'batteryInfo',
|
'batteryinfo': 'batteryInfo',
|
||||||
'batterystatusreport': 'batteryStatusReport',
|
'batterystatusreport': 'batteryStatusReport',
|
||||||
@@ -25837,35 +25845,41 @@ CROS_TELEMETRY_FIELDS_CHOICE_MAP = {
|
|||||||
'deviceid': 'deviceId',
|
'deviceid': 'deviceId',
|
||||||
'graphicsinfo': 'graphicsInfo',
|
'graphicsinfo': 'graphicsInfo',
|
||||||
'graphicsstatusreport': 'graphicsStatusReport',
|
'graphicsstatusreport': 'graphicsStatusReport',
|
||||||
|
'heartbeatstatusreport': 'heartbeatStatusReport',
|
||||||
|
'kioskappstatusreport': 'kioskAppStatusReport',
|
||||||
'memoryinfo': 'memoryInfo',
|
'memoryinfo': 'memoryInfo',
|
||||||
'memorystatusreport': 'memoryStatusReport',
|
'memorystatusreport': 'memoryStatusReport',
|
||||||
'name': 'name',
|
'name': 'name',
|
||||||
'networkinfo': 'networkInfo',
|
'networkbandwidthreport': 'networkBandwidthReport',
|
||||||
'networkdiagnosticsreport': 'networkDiagnosticsReport',
|
'networkdiagnosticsreport': 'networkDiagnosticsReport',
|
||||||
|
'networkinfo': 'networkInfo',
|
||||||
'networkstatusreport': 'networkStatusReport',
|
'networkstatusreport': 'networkStatusReport',
|
||||||
'orgunitid': 'orgUnitId',
|
'orgunitid': 'orgUnitId',
|
||||||
'osupdatestatus': 'osUpdateStatus',
|
'osupdatestatus': 'osUpdateStatus',
|
||||||
'peripheralsreport': 'peripheralsReport',
|
'peripheralsreport': 'peripheralsReport',
|
||||||
|
'runtimecountersreport': 'runtimeCountersReport',
|
||||||
'serialnumber': 'serialNumber',
|
'serialnumber': 'serialNumber',
|
||||||
'storageinfo': 'storageInfo',
|
'storageinfo': 'storageInfo',
|
||||||
'storagestatusreport': 'storageStatusReport',
|
'storagestatusreport': 'storageStatusReport',
|
||||||
'thunderboltinfo': 'thunderboltInfo',
|
'thunderboltinfo': 'thunderboltInfo',
|
||||||
}
|
}
|
||||||
CROS_TELEMETRY_LIST_FIELDS_CHOICE_MAP = {
|
CROS_TELEMETRY_LIST_FIELDS_CHOICE_MAP = {
|
||||||
|
'appreport': 'appReport',
|
||||||
'audiostatusreport': 'audioStatusReport',
|
'audiostatusreport': 'audioStatusReport',
|
||||||
'batteryinfo': 'batteryInfo',
|
|
||||||
'batterystatusreport': 'batteryStatusReport',
|
'batterystatusreport': 'batteryStatusReport',
|
||||||
'bootperformancereport': 'bootPerformanceReport',
|
'bootperformancereport': 'bootPerformanceReport',
|
||||||
'cpuinfo': 'cpuInfo',
|
|
||||||
'cpustatusreport': 'cpuStatusReport',
|
'cpustatusreport': 'cpuStatusReport',
|
||||||
'graphicsstatusreport': 'graphicsStatusReport',
|
'graphicsstatusreport': 'graphicsStatusReport',
|
||||||
|
'heartbeatstatusreport': 'heartbeatStatusReport',
|
||||||
|
'kioskappstatusreport': 'kioskAppStatusReport',
|
||||||
'memorystatusreport': 'memoryStatusReport',
|
'memorystatusreport': 'memoryStatusReport',
|
||||||
|
'networkbandwidthreport': 'networkBandwidthReport',
|
||||||
'networkdiagnosticsreport': 'networkDiagnosticsReport',
|
'networkdiagnosticsreport': 'networkDiagnosticsReport',
|
||||||
'networkstatusreport': 'networkStatusReport',
|
'networkstatusreport': 'networkStatusReport',
|
||||||
'osupdatestatus': 'osUpdateStatus',
|
'osupdatestatus': 'osUpdateStatus',
|
||||||
'peripheralsreport': 'peripheralsReport',
|
'peripheralsreport': 'peripheralsReport',
|
||||||
|
'runtimecountersreport': 'runtimeCountersReport',
|
||||||
'storagestatusreport': 'storageStatusReport',
|
'storagestatusreport': 'storageStatusReport',
|
||||||
'thunderboltinfo': 'thunderboltInfo',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CROS_TELEMETRY_SCALAR_FIELDS = ['deviceId', 'serialNumber', 'customer', 'name', 'orgUnitId', 'orgUnitPath']
|
CROS_TELEMETRY_SCALAR_FIELDS = ['deviceId', 'serialNumber', 'customer', 'name', 'orgUnitId', 'orgUnitPath']
|
||||||
@@ -25887,7 +25901,7 @@ CROS_TELEMETRY_TIME_OBJECTS = {'reportTime', 'lastUpdateTime', 'lastUpdateCheckT
|
|||||||
# gam print crostelemetry [todrive <ToDriveAttribute>*]
|
# gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||||
# [(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
# [(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||||
# <CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
# <CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||||
# [reverselists <CrOSTelemetryListFieldNameList>]
|
# [reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||||
# [start <Date>] [end <Date>] [listlimit <Number>]
|
# [start <Date>] [end <Date>] [listlimit <Number>]
|
||||||
# [formatjson [quotechar <Character>]]
|
# [formatjson [quotechar <Character>]]
|
||||||
def doInfoPrintShowCrOSTelemetry():
|
def doInfoPrintShowCrOSTelemetry():
|
||||||
@@ -25928,13 +25942,32 @@ def doInfoPrintShowCrOSTelemetry():
|
|||||||
|
|
||||||
def _printDevice(device):
|
def _printDevice(device):
|
||||||
_cleanDevice(device)
|
_cleanDevice(device)
|
||||||
if not FJQC.formatJSON:
|
if FJQC.formatJSON:
|
||||||
csvPF.WriteRowTitles(flattenJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS))
|
|
||||||
else:
|
|
||||||
if (not csvPF.rowFilter and not csvPF.rowDropFilter) or csvPF.CheckRowTitles(flattenJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS)):
|
if (not csvPF.rowFilter and not csvPF.rowDropFilter) or csvPF.CheckRowTitles(flattenJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS)):
|
||||||
csvPF.WriteRowNoFilter({'deviceId': device['deviceId'],
|
csvPF.WriteRowNoFilter({'deviceId': device['deviceId'],
|
||||||
'JSON': json.dumps(cleanJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS),
|
'JSON': json.dumps(cleanJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS),
|
||||||
ensure_ascii=False, sort_keys=True)})
|
ensure_ascii=False, sort_keys=True)})
|
||||||
|
return
|
||||||
|
if not oneItemPerRow:
|
||||||
|
csvPF.WriteRowTitles(flattenJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS))
|
||||||
|
return
|
||||||
|
listLens = {}
|
||||||
|
maxLen = 0
|
||||||
|
for field in CROS_TELEMETRY_LIST_FIELDS_CHOICE_MAP.values():
|
||||||
|
if field in device:
|
||||||
|
listLens[field] = len(device[field])
|
||||||
|
if listLens[field] > maxLen:
|
||||||
|
maxLen = listLens[field]
|
||||||
|
baserow = {}
|
||||||
|
for field in CROS_TELEMETRY_SCALAR_FIELDS:
|
||||||
|
if field in device:
|
||||||
|
baserow[field] = device[field]
|
||||||
|
for i in range(maxLen):
|
||||||
|
row = baserow.copy()
|
||||||
|
for field, fieldLen in listLens.items():
|
||||||
|
if i < fieldLen:
|
||||||
|
flattenJSON({field: device[field][i]}, flattened=row, timeObjects=CROS_TELEMETRY_TIME_OBJECTS)
|
||||||
|
csvPF.WriteRowTitles(row)
|
||||||
|
|
||||||
def _showDevice(device, i=0, count=0):
|
def _showDevice(device, i=0, count=0):
|
||||||
_cleanDevice(device)
|
_cleanDevice(device)
|
||||||
@@ -25961,11 +25994,12 @@ def doInfoPrintShowCrOSTelemetry():
|
|||||||
Act.Set(Act.SHOW)
|
Act.Set(Act.SHOW)
|
||||||
else:
|
else:
|
||||||
pfilters = []
|
pfilters = []
|
||||||
csvPF = CSVPrintFile(['deviceId'], CROS_TELEMETRY_SCALAR_FIELDS, CROS_TELEMETRY_LIST_FIELDS) if Act.csvFormat() else None
|
csvPF = CSVPrintFile(['deviceId'], CROS_TELEMETRY_SCALAR_FIELDS) if Act.csvFormat() else None
|
||||||
FJQC = FormatJSONQuoteChar(csvPF)
|
FJQC = FormatJSONQuoteChar(csvPF)
|
||||||
diskPercentOnly = showOrgUnitPath = False
|
diskPercentOnly = showOrgUnitPath = False
|
||||||
listLimit = 0
|
listLimit = 0
|
||||||
startTime = endTime = None
|
startTime = endTime = None
|
||||||
|
oneItemPerRow = False
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
if csvPF and myarg == 'todrive':
|
if csvPF and myarg == 'todrive':
|
||||||
@@ -26021,6 +26055,8 @@ def doInfoPrintShowCrOSTelemetry():
|
|||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
elif myarg == 'storagepercentonly':
|
elif myarg == 'storagepercentonly':
|
||||||
diskPercentOnly = True
|
diskPercentOnly = True
|
||||||
|
elif csvPF and myarg == 'oneitemperrow':
|
||||||
|
oneItemPerRow = True
|
||||||
else:
|
else:
|
||||||
FJQC.GetFormatJSONQuoteChar(myarg, False)
|
FJQC.GetFormatJSONQuoteChar(myarg, False)
|
||||||
if fieldsList:
|
if fieldsList:
|
||||||
@@ -26032,6 +26068,8 @@ def doInfoPrintShowCrOSTelemetry():
|
|||||||
readMask = ','.join(set(fieldsList))
|
readMask = ','.join(set(fieldsList))
|
||||||
if csvPF and FJQC.formatJSON:
|
if csvPF and FJQC.formatJSON:
|
||||||
csvPF.SetJSONTitles(['deviceId', 'JSON'])
|
csvPF.SetJSONTitles(['deviceId', 'JSON'])
|
||||||
|
elif csvPF and not oneItemPerRow:
|
||||||
|
csvPF.SetIndexedTitles(CROS_TELEMETRY_LIST_FIELDS)
|
||||||
if not pfilters:
|
if not pfilters:
|
||||||
pfilters = [(None, 'All')]
|
pfilters = [(None, 'All')]
|
||||||
for pfilter in pfilters:
|
for pfilter in pfilters:
|
||||||
@@ -40956,6 +40994,7 @@ CALENDAR_ACL_ROLES_MAP = {
|
|||||||
'read': 'reader',
|
'read': 'reader',
|
||||||
'reader': 'reader',
|
'reader': 'reader',
|
||||||
'writer': 'writer',
|
'writer': 'writer',
|
||||||
|
'writerwithoutprivateaccess': 'writerWithoutPrivateAccess',
|
||||||
'none': 'none',
|
'none': 'none',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
* `owner` - Make changes to events and manage sharing
|
* `owner` - Make changes to events and manage sharing
|
||||||
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>` in 7.44.03; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
||||||
|
|
||||||
@@ -30,10 +33,15 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
<CalendarACLRole> ::=
|
||||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScope> ::=
|
||||||
<CalendarACLScopeEntity>::= <CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
|
domain:<DomainName>|domain|default
|
||||||
|
<CalendarACLScopeList> ::=
|
||||||
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
|
<CalendarACLScopeEntity>::=
|
||||||
|
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
```
|
```
|
||||||
## Manage calendar access
|
## Manage calendar access
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ gam oauth create
|
|||||||
autoupdateexpiration|
|
autoupdateexpiration|
|
||||||
autoupdatethrough|
|
autoupdatethrough|
|
||||||
backlightinfo|
|
backlightinfo|
|
||||||
|
bluetoothadapterinfo|
|
||||||
bootmode|
|
bootmode|
|
||||||
chromeostype|
|
chromeostype|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
@@ -131,6 +132,7 @@ gam oauth create
|
|||||||
orgunitpath|org|ou|
|
orgunitpath|org|ou|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
osversion|
|
osversion|
|
||||||
|
osversioncompliance|
|
||||||
platformversion|
|
platformversion|
|
||||||
recentusers|
|
recentusers|
|
||||||
screenshotfiles|
|
screenshotfiles|
|
||||||
@@ -185,25 +187,30 @@ gam oauth create
|
|||||||
<CrOSActivityListFieldNameList> ::= "<CrOSActivityListFieldName>(,<CrOSActivityListFieldName>)*"
|
<CrOSActivityListFieldNameList> ::= "<CrOSActivityListFieldName>(,<CrOSActivityListFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryFieldName> ::=
|
<CrOSTelemetryFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
batteryinfo|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootPerformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
customer|
|
customer|
|
||||||
deviceid|
|
deviceid|
|
||||||
graphicsinfo|
|
graphicsinfo|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memoryinfo|
|
memoryinfo|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
name|
|
name|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkinfo|
|
networkinfo|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
orgunitid|
|
orgunitid|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
|
runtimecountersreport|
|
||||||
serialnumber|
|
serialnumber|
|
||||||
storageinfo|
|
storageinfo|
|
||||||
storagestatusreport|
|
storagestatusreport|
|
||||||
@@ -211,20 +218,22 @@ gam oauth create
|
|||||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryListFieldName> ::=
|
<CrOSTelemetryListFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootperformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
storagestatusreport|
|
runtimecountersreport|
|
||||||
thunderboltinfo
|
storagestatusreport
|
||||||
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -964,19 +973,21 @@ By default, Gam displays the information as an indented list of keys and values:
|
|||||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
Use these options to select CrOS devices; if none are chosen, all CrOS devices in the account are selected.
|
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|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
|
- `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>`.
|
- `cros_sn <SerialNumber>` - Select the CrOS device with serial number `<SerialNumber>`.
|
||||||
- `filter <String>` - Select the CrOS device with a filter.
|
- `filter <String>` - Select the CrOS device with a filter.
|
||||||
|
|
||||||
|
Use these options to limit/modify the displayed lists.
|
||||||
- `listlimit <Number>` - Limits the number of repetitions to `<Number>`; if not specified or `<Number>` equals zero, there is no limit.
|
- `listlimit <Number>` - Limits the number of repetitions to `<Number>`; if not specified or `<Number>` equals zero, there is no limit.
|
||||||
- `start <Date>` and `end <Date>` - Constrain list `reportTime` to fall within the specified `<Dates>`. If a `<Date>` isn't specified, there is no filtering in that range.
|
- `start <Date>` and `end <Date>` - Constrain list `reportTime` to fall within the specified `<Dates>`. If a `<Date>` isn't specified, there is no filtering in that range.
|
||||||
- `reverselists <CrOSTelemetryListFieldNameList>` - For each list, change order from ascending (oldest to newest) to descending (newest to oldest); this makes it easy to get the `N` most recent values with `listlimit N reverselists cpustatusreport,memorystatusreport`
|
- `reverselists <CrOSTelemetryListFieldNameList>` - For each list, change order from descending (newest to oldest) to ascending (oldest to newest)
|
||||||
|
- `oneitemrerrow` - Display each instance of a list item on a separate row; by default, all list items are displayed on a single row
|
||||||
|
|
||||||
By default, all telemetry data is displayed, use the following to select specific fields:
|
By default, all telemetry data is displayed, use the following to select specific fields:
|
||||||
- `<CrOSTelemetryFieldName>*` - Specify fields individually
|
- `<CrOSTelemetryFieldName>*` - Specify fields individually
|
||||||
|
|||||||
@@ -133,6 +133,8 @@ Use this table to filter/query for specific device types:
|
|||||||
|
|
||||||
```
|
```
|
||||||
## Create a company device
|
## Create a company device
|
||||||
|
This method is available only to customers who have one of the following SKUs: Enterprise Standard, Enterprise Plus, Enterprise for Education, and Cloud Identity Premium.
|
||||||
|
|
||||||
Adds a new device to the Google company-owned inventory. Once a user is assigned and enrolled on the device the device will be considered company-owned for management purposes.
|
Adds a new device to the Google company-owned inventory. Once a user is assigned and enrolled on the device the device will be considered company-owned for management purposes.
|
||||||
The device will also register as company-owned with Google services like [Context-Aware Access (CAA)](https://support.google.com/a/answer/9275380).
|
The device will also register as company-owned with Google services like [Context-Aware Access (CAA)](https://support.google.com/a/answer/9275380).
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ In zsh, if an argument contains a `~`, `|`, `!`, `>`, or `<`, you must enclose t
|
|||||||
|
|
||||||
To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
||||||
|
|
||||||
|
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
||||||
|
|
||||||
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
||||||
|
|
||||||
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
||||||
|
|
||||||
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
|
||||||
|
|
||||||
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
||||||
|
|
||||||
## Windows Command Prompt
|
## Windows Command Prompt
|
||||||
|
|||||||
@@ -10,6 +10,54 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
|
|
||||||
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 7.44.03
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>`; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
|
### 7.44.02
|
||||||
|
|
||||||
|
Added fields `bluetoothadapterinfo` and `osversioncompliance` to `<CrOSFieldName>` for use
|
||||||
|
in `gam info|print cros`.
|
||||||
|
|
||||||
|
### 7.44.01
|
||||||
|
|
||||||
|
Added option `oneitemperrow` to `gam print crostelemetry` to have each of a device's
|
||||||
|
report field entries displayed on a separate row with all of the other device fields.
|
||||||
|
|
||||||
|
Added additional fields to `<CrOSTelemetryFieldName>`and `<CrOSTelemetryListFieldName>`:
|
||||||
|
```
|
||||||
|
appreport
|
||||||
|
heartbeatstatusreport
|
||||||
|
kioskappstatusreport
|
||||||
|
networkbandwidthreport
|
||||||
|
runtimecountersreport
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.44.00
|
||||||
|
|
||||||
|
Added support for User data `archivalTime` and `suspensionTime` that is available
|
||||||
|
when fields `archived` and `suspended` are requested in `gam info user` and `gam print users`.
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> show chatmessages` to simplify specifying a filter.
|
||||||
|
```
|
||||||
|
start|starttime <Date>|<Time>
|
||||||
|
end|endtime <Date>|<Time>
|
||||||
|
range <Date>|<Time> <Date>|<Time>
|
||||||
|
thread <ChatThread>
|
||||||
|
```
|
||||||
|
|
||||||
|
Added commands to search for and display chat messages.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-messages-by-searching
|
||||||
|
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
|
```
|
||||||
|
developer_preview_apis = chat
|
||||||
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
|
```
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.5.
|
||||||
|
|
||||||
### 7.43.10
|
### 7.43.10
|
||||||
|
|
||||||
Updated `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity>` to not forward messages
|
Updated `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity>` to not forward messages
|
||||||
|
|||||||
@@ -251,9 +251,9 @@ writes the credentials into the file oauth2.txt.
|
|||||||
```
|
```
|
||||||
gamteam@server:/Users/gamteam$ rm -f /Users/gamteam/GAMConfig/oauth2.txt
|
gamteam@server:/Users/gamteam$ rm -f /Users/gamteam/GAMConfig/oauth2.txt
|
||||||
gamteam@server:/Users/gamteam$ gam version
|
gamteam@server:/Users/gamteam$ gam version
|
||||||
GAM 7.43.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.5 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
@@ -1034,9 +1034,9 @@ writes the credentials into the file oauth2.txt.
|
|||||||
```
|
```
|
||||||
C:\>del C:\GAMConfig\oauth2.txt
|
C:\>del C:\GAMConfig\oauth2.txt
|
||||||
C:\>gam version
|
C:\>gam version
|
||||||
GAM 7.43.10 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.44.03 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
Windows 11 10.0.26200 AMD64
|
Windows 11 10.0.26200 AMD64
|
||||||
Path: C:\GAM7
|
Path: C:\GAM7
|
||||||
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
| Assured Controls | 1010390001 | assuredcontrols |
|
| Assured Controls | 1010390001 | assuredcontrols |
|
||||||
| Assured Controls Plus | 1010390002 | assuredcontrolsplus |
|
| Assured Controls Plus | 1010390002 | assuredcontrolsplus |
|
||||||
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
||||||
| Cloud Identity | 1010010001 | cloudidentity |
|
| Cloud Identity Free | 1010010001 | cloudidentity |
|
||||||
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
||||||
| Cloud Search | 1010350001 | cloudsearch |
|
| Cloud Search | 1010350001 | cloudsearch |
|
||||||
| Colab Pro | 1010500001 | colabpro |
|
| Colab Pro | 1010500001 | colabpro |
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
cloudidentityfree| cloudidentity | identity | 1010010001 | Cloud Identity Free |
|
||||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||||
cloudsearch | 1010350001 | Cloud Search |
|
cloudsearch | 1010350001 | Cloud Search |
|
||||||
colabpro | 1010500001 | Colab Pro |
|
colabpro | 1010500001 | Colab Pro |
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Thank you.
|
|||||||
* James Seymour - https://sites.google.com/view/gam--commands/
|
* James Seymour - https://sites.google.com/view/gam--commands/
|
||||||
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
||||||
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist-now-turbocharged-with-gam7
|
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist-now-turbocharged-with-gam7
|
||||||
|
* Paul Ogier (Taming.Tech) - GAM Scripts https://github.com/PaulOgier/GAMScripts
|
||||||
* Paul Ogier (Taming.Tech) - GAM7 Course on Udemy https://taming.tech/GAMCourse
|
* Paul Ogier (Taming.Tech) - GAM7 Course on Udemy https://taming.tech/GAMCourse
|
||||||
* Paul Ogier (Taming.Tech) - GAM7 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
* Paul Ogier (Taming.Tech) - GAM7 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
||||||
* Paul Ogier (Taming.Tech) - Installation videos
|
* Paul Ogier (Taming.Tech) - Installation videos
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
* `owner` - Make changes to events and manage sharing
|
* `owner` - Make changes to events and manage sharing
|
||||||
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>` in 7.44.03; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
||||||
|
|
||||||
@@ -55,10 +58,10 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
(timezone <TimeZone>)
|
(timezone <TimeZone>)
|
||||||
|
|
||||||
<CalendarACLRole> ::=
|
<CalendarACLRole> ::=
|
||||||
editor|freebusy|freebusyreader|owner|reader|writer
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScope> ::=
|
<CalendarACLScope> ::=
|
||||||
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
domain:<DomainName>|domain|default
|
domain:<DomainName>|domain|default
|
||||||
<CalendarACLScopeList> ::=
|
<CalendarACLScopeList> ::=
|
||||||
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
<CalendarACLScopeEntity>::=
|
<CalendarACLScopeEntity>::=
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
- [Display Chat Members](#display-chat-members)
|
- [Display Chat Members](#display-chat-members)
|
||||||
- [Manage Chat Messages](#manage-chat-messages)
|
- [Manage Chat Messages](#manage-chat-messages)
|
||||||
- [Display Chat Messages](#display-chat-messages)
|
- [Display Chat Messages](#display-chat-messages)
|
||||||
|
- [Display Chat Messages by Searching](#display-chat-messages-by-searching)
|
||||||
- [Display Chat Events](#display-chat-events)
|
- [Display Chat Events](#display-chat-events)
|
||||||
- [Manage Chat Emojis](#manage-chat-emojis)
|
- [Manage Chat Emojis](#manage-chat-emojis)
|
||||||
- [Display Chat Emojis](#display-chat-emojis)
|
- [Display Chat Emojis](#display-chat-emojis)
|
||||||
@@ -65,6 +66,7 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
* [Chat API - Custom Emojis](https://developers.google.com/workspace/chat/api/reference/rest/v1/customEmojis)
|
* [Chat API - Custom Emojis](https://developers.google.com/workspace/chat/api/reference/rest/v1/customEmojis)
|
||||||
* [Chat API - Members](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.members/list)
|
* [Chat API - Members](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.members/list)
|
||||||
* [Chat API - Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/list)
|
* [Chat API - Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/list)
|
||||||
|
* [Chat API - Search Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/search)
|
||||||
* [Chat API - Events](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.spaceEvents/list)
|
* [Chat API - Events](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.spaceEvents/list)
|
||||||
* [Chat API - User Sections](https://developers.google.com/workspace/chat/api/reference/rest/v1/users.sections)
|
* [Chat API - User Sections](https://developers.google.com/workspace/chat/api/reference/rest/v1/users.sections)
|
||||||
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
||||||
@@ -109,8 +111,8 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||||
<ChatSpaceType> ::=
|
<ChatSpaceType> ::=
|
||||||
space|
|
space|
|
||||||
groupchat|
|
groupchat|
|
||||||
directmessage
|
directmessage
|
||||||
<ChatSpaceTypeList> ::= "<ChatSpaceType>(,<ChatSpaceType>)*"
|
<ChatSpaceTypeList> ::= "<ChatSpaceType>(,<ChatSpaceType>)*"
|
||||||
<ChatMessageID> ::= client-<String>
|
<ChatMessageID> ::= client-<String>
|
||||||
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
||||||
@@ -908,7 +910,7 @@ gam user user@domain.com delete chatmessage name spaces/AAAADi-pvqc/messages/PKJ
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Display Chat Messages
|
## Display Chat Messages
|
||||||
Display a specific Chat message.
|
Display a specific chat message.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
||||||
@@ -923,12 +925,15 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx90ooIU.PKJrx90ooIU
|
gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx90ooIU.PKJrx90ooIU
|
||||||
```
|
```
|
||||||
|
|
||||||
### Display information about all chat messages in a chat space
|
### Display information about chat messages in a chat space
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show chatmessages
|
gam <UserTypeEntity> show chatmessages
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
@@ -937,8 +942,11 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||||
@@ -952,38 +960,76 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
By default, deleted messages are not displayed; use `showdeleted` to also display deleted messages.
|
By default, deleted messages are not displayed; use `showdeleted` to also display deleted messages.
|
||||||
|
|
||||||
Use `filter <String>` to filter messages by `createTime` and `thread.name`.
|
To filter messages by the time they were created:
|
||||||
|
* `start|starttime <Date>|<Time>` - Display messages created on or after the `<Date>|<Time>`
|
||||||
|
* `end|endtime <Date>|<Time>` - Display messages created before the `<Date>|<Time>`
|
||||||
|
* `range <Date>|<Time> <Date>|<Time>` - Display messages created on or after the first `<Date>|<Time>` and before the second `<Date>|<Time>`
|
||||||
|
|
||||||
To filter messages by the date they were created, specify the createTime with a timestamp in RFC-3339 format and double quotation marks. For example, "2023-04-21T11:30:00-04:00".
|
Use `thread <String>` to filter messages by their thread name, e.g., `spaces/AAAAAAAAAAA/threads/123`.
|
||||||
* Use the greater than operator `>` to list messages that were created after a timestamp.
|
|
||||||
* Use the less than operator `<` to list messages that were created before a timestamp.
|
|
||||||
* To filter messages within a time interval, use the AND operator between two timestamps.
|
|
||||||
* To filter by thread, specify the thread.name, formatted as spaces/{space}/threads/{thread}. You can only specify one thread.name per query.
|
|
||||||
* To filter by both thread and date, use the AND operator in your query.
|
|
||||||
|
|
||||||
For example, the following queries are valid on Linux/MacOS:
|
## Display Chat Messages by Searching
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
```
|
```
|
||||||
filter 'createTime > "2012-04-21T11:30:00-04:00"'
|
developer_preview_apis = chat
|
||||||
filter 'createTime > "2012-04-21T11:30:00-04:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
filter 'createTime > "2012-04-21T11:30:00+00:00" AND createTime < "2013-01-01T00:00:00+00:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
|
||||||
filter 'thread.name = spaces/AAAAAAAAAAA/threads/123'
|
|
||||||
```
|
```
|
||||||
|
See the following for search option details:
|
||||||
|
https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/search
|
||||||
|
|
||||||
For example, the following queries are valid on Windows Command Prompt:
|
You must specify `keywords <StringList>`; messages that match any word|phrase in `<StringList>` are displayed.
|
||||||
```
|
Phrases must be enclosed in `"`.
|
||||||
filter "createTime > \"2012-04-21T11:30:00-04:00\""
|
* Linux, macOS, Windows Command Prompt - `keywords "\"things to do\" urgent"`
|
||||||
filter "createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
* Windows Power Shell - ```keywords "`"things to do`" urgent"```
|
||||||
filter "createTime > \"2012-04-21T11:30:00+00:00\" AND createTime < \"2013-01-01T00:00:00+00:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
|
||||||
filter "thread.name = spaces/AAAAAAAAAAA/threads/123"
|
|
||||||
```
|
|
||||||
|
|
||||||
For example, the following queries are valid on Windows PowerShell:
|
By default, all spaces the user has access to are searched; use the following options to limit the search.
|
||||||
|
* `<ChatSpace>*` - Specific chat spaces
|
||||||
|
* `displaynames [all|any] <StringList>` - Spaces with display names with partial matches of `all|any` of the words in `<StringList>`
|
||||||
|
|
||||||
|
Use the following to limit the search to messages with specific characteristics.
|
||||||
|
* `senders <EmailAddressEntity>` - Messages with any sender in `<EmailAddressEntity>`
|
||||||
|
* `usermentions [all|any] <EmailAddressEntity>` - Messages with mentions of `all|any` users in `<EmailAddressEntity>`
|
||||||
|
* `start|starttime <Date>|<Time>` - Messages created on or after the `<Date>|<Time>`
|
||||||
|
* `end|endtime <Date>|<Time>` - Messages created before the `<Date>|<Time>`
|
||||||
|
* `range <Date>|<Time> <Date>|<Time>` - Messages created on or after the first `<Date>|<Time>` and before the second `<Date>|<Time>`
|
||||||
|
* `hasattachment` - Messages with at least one attachment
|
||||||
```
|
```
|
||||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\"'
|
gam <UserTypeEntity> show chatsearchmessages
|
||||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"'
|
keywords <StringList>
|
||||||
filter 'createTime > \"2012-04-21T11:30:00+00:00\" AND createTime < \"2013-01-01T00:00:00+00:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
<ChatSpace>*
|
||||||
filter 'thread.name = spaces/AAAAAAAAAAA/threads/123'
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson]
|
||||||
```
|
```
|
||||||
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> print chatsearchmessages [todrive <ToDriveAttribute>*]
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson [quotechar <Character>]]
|
||||||
|
```
|
||||||
|
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||||
|
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||||
|
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||||
|
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||||
|
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||||
|
|
||||||
|
|
||||||
## Display Chat Events
|
## Display Chat Events
|
||||||
Display a specific Chat event.
|
Display a specific Chat event.
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.43.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.5 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
@@ -15,9 +15,9 @@ Time: 2026-02-15T07:51:00-08:00
|
|||||||
Print the current version of Gam with details and time offset information
|
Print the current version of Gam with details and time offset information
|
||||||
```
|
```
|
||||||
gam version timeoffset
|
gam version timeoffset
|
||||||
GAM 7.43.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.5 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
@@ -27,9 +27,9 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|||||||
Print the current version of Gam with extended details and SSL information
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAM 7.43.10 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.44.03 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.5 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
@@ -68,7 +68,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.43.10
|
Latest: 7.44.03
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -76,7 +76,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.43.10
|
7.44.03
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -86,9 +86,9 @@ echo $VER
|
|||||||
Print the current version of Gam and address of this Wiki
|
Print the current version of Gam and address of this Wiki
|
||||||
```
|
```
|
||||||
gam help
|
gam help
|
||||||
GAM 7.43.10 - https://github.com/GAM-team/GAM
|
GAM 7.44.03 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.5 64-bit final
|
||||||
macOS Tahoe 26.5 arm64
|
macOS Tahoe 26.5 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|||||||
Reference in New Issue
Block a user