Compare commits

..

3 Commits

Author SHA1 Message Date
Ross Scroggs
260f2d3f5c Update chromeschema/chromepolicy commands 2025-06-12 12:54:23 -07:00
Ross Scroggs
475275add7 Update Chrome-Policies.md 2025-06-12 10:26:08 -07:00
Ross Scroggs
d71832096a Bug fixes: whatis, print shareddriveorganizers 2025-06-11 22:19:33 -07:00
6 changed files with 273 additions and 319 deletions

View File

@@ -1,3 +1,9 @@
7.09.05
Improved output of `gam info|show chromeschemas [std]` to more accurately display the schemas.
Fixed bugs in `gam update chromepolicy` that caused invalid error messaages.
7.09.04
Fixed bug in `gam whatis <EmailItem>` where the check for an invitable user always failed.

View File

@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
"""
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
__version__ = '7.09.04'
__version__ = '7.09.05'
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
#pylint: disable=wrong-import-position
@@ -12353,7 +12353,8 @@ def checkServiceAccount(users):
Ind.Increment()
try:
key = callGAPI(iam.projects().serviceAccounts().keys(), 'get',
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND, GAPI.PERMISSION_DENIED],
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND,
GAPI.PERMISSION_DENIED, GAPI.SERVICE_NOT_AVAILABLE],
name=name, fields='validAfterTime')
key_created, _ = iso8601.parse_date(key['validAfterTime'])
key_age = todaysTime()-key_created
@@ -12366,6 +12367,10 @@ def checkServiceAccount(users):
Ent.SVCACCT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']],
str(e))
printPassFail(Msg.SERVICE_ACCOUNT_PRIVATE_KEY_AGE.format('UNKNOWN'), testWarn)
except GAPI.serviceNotAvailable as e:
entityActionFailedExit([Ent.PROJECT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['project_id'],
Ent.SVCACCT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']],
str(e))
else:
printPassFail(Msg.SERVICE_ACCOUNT_SKIPPING_KEY_AGE_CHECK.format(key_type), testPass)
Ind.Decrement()
@@ -28111,27 +28116,21 @@ def commonprefix(m):
return s1[:i]
return s1
def simplifyChromeSchema(schema):
SCHEMA_TYPE_MESSAGE_MAP = {
'NullableDuration': {'type': 'TYPE_INT64', 'namedType': 'duration'},
'NullableLong': {'type': 'TYPE_INT64', 'namedType': 'value'},
'SystemTimezone': {'type': 'TYPE_STRING', 'namedType': 'value'}
}
def simplifyChromeSchemaUpdate(schema):
schema_name = schema['name'].split('/')[-1]
schema_dict = {'name': schema_name,
'description': schema.get('policyDescription', ''),
'settings': {}
}
fieldDescriptions = schema['fieldDescriptions']
savedSettingName = ''
savedTypeName = ''
schema_dict = {'name': schema_name, 'settings': {}}
for mtype in schema['definition']['messageType']:
numSettings = len(mtype['field'])
if mtype['name'] in SCHEMA_TYPE_MESSAGE_MAP:
continue
for setting in mtype['field']:
setting_name = setting['name']
setting_dict = {'name': setting_name,
'constraints': None,
'descriptions': [],
'type': setting['type'],
}
if mtype['name'] == savedTypeName and numSettings == 1:
setting_dict['name'] = savedSettingName
savedTypeName = ''
setting_dict = {'name': setting_name, 'type': setting['type'], 'namedType': ''}
if setting_dict['type'] == 'TYPE_STRING' and setting.get('label') == 'LABEL_REPEATED':
setting_dict['type'] = 'TYPE_LIST'
if setting_dict['type'] == 'TYPE_ENUM':
@@ -28142,29 +28141,83 @@ def simplifyChromeSchema(schema):
setting_dict['enum_prefix'] = commonprefix(setting_dict['enums'])
prefix_len = len(setting_dict['enum_prefix'])
setting_dict['enums'] = [enum[prefix_len:] for enum in setting_dict['enums'] if not enum.endswith('UNSPECIFIED')]
setting_dict['descriptions'] = ['']*len(setting_dict['enums'])
for i, an in enumerate(setting_dict['enums']):
elif setting_dict['type'] == 'TYPE_MESSAGE':
type_name = setting['typeName']
if type_name not in SCHEMA_TYPE_MESSAGE_MAP:
continue
setting_dict['type'] = SCHEMA_TYPE_MESSAGE_MAP[type_name]['type']
setting_dict['namedType'] = SCHEMA_TYPE_MESSAGE_MAP[type_name]['namedType']
schema_dict['settings'][setting_name.lower()] = setting_dict
return(schema_name, schema_dict)
def simplifyChromeSchemaDisplay(schema):
schema_name = schema['name'].split('/')[-1]
schema_dict = {'name': schema_name, 'description': schema.get('policyDescription', '')}
fieldDescriptions = schema['fieldDescriptions']
enumDict = {}
for enumType in schema['definition'].get('enumType', []):
enumEntry = {}
enumEntry['enums'] = [enum['name'] for enum in enumType['value']]
enumEntry['enum_prefix'] = commonprefix(enumEntry['enums'])
enumEntry['enum_prefix_len'] = prefix_len = len(enumEntry['enum_prefix'])
enumEntry['enums'] = [enum[prefix_len:] for enum in enumEntry['enums'] if not enum.endswith('UNSPECIFIED')]
enumDict[enumType['name']] = enumEntry.copy()
mesgDict = {}
mesgPops = set()
for mesgType in schema['definition']['messageType']:
mtypeEntry = {'field': {}, 'subfield': False}
for mfield in mesgType['field']:
mfield.pop('number')
mtypeEntry['field'][mfield.pop('name')] = mfield
mesgDict[mesgType['name']] = mtypeEntry.copy()
for _, mtypeEntry in mesgDict.items():
for mfieldName, mfield in mtypeEntry['field'].items():
mfield['descriptions'] = []
if mfield['type'] == 'TYPE_STRING' and mfield.get('label') == 'LABEL_REPEATED':
mfield['type'] = 'TYPE_LIST'
if mfield['type'] == 'TYPE_ENUM':
mfield['subtype'] = enumDict[mfield['typeName']]
for an_enum in schema['definition']['enumType']:
if an_enum['name'] == mfield['typeName']:
mfield['descriptions'] = ['']*len(mfield['subtype']['enums'])
for i, an in enumerate(mfield['subtype']['enums']):
for fdesc in fieldDescriptions:
if fdesc.get('field') == setting_name:
if fdesc.get('field') == mfieldName:
for d in fdesc.get('knownValueDescriptions', []):
if d['value'][prefix_len:] == an:
setting_dict['descriptions'][i] = d.get('description', '')
if d['value'][mfield['subtype']['enum_prefix_len']:] == an:
mfield['descriptions'][i] = d.get('description', '')
break
break
break
elif setting_dict['type'] == 'TYPE_MESSAGE':
savedSettingName = setting_name
savedTypeName = setting['typeName']
elif mfield['type'] == 'TYPE_MESSAGE':
subfield = mfield['typeName']
if subfield not in SCHEMA_TYPE_MESSAGE_MAP:
mesgDict[subfield]['subfield'] = True
mfield['subtype'] = mesgDict[subfield]
else:
mfield['type'] = SCHEMA_TYPE_MESSAGE_MAP[subfield]['type']
mesgPops.add(subfield)
continue
else:
setting_dict['enums'] = None
for fdesc in schema['fieldDescriptions']:
if fdesc['field'] == setting_name:
for fdesc in fieldDescriptions:
if fdesc['field'] == mfieldName:
if 'knownValueDescriptions' in fdesc:
setting_dict['descriptions'] = fdesc['knownValueDescriptions']
if isinstance(fdesc['knownValueDescriptions'], list):
for kvd in fdesc['knownValueDescriptions']:
if isinstance(kvd, dict):
if 'description' in kvd:
mfield['descriptions'].append(f"{kvd['value']}: {kvd['description']}")
else:
mfield['descriptions'].append(f"{kvd['value']}")
else:
mfield['descriptions'].extend(kvd)
else:
mfield['descriptions'].append(kvd)
elif 'description' in fdesc:
setting_dict['descriptions'] = [fdesc['description']]
schema_dict['settings'][setting_name.lower()] = setting_dict
mfield['descriptions'].append(fdesc['description'])
for pfield in mesgPops:
mesgDict.pop(pfield)
schema_dict['settings'] = mesgDict
return(schema_name, schema_dict)
def _getPolicyOrgUnitTarget(cd, cp, myarg, groupEmail):
@@ -28507,7 +28560,7 @@ def doUpdateChromePolicy():
elif myarg == 'convertcrnl':
convertCRsNLs = True
else:
schemaName, schema = simplifyChromeSchema(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
schemaName, schema = simplifyChromeSchemaUpdate(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
body['requests'].append({'policyValue': {'policySchema': schemaName, 'value': {}},
'updateMask': ''})
schemaNameList.append(schemaName)
@@ -28593,8 +28646,9 @@ def doUpdateChromePolicy():
if field not in schema['settings']:
Cmd.Backup()
missingChoiceExit(schema['settings'])
casedField = schema['settings'][field]['name']
vtype = schema['settings'][field]['type']
field_settings = schema['settings'][field]
casedField = field_settings['name']
vtype = field_settings['type']
value = getString(Cmd.OB_STRING, minLen=0 if vtype in {'TYPE_STRING', 'TYPE_LIST'} else 1)
if vtype in ['TYPE_INT64', 'TYPE_INT32', 'TYPE_UINT64']:
if not value.isnumeric():
@@ -28611,8 +28665,8 @@ def doUpdateChromePolicy():
invalidChoiceExit(value, TRUE_FALSE, True)
elif vtype == 'TYPE_ENUM':
value = value.upper()
prefix = schema['settings'][field]['enum_prefix']
enum_values = schema['settings'][field]['enums']
prefix = field_settings['enum_prefix']
enum_values = field_settings['enums']
if value in enum_values:
value = f'{prefix}{value}'
elif value.replace(prefix, '') in enum_values:
@@ -28639,7 +28693,10 @@ def doUpdateChromePolicy():
elif value and not CHROME_TARGET_VERSION_PATTERN.match(value):
Cmd.Backup()
invalidArgumentExit(Msg.CHROME_TARGET_VERSION_FORMAT)
body['requests'][-1]['policyValue']['value'][casedField] = value
if field_settings['namedType']:
body['requests'][-1]['policyValue']['value'][casedField] = {field_settings['namedType']: value}
else:
body['requests'][-1]['policyValue']['value'][casedField] = value
body['requests'][-1]['updateMask'] += f'{casedField},'
checkPolicyArgs(targetResource, printer_id, app_id)
count = len(body['requests'])
@@ -28940,7 +28997,9 @@ def _showChromePolicySchema(schema, FJQC, i=0, count=0):
return
printEntity([Ent.CHROME_POLICY_SCHEMA, schema['name']], i, count)
Ind.Increment()
showJSON(None, schema, dictObjectsKey={'messageType': 'name', 'field': 'name', 'fieldDescriptions': 'field'})
showJSON(None, schema,
dictObjectsKey={'messageType': 'name', 'field': 'name',
'fieldDescriptions': 'field', 'knownValueDescriptions': 'value'})
Ind.Decrement()
CHROME_POLICY_SCHEMA_FIELDS_CHOICE_MAP = {
@@ -29074,31 +29133,35 @@ def doPrintShowChromePolicySchemas():
csvPF.writeCSVfile('Chrome Policy Schemas')
def _showChromePolicySchemaStd(schema):
printKeyValueList([f'{schema.get("name")}', f'{schema.get("description")}'])
Ind.Increment()
for val in schema['settings'].values():
vtype = val.get('type')
printKeyValueList([f'{val.get("name")}', f'{vtype}'])
def _printEntry(mtypeName, mtypeEntry):
vtype = mtypeEntry['type']
if vtype != 'TYPE_MESSAGE':
printKeyValueList([f'{mtypeName}', f'{vtype}'])
else:
printKeyValueList([f'{mtypeName}'])
Ind.Increment()
if vtype == 'TYPE_ENUM':
enums = val.get('enums', [])
descriptions = val.get('descriptions', [])
for i in range(len(val.get('enums', []))):
enums = mtypeEntry['subtype']['enums']
descriptions = mtypeEntry['descriptions']
for i in range(len(enums)):
printKeyValueList([f'{enums[i]}', f'{descriptions[i]}'])
elif vtype == 'TYPE_BOOL':
pvs = val.get('descriptions')
for pvi in pvs:
if isinstance(pvi, dict):
pvalue = pvi.get('value')
pdescription = pvi.get('description')
printKeyValueList([f'{pvalue}', f'{pdescription}'])
elif isinstance(pvi, list):
printKeyValueList([f'{pvi[0]}'])
elif vtype == 'TYPE_MESSAGE':
for mfieldName, mfield in mtypeEntry['subtype']['field'].items():
# managedBookmarks is recursive
if mtypeName != 'entries':
_printEntry(mfieldName, mfield)
else:
description = val.get('descriptions')
if len(description) > 0:
printKeyValueList([f'{description[0]}'])
for description in mtypeEntry.get('descriptions', []):
printKeyValueList([description])
Ind.Decrement()
printKeyValueList([f'{schema.get("name")}', f'{schema.get("description")}'])
Ind.Increment()
for _, mtypeEntry in schema['settings'].items():
if mtypeEntry['subfield']:
continue
for mfieldName, mfield in mtypeEntry['field'].items():
_printEntry(mfieldName, mfield)
Ind.Decrement()
# gam info chromeschema std <SchemaName>
@@ -29109,7 +29172,7 @@ def doInfoChromePolicySchemasStd(cp):
schema = callGAPI(cp.customers().policySchemas(), 'get',
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
name=name)
_, schema_dict = simplifyChromeSchema(schema)
_, schema_dict = simplifyChromeSchemaDisplay(schema)
_showChromePolicySchemaStd(schema_dict)
except GAPI.notFound:
entityUnknownWarning(Ent.CHROME_POLICY_SCHEMA, name)
@@ -29131,7 +29194,7 @@ def doShowChromePolicySchemasStd(cp):
parent=parent, filter=sfilter)
schemas = {}
for schema in result:
schema_name, schema_dict = simplifyChromeSchema(schema)
schema_name, schema_dict = simplifyChromeSchemaDisplay(schema)
schemas[schema_name.lower()] = schema_dict
for _, schema in sorted(iter(schemas.items())):
_showChromePolicySchemaStd(schema)
@@ -66178,11 +66241,7 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
fieldsList = ['role', 'type', 'emailAddress']
cd = entityList = orgUnitId = query = matchPattern = None
domainList = set()
if GC.Values[GC.DOMAIN]:
domainList.add(GC.Values[GC.DOMAIN])
else:
domainList.add(GM.Globals[GM.DECODED_ID_TOKEN].get('hd', 'UNKNOWN').lower())
domainList = set([(GC.Values[GC.DOMAIN] if GC.Values[GC.DOMAIN] else _getValueFromOAuth('hd'))])
oneOrganizer = True
while Cmd.ArgumentsRemaining():
myarg = getArgument()

View File

@@ -603,8 +603,7 @@ chrome.devices.DeviceAllowEnterpriseRemoteAccessConnections: Enterprise remote a
false: Prevent remote access connections from enterprise admins.
chrome.devices.DeviceAuthenticationFlowAutoReloadInterval: Automatic online sign-in / lock screen refresh.
deviceAuthenticationFlowAutoReloadInterval
duration: TYPE_INT64
deviceAuthenticationFlowAutoReloadInterval: TYPE_INT64
chrome.devices.DeviceAuthenticationUrlAllowlist: Blocked URL exceptions on the sign-in / lock screens.
deviceAuthenticationUrlAllowlist: TYPE_LIST
@@ -846,10 +845,8 @@ chrome.devices.DeviceScreensaverLoginScreenEnabled: Screen saver.
false: Don't display screen saver when idle.
deviceScreensaverLoginScreenImages: TYPE_LIST
Screen saver image URLs. Enter one URL per line. Images must be in JPG format(.jpg or .jpeg files.
deviceScreensaverLoginScreenIdleTimeoutSeconds
duration: TYPE_INT64
deviceScreensaverLoginScreenImageDisplayIntervalSeconds
duration: TYPE_INT64
deviceScreensaverLoginScreenIdleTimeoutSeconds: TYPE_INT64
deviceScreensaverLoginScreenImageDisplayIntervalSeconds: TYPE_INT64
chrome.devices.DeviceScreenSettings: Screen settings.
allowUserDisplayChanges: TYPE_BOOL
@@ -1042,16 +1039,13 @@ chrome.devices.EnableReportDeviceUsers: Report device user tracking.
false: Disable tracking recent users.
chrome.devices.EnableReportUploadFrequency: Device status report upload frequency.
reportDeviceUploadFrequency
duration: TYPE_STRING
reportDeviceUploadFrequency: TYPE_INT64
chrome.devices.EnableReportUploadFrequencyV2: Device status report upload frequency.
reportDeviceUploadFrequency
duration: TYPE_INT64
reportDeviceUploadFrequency: TYPE_INT64
chrome.devices.ExtensionCacheSize: Apps and extensions cache size.
extensionCacheSize
value: TYPE_INT64
extensionCacheSize: TYPE_INT64
chrome.devices.ForcedReenrollment: Forced re-enrollment.
reenrollmentMode: TYPE_ENUM
@@ -1101,34 +1095,26 @@ chrome.devices.kiosk.AccessibilityShortcutsEnabled: Kiosk accessibility shortcut
ACCESSIBILITY_ENABLED: Enable accessibility shortcuts.
chrome.devices.kiosk.AcPowerSettings: AC Kiosk power settings.
acIdleTimeout
duration: TYPE_STRING
acWarningTimeout
duration: TYPE_STRING
acIdleTimeout: TYPE_INT64
acWarningTimeout: TYPE_INT64
acIdleAction: TYPE_ENUM
IDLE_ACTION_SUSPEND: Sleep.
IDLE_ACTION_LOGOUT: Logout.
IDLE_ACTION_SHUTDOWN: Shutdown.
IDLE_ACTION_DO_NOTHING: Do nothing.
acDimTimeout
duration: TYPE_STRING
acScreenOffTimeout
duration: TYPE_STRING
acDimTimeout: TYPE_INT64
acScreenOffTimeout: TYPE_INT64
chrome.devices.kiosk.AcPowerSettingsV2: AC Kiosk power settings.
acIdleTimeout
duration: TYPE_INT64
acWarningTimeout
duration: TYPE_INT64
acIdleTimeout: TYPE_INT64
acWarningTimeout: TYPE_INT64
acIdleAction: TYPE_ENUM
IDLE_ACTION_SUSPEND: Sleep.
IDLE_ACTION_LOGOUT: Logout.
IDLE_ACTION_SHUTDOWN: Shutdown.
IDLE_ACTION_DO_NOTHING: Do nothing.
acDimTimeout
duration: TYPE_INT64
acScreenOffTimeout
duration: TYPE_INT64
acDimTimeout: TYPE_INT64
acScreenOffTimeout: TYPE_INT64
chrome.devices.kiosk.Alerting: Kiosk device status alerting delivery.
deviceStatusAlertDeliveryModes: TYPE_LIST
@@ -1217,34 +1203,26 @@ chrome.devices.kiosk.AutoclickEnabled: Kiosk auto-click enabled.
ACCESSIBILITY_ENABLED: Enable auto-click.
chrome.devices.kiosk.BatteryPowerSettings: Battery Kiosk power settings.
batteryIdleTimeout
duration: TYPE_STRING
batteryWarningTimeout
duration: TYPE_STRING
batteryIdleTimeout: TYPE_INT64
batteryWarningTimeout: TYPE_INT64
batteryIdleAction: TYPE_ENUM
IDLE_ACTION_SUSPEND: Sleep.
IDLE_ACTION_LOGOUT: Logout.
IDLE_ACTION_SHUTDOWN: Shutdown.
IDLE_ACTION_DO_NOTHING: Do nothing.
batteryDimTimeout
duration: TYPE_STRING
batteryScreenOffTimeout
duration: TYPE_STRING
batteryDimTimeout: TYPE_INT64
batteryScreenOffTimeout: TYPE_INT64
chrome.devices.kiosk.BatteryPowerSettingsV2: Battery Kiosk power settings.
batteryIdleTimeout
duration: TYPE_INT64
batteryWarningTimeout
duration: TYPE_INT64
batteryIdleTimeout: TYPE_INT64
batteryWarningTimeout: TYPE_INT64
batteryIdleAction: TYPE_ENUM
IDLE_ACTION_SUSPEND: Sleep.
IDLE_ACTION_LOGOUT: Logout.
IDLE_ACTION_SHUTDOWN: Shutdown.
IDLE_ACTION_DO_NOTHING: Do nothing.
batteryDimTimeout
duration: TYPE_INT64
batteryScreenOffTimeout
duration: TYPE_INT64
batteryDimTimeout: TYPE_INT64
batteryScreenOffTimeout: TYPE_INT64
chrome.devices.kiosk.CaretHighlightEnabled: Kiosk caret highlight.
caretHighlightEnabled: TYPE_ENUM
@@ -2481,40 +2459,24 @@ chrome.devices.managedguest.BrowserHistory: Browser history.
false: Always save browser history.
chrome.devices.managedguest.BrowsingDataLifetime: Browsing Data Lifetime.
browsingHistoryTtl
duration: TYPE_STRING
downloadHistoryTtl
duration: TYPE_STRING
cookiesAndOtherSiteDataTtl
duration: TYPE_STRING
cachedImagesAndFilesTtl
duration: TYPE_STRING
passwordSigninTtl
duration: TYPE_STRING
autofillTtl
duration: TYPE_STRING
siteSettingsTtl
duration: TYPE_STRING
hostedAppDataTtl
duration: TYPE_STRING
browsingHistoryTtl: TYPE_INT64
downloadHistoryTtl: TYPE_INT64
cookiesAndOtherSiteDataTtl: TYPE_INT64
cachedImagesAndFilesTtl: TYPE_INT64
passwordSigninTtl: TYPE_INT64
autofillTtl: TYPE_INT64
siteSettingsTtl: TYPE_INT64
hostedAppDataTtl: TYPE_INT64
chrome.devices.managedguest.BrowsingDataLifetimeV2: Browsing Data Lifetime.
browsingHistoryTtl
duration: TYPE_INT64
downloadHistoryTtl
duration: TYPE_INT64
cookiesAndOtherSiteDataTtl
duration: TYPE_INT64
cachedImagesAndFilesTtl
duration: TYPE_INT64
passwordSigninTtl
duration: TYPE_INT64
autofillTtl
duration: TYPE_INT64
siteSettingsTtl
duration: TYPE_INT64
hostedAppDataTtl
duration: TYPE_INT64
browsingHistoryTtl: TYPE_INT64
downloadHistoryTtl: TYPE_INT64
cookiesAndOtherSiteDataTtl: TYPE_INT64
cachedImagesAndFilesTtl: TYPE_INT64
passwordSigninTtl: TYPE_INT64
autofillTtl: TYPE_INT64
siteSettingsTtl: TYPE_INT64
hostedAppDataTtl: TYPE_INT64
chrome.devices.managedguest.BuiltInDnsClientEnabled: Built-in DNS client.
builtInDnsClientEnabled: TYPE_ENUM
@@ -3009,36 +2971,26 @@ chrome.devices.managedguest.IdleSettingsExtended: Idle settings.
LOGOUT: Logout.
SHUTDOWN: Shutdown.
DO_NOTHING: Do nothing.
idleDelayAc
duration: TYPE_INT64
idleWarningDelayAc
duration: TYPE_INT64
idleDelayAc: TYPE_INT64
idleWarningDelayAc: TYPE_INT64
idleActionAc: TYPE_ENUM
SLEEP: Sleep.
LOGOUT: Logout.
SHUTDOWN: Shut down.
DO_NOTHING: Do nothing.
screenDimDelayAc
duration: TYPE_INT64
screenOffDelayAc
duration: TYPE_INT64
screenLockDelayAc
duration: TYPE_INT64
idleDelayBattery
duration: TYPE_INT64
idleWarningDelayBattery
duration: TYPE_INT64
screenDimDelayAc: TYPE_INT64
screenOffDelayAc: TYPE_INT64
screenLockDelayAc: TYPE_INT64
idleDelayBattery: TYPE_INT64
idleWarningDelayBattery: TYPE_INT64
idleActionBattery: TYPE_ENUM
SLEEP: Sleep.
LOGOUT: Logout.
SHUTDOWN: Shut down.
DO_NOTHING: Do nothing.
screenDimDelayBattery
duration: TYPE_INT64
screenOffDelayBattery
duration: TYPE_INT64
screenLockDelayBattery
duration: TYPE_INT64
screenDimDelayBattery: TYPE_INT64
screenOffDelayBattery: TYPE_INT64
screenLockDelayBattery: TYPE_INT64
lockOnSleepOrLidClose: TYPE_ENUM
UNSET: Allow user to configure.
FALSE: Don't lock screen.
@@ -3238,12 +3190,10 @@ chrome.devices.managedguest.ManagedGuestSessionV2: Managed guest session.
ROTATE_270: 270 degrees.
chrome.devices.managedguest.MaxInvalidationFetchDelay: Policy fetch delay.
maxInvalidationFetchDelay
duration: TYPE_STRING
maxInvalidationFetchDelay: TYPE_INT64
chrome.devices.managedguest.MaxInvalidationFetchDelayV2: Policy fetch delay.
maxInvalidationFetchDelay
duration: TYPE_INT64
maxInvalidationFetchDelay: TYPE_INT64
chrome.devices.managedguest.MemorySaverModeSavings: Memory saver.
memorySaverModeSavings: TYPE_ENUM
@@ -3451,8 +3401,7 @@ chrome.devices.managedguest.PrintingBackgroundGraphicsDefault: Background graphi
ENABLED: Enable background graphics printing mode by default.
chrome.devices.managedguest.PrintingMaxSheetsAllowed: Maximum sheets.
printingMaxSheetsAllowedNullable
value: TYPE_INT64
printingMaxSheetsAllowedNullable: TYPE_INT64
chrome.devices.managedguest.PrintingPaperSizeDefault: Default printing page size.
printingPaperSizeEnum: TYPE_ENUM
@@ -3474,19 +3423,16 @@ chrome.devices.managedguest.PrintingPinDefault: Default PIN printing mode.
DEFAULT_TO_NOT_PIN_PRINTING: Without PIN.
chrome.devices.managedguest.PrintJobHistoryExpirationPeriodNew: Print job history retention period.
printJobHistoryExpirationPeriodDaysNew
duration: TYPE_STRING
printJobHistoryExpirationPeriodDaysNew: TYPE_INT64
chrome.devices.managedguest.PrintJobHistoryExpirationPeriodNewV2: Print job history retention period.
printJobHistoryExpirationPeriodDaysNew
duration: TYPE_INT64
printJobHistoryExpirationPeriodDaysNew: TYPE_INT64
chrome.devices.managedguest.PrintPdfAsImage: Print PDF as image.
printPdfAsImageAvailability: TYPE_BOOL
true: Allow users to print PDF documents as images.
false: Do not allow users to print PDF documents as images.
printRasterizePdfDpi
value: TYPE_INT64
printRasterizePdfDpi: TYPE_INT64
printPdfAsImageDefault: TYPE_BOOL
true: Default to printing PDFs as images when available.
false: Default to printing PDFs without being rasterized.
@@ -3547,8 +3493,7 @@ chrome.devices.managedguest.RemoteAccessHostClientDomainList: Remote access clie
Remote access client domain. Configure the required domain names for remote access clients.
chrome.devices.managedguest.RemoteAccessHostClipboardSizeBytes: Clipboard sync max size.
remoteAccessHostClipboardSizeBytes
value: TYPE_INT64
remoteAccessHostClipboardSizeBytes: TYPE_INT64
chrome.devices.managedguest.RemoteAccessHostDomainList: Remote access hosts.
remoteAccessHostDomainList: TYPE_LIST
@@ -3658,10 +3603,8 @@ chrome.devices.managedguest.ScreensaverLockScreenEnabled: Screen saver.
screensaverLockScreenEnabled: TYPE_BOOL
true: Display screen saver on lock screen when idle.
false: Don't display screen saver on lock screen when idle.
screensaverLockScreenIdleTimeoutSeconds
duration: TYPE_INT64
screensaverLockScreenImageDisplayIntervalSeconds
duration: TYPE_INT64
screensaverLockScreenIdleTimeoutSeconds: TYPE_INT64
screensaverLockScreenImageDisplayIntervalSeconds: TYPE_INT64
screensaverLockScreenImages: TYPE_LIST
Screen saver image URLs. Enter one URL per line. Images must be in JPG format(.jpg or .jpeg files.
@@ -3689,16 +3632,14 @@ chrome.devices.managedguest.SecurityTokenSessionSettings: Security token removal
IGNORE: Nothing.
LOGOUT: Log the user out.
LOCK: Lock the current session.
securityTokenSessionNotificationSeconds
duration: TYPE_STRING
securityTokenSessionNotificationSeconds: TYPE_INT64
chrome.devices.managedguest.SecurityTokenSessionSettingsV2: Security token removal.
securityTokenSessionBehavior: TYPE_ENUM
IGNORE: Nothing.
LOGOUT: Log the user out.
LOCK: Lock the current session.
securityTokenSessionNotificationSeconds
duration: TYPE_INT64
securityTokenSessionNotificationSeconds: TYPE_INT64
chrome.devices.managedguest.SelectToSpeakEnabled: Select to speak.
selectToSpeakEnabled: TYPE_ENUM
@@ -3723,12 +3664,10 @@ chrome.devices.managedguest.ServiceWorkerToControlSrcdocIframeEnabled: Service w
false: Block service workers from controlling srcdoc iframes.
chrome.devices.managedguest.SessionLength: Maximum user session length.
sessionDurationLimit
duration: TYPE_STRING
sessionDurationLimit: TYPE_INT64
chrome.devices.managedguest.SessionLengthV2: Maximum user session length.
sessionDurationLimit
duration: TYPE_INT64
sessionDurationLimit: TYPE_INT64
chrome.devices.managedguest.SessionLocale: Session locale.
sessionLocalesRepeatedString: TYPE_LIST
@@ -4361,12 +4300,10 @@ chrome.devices.RestrictedManagedGuestSessionExtensionCleanupExemptList: Shared a
Extension IDs. Enter a list of extension IDs. Each extension ID must be exactly 32 characters.
chrome.devices.ScheduledRebootDuration: Reboot after uptime limit.
uptimeLimitDuration
duration: TYPE_STRING
uptimeLimitDuration: TYPE_INT64
chrome.devices.ScheduledRebootDurationV2: Reboot after uptime limit.
uptimeLimitDuration
duration: TYPE_INT64
uptimeLimitDuration: TYPE_INT64
chrome.devices.ShowLowDiskSpaceNotification: Low disk space notification.
showLowDiskSpaceNotification: TYPE_BOOL
@@ -4519,8 +4456,7 @@ chrome.devices.ThrottleDeviceBandwidth: Throttle device bandwidth.
Upload rate (kbits). Sets the maximum upload rate if network bandwidth throttling is enabled on a ChromeOS device.
chrome.devices.Timezone: Timezone.
systemTimezone
value: TYPE_STRING
systemTimezone: TYPE_STRING
timezoneDetectionType: TYPE_ENUM
USERS_DECIDE: Let users decide.
DISABLED: Never auto-detect timezone.
@@ -6518,12 +6454,10 @@ chrome.users.AutoplayAllowlist: Autoplay video.
Allowed URLs. URL patterns allowed to autoplay. Prefix domain with [*.] to include all subdomains. Use * to allow all domains.
chrome.users.AutoUpdateCheckPeriodNew: Auto-update check period.
autoUpdateCheckPeriodMinutesNew
duration: TYPE_STRING
autoUpdateCheckPeriodMinutesNew: TYPE_INT64
chrome.users.AutoUpdateCheckPeriodNewV2: Auto-update check period.
autoUpdateCheckPeriodMinutesNew
duration: TYPE_INT64
autoUpdateCheckPeriodMinutesNew: TYPE_INT64
chrome.users.Avatar: Custom avatar.
userAvatarImage
@@ -6608,8 +6542,7 @@ chrome.users.BrowserHistory: Browser history.
false: Always save browser history.
chrome.users.BrowserIdleTimeout: Browser idle timeout.
idleTimeout
duration: TYPE_INT64
idleTimeout: TYPE_INT64
idleTimeoutActions: TYPE_LIST
close_browsers: Close Browsers.
show_profile_picker: Show Profile Picker.
@@ -6658,12 +6591,10 @@ chrome.users.BrowserSwitcherChromePath: Chrome path.
Path to the Chrome executable. Windows-only. Path to the Chrome executable to launch when switching from the alternative browser to Chrome. If unset, the alternative browser will auto-detect the path to Chrome.
chrome.users.BrowserSwitcherDelayDuration: Delay before launching alternative browser.
browserSwitcherDelayDuration
duration: TYPE_STRING
browserSwitcherDelayDuration: TYPE_INT64
chrome.users.BrowserSwitcherDelayDurationV2: Delay before launching alternative browser.
browserSwitcherDelayDuration
duration: TYPE_INT64
browserSwitcherDelayDuration: TYPE_INT64
chrome.users.BrowserSwitcherExternalGreylistUrl: URL to list of websites to open in either browser.
browserSwitcherExternalGreylistUrl: TYPE_STRING
@@ -6701,40 +6632,24 @@ chrome.users.BrowserThemeColor: Custom theme color.
Hex color. Enter a valid hex color, for instance #FFFFFF.
chrome.users.BrowsingDataLifetime: Browsing Data Lifetime.
browsingHistoryTtl
duration: TYPE_STRING
downloadHistoryTtl
duration: TYPE_STRING
cookiesAndOtherSiteDataTtl
duration: TYPE_STRING
cachedImagesAndFilesTtl
duration: TYPE_STRING
passwordSigninTtl
duration: TYPE_STRING
autofillTtl
duration: TYPE_STRING
siteSettingsTtl
duration: TYPE_STRING
hostedAppDataTtl
duration: TYPE_STRING
browsingHistoryTtl: TYPE_INT64
downloadHistoryTtl: TYPE_INT64
cookiesAndOtherSiteDataTtl: TYPE_INT64
cachedImagesAndFilesTtl: TYPE_INT64
passwordSigninTtl: TYPE_INT64
autofillTtl: TYPE_INT64
siteSettingsTtl: TYPE_INT64
hostedAppDataTtl: TYPE_INT64
chrome.users.BrowsingDataLifetimeV2: Browsing Data Lifetime.
browsingHistoryTtl
duration: TYPE_INT64
downloadHistoryTtl
duration: TYPE_INT64
cookiesAndOtherSiteDataTtl
duration: TYPE_INT64
cachedImagesAndFilesTtl
duration: TYPE_INT64
passwordSigninTtl
duration: TYPE_INT64
autofillTtl
duration: TYPE_INT64
siteSettingsTtl
duration: TYPE_INT64
hostedAppDataTtl
duration: TYPE_INT64
browsingHistoryTtl: TYPE_INT64
downloadHistoryTtl: TYPE_INT64
cookiesAndOtherSiteDataTtl: TYPE_INT64
cachedImagesAndFilesTtl: TYPE_INT64
passwordSigninTtl: TYPE_INT64
autofillTtl: TYPE_INT64
siteSettingsTtl: TYPE_INT64
hostedAppDataTtl: TYPE_INT64
chrome.users.BuiltInDnsClientEnabled: Built-in DNS client.
builtInDnsClientEnabled: TYPE_ENUM
@@ -6890,12 +6805,10 @@ chrome.users.CloudReporting: Managed browser reporting.
false: Disable managed browser cloud reporting.
chrome.users.CloudReportingUploadFrequency: Managed browser reporting upload frequency.
cloudReportingUploadFrequency
duration: TYPE_STRING
cloudReportingUploadFrequency: TYPE_INT64
chrome.users.CloudReportingUploadFrequencyV2: Managed browser reporting upload frequency.
cloudReportingUploadFrequency
duration: TYPE_INT64
cloudReportingUploadFrequency: TYPE_INT64
chrome.users.CloudUserPolicyMerge: User cloud policy merge.
cloudUserPolicyMerge: TYPE_BOOL
@@ -7374,12 +7287,10 @@ chrome.users.FElevenKeyModifier: Control the shortcut used to trigger F11.
RECOMMENDED: Allow users to override.
chrome.users.FetchKeepaliveDurationSecondsOnShutdown: Keepalive duration.
fetchKeepaliveDurationSecondsOnShutdown
duration: TYPE_STRING
fetchKeepaliveDurationSecondsOnShutdown: TYPE_INT64
chrome.users.FetchKeepaliveDurationSecondsOnShutdownV2: Keepalive duration.
fetchKeepaliveDurationSecondsOnShutdown
duration: TYPE_INT64
fetchKeepaliveDurationSecondsOnShutdown: TYPE_INT64
chrome.users.FileOrDirectoryPickerWithoutGestureAllowedForOrigins: File/directory picker without user gesture.
fileOrDirectoryPickerWithoutGestureAllowedForOrigins: TYPE_LIST
@@ -7639,12 +7550,10 @@ chrome.users.FullscreenAllowed: Fullscreen mode.
false: Do not allow fullscreen mode.
chrome.users.GaiaLockScreenOfflineSigninTimeLimitDays: Google online unlock frequency.
gaiaLockScreenOfflineSigninTimeLimitDays
value: TYPE_INT64
gaiaLockScreenOfflineSigninTimeLimitDays: TYPE_INT64
chrome.users.GaiaOfflineSigninTimeLimitDays: Google online login frequency.
gaiaOfflineSigninTimeLimitDays
value: TYPE_INT64
gaiaOfflineSigninTimeLimitDays: TYPE_INT64
chrome.users.GeminiSettings: Gemini integration.
geminiSettings: TYPE_ENUM
@@ -7812,36 +7721,26 @@ chrome.users.IdleSettingsExtended: Idle settings.
LOGOUT: Logout.
SHUTDOWN: Shutdown.
DO_NOTHING: Do nothing.
idleDelayAc
duration: TYPE_INT64
idleWarningDelayAc
duration: TYPE_INT64
idleDelayAc: TYPE_INT64
idleWarningDelayAc: TYPE_INT64
idleActionAc: TYPE_ENUM
SLEEP: Sleep.
LOGOUT: Logout.
SHUTDOWN: Shut down.
DO_NOTHING: Do nothing.
screenDimDelayAc
duration: TYPE_INT64
screenOffDelayAc
duration: TYPE_INT64
screenLockDelayAc
duration: TYPE_INT64
idleDelayBattery
duration: TYPE_INT64
idleWarningDelayBattery
duration: TYPE_INT64
screenDimDelayAc: TYPE_INT64
screenOffDelayAc: TYPE_INT64
screenLockDelayAc: TYPE_INT64
idleDelayBattery: TYPE_INT64
idleWarningDelayBattery: TYPE_INT64
idleActionBattery: TYPE_ENUM
SLEEP: Sleep.
LOGOUT: Logout.
SHUTDOWN: Shut down.
DO_NOTHING: Do nothing.
screenDimDelayBattery
duration: TYPE_INT64
screenOffDelayBattery
duration: TYPE_INT64
screenLockDelayBattery
duration: TYPE_INT64
screenDimDelayBattery: TYPE_INT64
screenOffDelayBattery: TYPE_INT64
screenLockDelayBattery: TYPE_INT64
lockOnSleepOrLidClose: TYPE_ENUM
UNSET: Allow user to configure.
FALSE: Don't lock screen.
@@ -8199,12 +8098,10 @@ chrome.users.MaxConnectionsPerProxy: Max connections per proxy.
Maximum number of concurrent connections to the proxy server. Specifies the maximal number of simultaneous connections to the proxy server. The value of this policy should be lower than 100 and higher than 6 and the default value is 32.
chrome.users.MaxInvalidationFetchDelay: Policy fetch delay.
maxInvalidationFetchDelay
duration: TYPE_STRING
maxInvalidationFetchDelay: TYPE_INT64
chrome.users.MaxInvalidationFetchDelayV2: Policy fetch delay.
maxInvalidationFetchDelay
duration: TYPE_INT64
maxInvalidationFetchDelay: TYPE_INT64
chrome.users.MediaRecommendationsEnabled: Media Recommendations.
mediaRecommendationsEnabled: TYPE_BOOL
@@ -8678,8 +8575,7 @@ chrome.users.PrintingLpacSandboxEnabled: Printing LPAC Sandbox.
false: Run printing services in a less secure sandbox.
chrome.users.PrintingMaxSheetsAllowed: Maximum sheets.
printingMaxSheetsAllowedNullable
value: TYPE_INT64
printingMaxSheetsAllowedNullable: TYPE_INT64
chrome.users.PrintingPaperSizeDefault: Default printing page size.
printingPaperSizeEnum: TYPE_ENUM
@@ -8706,19 +8602,16 @@ chrome.users.PrintingSendUsernameAndFilenameEnabled: CUPS Print job information.
false: Do not include user account and filename in print job.
chrome.users.PrintJobHistoryExpirationPeriodNew: Print job history retention period.
printJobHistoryExpirationPeriodDaysNew
duration: TYPE_STRING
printJobHistoryExpirationPeriodDaysNew: TYPE_INT64
chrome.users.PrintJobHistoryExpirationPeriodNewV2: Print job history retention period.
printJobHistoryExpirationPeriodDaysNew
duration: TYPE_INT64
printJobHistoryExpirationPeriodDaysNew: TYPE_INT64
chrome.users.PrintPdfAsImage: Print PDF as image.
printPdfAsImageAvailability: TYPE_BOOL
true: Allow users to print PDF documents as images.
false: Do not allow users to print PDF documents as images.
printRasterizePdfDpi
value: TYPE_INT64
printRasterizePdfDpi: TYPE_INT64
printPdfAsImageDefault: TYPE_BOOL
true: Default to printing PDFs as images when available.
false: Default to printing PDFs without being rasterized.
@@ -8861,36 +8754,30 @@ chrome.users.RelaunchNotificationWithDuration: Relaunch notification.
NO_NOTIFICATION: No relaunch notification.
RECOMMENDED: Show notification recommending relaunch.
REQUIRED: Force relaunch after a period.
relaunchNotificationPeriodDuration
duration: TYPE_STRING
relaunchInitialQuietPeriodDuration
duration: TYPE_STRING
relaunchNotificationPeriodDuration: TYPE_INT64
relaunchInitialQuietPeriodDuration: TYPE_INT64
relaunchWindowStartTime
timeOfDay
hours: TYPE_INT32
minutes: TYPE_INT32
seconds: TYPE_INT32
nanos: TYPE_INT32
relaunchWindowDurationMin
duration: TYPE_STRING
relaunchWindowDurationMin: TYPE_INT64
chrome.users.RelaunchNotificationWithDurationV2: Relaunch notification.
relaunchNotificationEnum: TYPE_ENUM
NO_NOTIFICATION: No relaunch notification.
RECOMMENDED: Show notification recommending relaunch.
REQUIRED: Force relaunch after a period.
relaunchNotificationPeriodDuration
duration: TYPE_INT64
relaunchInitialQuietPeriodDuration
duration: TYPE_INT64
relaunchNotificationPeriodDuration: TYPE_INT64
relaunchInitialQuietPeriodDuration: TYPE_INT64
relaunchWindowStartTime
timeOfDay
hours: TYPE_INT32
minutes: TYPE_INT32
seconds: TYPE_INT32
nanos: TYPE_INT32
relaunchWindowDurationMin
duration: TYPE_INT64
relaunchWindowDurationMin: TYPE_INT64
chrome.users.RemoteAccessHostAllowEnterpriseRemoteSupportConnections: Enterprise remote support connections.
remoteAccessHostAllowEnterpriseRemoteSupportConnections: TYPE_BOOL
@@ -8907,8 +8794,7 @@ chrome.users.RemoteAccessHostClientDomainList: Remote access clients.
Remote access client domain. Configure the required domain names for remote access clients.
chrome.users.RemoteAccessHostClipboardSizeBytes: Clipboard sync max size.
remoteAccessHostClipboardSizeBytes
value: TYPE_INT64
remoteAccessHostClipboardSizeBytes: TYPE_INT64
chrome.users.RemoteAccessHostDomainList: Remote access hosts.
remoteAccessHostDomainList: TYPE_LIST
@@ -9033,8 +8919,7 @@ chrome.users.SafeSitesFilterBehavior: SafeSites URL filter.
SAFE_SITES_FILTER_ENABLED: Filter sites for adult content.
chrome.users.SamlLockScreenOfflineSigninTimeLimitDays: SAML single sign-on unlock frequency.
samlLockScreenOfflineSigninTimeLimitDays
value: TYPE_INT64
samlLockScreenOfflineSigninTimeLimitDays: TYPE_INT64
chrome.users.SamlLockScreenReauthenticationEnabled: SAML single sign-on password synchronization flows.
samlLockScreenReauthenticationEnabled: TYPE_BOOL
@@ -9115,16 +9000,14 @@ chrome.users.SecurityTokenSessionSettings: Security token removal.
IGNORE: Nothing.
LOGOUT: Log the user out.
LOCK: Lock the current session.
securityTokenSessionNotificationSeconds
duration: TYPE_STRING
securityTokenSessionNotificationSeconds: TYPE_INT64
chrome.users.SecurityTokenSessionSettingsV2: Security token removal.
securityTokenSessionBehavior: TYPE_ENUM
IGNORE: Nothing.
LOGOUT: Log the user out.
LOCK: Lock the current session.
securityTokenSessionNotificationSeconds
duration: TYPE_INT64
securityTokenSessionNotificationSeconds: TYPE_INT64
chrome.users.SelectToSpeakEnabled: Select to speak.
selectToSpeakEnabled: TYPE_ENUM
@@ -9149,12 +9032,10 @@ chrome.users.ServiceWorkerToControlSrcdocIframeEnabled: Service worker control o
false: Block service workers from controlling srcdoc iframes.
chrome.users.SessionLength: Maximum user session length.
sessionDurationLimit
duration: TYPE_STRING
sessionDurationLimit: TYPE_INT64
chrome.users.SessionLengthV2: Maximum user session length.
sessionDurationLimit
duration: TYPE_INT64
sessionDurationLimit: TYPE_INT64
chrome.users.SetTimeoutWithoutOneMsClampEnabled: Javascript setTimeout() minimum.
setTimeoutWithoutOneMsClampEnabled: TYPE_ENUM

View File

@@ -10,6 +10,14 @@ 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.09.04
Fixed bug in `gam whatis <EmailItem>` where the check for an invitable user always failed.
Fixed bug in `gam print shareddriveorganizers` where no organizers were displayed when `domain` in `gam.cfg` was blank.
Updated to Python 3.13.5
### 7.09.03
Updated `gam <UserTypeEntity> create focustime|outofoffice ... timerange <Time> <Time>` to check

View File

@@ -251,9 +251,9 @@ writes the credentials into the file oauth2.txt.
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
admin@server:/Users/admin$ gam version
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
GAM 7.09.03 - https://github.com/GAM-team/GAM - pyinstaller
GAM 7.09.04 - https://github.com/GAM-team/GAM - pyinstaller
GAM Team <google-apps-manager@googlegroups.com>
Python 3.13.4 64-bit final
Python 3.13.5 64-bit final
MacOS Sequoia 15.5 x86_64
Path: /Users/admin/bin/gam7
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -989,9 +989,9 @@ writes the credentials into the file oauth2.txt.
C:\>del C:\GAMConfig\oauth2.txt
C:\>gam version
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
GAM 7.09.03 - https://github.com/GAM-team/GAM - pythonsource
GAM 7.09.04 - https://github.com/GAM-team/GAM - pythonsource
GAM Team <google-apps-manager@googlegroups.com>
Python 3.13.4 64-bit final
Python 3.13.5 64-bit final
Windows-10-10.0.17134 AMD64
Path: C:\GAM7
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com

View File

@@ -3,9 +3,9 @@
Print the current version of Gam with details
```
gam version
GAM 7.09.03 - https://github.com/GAM-team/GAM - pyinstaller
GAM 7.09.04 - https://github.com/GAM-team/GAM - pyinstaller
GAM Team <google-apps-manager@googlegroups.com>
Python 3.13.4 64-bit final
Python 3.13.5 64-bit final
MacOS Sequoia 15.5 x86_64
Path: /Users/Admin/bin/gam7
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -15,9 +15,9 @@ Time: 2023-06-02T21:10:00-07:00
Print the current version of Gam with details and time offset information
```
gam version timeoffset
GAM 7.09.03 - https://github.com/GAM-team/GAM - pyinstaller
GAM 7.09.04 - https://github.com/GAM-team/GAM - pyinstaller
GAM Team <google-apps-manager@googlegroups.com>
Python 3.13.4 64-bit final
Python 3.13.5 64-bit final
MacOS Sequoia 15.5 x86_64
Path: /Users/Admin/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.09.03 - https://github.com/GAM-team/GAM - pyinstaller
GAM 7.09.04 - https://github.com/GAM-team/GAM - pyinstaller
GAM Team <google-apps-manager@googlegroups.com>
Python 3.13.4 64-bit final
Python 3.13.5 64-bit final
MacOS Sequoia 15.5 x86_64
Path: /Users/Admin/bin/gam7
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
Path: /Users/Admin/bin/gam7
Version Check:
Current: 5.35.08
Latest: 7.09.03
Latest: 7.09.04
echo $?
1
```
@@ -72,7 +72,7 @@ echo $?
Print the current version number without details
```
gam version simple
7.09.03
7.09.04
```
In Linux/MacOS you can do:
```
@@ -82,9 +82,9 @@ echo $VER
Print the current version of Gam and address of this Wiki
```
gam help
GAM 7.09.03 - https://github.com/GAM-team/GAM
GAM 7.09.04 - https://github.com/GAM-team/GAM
GAM Team <google-apps-manager@googlegroups.com>
Python 3.13.4 64-bit final
Python 3.13.5 64-bit final
MacOS Sequoia 15.5 x86_64
Path: /Users/Admin/bin/gam7
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com