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-auth-httplib2==0.4.0",
|
||||
"google-auth-oauthlib==1.4.0",
|
||||
"google-auth==2.52.0",
|
||||
"google-auth==2.53.0",
|
||||
"httplib2==0.31.2",
|
||||
"lxml==6.1.0",
|
||||
"lxml==6.1.1",
|
||||
"passlib==1.7.4",
|
||||
"pathvalidate==3.3.1",
|
||||
"pysocks==1.7.1",
|
||||
|
||||
@@ -1665,11 +1665,15 @@ gam <UserTypeEntity> show analyticdatastreams
|
||||
<CalendarEntity> ::=
|
||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
|
||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer|none
|
||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||
<CalendarACLScopeEntity> ::=
|
||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<CalendarACLRole> ::=
|
||||
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||
<CalendarACLScope> ::=
|
||||
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||
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> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||
@@ -2511,6 +2515,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
||||
autoupdateexpiration|
|
||||
autoupdatethrough|
|
||||
backlightinfo|
|
||||
bluetoothadapterinfo|
|
||||
bootmode|
|
||||
chromeostype|
|
||||
cpuinfo|
|
||||
@@ -2544,6 +2549,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
||||
orgunitpath|org|ou|
|
||||
osupdatestatus|
|
||||
osversion|
|
||||
osversioncompliance|
|
||||
platformversion|
|
||||
recentusers|
|
||||
screenshotfiles|
|
||||
@@ -2725,25 +2731,30 @@ gam <CrOSTypeEntity> get devicefile [select <DeviceFileEntity>] [targetfolder <F
|
||||
Print telemetry data for specified CrOS devices.
|
||||
|
||||
<CrOSTelemetryFieldName> ::=
|
||||
appreport|
|
||||
audiostatusreport|
|
||||
batteryinfo|
|
||||
batterystatusreport|
|
||||
bootPerformancereport|
|
||||
bootperformancereport|
|
||||
cpuinfo|
|
||||
cpustatusreport|
|
||||
customer|
|
||||
deviceid|
|
||||
graphicsinfo|
|
||||
graphicsstatusreport|
|
||||
heartbeatstatusreport|
|
||||
kioskappstatusreport|
|
||||
memoryinfo|
|
||||
memorystatusreport|
|
||||
name|
|
||||
networkbandwidthreport|
|
||||
networkdiagnosticsreport|
|
||||
networkinfo|
|
||||
networkstatusreport|
|
||||
orgunitid|
|
||||
osupdatestatus|
|
||||
peripheralsreport|
|
||||
runtimecountersreport|
|
||||
serialnumber|
|
||||
storageinfo|
|
||||
storagestatusreport|
|
||||
@@ -2751,20 +2762,22 @@ Print telemetry data for specified CrOS devices.
|
||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||
|
||||
<CrOSTelemetryListFieldName> ::=
|
||||
appreport|
|
||||
audiostatusreport|
|
||||
batteryinfo|
|
||||
batterystatusreport|
|
||||
bootperformancereport|
|
||||
cpuinfo|
|
||||
cpustatusreport|
|
||||
graphicsstatusreport|
|
||||
heartbeatstatusreport|
|
||||
kioskappstatusreport|
|
||||
memorystatusreport|
|
||||
networkbandwidthreport|
|
||||
networkdiagnosticsreport|
|
||||
networkstatusreport|
|
||||
osupdatestatus|
|
||||
peripheralsreport|
|
||||
storagestatusreport|
|
||||
thunderboltinfo
|
||||
runtimecountersreport|
|
||||
storagestatusreport
|
||||
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
||||
|
||||
gam info crostelemetry <SerialNumber>
|
||||
@@ -2781,7 +2794,7 @@ gam show crostelemetry
|
||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
||||
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
|
||||
@@ -4885,10 +4898,15 @@ gam print resources [todrive <ToDriveAttribute>*] [allfields|<ResourceFieldName>
|
||||
[formatjson [quotechar <Character>]]
|
||||
[showitemcountonly]
|
||||
|
||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer|none
|
||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||
<CalendarACLScopeEntity> ::= <CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<CalendarACLRole> ::=
|
||||
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||
<CalendarACLScope> ::=
|
||||
<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> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||
@@ -6117,7 +6135,8 @@ gam <UserTypeEntity> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||
|
||||
# Users - Calendars
|
||||
|
||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
||||
<CalendarACLRole> ::=
|
||||
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||
|
||||
<CalendarSelectProperty> ::=
|
||||
(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
|
||||
|
||||
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>'
|
||||
__version__ = '7.44.00'
|
||||
__version__ = '7.44.03'
|
||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||
|
||||
# pylint: disable=wrong-import-position
|
||||
@@ -24649,7 +24649,7 @@ def _getFilterDateTime():
|
||||
return (filterDate, filterDate.replace(tzinfo='UTC'))
|
||||
|
||||
CROS_FIELDS_CHOICE_MAP = {
|
||||
'activetimeranges': ['activeTimeRanges.activeTime', 'activeTimeRanges.date'],
|
||||
'activetimeranges': 'activeTimeRanges',
|
||||
'annotatedassetid': 'annotatedAssetId',
|
||||
'annotatedlocation': 'annotatedLocation',
|
||||
'annotateduser': 'annotatedUser',
|
||||
@@ -24658,12 +24658,13 @@ CROS_FIELDS_CHOICE_MAP = {
|
||||
'autoupdateexpiration': 'autoUpdateExpiration',
|
||||
'autoupdatethrough': 'autoUpdateThrough',
|
||||
'backlightinfo': 'backlightInfo',
|
||||
'bluetoothadapterinfo': 'bluetoothAdapterInfo',
|
||||
'bootmode': 'bootMode',
|
||||
'chromeostype': 'chromeOsType',
|
||||
'cpuinfo': 'cpuInfo',
|
||||
'cpustatusreports': 'cpuStatusReports',
|
||||
'deprovisionreason': 'deprovisionReason',
|
||||
'devicefiles': ['deviceFiles.type', 'deviceFiles.createTime'],
|
||||
'devicefiles': 'deviceFiles',
|
||||
'deviceid': 'deviceId',
|
||||
'devicelicensetype': 'deviceLicenseType',
|
||||
'diskspaceusage': 'diskSpaceUsage',
|
||||
@@ -24693,9 +24694,10 @@ CROS_FIELDS_CHOICE_MAP = {
|
||||
'orgunitpath': 'orgUnitPath',
|
||||
'osupdatestatus': 'osUpdateStatus',
|
||||
'osversion': 'osVersion',
|
||||
'osversioncompliance': 'osVersionCompliance',
|
||||
'ou': 'orgUnitPath',
|
||||
'platformversion': 'platformVersion',
|
||||
'recentusers': ['recentUsers.email', 'recentUsers.type'],
|
||||
'recentusers': 'recentUsers',
|
||||
'screenshotfiles': 'screenshotFiles',
|
||||
'serialnumber': 'serialNumber',
|
||||
'status': 'status',
|
||||
@@ -24703,11 +24705,11 @@ CROS_FIELDS_CHOICE_MAP = {
|
||||
'systemramfreereports': 'systemRamFreeReports',
|
||||
'systemramtotal': 'systemRamTotal',
|
||||
'tag': 'annotatedAssetId',
|
||||
'timeranges': ['activeTimeRanges.activeTime', 'activeTimeRanges.date'],
|
||||
'times': ['activeTimeRanges.activeTime', 'activeTimeRanges.date'],
|
||||
'timeranges': 'activeTimeRanges',
|
||||
'times': 'activeTimeRanges',
|
||||
'tpmversioninfo': 'tpmVersionInfo',
|
||||
'user': 'annotatedUser',
|
||||
'users': ['recentUsers.email', 'recentUsers.type'],
|
||||
'users': 'recentUsers',
|
||||
'willautorenew': 'willAutoRenew',
|
||||
}
|
||||
CROS_BASIC_FIELDS_LIST = ['deviceId', 'annotatedAssetId', 'annotatedLocation', 'annotatedUser', 'lastSync', 'notes', 'serialNumber', 'status']
|
||||
@@ -24728,6 +24730,7 @@ CROS_SCALAR_PROPERTY_PRINT_ORDER = [
|
||||
'firmwareVersion',
|
||||
'platformVersion',
|
||||
'osVersion',
|
||||
'osVersionCompliance',
|
||||
'bootMode',
|
||||
'meid',
|
||||
'dockMacAddress',
|
||||
@@ -24976,6 +24979,9 @@ def infoCrOSDevices(entityList):
|
||||
backlightInfo = _filterBasicList(cros, 'backLightInfo', True, listLimit)
|
||||
if backlightInfo:
|
||||
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)
|
||||
if fanInfo:
|
||||
showJSON('fanInfo', fanInfo)
|
||||
@@ -25205,7 +25211,8 @@ CROS_ENTITIES_MAP = {
|
||||
}
|
||||
|
||||
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>*]
|
||||
# [(query <QueryCrOS>)|(queries <QueryCrOSList>) [querytime<String> <Time>]
|
||||
@@ -25279,7 +25286,7 @@ def doPrintCrOSDevices(entityList=None):
|
||||
return
|
||||
row = {}
|
||||
for attrib in cros:
|
||||
if attrib in {'cpuInfo', 'backlightInfo', 'fanInfo'}:
|
||||
if attrib in {'cpuInfo', 'backlightInfo', 'bluetoothAdapterInfo', 'fanInfo'}:
|
||||
flattenJSON({attrib: cros[attrib]}, flattened=row)
|
||||
elif attrib not in {'kind', 'etag', 'diskSpaceUsage', 'osUpdateStatus', 'tpmVersionInfo', 'activeTimeRanges', 'recentUsers',
|
||||
'deviceFiles', 'cpuStatusReports', 'diskVolumeReports', 'lastKnownNetwork', 'screenshotFiles', 'systemRamFreeReports'}:
|
||||
@@ -25311,7 +25318,7 @@ def doPrintCrOSDevices(entityList=None):
|
||||
for key in ['email', 'type']:
|
||||
new_row[f'recentUsers{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{key}'] = recentUsers[i][key]
|
||||
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]
|
||||
if i < lenCSR:
|
||||
new_row[f'cpuStatusReports{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}reportTime'] = cpuStatusReports[i]['reportTime']
|
||||
@@ -25827,6 +25834,7 @@ def doPrintCrOSEntity(entityList):
|
||||
doPrintCrOSActivity(entityList)
|
||||
|
||||
CROS_TELEMETRY_FIELDS_CHOICE_MAP = {
|
||||
'appreport': 'appReport',
|
||||
'audiostatusreport': 'audioStatusReport',
|
||||
'batteryinfo': 'batteryInfo',
|
||||
'batterystatusreport': 'batteryStatusReport',
|
||||
@@ -25837,35 +25845,41 @@ CROS_TELEMETRY_FIELDS_CHOICE_MAP = {
|
||||
'deviceid': 'deviceId',
|
||||
'graphicsinfo': 'graphicsInfo',
|
||||
'graphicsstatusreport': 'graphicsStatusReport',
|
||||
'heartbeatstatusreport': 'heartbeatStatusReport',
|
||||
'kioskappstatusreport': 'kioskAppStatusReport',
|
||||
'memoryinfo': 'memoryInfo',
|
||||
'memorystatusreport': 'memoryStatusReport',
|
||||
'name': 'name',
|
||||
'networkinfo': 'networkInfo',
|
||||
'networkbandwidthreport': 'networkBandwidthReport',
|
||||
'networkdiagnosticsreport': 'networkDiagnosticsReport',
|
||||
'networkinfo': 'networkInfo',
|
||||
'networkstatusreport': 'networkStatusReport',
|
||||
'orgunitid': 'orgUnitId',
|
||||
'osupdatestatus': 'osUpdateStatus',
|
||||
'peripheralsreport': 'peripheralsReport',
|
||||
'runtimecountersreport': 'runtimeCountersReport',
|
||||
'serialnumber': 'serialNumber',
|
||||
'storageinfo': 'storageInfo',
|
||||
'storagestatusreport': 'storageStatusReport',
|
||||
'thunderboltinfo': 'thunderboltInfo',
|
||||
}
|
||||
CROS_TELEMETRY_LIST_FIELDS_CHOICE_MAP = {
|
||||
'appreport': 'appReport',
|
||||
'audiostatusreport': 'audioStatusReport',
|
||||
'batteryinfo': 'batteryInfo',
|
||||
'batterystatusreport': 'batteryStatusReport',
|
||||
'bootperformancereport': 'bootPerformanceReport',
|
||||
'cpuinfo': 'cpuInfo',
|
||||
'cpustatusreport': 'cpuStatusReport',
|
||||
'graphicsstatusreport': 'graphicsStatusReport',
|
||||
'heartbeatstatusreport': 'heartbeatStatusReport',
|
||||
'kioskappstatusreport': 'kioskAppStatusReport',
|
||||
'memorystatusreport': 'memoryStatusReport',
|
||||
'networkbandwidthreport': 'networkBandwidthReport',
|
||||
'networkdiagnosticsreport': 'networkDiagnosticsReport',
|
||||
'networkstatusreport': 'networkStatusReport',
|
||||
'osupdatestatus': 'osUpdateStatus',
|
||||
'peripheralsreport': 'peripheralsReport',
|
||||
'runtimecountersreport': 'runtimeCountersReport',
|
||||
'storagestatusreport': 'storageStatusReport',
|
||||
'thunderboltinfo': 'thunderboltInfo',
|
||||
}
|
||||
|
||||
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>*]
|
||||
# [(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
# <CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||
# [reverselists <CrOSTelemetryListFieldNameList>]
|
||||
# [reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||
# [start <Date>] [end <Date>] [listlimit <Number>]
|
||||
# [formatjson [quotechar <Character>]]
|
||||
def doInfoPrintShowCrOSTelemetry():
|
||||
@@ -25928,13 +25942,32 @@ def doInfoPrintShowCrOSTelemetry():
|
||||
|
||||
def _printDevice(device):
|
||||
_cleanDevice(device)
|
||||
if not FJQC.formatJSON:
|
||||
csvPF.WriteRowTitles(flattenJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS))
|
||||
else:
|
||||
if FJQC.formatJSON:
|
||||
if (not csvPF.rowFilter and not csvPF.rowDropFilter) or csvPF.CheckRowTitles(flattenJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS)):
|
||||
csvPF.WriteRowNoFilter({'deviceId': device['deviceId'],
|
||||
'JSON': json.dumps(cleanJSON(device, timeObjects=CROS_TELEMETRY_TIME_OBJECTS),
|
||||
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):
|
||||
_cleanDevice(device)
|
||||
@@ -25961,11 +25994,12 @@ def doInfoPrintShowCrOSTelemetry():
|
||||
Act.Set(Act.SHOW)
|
||||
else:
|
||||
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)
|
||||
diskPercentOnly = showOrgUnitPath = False
|
||||
listLimit = 0
|
||||
startTime = endTime = None
|
||||
oneItemPerRow = False
|
||||
while Cmd.ArgumentsRemaining():
|
||||
myarg = getArgument()
|
||||
if csvPF and myarg == 'todrive':
|
||||
@@ -26021,6 +26055,8 @@ def doInfoPrintShowCrOSTelemetry():
|
||||
cd = buildGAPIObject(API.DIRECTORY)
|
||||
elif myarg == 'storagepercentonly':
|
||||
diskPercentOnly = True
|
||||
elif csvPF and myarg == 'oneitemperrow':
|
||||
oneItemPerRow = True
|
||||
else:
|
||||
FJQC.GetFormatJSONQuoteChar(myarg, False)
|
||||
if fieldsList:
|
||||
@@ -26032,6 +26068,8 @@ def doInfoPrintShowCrOSTelemetry():
|
||||
readMask = ','.join(set(fieldsList))
|
||||
if csvPF and FJQC.formatJSON:
|
||||
csvPF.SetJSONTitles(['deviceId', 'JSON'])
|
||||
elif csvPF and not oneItemPerRow:
|
||||
csvPF.SetIndexedTitles(CROS_TELEMETRY_LIST_FIELDS)
|
||||
if not pfilters:
|
||||
pfilters = [(None, 'All')]
|
||||
for pfilter in pfilters:
|
||||
@@ -40956,6 +40994,7 @@ CALENDAR_ACL_ROLES_MAP = {
|
||||
'read': 'reader',
|
||||
'reader': 'reader',
|
||||
'writer': 'writer',
|
||||
'writerwithoutprivateaccess': 'writerWithoutPrivateAccess',
|
||||
'none': 'none',
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,9 @@ Calendar ACL roles (as seen in Calendar GUI):
|
||||
* `owner` - Make changes to events and manage sharing
|
||||
* `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
|
||||
* [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>
|
||||
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
||||
|
||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||
<CalendarACLScopeEntity>::= <CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
<CalendarACLRole> ::=
|
||||
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||
<CalendarACLScope> ::=
|
||||
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||
domain:<DomainName>|domain|default
|
||||
<CalendarACLScopeList> ::=
|
||||
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||
<CalendarACLScopeEntity>::=
|
||||
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||
```
|
||||
## Manage calendar access
|
||||
```
|
||||
|
||||
@@ -98,6 +98,7 @@ gam oauth create
|
||||
autoupdateexpiration|
|
||||
autoupdatethrough|
|
||||
backlightinfo|
|
||||
bluetoothadapterinfo|
|
||||
bootmode|
|
||||
chromeostype|
|
||||
cpuinfo|
|
||||
@@ -131,6 +132,7 @@ gam oauth create
|
||||
orgunitpath|org|ou|
|
||||
osupdatestatus|
|
||||
osversion|
|
||||
osversioncompliance|
|
||||
platformversion|
|
||||
recentusers|
|
||||
screenshotfiles|
|
||||
@@ -185,25 +187,30 @@ gam oauth create
|
||||
<CrOSActivityListFieldNameList> ::= "<CrOSActivityListFieldName>(,<CrOSActivityListFieldName>)*"
|
||||
|
||||
<CrOSTelemetryFieldName> ::=
|
||||
appreport|
|
||||
audiostatusreport|
|
||||
batteryinfo|
|
||||
batterystatusreport|
|
||||
bootPerformancereport|
|
||||
bootperformancereport|
|
||||
cpuinfo|
|
||||
cpustatusreport|
|
||||
customer|
|
||||
deviceid|
|
||||
graphicsinfo|
|
||||
graphicsstatusreport|
|
||||
heartbeatstatusreport|
|
||||
kioskappstatusreport|
|
||||
memoryinfo|
|
||||
memorystatusreport|
|
||||
name|
|
||||
networkbandwidthreport|
|
||||
networkdiagnosticsreport|
|
||||
networkinfo|
|
||||
networkstatusreport|
|
||||
orgunitid|
|
||||
osupdatestatus|
|
||||
peripheralsreport|
|
||||
runtimecountersreport|
|
||||
serialnumber|
|
||||
storageinfo|
|
||||
storagestatusreport|
|
||||
@@ -211,20 +218,22 @@ gam oauth create
|
||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||
|
||||
<CrOSTelemetryListFieldName> ::=
|
||||
appreport|
|
||||
audiostatusreport|
|
||||
batteryinfo|
|
||||
batterystatusreport|
|
||||
bootperformancereport|
|
||||
cpuinfo|
|
||||
cpustatusreport|
|
||||
graphicsstatusreport|
|
||||
heartbeatstatusreport|
|
||||
kioskappstatusreport|
|
||||
memorystatusreport|
|
||||
networkbandwidthreport|
|
||||
networkdiagnosticsreport|
|
||||
networkstatusreport|
|
||||
osupdatestatus|
|
||||
peripheralsreport|
|
||||
storagestatusreport|
|
||||
thunderboltinfo
|
||||
runtimecountersreport|
|
||||
storagestatusreport
|
||||
<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>*]
|
||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
||||
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
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.
|
||||
|
||||
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.
|
||||
- `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:
|
||||
- `<CrOSTelemetryFieldName>*` - Specify fields individually
|
||||
|
||||
@@ -133,6 +133,8 @@ Use this table to filter/query for specific device types:
|
||||
|
||||
```
|
||||
## 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.
|
||||
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"`.
|
||||
|
||||
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
||||
|
||||
## 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
|
||||
|
||||
### 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
|
||||
|
||||
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$ 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>
|
||||
Python 3.14.4 64-bit final
|
||||
Python 3.14.5 64-bit final
|
||||
macOS Tahoe 26.5 arm64
|
||||
Path: /Users/gamteam/bin/gam7
|
||||
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:\>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>
|
||||
Python 3.14.4 64-bit final
|
||||
Python 3.14.5 64-bit final
|
||||
Windows 11 10.0.26200 AMD64
|
||||
Path: C:\GAM7
|
||||
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 Plus | 1010390002 | assuredcontrolsplus |
|
||||
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
||||
| Cloud Identity | 1010010001 | cloudidentity |
|
||||
| Cloud Identity Free | 1010010001 | cloudidentity |
|
||||
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
||||
| Cloud Search | 1010350001 | cloudsearch |
|
||||
| Colab Pro | 1010500001 | colabpro |
|
||||
@@ -163,7 +163,7 @@
|
||||
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||
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 |
|
||||
cloudsearch | 1010350001 | Cloud Search |
|
||||
colabpro | 1010500001 | Colab Pro |
|
||||
|
||||
@@ -12,6 +12,7 @@ Thank you.
|
||||
* James Seymour - https://sites.google.com/view/gam--commands/
|
||||
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
||||
* 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 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
||||
* 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
|
||||
* `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
|
||||
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
||||
|
||||
@@ -55,7 +58,7 @@ Calendar ACL roles (as seen in Calendar GUI):
|
||||
(timezone <TimeZone>)
|
||||
|
||||
<CalendarACLRole> ::=
|
||||
editor|freebusy|freebusyreader|owner|reader|writer
|
||||
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||
<CalendarACLScope> ::=
|
||||
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||
domain:<DomainName>|domain|default
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
- [Display Chat Members](#display-chat-members)
|
||||
- [Manage Chat Messages](#manage-chat-messages)
|
||||
- [Display Chat Messages](#display-chat-messages)
|
||||
- [Display Chat Messages by Searching](#display-chat-messages-by-searching)
|
||||
- [Display Chat Events](#display-chat-events)
|
||||
- [Manage Chat Emojis](#manage-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 - 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 - 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 - 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)
|
||||
@@ -908,7 +910,7 @@ gam user user@domain.com delete chatmessage name spaces/AAAADi-pvqc/messages/PKJ
|
||||
```
|
||||
|
||||
## Display Chat Messages
|
||||
Display a specific Chat message.
|
||||
Display a specific chat message.
|
||||
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
### Display information about all chat messages in a chat space
|
||||
### Display information about chat messages in a chat space
|
||||
```
|
||||
gam <UserTypeEntity> show chatmessages
|
||||
<ChatSpace>+
|
||||
[showdeleted [<Boolean>]] [filter <String>]
|
||||
[showdeleted [<Boolean>]]
|
||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||
[thread <ChatThread>])
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[orderby createtime [ascending|descending]]
|
||||
[formatjson]
|
||||
```
|
||||
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>*]
|
||||
<ChatSpace>+
|
||||
[showdeleted [<Boolean>]] [filter <String>]
|
||||
[showdeleted [<Boolean>]]
|
||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||
[thread <ChatThread>])
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[orderby createtime [ascending|descending]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
```
|
||||
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.
|
||||
|
||||
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 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.
|
||||
Use `thread <String>` to filter messages by their thread name, e.g., `spaces/AAAAAAAAAAA/threads/123`.
|
||||
|
||||
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"'
|
||||
filter 'createTime > "2012-04-21T11:30:00-04:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
||||
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'
|
||||
developer_preview_apis = chat
|
||||
developer_preview_api_key = <DeveloperPreviewKey>
|
||||
```
|
||||
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:
|
||||
```
|
||||
filter "createTime > \"2012-04-21T11:30:00-04:00\""
|
||||
filter "createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
||||
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"
|
||||
```
|
||||
You must specify `keywords <StringList>`; messages that match any word|phrase in `<StringList>` are displayed.
|
||||
Phrases must be enclosed in `"`.
|
||||
* Linux, macOS, Windows Command Prompt - `keywords "\"things to do\" urgent"`
|
||||
* Windows Power Shell - ```keywords "`"things to do`" urgent"```
|
||||
|
||||
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\"'
|
||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"'
|
||||
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'
|
||||
gam <UserTypeEntity> show chatsearchmessages
|
||||
keywords <StringList>
|
||||
<ChatSpace>*
|
||||
[displaynames [all|any] <StringList>]
|
||||
[senders <EmailAddressEntity>]*
|
||||
[usermentions [all|any] <EmailAddressEntity>]*
|
||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||
[hasattachment]
|
||||
[fields <ChatMessageFieldNameList>]
|
||||
[orderby createtime|relevance]
|
||||
[formatjson]
|
||||
```
|
||||
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 a specific Chat event.
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
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>
|
||||
Python 3.14.4 64-bit final
|
||||
Python 3.14.5 64-bit final
|
||||
macOS Tahoe 26.5 arm64
|
||||
Path: /Users/gamteam/bin/gam7
|
||||
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
|
||||
```
|
||||
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>
|
||||
Python 3.14.4 64-bit final
|
||||
Python 3.14.5 64-bit final
|
||||
macOS Tahoe 26.5 arm64
|
||||
Path: /Users/gamteam/bin/gam7
|
||||
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
|
||||
```
|
||||
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>
|
||||
Python 3.14.4 64-bit final
|
||||
Python 3.14.5 64-bit final
|
||||
macOS Tahoe 26.5 arm64
|
||||
Path: /Users/gamteam/bin/gam7
|
||||
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
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 7.43.10
|
||||
Latest: 7.44.03
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@@ -76,7 +76,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
7.43.10
|
||||
7.44.03
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@@ -86,9 +86,9 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
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>
|
||||
Python 3.14.4 64-bit final
|
||||
Python 3.14.5 64-bit final
|
||||
macOS Tahoe 26.5 arm64
|
||||
Path: /Users/gamteam/bin/gam7
|
||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||
|
||||
Reference in New Issue
Block a user