mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-03 12:21:35 +00:00
Compare commits
1 Commits
v7.34.02
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b23efd83f |
@@ -12,7 +12,7 @@ authors = [
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow>=1.3.0",
|
"arrow>=1.3.0",
|
||||||
"chardet>=5.2.0",
|
"chardet>=5.2.0",
|
||||||
"cryptography==46.0.3",
|
"cryptography==46.0.5",
|
||||||
"distro; sys_platform=='linux'",
|
"distro; sys_platform=='linux'",
|
||||||
"filelock>=3.18.0",
|
"filelock>=3.18.0",
|
||||||
"google-api-python-client>=2.167.0",
|
"google-api-python-client>=2.167.0",
|
||||||
|
|||||||
@@ -1,36 +1,3 @@
|
|||||||
7.34.02
|
|
||||||
|
|
||||||
Updated GAM to prevent errors like the following:
|
|
||||||
```
|
|
||||||
ERROR: Unable to find the server at oauth2.googleapis.com
|
|
||||||
ERROR: Unable to find the server at gmail.googleapis.com
|
|
||||||
```
|
|
||||||
|
|
||||||
7.34.01
|
|
||||||
|
|
||||||
Updated `gam create|update adminrole` to handle the following errors:
|
|
||||||
```
|
|
||||||
ERROR: 400: invalid - Invalid Role privileges
|
|
||||||
ERROR: 400: required - Required parameter: [resource.privileges[n].service_id]
|
|
||||||
```
|
|
||||||
|
|
||||||
7.34.00
|
|
||||||
|
|
||||||
Added variable `csv_output_header_required` to `gam.cfg` that is a comma separated list of `<Strings>`
|
|
||||||
that are required to be in the list of column headers in the CSV file written by a gam print command.
|
|
||||||
This will typically be used to specify headers that are required in subsequent commands that process
|
|
||||||
the CSV file even if the API didn't return any data for those columns.
|
|
||||||
|
|
||||||
Updated the following commands to not require the `Directory API - Domains` scope
|
|
||||||
unless the `internal` or `external` options are used to request the member category.
|
|
||||||
```
|
|
||||||
gam info|print groups
|
|
||||||
gam print|show group-members
|
|
||||||
gam info|print cigroups
|
|
||||||
gam print|show cigroup-members
|
|
||||||
gam <UserTypeEntity> print|show filesharecounts
|
|
||||||
```
|
|
||||||
|
|
||||||
7.33.03
|
7.33.03
|
||||||
|
|
||||||
Fixed bug in `gam [<UserTypeEntity>] sendemail ... from <EmailAddress> replyto <EmailAddress>`
|
Fixed bug in `gam [<UserTypeEntity>] sendemail ... from <EmailAddress> replyto <EmailAddress>`
|
||||||
|
|||||||
@@ -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.34.02'
|
__version__ = '7.33.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
|
||||||
@@ -4177,7 +4177,6 @@ def SetGlobalVariables():
|
|||||||
GC.Values[GC.CSV_OUTPUT_HEADER_FILTER] = _getCfgHeaderFilter(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_FILTER)
|
GC.Values[GC.CSV_OUTPUT_HEADER_FILTER] = _getCfgHeaderFilter(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_FILTER)
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_DROP_FILTER] = _getCfgHeaderFilter(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_DROP_FILTER)
|
GC.Values[GC.CSV_OUTPUT_HEADER_DROP_FILTER] = _getCfgHeaderFilter(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_DROP_FILTER)
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_ORDER] = _getCfgStringList(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_ORDER)
|
GC.Values[GC.CSV_OUTPUT_HEADER_ORDER] = _getCfgStringList(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_ORDER)
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_REQUIRED] = _getCfgStringList(outputFilterSectionName, GC.CSV_OUTPUT_HEADER_REQUIRED)
|
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_FILTER] = _getCfgRowFilter(outputFilterSectionName, GC.CSV_OUTPUT_ROW_FILTER)
|
GC.Values[GC.CSV_OUTPUT_ROW_FILTER] = _getCfgRowFilter(outputFilterSectionName, GC.CSV_OUTPUT_ROW_FILTER)
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_FILTER_MODE] = _getCfgChoice(outputFilterSectionName, GC.CSV_OUTPUT_ROW_FILTER_MODE)
|
GC.Values[GC.CSV_OUTPUT_ROW_FILTER_MODE] = _getCfgChoice(outputFilterSectionName, GC.CSV_OUTPUT_ROW_FILTER_MODE)
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_DROP_FILTER] = _getCfgRowFilter(outputFilterSectionName, GC.CSV_OUTPUT_ROW_DROP_FILTER)
|
GC.Values[GC.CSV_OUTPUT_ROW_DROP_FILTER] = _getCfgRowFilter(outputFilterSectionName, GC.CSV_OUTPUT_ROW_DROP_FILTER)
|
||||||
@@ -4312,8 +4311,6 @@ def SetGlobalVariables():
|
|||||||
GC.Values[GC.CSV_OUTPUT_HEADER_FORCE] = GM.Globals[GM.CSV_OUTPUT_HEADER_FORCE][:]
|
GC.Values[GC.CSV_OUTPUT_HEADER_FORCE] = GM.Globals[GM.CSV_OUTPUT_HEADER_FORCE][:]
|
||||||
if not GC.Values[GC.CSV_OUTPUT_HEADER_ORDER]:
|
if not GC.Values[GC.CSV_OUTPUT_HEADER_ORDER]:
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_ORDER] = GM.Globals[GM.CSV_OUTPUT_HEADER_ORDER][:]
|
GC.Values[GC.CSV_OUTPUT_HEADER_ORDER] = GM.Globals[GM.CSV_OUTPUT_HEADER_ORDER][:]
|
||||||
if not GC.Values[GC.CSV_OUTPUT_HEADER_REQUIRED]:
|
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_REQUIRED] = GM.Globals[GM.CSV_OUTPUT_HEADER_REQUIRED][:]
|
|
||||||
if not GC.Values[GC.CSV_OUTPUT_ROW_FILTER]:
|
if not GC.Values[GC.CSV_OUTPUT_ROW_FILTER]:
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_FILTER] = GM.Globals[GM.CSV_OUTPUT_ROW_FILTER][:]
|
GC.Values[GC.CSV_OUTPUT_ROW_FILTER] = GM.Globals[GM.CSV_OUTPUT_ROW_FILTER][:]
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_FILTER_MODE] = GM.Globals[GM.CSV_OUTPUT_ROW_FILTER_MODE]
|
GC.Values[GC.CSV_OUTPUT_ROW_FILTER_MODE] = GM.Globals[GM.CSV_OUTPUT_ROW_FILTER_MODE]
|
||||||
@@ -5713,9 +5710,7 @@ def chooseSaAPI(api1, api2):
|
|||||||
|
|
||||||
def buildGAPIServiceObject(api, user, i=0, count=0, displayError=True):
|
def buildGAPIServiceObject(api, user, i=0, count=0, displayError=True):
|
||||||
userEmail = getSaUser(user)
|
userEmail = getSaUser(user)
|
||||||
if GM.Globals[GM.HTTP_OBJECT] is None:
|
httpObj = getHttpObj(cache=GM.Globals[GM.CACHE_DIR])
|
||||||
GM.Globals[GM.HTTP_OBJECT] = getHttpObj(cache=GM.Globals[GM.CACHE_DIR])
|
|
||||||
httpObj = GM.Globals[GM.HTTP_OBJECT]
|
|
||||||
service = getService(api, httpObj)
|
service = getService(api, httpObj)
|
||||||
credentials = getSvcAcctCredentials(api, userEmail)
|
credentials = getSvcAcctCredentials(api, userEmail)
|
||||||
request = transportCreateRequest(httpObj)
|
request = transportCreateRequest(httpObj)
|
||||||
@@ -6089,7 +6084,7 @@ def _checkMemberCategory(member, memberDisplayOptions):
|
|||||||
if memberDisplayOptions['showCategory']:
|
if memberDisplayOptions['showCategory']:
|
||||||
member['category'] = category
|
member['category'] = category
|
||||||
if memberDisplayOptions['checkCategory']:
|
if memberDisplayOptions['checkCategory']:
|
||||||
return bool(memberDisplayOptions[category])
|
return True if memberDisplayOptions[category] else False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _checkCIMemberCategory(member, memberDisplayOptions):
|
def _checkCIMemberCategory(member, memberDisplayOptions):
|
||||||
@@ -6102,7 +6097,7 @@ def _checkCIMemberCategory(member, memberDisplayOptions):
|
|||||||
if memberDisplayOptions['showCategory']:
|
if memberDisplayOptions['showCategory']:
|
||||||
member['category'] = category
|
member['category'] = category
|
||||||
if memberDisplayOptions['checkCategory']:
|
if memberDisplayOptions['checkCategory']:
|
||||||
return bool(memberDisplayOptions[category])
|
return True if memberDisplayOptions[category] else False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def getCIGroupMemberRoleFixType(member):
|
def getCIGroupMemberRoleFixType(member):
|
||||||
@@ -7927,7 +7922,6 @@ class CSVPrintFile():
|
|||||||
self.JSONtitlesList = []
|
self.JSONtitlesList = []
|
||||||
self.sortHeaders = []
|
self.sortHeaders = []
|
||||||
self.SetHeaderForce(GC.Values[GC.CSV_OUTPUT_HEADER_FORCE])
|
self.SetHeaderForce(GC.Values[GC.CSV_OUTPUT_HEADER_FORCE])
|
||||||
self.SetHeaderRequired(GC.Values[GC.CSV_OUTPUT_HEADER_REQUIRED])
|
|
||||||
if not self.headerForce and titles is not None:
|
if not self.headerForce and titles is not None:
|
||||||
self.SetTitles(titles)
|
self.SetTitles(titles)
|
||||||
self.SetJSONTitles(titles)
|
self.SetJSONTitles(titles)
|
||||||
@@ -8644,9 +8638,6 @@ class CSVPrintFile():
|
|||||||
self.SetTitles(headerForce)
|
self.SetTitles(headerForce)
|
||||||
self.SetJSONTitles(headerForce)
|
self.SetJSONTitles(headerForce)
|
||||||
|
|
||||||
def SetHeaderRequired(self, headerRequired):
|
|
||||||
self.headerRequired = headerRequired
|
|
||||||
|
|
||||||
def SetHeaderOrder(self, headerOrder):
|
def SetHeaderOrder(self, headerOrder):
|
||||||
self.headerOrder = headerOrder
|
self.headerOrder = headerOrder
|
||||||
|
|
||||||
@@ -9090,8 +9081,6 @@ class CSVPrintFile():
|
|||||||
extrasaction = 'raise'
|
extrasaction = 'raise'
|
||||||
if not self.formatJSON:
|
if not self.formatJSON:
|
||||||
if not self.headerForce:
|
if not self.headerForce:
|
||||||
if self.headerRequired:
|
|
||||||
self.AddTitles(self.headerRequired)
|
|
||||||
self.SortTitles()
|
self.SortTitles()
|
||||||
self.SortIndexedTitles(self.titlesList)
|
self.SortIndexedTitles(self.titlesList)
|
||||||
if self.fixPaths:
|
if self.fixPaths:
|
||||||
@@ -9109,17 +9098,6 @@ class CSVPrintFile():
|
|||||||
titlesList = self.titlesList
|
titlesList = self.titlesList
|
||||||
else:
|
else:
|
||||||
if not self.headerForce:
|
if not self.headerForce:
|
||||||
if self.headerRequired:
|
|
||||||
for i, v in enumerate(self.JSONtitlesList):
|
|
||||||
if v.startswith('JSON'):
|
|
||||||
j = i
|
|
||||||
for title in self.headerRequired:
|
|
||||||
self.JSONtitlesList.insert(j, title)
|
|
||||||
self.JSONtitlesSet.add(title)
|
|
||||||
j += 1
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
self.AddJSONTitles(self.headerRequired)
|
|
||||||
if self.fixPaths:
|
if self.fixPaths:
|
||||||
self.FixPathsTitles(self.JSONtitlesList)
|
self.FixPathsTitles(self.JSONtitlesList)
|
||||||
if not self.rows and self.nodataFields is not None:
|
if not self.rows and self.nodataFields is not None:
|
||||||
@@ -9929,7 +9907,7 @@ def ProcessGAMCommandMulti(pid, numItems, logCmd, mpQueueCSVFile, mpQueueStdout,
|
|||||||
csvColumnDelimiter, csvNoEscapeChar, csvQuoteChar,
|
csvColumnDelimiter, csvNoEscapeChar, csvQuoteChar,
|
||||||
csvSortHeaders, csvTimestampColumn,
|
csvSortHeaders, csvTimestampColumn,
|
||||||
csvHeaderFilter, csvHeaderDropFilter,
|
csvHeaderFilter, csvHeaderDropFilter,
|
||||||
csvHeaderForce, csvHeaderOrder, csvHeaderRequired,
|
csvHeaderForce, csvHeaderOrder,
|
||||||
csvRowFilter, csvRowFilterMode, csvRowDropFilter, csvRowDropFilterMode,
|
csvRowFilter, csvRowFilterMode, csvRowDropFilter, csvRowDropFilterMode,
|
||||||
csvRowLimit,
|
csvRowLimit,
|
||||||
showGettings, showGettingsGotNL,
|
showGettings, showGettingsGotNL,
|
||||||
@@ -9954,7 +9932,6 @@ def ProcessGAMCommandMulti(pid, numItems, logCmd, mpQueueCSVFile, mpQueueStdout,
|
|||||||
GM.Globals[GM.CSV_OUTPUT_HEADER_FILTER] = csvHeaderFilter[:]
|
GM.Globals[GM.CSV_OUTPUT_HEADER_FILTER] = csvHeaderFilter[:]
|
||||||
GM.Globals[GM.CSV_OUTPUT_HEADER_FORCE] = csvHeaderForce[:]
|
GM.Globals[GM.CSV_OUTPUT_HEADER_FORCE] = csvHeaderForce[:]
|
||||||
GM.Globals[GM.CSV_OUTPUT_HEADER_ORDER] = csvHeaderOrder[:]
|
GM.Globals[GM.CSV_OUTPUT_HEADER_ORDER] = csvHeaderOrder[:]
|
||||||
GM.Globals[GM.CSV_OUTPUT_HEADER_REQUIRED] = csvHeaderRequired[:]
|
|
||||||
GM.Globals[GM.CSV_OUTPUT_QUOTE_CHAR] = csvQuoteChar
|
GM.Globals[GM.CSV_OUTPUT_QUOTE_CHAR] = csvQuoteChar
|
||||||
GM.Globals[GM.CSV_OUTPUT_ROW_DROP_FILTER] = csvRowDropFilter[:]
|
GM.Globals[GM.CSV_OUTPUT_ROW_DROP_FILTER] = csvRowDropFilter[:]
|
||||||
GM.Globals[GM.CSV_OUTPUT_ROW_DROP_FILTER_MODE] = csvRowDropFilterMode
|
GM.Globals[GM.CSV_OUTPUT_ROW_DROP_FILTER_MODE] = csvRowDropFilterMode
|
||||||
@@ -10179,7 +10156,6 @@ def MultiprocessGAMCommands(items, showCmds):
|
|||||||
GC.Values[GC.CSV_OUTPUT_HEADER_DROP_FILTER],
|
GC.Values[GC.CSV_OUTPUT_HEADER_DROP_FILTER],
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_FORCE],
|
GC.Values[GC.CSV_OUTPUT_HEADER_FORCE],
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_ORDER],
|
GC.Values[GC.CSV_OUTPUT_HEADER_ORDER],
|
||||||
GC.Values[GC.CSV_OUTPUT_HEADER_REQUIRED],
|
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_FILTER],
|
GC.Values[GC.CSV_OUTPUT_ROW_FILTER],
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_FILTER_MODE],
|
GC.Values[GC.CSV_OUTPUT_ROW_FILTER_MODE],
|
||||||
GC.Values[GC.CSV_OUTPUT_ROW_DROP_FILTER],
|
GC.Values[GC.CSV_OUTPUT_ROW_DROP_FILTER],
|
||||||
@@ -16994,13 +16970,12 @@ def doCreateUpdateAdminRoles():
|
|||||||
if not updateCmd:
|
if not updateCmd:
|
||||||
result = callGAPI(cd.roles(), 'insert',
|
result = callGAPI(cd.roles(), 'insert',
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED]+[GAPI.DUPLICATE, GAPI.INVALID, GAPI.REQUIRED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED]+[GAPI.DUPLICATE],
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], body=body, fields=fieldsList)
|
customer=GC.Values[GC.CUSTOMER_ID], body=body, fields=fieldsList)
|
||||||
else:
|
else:
|
||||||
result = callGAPI(cd.roles(), 'patch',
|
result = callGAPI(cd.roles(), 'patch',
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED]+[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION,
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED]+[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.CONFLICT],
|
||||||
GAPI.CONFLICT, GAPI.INVALID, GAPI.REQUIRED],
|
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, body=body, fields=fieldsList)
|
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, body=body, fields=fieldsList)
|
||||||
if not csvPF:
|
if not csvPF:
|
||||||
entityActionPerformed([Ent.ADMIN_ROLE, f"{result['roleName']}({result['roleId']})"])
|
entityActionPerformed([Ent.ADMIN_ROLE, f"{result['roleName']}({result['roleId']})"])
|
||||||
@@ -17018,7 +16993,7 @@ def doCreateUpdateAdminRoles():
|
|||||||
row.update(addCSVData)
|
row.update(addCSVData)
|
||||||
row['JSON'] = json.dumps(cleanJSON(result), ensure_ascii=False, sort_keys=True)
|
row['JSON'] = json.dumps(cleanJSON(result), ensure_ascii=False, sort_keys=True)
|
||||||
csvPF.WriteRowNoFilter(row)
|
csvPF.WriteRowNoFilter(row)
|
||||||
except (GAPI.duplicate, GAPI.invalid, GAPI.required) as e:
|
except GAPI.duplicate as e:
|
||||||
entityActionFailedWarning([Ent.ADMIN_ROLE, f"{body['roleName']}"], str(e))
|
entityActionFailedWarning([Ent.ADMIN_ROLE, f"{body['roleName']}"], str(e))
|
||||||
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.conflict) as e:
|
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.conflict) as e:
|
||||||
entityActionFailedWarning([Ent.ADMIN_ROLE, roleId], str(e))
|
entityActionFailedWarning([Ent.ADMIN_ROLE, roleId], str(e))
|
||||||
@@ -34871,14 +34846,13 @@ def finalizeInternalDomains(cd, internalDomains):
|
|||||||
return internalDomains
|
return internalDomains
|
||||||
|
|
||||||
def finalizeIPSGMGroupRolesMemberDisplayOptions(cd, memberDisplayOptions, verifyAllowExternal):
|
def finalizeIPSGMGroupRolesMemberDisplayOptions(cd, memberDisplayOptions, verifyAllowExternal):
|
||||||
|
memberDisplayOptions['internalDomains'] = finalizeInternalDomains(cd, memberDisplayOptions['internalDomains'])
|
||||||
if verifyAllowExternal:
|
if verifyAllowExternal:
|
||||||
memberDisplayOptions['external'] = memberDisplayOptions['checkCategory'] = memberDisplayOptions['showCategory'] = True
|
memberDisplayOptions['external'] = memberDisplayOptions['checkCategory'] = memberDisplayOptions['showCategory'] = True
|
||||||
memberDisplayOptions['internal'] = False
|
memberDisplayOptions['internal'] = False
|
||||||
if memberDisplayOptions['showCategory']:
|
if memberDisplayOptions['showCategory']:
|
||||||
memberDisplayOptions['gs'] = buildGAPIObject(API.GROUPSSETTINGS)
|
memberDisplayOptions['gs'] = buildGAPIObject(API.GROUPSSETTINGS)
|
||||||
memberDisplayOptions['checkShowCategory'] = memberDisplayOptions['checkCategory'] or memberDisplayOptions['showCategory']
|
memberDisplayOptions['checkShowCategory'] = memberDisplayOptions['checkCategory'] or memberDisplayOptions['showCategory']
|
||||||
if memberDisplayOptions['checkShowCategory']:
|
|
||||||
memberDisplayOptions['internalDomains'] = finalizeInternalDomains(cd, memberDisplayOptions['internalDomains'])
|
|
||||||
return memberDisplayOptions['showCategory'], memberDisplayOptions['checkShowCategory']
|
return memberDisplayOptions['showCategory'], memberDisplayOptions['checkShowCategory']
|
||||||
|
|
||||||
GROUP_FIELDS_CHOICE_MAP = {
|
GROUP_FIELDS_CHOICE_MAP = {
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ CSV_INPUT_ROW_FILTER_ITEMS = {CSV_INPUT_ROW_FILTER, CSV_INPUT_ROW_FILTER_MODE,
|
|||||||
|
|
||||||
CSV_OUTPUT_ROW_FILTER_ITEMS = {CSV_OUTPUT_HEADER_FILTER, CSV_OUTPUT_HEADER_DROP_FILTER,
|
CSV_OUTPUT_ROW_FILTER_ITEMS = {CSV_OUTPUT_HEADER_FILTER, CSV_OUTPUT_HEADER_DROP_FILTER,
|
||||||
CSV_OUTPUT_HEADER_FORCE, CSV_OUTPUT_HEADER_ORDER,
|
CSV_OUTPUT_HEADER_FORCE, CSV_OUTPUT_HEADER_ORDER,
|
||||||
CSV_OUTPUT_HEADER_REQUIRED,
|
# CSV_OUTPUT_HEADER_REQUIRED,
|
||||||
CSV_OUTPUT_ROW_FILTER, CSV_OUTPUT_ROW_FILTER_MODE,
|
CSV_OUTPUT_ROW_FILTER, CSV_OUTPUT_ROW_FILTER_MODE,
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER, CSV_OUTPUT_ROW_DROP_FILTER_MODE,
|
CSV_OUTPUT_ROW_DROP_FILTER, CSV_OUTPUT_ROW_DROP_FILTER_MODE,
|
||||||
CSV_OUTPUT_ROW_LIMIT}
|
CSV_OUTPUT_ROW_LIMIT}
|
||||||
@@ -376,7 +376,7 @@ Defaults = {
|
|||||||
CSV_OUTPUT_HEADER_DROP_FILTER: '',
|
CSV_OUTPUT_HEADER_DROP_FILTER: '',
|
||||||
CSV_OUTPUT_HEADER_FORCE: '',
|
CSV_OUTPUT_HEADER_FORCE: '',
|
||||||
CSV_OUTPUT_HEADER_ORDER: '',
|
CSV_OUTPUT_HEADER_ORDER: '',
|
||||||
CSV_OUTPUT_HEADER_REQUIRED: '',
|
# CSV_OUTPUT_HEADER_REQUIRED: '',
|
||||||
CSV_OUTPUT_LINE_TERMINATOR: 'lf',
|
CSV_OUTPUT_LINE_TERMINATOR: 'lf',
|
||||||
CSV_OUTPUT_QUOTE_CHAR: '\'"\'',
|
CSV_OUTPUT_QUOTE_CHAR: '\'"\'',
|
||||||
CSV_OUTPUT_ROW_FILTER: '',
|
CSV_OUTPUT_ROW_FILTER: '',
|
||||||
@@ -550,7 +550,7 @@ VAR_INFO = {
|
|||||||
CSV_OUTPUT_HEADER_DROP_FILTER: {VAR_TYPE: TYPE_HEADERFILTER},
|
CSV_OUTPUT_HEADER_DROP_FILTER: {VAR_TYPE: TYPE_HEADERFILTER},
|
||||||
CSV_OUTPUT_HEADER_FORCE: {VAR_TYPE: TYPE_HEADERFORCEREQUIRED},
|
CSV_OUTPUT_HEADER_FORCE: {VAR_TYPE: TYPE_HEADERFORCEREQUIRED},
|
||||||
CSV_OUTPUT_HEADER_ORDER: {VAR_TYPE: TYPE_HEADERORDER},
|
CSV_OUTPUT_HEADER_ORDER: {VAR_TYPE: TYPE_HEADERORDER},
|
||||||
CSV_OUTPUT_HEADER_REQUIRED: {VAR_TYPE: TYPE_HEADERFORCEREQUIRED},
|
# CSV_OUTPUT_HEADER_REQUIRED: {VAR_TYPE: TYPE_HEADERFORCEREQUIRED},
|
||||||
CSV_OUTPUT_LINE_TERMINATOR: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'cr': '\r', 'lf': '\n', 'crlf': '\r\n'}},
|
CSV_OUTPUT_LINE_TERMINATOR: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'cr': '\r', 'lf': '\n', 'crlf': '\r\n'}},
|
||||||
CSV_OUTPUT_QUOTE_CHAR: {VAR_TYPE: TYPE_CHARACTER},
|
CSV_OUTPUT_QUOTE_CHAR: {VAR_TYPE: TYPE_CHARACTER},
|
||||||
CSV_OUTPUT_ROW_FILTER: {VAR_TYPE: TYPE_ROWFILTER},
|
CSV_OUTPUT_ROW_FILTER: {VAR_TYPE: TYPE_ROWFILTER},
|
||||||
|
|||||||
@@ -129,8 +129,6 @@ GAM_CFG_SECTION_NAME = 'gcsn'
|
|||||||
GAM_PATH = 'gpth'
|
GAM_PATH = 'gpth'
|
||||||
# Python source, PyInstaller or StaticX?
|
# Python source, PyInstaller or StaticX?
|
||||||
GAM_TYPE = 'gtyp'
|
GAM_TYPE = 'gtyp'
|
||||||
# Shared Service Account HTTP Object
|
|
||||||
HTTP_OBJECT = 'http'
|
|
||||||
# Length of last Got message
|
# Length of last Got message
|
||||||
LAST_GOT_MSG_LEN = 'lgml'
|
LAST_GOT_MSG_LEN = 'lgml'
|
||||||
# License SKUs
|
# License SKUs
|
||||||
@@ -252,7 +250,7 @@ Globals = {
|
|||||||
CSV_OUTPUT_HEADER_FILTER: [],
|
CSV_OUTPUT_HEADER_FILTER: [],
|
||||||
CSV_OUTPUT_HEADER_FORCE: [],
|
CSV_OUTPUT_HEADER_FORCE: [],
|
||||||
CSV_OUTPUT_HEADER_ORDER: [],
|
CSV_OUTPUT_HEADER_ORDER: [],
|
||||||
CSV_OUTPUT_HEADER_REQUIRED: [],
|
# CSV_OUTPUT_HEADER_REQUIRED: [],
|
||||||
CSV_OUTPUT_NO_ESCAPE_CHAR: None,
|
CSV_OUTPUT_NO_ESCAPE_CHAR: None,
|
||||||
CSV_OUTPUT_QUOTE_CHAR: None,
|
CSV_OUTPUT_QUOTE_CHAR: None,
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER: [],
|
CSV_OUTPUT_ROW_DROP_FILTER: [],
|
||||||
@@ -284,7 +282,6 @@ Globals = {
|
|||||||
GAM_CFG_SECTION_NAME: '',
|
GAM_CFG_SECTION_NAME: '',
|
||||||
GAM_PATH: '.',
|
GAM_PATH: '.',
|
||||||
GAM_TYPE: '',
|
GAM_TYPE: '',
|
||||||
HTTP_OBJECT: None,
|
|
||||||
LAST_GOT_MSG_LEN: 0,
|
LAST_GOT_MSG_LEN: 0,
|
||||||
LICENSE_SKUS: [],
|
LICENSE_SKUS: [],
|
||||||
MAKE_BUILDING_ID_NAME_MAP: True,
|
MAKE_BUILDING_ID_NAME_MAP: True,
|
||||||
|
|||||||
@@ -14,9 +14,8 @@
|
|||||||
There are seven values in `gam.cfg` that can be used to filter the output from `gam print` commands.
|
There are seven values in `gam.cfg` that can be used to filter the output from `gam print` commands.
|
||||||
* `csv_output_header_filter` - A list of `<RegularExpressions>` used to select specific column headers to include
|
* `csv_output_header_filter` - A list of `<RegularExpressions>` used to select specific column headers to include
|
||||||
* `csv_output_header_drop_filter` - A list of `<RegularExpressions>` used to select specific column headers to exclude
|
* `csv_output_header_drop_filter` - A list of `<RegularExpressions>` used to select specific column headers to exclude
|
||||||
* `csv_output_header_force` - A list of `<Strings>` used to specify the exact column headers to include
|
* `csv_output_header_force` - A list of <Strings> used to specify the exact column headers to include
|
||||||
* `csv_output_header_order` - A list of `<Strings>` used to specify the column header order; any headers in the file but not in the list will appear after the header* `csv_output_header_required` - A list of `<Strings>` used to specify column headers that are included even if the print command doesn't return them
|
* `csv_output_header_order` - A list of <Strings> used to specify the column header order; any headers in the file but not in the list will appear after the headers in the list.
|
||||||
s in the list.
|
|
||||||
* `csv_output_row_filter` - A list or JSON dictionary used to include specific rows based on column values
|
* `csv_output_row_filter` - A list or JSON dictionary used to include specific rows based on column values
|
||||||
* `csv_output_row_drop_filter` - A list or JSON dictionary used to exclude specific rows based on column values
|
* `csv_output_row_drop_filter` - A list or JSON dictionary used to exclude specific rows based on column values
|
||||||
* `csv_output_row_limit` - A limit on the number of rows written
|
* `csv_output_row_limit` - A limit on the number of rows written
|
||||||
|
|||||||
@@ -319,8 +319,6 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
(select <ProjectIDList> | <FileSelector> | <CSVFileSelector>)
|
(select <ProjectIDList> | <FileSelector> | <CSVFileSelector>)
|
||||||
<PrinterIDEntity> ::=
|
<PrinterIDEntity> ::=
|
||||||
<PrinterIDList> | <FileSelector> | <CSVFileSelector>
|
<PrinterIDList> | <FileSelector> | <CSVFileSelector>
|
||||||
<QueryDriveFile> :: = <String> See: https://developers.google.com/workspace/drive/api/guides/search-files
|
|
||||||
<QuerySharedDrive> ::= <String> See: https://developers.google.com/workspace/drive/api/guides/search-shareddrives
|
|
||||||
<RecipientEntity> ::=
|
<RecipientEntity> ::=
|
||||||
<EmailAddressEntity> | (select <UserTypeEntity>)
|
<EmailAddressEntity> | (select <UserTypeEntity>)
|
||||||
<ResourceEntity> ::=
|
<ResourceEntity> ::=
|
||||||
@@ -331,22 +329,22 @@ Data fields identified in a `csvkmd` argument.
|
|||||||
<SerialNumberList> | <FileSelector> | <CSVFileSelector>
|
<SerialNumberList> | <FileSelector> | <CSVFileSelector>
|
||||||
<SharedDriveIDEntity> ::=
|
<SharedDriveIDEntity> ::=
|
||||||
<DriveFileItem> |
|
<DriveFileItem> |
|
||||||
(shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
(teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
<SharedDriveNameEntity> ::=
|
<SharedDriveNameEntity> ::=
|
||||||
(shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
<SharedDriveNameEntity>
|
<SharedDriveNameEntity>
|
||||||
<SharedDriveAdminQueryEntity> ::=
|
<SharedDriveAdminQueryEntity> ::=
|
||||||
(shareddriveadminquery <QuerySharedDrive>) | (shareddriveadminquery:<QuerySharedDrive>)
|
(teamdriveadminquery <QueryTeamDrive>) | (teamdriveadminquery:<QueryTeamDrive>)
|
||||||
<SharedDriveEntityAdmin> ::=
|
<SharedDriveEntityAdmin> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
<SharedDriveNameEntity>|
|
<SharedDriveNameEntity>|
|
||||||
<SharedDriveAdminQueryEntity>
|
<SharedDriveAdminQueryEntity>
|
||||||
<SharedDriveFileNameEntity> ::=
|
<SharedDriveFileNameEntity> ::=
|
||||||
(shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
(teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
<SharedDriveFileQueryEntity> ::=
|
<SharedDriveFileQueryEntity> ::=
|
||||||
(shareddrivequery <QueryDriveFile>) | (shareddrivequery:<QueryDriveFile>)
|
(teamdrivequery <QueryDriveFile>) | (teamdrivequery:<QueryDriveFile>)
|
||||||
<SharedDriveFileQueryShortcut> ::=
|
<SharedDriveFileQueryShortcut> ::=
|
||||||
all_files | all_folders | all_google_files | all_non_google_files | all_items
|
all_files | all_folders | all_google_files | all_non_google_files | all_items
|
||||||
<SiteACLScopeEntity> ::=
|
<SiteACLScopeEntity> ::=
|
||||||
|
|||||||
@@ -114,9 +114,9 @@ ous_and_children_na_ns
|
|||||||
(anydrivefilename <DriveFileName>)|(anydrivefilename:<DriveFileName>)
|
(anydrivefilename <DriveFileName>)|(anydrivefilename:<DriveFileName>)
|
||||||
<SharedDriveID> ::= <String>
|
<SharedDriveID> ::= <String>
|
||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveIDEntity> ::= (shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
<SharedDriveIDEntity> ::= (teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
<SharedDriveNameEntity> ::= (shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
<SharedDriveNameEntity> ::= (teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveFileNameEntity> ::= (shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
<SharedDriveFileNameEntity> ::= (teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
<SharedDriveNameEntity>
|
<SharedDriveNameEntity>
|
||||||
|
|||||||
@@ -49,8 +49,7 @@
|
|||||||
<DriveFolderID> ::= <String>
|
<DriveFolderID> ::= <String>
|
||||||
<DriveFolderIDList> ::= "<DriveFolderID>(,<DriveFolderID>)*"
|
<DriveFolderIDList> ::= "<DriveFolderID>(,<DriveFolderID>)*"
|
||||||
<DriveFolderName> ::= <String>
|
<DriveFolderName> ::= <String>
|
||||||
<QueryDriveFile> :: = <String> See: https://developers.google.com/workspace/drive/api/guides/search-files
|
<QueryDriveFile> :: = <String> See: https://developers.google.com/drive/api/v3/search-files
|
||||||
<QuerySharedDrive> ::= <String> See: https://developers.google.com/workspace/drive/api/guides/search-shareddrives
|
|
||||||
<DriveFileQueryEntity> ::=
|
<DriveFileQueryEntity> ::=
|
||||||
(query <QueryDriveFile>) | (query:<QueryDriveFile>)
|
(query <QueryDriveFile>) | (query:<QueryDriveFile>)
|
||||||
<DriveFileQueryShortcut> ::=
|
<DriveFileQueryShortcut> ::=
|
||||||
@@ -91,15 +90,15 @@
|
|||||||
|
|
||||||
<SharedDriveID> ::= <String>
|
<SharedDriveID> ::= <String>
|
||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveIDEntity> ::= (shareddriveid <SharedDriveID>) | (shareddriveid:<SharedDriveID>)
|
<SharedDriveIDEntity> ::= (teamdriveid <SharedDriveID>) | (teamdriveid:<SharedDriveID>)
|
||||||
<SharedDriveNameEntity> ::= (shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
<SharedDriveNameEntity> ::= (teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveFileNameEntity> ::= (shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
<SharedDriveFileNameEntity> ::= (teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
|
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
<SharedDriveNameEntity>
|
<SharedDriveNameEntity>
|
||||||
<SharedDriveAdminQueryEntity> ::=
|
<SharedDriveAdminQueryEntity> ::=
|
||||||
(shareddriveadminquery <QuerySharedDrive>) | (shareddriveadminquery:<QuerySharedDrive>)
|
(teamdriveadminquery <QueryTeamDrive>) | (teamdriveadminquery:<QueryTeamDrive>)
|
||||||
<SharedDriveFileQueryEntity> ::=
|
<SharedDriveFileQueryEntity> ::=
|
||||||
(query <QueryDriveFile>) | (query:<QueryDriveFile>)
|
(query <QueryDriveFile>) | (query:<QueryDriveFile>)
|
||||||
<SharedDriveFileQueryShortcut> ::=
|
<SharedDriveFileQueryShortcut> ::=
|
||||||
@@ -336,13 +335,13 @@ Select a Shared Drive file by giving its unique ID.
|
|||||||
```
|
```
|
||||||
<SharedDriveIDEntity> ::=
|
<SharedDriveIDEntity> ::=
|
||||||
<DriveFileItem> |
|
<DriveFileItem> |
|
||||||
(shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
(teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
```
|
```
|
||||||
### Examples
|
### Examples
|
||||||
```
|
```
|
||||||
gam user testuser show fileinfo 1234ABCD
|
gam user testuser show fileinfo 1234ABCD
|
||||||
gam user testuser show fileinfo id 1234ABCD
|
gam user testuser show fileinfo id 1234ABCD
|
||||||
gam user testuser show fileinfo shareddriveid 1234ABCD
|
gam user testuser show fileinfo teamdriveid 1234ABCD
|
||||||
```
|
```
|
||||||
## Select Shared Drive file by name
|
## Select Shared Drive file by name
|
||||||
If you have the name, a search must be performed to find the ID that matches the name.
|
If you have the name, a search must be performed to find the ID that matches the name.
|
||||||
@@ -351,16 +350,16 @@ You must specify the Shared Drive, either by ID or name, and the name of the fil
|
|||||||
Remember, searching for a file by name may return several file IDs if you have multiple files with the same name.
|
Remember, searching for a file by name may return several file IDs if you have multiple files with the same name.
|
||||||
```
|
```
|
||||||
<SharedDriveIDEntity> ::=
|
<SharedDriveIDEntity> ::=
|
||||||
(shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
(teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
<SharedDriveNameEntity> ::=
|
<SharedDriveNameEntity> ::=
|
||||||
(shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveFileNameEntity> ::=
|
<SharedDriveFileNameEntity> ::=
|
||||||
(shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
(teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
```
|
```
|
||||||
### Examples
|
### Examples
|
||||||
```
|
```
|
||||||
gam user testuser show fileinfo shareddriveid 1234ABCD shareddrivefilename "Test File"
|
gam user testuser show fileinfo teamdriveid 1234ABCD teamdrivefilename "Test File"
|
||||||
gam user testuser show fileinfo shareddrive "Shared Drive 1" shareddrivefilename "Test File"
|
gam user testuser show fileinfo teamdrive "Shared Drive 1" teamdrivefilename "Test File"
|
||||||
```
|
```
|
||||||
## Select Shared Drive file by query
|
## Select Shared Drive file by query
|
||||||
You can use a query to find a file ID. You perform the query on all Shared Drives or a specific Shared Drive.
|
You can use a query to find a file ID. You perform the query on all Shared Drives or a specific Shared Drive.
|
||||||
@@ -368,7 +367,7 @@ You can use a query to find a file ID. You perform the query on all Shared Drive
|
|||||||
See: [Drive Query](https://developers.google.com/drive/api/v3/search-files)
|
See: [Drive Query](https://developers.google.com/drive/api/v3/search-files)
|
||||||
```
|
```
|
||||||
<SharedDriveFileQueryEntity> ::=
|
<SharedDriveFileQueryEntity> ::=
|
||||||
(shareddrivequery <QueryDriveFile>) | (shareddrivequery:<QueryDriveFile>)
|
(teamdrivequery <QueryDriveFile>) | (teamdrivequery:<QueryDriveFile>)
|
||||||
<SharedDriveFileQueryShortcut> ::=
|
<SharedDriveFileQueryShortcut> ::=
|
||||||
all_files | all_folders | all_google_files | all_non_google_files | all_items
|
all_files | all_folders | all_google_files | all_non_google_files | all_items
|
||||||
```
|
```
|
||||||
@@ -381,32 +380,32 @@ Keyword to query mappings for `<DriveFileQueryShortcut>`:
|
|||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
```
|
```
|
||||||
gam user testuser show fileinfo shareddrivequery "name='Test File'"
|
gam user testuser show fileinfo teamdrivequery "name='Test File'"
|
||||||
gam user testuser show fileinfo shareddriveid 1234ABCD shareddrivequery "name='Test File'"
|
gam user testuser show fileinfo teamdriveid 1234ABCD teamdrivequery "name='Test File'"
|
||||||
gam user testuser show fileinfo shareddrive shareddrive "Shared Drive 1" shareddrivequery "name='Test File'"
|
gam user testuser show fileinfo teamdrive teamdrive "Shared Drive 1" teamdrivequery "name='Test File'"
|
||||||
gam user testuser show fileinfo shareddriveid 1234ABCD all_non_google_files
|
gam user testuser show fileinfo teamdriveid 1234ABCD all_non_google_files
|
||||||
```
|
```
|
||||||
## Select root folder of a Shared Drive by ID
|
## Select root folder of a Shared Drive by ID
|
||||||
The root folder of a Shared Drive is a folder, you select it by giving its unique ID.
|
The root folder of a Shared Drive is a folder, you select it by giving its unique ID.
|
||||||
```
|
```
|
||||||
<SharedDriveIDEntity> ::=
|
<SharedDriveIDEntity> ::=
|
||||||
<DriveFileItem> |
|
<DriveFileItem> |
|
||||||
(shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
(teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
```
|
```
|
||||||
### Examples
|
### Examples
|
||||||
```
|
```
|
||||||
gam user testuser show fileinfo 1234ABCD
|
gam user testuser show fileinfo 1234ABCD
|
||||||
gam user testuser show fileinfo shareddriveid 1234ABCD
|
gam user testuser show fileinfo teamdriveid 1234ABCD
|
||||||
|
|
||||||
```
|
```
|
||||||
## Select root folder of a Shared Drive by name
|
## Select root folder of a Shared Drive by name
|
||||||
If you have a Shared Drive name, a search must be performed to find the ID that matches the name.
|
If you have a Shared Drive name, a search must be performed to find the ID that matches the name.
|
||||||
```
|
```
|
||||||
<SharedDriveNameEntity> ::=
|
<SharedDriveNameEntity> ::=
|
||||||
(shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
```
|
```
|
||||||
### Examples
|
### Examples
|
||||||
```
|
```
|
||||||
gam user testuser show fileinfo shareddrive "Shared Drive 1"
|
gam user testuser show fileinfo teamdrive "Shared Drive 1"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -27,13 +27,13 @@
|
|||||||
(anydrivefilename <DriveFileName>) | (anydrivefilename:<DriveFileName>)
|
(anydrivefilename <DriveFileName>) | (anydrivefilename:<DriveFileName>)
|
||||||
<SharedDriveIDEntity> ::=
|
<SharedDriveIDEntity> ::=
|
||||||
<DriveFileItem> |
|
<DriveFileItem> |
|
||||||
(shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
(teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveNameEntity> ::=
|
<SharedDriveNameEntity> ::=
|
||||||
(shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
<SharedDriveNameEntity>
|
<SharedDriveNameEntity>
|
||||||
<SharedDriveFileNameEntity> ::=
|
<SharedDriveFileNameEntity> ::=
|
||||||
(shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
(teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -10,31 +10,6 @@ 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.34.01
|
|
||||||
|
|
||||||
Updated `gam create|update adminrole` to handle the following errors:
|
|
||||||
```
|
|
||||||
ERROR: 400: invalid - Invalid Role privileges
|
|
||||||
ERROR: 400: required - Required parameter: [resource.privileges[n].service_id]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 7.34.00
|
|
||||||
|
|
||||||
Added variable `csv_output_header_required` to `gam.cfg` that is a comma separated list of `<Strings>`
|
|
||||||
that are required to be in the list of column headers in the CSV file written by a gam print command.
|
|
||||||
This will typically be used to specify headers that are required in subsequent commands that process
|
|
||||||
the CSV file even if the API didn't return any data for those columns.
|
|
||||||
|
|
||||||
Updated the following commands to not require the `Directory API - Domains` scope
|
|
||||||
unless the `internal` or `external` options are used to request the member category.
|
|
||||||
```
|
|
||||||
gam info|print groups
|
|
||||||
gam print|show group-members
|
|
||||||
gam info|print cigroups
|
|
||||||
gam print|show cigroup-members
|
|
||||||
gam <UserTypeEntity> print|show filesharecounts
|
|
||||||
```
|
|
||||||
|
|
||||||
### 7.33.03
|
### 7.33.03
|
||||||
|
|
||||||
Fixed bug in `gam [<UserTypeEntity>] sendemail ... from <EmailAddress> replyto <EmailAddress>`
|
Fixed bug in `gam [<UserTypeEntity>] sendemail ... from <EmailAddress> replyto <EmailAddress>`
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin$ gam version
|
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
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||||
GAM 7.34.01 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.33.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.2 64-bit final
|
Python 3.14.2 64-bit final
|
||||||
macOS Tahoe 26.2 x86_64
|
macOS Tahoe 26.2 x86_64
|
||||||
@@ -574,7 +574,6 @@ Section: DEFAULT
|
|||||||
csv_output_header_filter = ''
|
csv_output_header_filter = ''
|
||||||
csv_output_header_force = ''
|
csv_output_header_force = ''
|
||||||
csv_output_header_order = ''
|
csv_output_header_order = ''
|
||||||
csv_output_header_required = ''
|
|
||||||
csv_output_line_terminator = lf
|
csv_output_line_terminator = lf
|
||||||
csv_output_no_escape_char = false
|
csv_output_no_escape_char = false
|
||||||
csv_output_quote_char = '"'
|
csv_output_quote_char = '"'
|
||||||
@@ -798,7 +797,6 @@ Section: DEFAULT
|
|||||||
csv_output_header_filter = ''
|
csv_output_header_filter = ''
|
||||||
csv_output_header_force = ''
|
csv_output_header_force = ''
|
||||||
csv_output_header_order = ''
|
csv_output_header_order = ''
|
||||||
csv_output_header_required = ''
|
|
||||||
csv_output_line_terminator = lf
|
csv_output_line_terminator = lf
|
||||||
csv_output_no_escape_char = false
|
csv_output_no_escape_char = false
|
||||||
csv_output_quote_char = '"'
|
csv_output_quote_char = '"'
|
||||||
@@ -1036,7 +1034,7 @@ 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
|
||||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||||
GAM 7.34.01 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.33.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.2 64-bit final
|
Python 3.14.2 64-bit final
|
||||||
Windows 11 10.0.26200 AMD64
|
Windows 11 10.0.26200 AMD64
|
||||||
@@ -1359,7 +1357,6 @@ Section: DEFAULT
|
|||||||
csv_output_header_filter = ''
|
csv_output_header_filter = ''
|
||||||
csv_output_header_force = ''
|
csv_output_header_force = ''
|
||||||
csv_output_header_order = ''
|
csv_output_header_order = ''
|
||||||
csv_output_header_required = ''
|
|
||||||
csv_output_line_terminator = lf
|
csv_output_line_terminator = lf
|
||||||
csv_output_no_escape_char = false
|
csv_output_no_escape_char = false
|
||||||
csv_output_quote_char = '"'
|
csv_output_quote_char = '"'
|
||||||
|
|||||||
@@ -56,7 +56,6 @@ The only `<VariableNames>` recognized in this `<Section>` are:
|
|||||||
* `csv_output_header_drop_filter`
|
* `csv_output_header_drop_filter`
|
||||||
* `csv_output_header_force`
|
* `csv_output_header_force`
|
||||||
* `csv_output_header_order`
|
* `csv_output_header_order`
|
||||||
* `csv_output_header_required`
|
|
||||||
* `csv_output_row_filter`
|
* `csv_output_row_filter`
|
||||||
* `csv_output_row_filter_mode`
|
* `csv_output_row_filter_mode`
|
||||||
* `csv_output_row_drop_filter`
|
* `csv_output_row_drop_filter`
|
||||||
|
|||||||
@@ -171,7 +171,7 @@
|
|||||||
withlink
|
withlink
|
||||||
<DrivePermissionsFieldNameList> ::= "<DrivePermissionsFieldName>(,<DrivePermissionsFieldName>)*"
|
<DrivePermissionsFieldNameList> ::= "<DrivePermissionsFieldName>(,<DrivePermissionsFieldName>)*"
|
||||||
|
|
||||||
<QuerySharedDrive> ::= <String> See: https://developers.google.com/workspace/drive/api/guides/search-shareddrives
|
<QueryTeamDrive> ::= <String> See: https://developers.google.com/drive/api/v3/search-parameters
|
||||||
<SharedDriveACLRole> ::=
|
<SharedDriveACLRole> ::=
|
||||||
manager|organizer|owner|
|
manager|organizer|owner|
|
||||||
contentmanager|fileorganizer|
|
contentmanager|fileorganizer|
|
||||||
@@ -183,8 +183,8 @@
|
|||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveID>|
|
<SharedDriveID>|
|
||||||
(shareddriveid <SharedDriveID>)|(shareddriveid:<SharedDriveID>)|
|
(teamdriveid <SharedDriveID>)|(teamdriveid:<SharedDriveID>)|
|
||||||
(shareddrive <SharedDriveName>)|(shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>)|(teamdrive:<SharedDriveName>)
|
||||||
|
|
||||||
<SharedDriveFieldName> ::=
|
<SharedDriveFieldName> ::=
|
||||||
backgroundimagefile|
|
backgroundimagefile|
|
||||||
@@ -199,11 +199,11 @@
|
|||||||
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
||||||
|
|
||||||
<SharedDriveIDEntity> ::=
|
<SharedDriveIDEntity> ::=
|
||||||
<DriveFileItem>|(shareddriveid <DriveFileItem>)|(shareddriveid:<DriveFileItem>)
|
<DriveFileItem>|(teamdriveid <DriveFileItem>)|(teamdriveid:<DriveFileItem>)
|
||||||
<SharedDriveNameEntity> ::=
|
<SharedDriveNameEntity> ::=
|
||||||
(shareddrive <SharedDriveName>)|(shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>)|(teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveAdminQueryEntity> ::=
|
<SharedDriveAdminQueryEntity> ::=
|
||||||
(shareddriveadminquery <QuerySharedDrive>)|(shareddriveadminquery:<QuerySharedDrive>)
|
(teamdriveadminquery <QueryTeamDrive>)|(teamdriveadminquery:<QueryTeamDrive>)
|
||||||
|
|
||||||
<SharedDriveEntityAdmin> ::=
|
<SharedDriveEntityAdmin> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
@@ -327,11 +327,11 @@ When either of these options is chosen, no infomation about Shared Drive restric
|
|||||||
To retrieve the Shared Drive ID with `returnidonly`:
|
To retrieve the Shared Drive ID with `returnidonly`:
|
||||||
```
|
```
|
||||||
Linux/MacOS
|
Linux/MacOS
|
||||||
shareddriveId=$(gam create shareddrive ... returnidonly)
|
teamDriveId=$(gam create shareddrive ... returnidonly)
|
||||||
Windows PowerShell
|
Windows PowerShell
|
||||||
$shareddriveId = & gam create shareddrive ... returnidonly
|
$teamDriveId = & gam create shareddrive ... returnidonly
|
||||||
Windows Command Prompt
|
Windows Command Prompt
|
||||||
for /f "delims=" %a in ('gam create shareddrive ... returnidonly') do set shareddriveId=%a
|
for /f "delims=" %a in ('gam create shareddrive ... returnidonly') do set teamDriveId=%a
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bulk Create Shared Drives
|
## Bulk Create Shared Drives
|
||||||
@@ -422,14 +422,14 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] show shareddrives
|
gam [<UserTypeEntity>] show shareddrives
|
||||||
[adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
[showwebviewlink text|hyperlink]
|
[showwebviewlink text|hyperlink]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
|
|
||||||
@@ -441,14 +441,14 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] print shareddrives [todrive <ToDriveAttribute>*]
|
gam [<UserTypeEntity>] print shareddrives [todrive <ToDriveAttribute>*]
|
||||||
[adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[fields <SharedDriveFieldNameList>]
|
[fields <SharedDriveFieldNameList>]
|
||||||
[showwebviewlink text|hyperlink]
|
[showwebviewlink text|hyperlink]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
|
|
||||||
@@ -498,7 +498,7 @@ Options `shareddriveadminquery|query` and `shareddrives|teamdrives` are mutually
|
|||||||
Options `shareddriveadminquery|query` and `orgunit|org|ou` require `adminaccess|asadmin`.
|
Options `shareddriveadminquery|query` and `orgunit|org|ou` require `adminaccess|asadmin`.
|
||||||
|
|
||||||
By default, organizers for all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
By default, organizers for all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `shareddrives|teamdrives <SharedDriveIDList>` - Select the Shared Drive IDs specified in `<SharedDriveIDList>`
|
* `shareddrives|teamdrives <SharedDriveIDList>` - Select the Shared Drive IDs specified in `<SharedDriveIDList>`
|
||||||
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Select the Shared Drive IDs specified in `<FileSelector>|<CSVFileSelector>`
|
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Select the Shared Drive IDs specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
@@ -535,12 +535,12 @@ gam print shareddrives query "organizerCount = 0"
|
|||||||
Display the number of Shared Drives.
|
Display the number of Shared Drives.
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] show|print shareddrives
|
gam [<UserTypeEntity>] show|print shareddrives
|
||||||
[adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
showitemcountonly
|
showitemcountonly
|
||||||
```
|
```
|
||||||
By default, all Shared Drives are counted; use the following options to select a subset of Shared Drives:
|
By default, all Shared Drives are counted; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
|
|
||||||
@@ -758,7 +758,7 @@ gam config csv_output_header_drop_filter "User,createdTime,permission.photoLink,
|
|||||||
## Display Shared Drive access for selected Shared Drives
|
## Display Shared Drive access for selected Shared Drives
|
||||||
```
|
```
|
||||||
gam [<UserTypeEntity>] show shareddriveacls
|
gam [<UserTypeEntity>] show shareddriveacls
|
||||||
[adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||||
@@ -767,7 +767,7 @@ gam [<UserTypeEntity>] show shareddriveacls
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
gam [<UserTypeEntity>] print shareddriveacls [todrive <ToDriveAttribute>*]
|
gam [<UserTypeEntity>] print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
[adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||||
@@ -777,7 +777,7 @@ gam [<UserTypeEntity>] print shareddriveacls [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
```
|
```
|
||||||
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
* `<PermissionMatch>* [<PermissionMatchAction>] pmselect` - Use permission matching to select Shared Drives; all ACLs are displayed for the selected Shared Drives
|
* `<PermissionMatch>* [<PermissionMatchAction>] pmselect` - Use permission matching to select Shared Drives; all ACLs are displayed for the selected Shared Drives
|
||||||
@@ -927,12 +927,12 @@ gam redirect stdout ./DeleteSharedDrives.txt multiprocess redirect stderr stdout
|
|||||||
## Delete old empty Shared Drives
|
## Delete old empty Shared Drives
|
||||||
```
|
```
|
||||||
# Get a list of Shared Drives organizers for Shared Drives created before one year ago; alter date<-1y as required.
|
# Get a list of Shared Drives organizers for Shared Drives created before one year ago; alter date<-1y as required.
|
||||||
gam config csv_output_row_filter "createdTime:date<-1y" redirect csv ./ShareddriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
gam config csv_output_row_filter "createdTime:date<-1y" redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers domainlist mydomain.com includetypes user oneorganizer shownoorganizerdrives
|
||||||
|
|
||||||
# Inspect shareddriveOrganizers.csv, you'll have to deal with Shared Drives with no organizer/manager
|
# Inspect shareddriveOrganizers.csv, you'll have to deal with Shared Drives with no organizer/manager
|
||||||
|
|
||||||
# Get old empty Shared Drives
|
# Get old empty Shared Drives
|
||||||
gam config num_threads 10 csv_input_row_filter "organizers:regex:^.+$" csv_output_row_filter "Total:count=0" redirect csv ./OldEmptySharedDrives.csv multiprocess redirect stderr - multiprocess csv ./ShareddriveOrganizers.csv gam user "~organizers" print filecounts select shareddriveid "~id" showsize
|
gam config num_threads 10 csv_input_row_filter "organizers:regex:^.+$" csv_output_row_filter "Total:count=0" redirect csv ./OldEmptySharedDrives.csv multiprocess redirect stderr - multiprocess csv ./TeamDriveOrganizers.csv gam user "~organizers" print filecounts select shareddriveid "~id" showsize
|
||||||
|
|
||||||
# Inspect OldEmptySharedDrives.csv, if you're confident of the results, proceed
|
# Inspect OldEmptySharedDrives.csv, if you're confident of the results, proceed
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@
|
|||||||
<SharedDriveID> ::= <String>
|
<SharedDriveID> ::= <String>
|
||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveID>|(shareddriveid <SharedDriveID>)|(shareddriveid:<SharedDriveID>)|
|
<SharedDriveID>|(teamdriveid <SharedDriveID>)|(teamdriveid:<SharedDriveID>)|
|
||||||
(shareddrive <SharedDriveName>)|(shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>)|(teamdrive:<SharedDriveName>)
|
||||||
```
|
```
|
||||||
## Display empty folders
|
## Display empty folders
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -68,10 +68,10 @@
|
|||||||
(parentid <DriveFolderID>)|
|
(parentid <DriveFolderID>)|
|
||||||
(parentname <DriveFolderName>)|
|
(parentname <DriveFolderName>)|
|
||||||
(anyownerparentname <DriveFolderName>)|
|
(anyownerparentname <DriveFolderName>)|
|
||||||
(shareddriveparentid <DriveFolderID>)|
|
(teamdriveparentid <DriveFolderID>)|
|
||||||
(shareddriveparent <SharedDriveName>)|
|
(teamdriveparent <SharedDriveName>)|
|
||||||
(shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>)|
|
(teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>)|
|
||||||
(shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>)
|
(teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>)
|
||||||
|
|
||||||
<DriveFileCopyAttribute> ::=
|
<DriveFileCopyAttribute> ::=
|
||||||
(contentrestrictions readonly false)|
|
(contentrestrictions readonly false)|
|
||||||
@@ -231,10 +231,10 @@ and "Template" is replaced by "NewCustomer" in all copied sub files and folders
|
|||||||
* `parentid <DriveFolderID>` - The target folder is identified by `<DriveFolderID>` which must be writable by `<UserTypeEntity>`.
|
* `parentid <DriveFolderID>` - The target folder is identified by `<DriveFolderID>` which must be writable by `<UserTypeEntity>`.
|
||||||
* `parentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by `<UserTypeEntity>`.
|
* `parentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by `<UserTypeEntity>`.
|
||||||
* `anyownerparentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by any user but must be writable by `<UserTypeEntity>`.
|
* `anyownerparentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by any user but must be writable by `<UserTypeEntity>`.
|
||||||
* `shareddriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specific Shared Drive folder.
|
* `teamdriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specific Shared Drive folder.
|
||||||
* `shareddriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
* `teamdriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
||||||
* `shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
* `teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
||||||
* `shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
* `teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
||||||
* If none of the parent options are specified, the copied file/folder will be located in the source folder.
|
* If none of the parent options are specified, the copied file/folder will be located in the source folder.
|
||||||
|
|
||||||
### Duplicate files
|
### Duplicate files
|
||||||
@@ -414,15 +414,15 @@ Specify the target location on the Shared Drive, either the ID of the Shared Dri
|
|||||||
|
|
||||||
Files/folders in root of My Drive will be merged into `<DriveFolderID>`
|
Files/folders in root of My Drive will be merged into `<DriveFolderID>`
|
||||||
```
|
```
|
||||||
gam user user@domain.com copy drivefile root recursive shareddriveparentid <DriveFolderID> mergewithparent true
|
gam user user@domain.com copy drivefile root recursive teamdriveparentid <DriveFolderID> mergewithparent true
|
||||||
```
|
```
|
||||||
Files/folders in root of My Drive will be in a new folder named `My Drive` created in `<DriveFolderID>`
|
Files/folders in root of My Drive will be in a new folder named `My Drive` created in `<DriveFolderID>`
|
||||||
```
|
```
|
||||||
gam user user@domain.com copy drivefile root recursive shareddriveparentid <DriveFolderID> mergewithparent false
|
gam user user@domain.com copy drivefile root recursive teamdriveparentid <DriveFolderID> mergewithparent false
|
||||||
```
|
```
|
||||||
Files/folders in root of My Drive will be in a new folder named `<String>` created in `<DriveFolderID>`
|
Files/folders in root of My Drive will be in a new folder named `<String>` created in `<DriveFolderID>`
|
||||||
```
|
```
|
||||||
gam user user@domain.com copy drivefile root recursive shareddriveparentid <SharedDriveID> mergewithparent false newfilename <String>
|
gam user user@domain.com copy drivefile root recursive teamdriveparentid <SharedDriveID> mergewithparent false newfilename <String>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Copy content of a Shared Drive to another Shared Drive
|
### Copy content of a Shared Drive to another Shared Drive
|
||||||
@@ -438,7 +438,7 @@ The example is assuming that the target drive is empty.
|
|||||||
* Non-inherited sub folder permissions are copied.
|
* Non-inherited sub folder permissions are copied.
|
||||||
* Non-inherited file permissions are copied.
|
* Non-inherited file permissions are copied.
|
||||||
```
|
```
|
||||||
gam user user@domain.com copy drivefile shareddriveid 0AC_1AB shareddriveparentid 0AE_9ZX mergewithparent recursive
|
gam user user@domain.com copy drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX mergewithparent recursive
|
||||||
copymergewithparentfolderpermissions true
|
copymergewithparentfolderpermissions true
|
||||||
copytopfolderinheritedpermissions false
|
copytopfolderinheritedpermissions false
|
||||||
copytopfoldernoninheritedpermissions always
|
copytopfoldernoninheritedpermissions always
|
||||||
@@ -458,7 +458,7 @@ Suppose that the source drive has been updated and you want to refresh the targe
|
|||||||
* Non-inherited file permissions are copied.
|
* Non-inherited file permissions are copied.
|
||||||
* Files and folders that have been deleted from the source drive will remain on the target drive
|
* Files and folders that have been deleted from the source drive will remain on the target drive
|
||||||
```
|
```
|
||||||
gam user user@domain.com copy drivefile shareddriveid 0AC_1AB shareddriveparentid 0AE_9ZX mergewithparent recursive
|
gam user user@domain.com copy drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX mergewithparent recursive
|
||||||
copymergewithparentfolderpermissions true
|
copymergewithparentfolderpermissions true
|
||||||
copytopfolderinheritedpermissions false
|
copytopfolderinheritedpermissions false
|
||||||
copytopfoldernoninheritedpermissions syncallfolders
|
copytopfoldernoninheritedpermissions syncallfolders
|
||||||
@@ -478,7 +478,7 @@ gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 0AC
|
|||||||
```
|
```
|
||||||
Copy the top level items to target Shared Drive; append desired permission options
|
Copy the top level items to target Shared Drive; append desired permission options
|
||||||
```
|
```
|
||||||
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive shareddriveparentid 0AE_9ZX
|
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive teamdriveparentid 0AE_9ZX
|
||||||
```
|
```
|
||||||
|
|
||||||
### Copy content of a source Shared Drive folder to a target Shared Drive with parallel Processing
|
### Copy content of a source Shared Drive folder to a target Shared Drive with parallel Processing
|
||||||
@@ -488,31 +488,31 @@ gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx
|
|||||||
```
|
```
|
||||||
Create a folder on target Shared Drive with ID 0AE_9ZX, replace "New Folder Name" as desired.
|
Create a folder on target Shared Drive with ID 0AE_9ZX, replace "New Folder Name" as desired.
|
||||||
```
|
```
|
||||||
gam user user@domain.com create drivefile mimetype gfolder shareddriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly
|
gam user user@domain.com create drivefile mimetype gfolder teamdriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly
|
||||||
```
|
```
|
||||||
Copy the folder top level items to target Shared Drive folder, assume ID 2CY-45G was returned in previous step
|
Copy the folder top level items to target Shared Drive folder, assume ID 2CY-45G was returned in previous step
|
||||||
```
|
```
|
||||||
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive shareddriveparentid 2CY-45G
|
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive teamdriveparentid 2CY-45G
|
||||||
```
|
```
|
||||||
You can script the steps:
|
You can script the steps:
|
||||||
|
|
||||||
Linux/MacOS
|
Linux/MacOS
|
||||||
```
|
```
|
||||||
gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx-8W3 fields id,name,mimetype depth 0
|
gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx-8W3 fields id,name,mimetype depth 0
|
||||||
targetFolderId=$(gam user user@domain.com create drivefile mimetype gfolder shareddriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly)
|
targetFolderId=$(gam user user@domain.com create drivefile mimetype gfolder teamdriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly)
|
||||||
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive shareddriveparentid $targetFolderId
|
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive teamdriveparentid $targetFolderId
|
||||||
```
|
```
|
||||||
Windows PowerShell
|
Windows PowerShell
|
||||||
```
|
```
|
||||||
gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx-8W3 fields id,name,mimetype depth 0
|
gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx-8W3 fields id,name,mimetype depth 0
|
||||||
$targetFolderId = & gam user user@domain.com create drivefile mimetype gfolder shareddriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly
|
$targetFolderId = & gam user user@domain.com create drivefile mimetype gfolder teamdriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly
|
||||||
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive shareddriveparentid $targetFolderId
|
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive teamdriveparentid $targetFolderId
|
||||||
```
|
```
|
||||||
Windows Command Prompt
|
Windows Command Prompt
|
||||||
```
|
```
|
||||||
gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx-8W3 fields id,name,mimetype depth 0
|
gam redirect csv ./TopSDItems.csv user user@domain.com print filelist select 1Bx-8W3 fields id,name,mimetype depth 0
|
||||||
for /f "delims=" %a in ('gam user user@domain.com create drivefile mimetype gfolder shareddriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly') do set taregtFolderId=%a
|
for /f "delims=" %a in ('gam user user@domain.com create drivefile mimetype gfolder teamdriveparentid 0AE-9ZX drivefilename "New Folder Name" returnidonly') do set taregtFolderId=%a
|
||||||
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive shareddriveparentid %targetFolderId%
|
gam redirect stdout ./CopySharedDrive.txt multiprocess redirect stderr stdout csv TopSDItems.csv gam user user@domain.com copy drivefile "~id" recursive teamdriveparentid %targetFolderId%
|
||||||
```
|
```
|
||||||
|
|
||||||
## Move files and folders
|
## Move files and folders
|
||||||
@@ -614,10 +614,10 @@ This is the default mode.
|
|||||||
* `parentid <DriveFolderID>` - The target folder is identified by `<DriveFolderID>` which must be writable by `<UserTypeEntity>`.
|
* `parentid <DriveFolderID>` - The target folder is identified by `<DriveFolderID>` which must be writable by `<UserTypeEntity>`.
|
||||||
* `parentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by `<UserTypeEntity>`.
|
* `parentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by `<UserTypeEntity>`.
|
||||||
* `anyownerparentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by any user but must be writable by `<UserTypeEntity>`.
|
* `anyownerparentname <DriveFolderName>` - A search is performed for a folder named `<DriveFolderName>` owned by any user but must be writable by `<UserTypeEntity>`.
|
||||||
* `shareddriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specific Shared Drive folder.
|
* `teamdriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specific Shared Drive folder.
|
||||||
* `shareddriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
* `teamdriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
||||||
* `shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
* `teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
||||||
* `shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
* `teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
||||||
* If none of the parent options are specified, the moved file/folder will be located in the source folder.
|
* If none of the parent options are specified, the moved file/folder will be located in the source folder.
|
||||||
|
|
||||||
### Duplicate files
|
### Duplicate files
|
||||||
@@ -761,14 +761,14 @@ The following command will change the parents of the top level files and folders
|
|||||||
|
|
||||||
* No permissions are processed.
|
* No permissions are processed.
|
||||||
```
|
```
|
||||||
gam user user@domain.com move drivefile shareddriveid 0AC_1AB shareddriveparentid 0AE_9ZX mergewithparent
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX mergewithparent
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want the source Shared Drive with ID 0AC_1AB to be contained in a top level folder of the target Shared Drive with ID 0AE_9ZX, omit the `mergewithparent` argument.
|
If you want the source Shared Drive with ID 0AC_1AB to be contained in a top level folder of the target Shared Drive with ID 0AE_9ZX, omit the `mergewithparent` argument.
|
||||||
The folder on the target Shared Drive will have the same name as the name of the source Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
The folder on the target Shared Drive will have the same name as the name of the source Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
||||||
```
|
```
|
||||||
gam user user@domain.com move drivefile shareddriveid 0AC_1AB shareddriveparentid 0AE_9ZX
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX
|
||||||
gam user user@domain.com move drivefile shareddriveid 0AC_1AB shareddriveparentid 0AE_9ZX newfilename "Copy of source Shared Drive"
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX newfilename "Copy of source Shared Drive"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Inter-workspace moves
|
### Inter-workspace moves
|
||||||
@@ -778,7 +778,7 @@ Due to a restructuring, you want to move data from Shared Drive A in domaina.com
|
|||||||
* `user@domaina.com` is a manager of both Shared Drives.
|
* `user@domaina.com` is a manager of both Shared Drives.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ gam user user@domaina move drivefile shareddriveid <SharedDriveAID> shareddriveparentid <SharedDriveBID> mergewithparent
|
$ gam user user@domaina move drivefile teamdriveid <SharedDriveAID> teamdriveparentid <SharedDriveBID> mergewithparent
|
||||||
User: user@domaina.com, Move 1 Drive File/Folder
|
User: user@domaina.com, Move 1 Drive File/Folder
|
||||||
User: user@domaina.com, Drive Folder: Shared Drive A(<SharedDriveAID>), Move(Merge) contents with Drive Folder: Shared Drive B(<SharedDriveBID>)
|
User: user@domaina.com, Drive Folder: Shared Drive A(<SharedDriveAID>), Move(Merge) contents with Drive Folder: Shared Drive B(<SharedDriveBID>)
|
||||||
User: user@domaina.com, Drive File: Filename(<FileID>), Move Failed: Bad Request. User message: "shareOutNotPermitted"
|
User: user@domaina.com, Drive File: Filename(<FileID>), Move Failed: Bad Request. User message: "shareOutNotPermitted"
|
||||||
@@ -794,13 +794,13 @@ The following command will change the parents of the top level files and folders
|
|||||||
|
|
||||||
* No permissions are processed.
|
* No permissions are processed.
|
||||||
```
|
```
|
||||||
gam user user@domain.com move drivefile shareddriveid 0AC_1AB parentid root mergewithparent
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root mergewithparent
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want the contents of Shared Drive with ID 0AC_1AB to be contained in a top level folder of the My Drive, omit the `mergewithparent` argument.
|
If you want the contents of Shared Drive with ID 0AC_1AB to be contained in a top level folder of the My Drive, omit the `mergewithparent` argument.
|
||||||
The folder on the My Drive will have the same name as the name of the Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
The folder on the My Drive will have the same name as the name of the Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
||||||
```
|
```
|
||||||
gam user user@domain.com move drivefile shareddriveid 0AC_1AB parentid root
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root
|
||||||
gam user user@domain.com move drivefile shareddriveid 0AC_1AB parentid root newfilename "Copy of Shared Drive"
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root newfilename "Copy of Shared Drive"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -65,9 +65,9 @@
|
|||||||
|
|
||||||
<SharedDriveID> ::= <String>
|
<SharedDriveID> ::= <String>
|
||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveIDEntity> ::= (shareddriveid <SharedDriveID>) | (shareddriveid:<SharedDriveID>)
|
<SharedDriveIDEntity> ::= (teamdriveid <SharedDriveID>) | (teamdriveid:<SharedDriveID>)
|
||||||
<SharedDriveNameEntity> ::= (shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
<SharedDriveNameEntity> ::= (teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveFileNameEntity> ::= (shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
<SharedDriveFileNameEntity> ::= (teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
|
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveIDEntity> |
|
<SharedDriveIDEntity> |
|
||||||
@@ -315,8 +315,8 @@
|
|||||||
size|
|
size|
|
||||||
spaces|
|
spaces|
|
||||||
starred|
|
starred|
|
||||||
shareddriveid|
|
teamdriveid|
|
||||||
shareddrivename|
|
teamdrivename|
|
||||||
thumbnaillink|
|
thumbnaillink|
|
||||||
thumbnailversion|
|
thumbnailversion|
|
||||||
title|
|
title|
|
||||||
|
|||||||
@@ -149,10 +149,10 @@
|
|||||||
(parentid <DriveFolderID>)|
|
(parentid <DriveFolderID>)|
|
||||||
(parentname <DriveFolderName>)|
|
(parentname <DriveFolderName>)|
|
||||||
(anyownerparentname <DriveFolderName>)|
|
(anyownerparentname <DriveFolderName>)|
|
||||||
(shareddriveparentid <DriveFolderID>)|
|
(teamdriveparentid <DriveFolderID>)|
|
||||||
(shareddriveparent <SharedDriveName>)|
|
(teamdriveparent <SharedDriveName>)|
|
||||||
(shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>)|
|
(teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>)|
|
||||||
(shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>)
|
(teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>)
|
||||||
|
|
||||||
<DriveFileCreateAttribute> ::=
|
<DriveFileCreateAttribute> ::=
|
||||||
<DriveFileAttribute>|
|
<DriveFileAttribute>|
|
||||||
@@ -196,10 +196,10 @@ You can specify where the new file is to be located:
|
|||||||
* `parentid <DriveFolderID>` - Folder ID.
|
* `parentid <DriveFolderID>` - Folder ID.
|
||||||
* `parentname <DriveFolderName>` - Folder name; the folder must be owned by `<UserTypeEntity>`.
|
* `parentname <DriveFolderName>` - Folder name; the folder must be owned by `<UserTypeEntity>`.
|
||||||
* `anyownerparentname <DriveFolderName>` - Folder name; the folder can be owned by any user, `<UserTypeEntity>` must be able to write to the folder.
|
* `anyownerparentname <DriveFolderName>` - Folder name; the folder can be owned by any user, `<UserTypeEntity>` must be able to write to the folder.
|
||||||
* `shareddriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specfic Shared Drive folder.
|
* `teamdriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specfic Shared Drive folder.
|
||||||
* `shareddriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
* `teamdriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
||||||
* `shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
* `teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
||||||
* `shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
* `teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
||||||
* If none of the parent options are specified, the parent folder is the root folder.
|
* If none of the parent options are specified, the parent folder is the root folder.
|
||||||
|
|
||||||
By default, Google assigns the current time to the attributes `createdTime` and `modifiedTime`; you can assign your own values
|
By default, Google assigns the current time to the attributes `createdTime` and `modifiedTime`; you can assign your own values
|
||||||
@@ -290,7 +290,7 @@ This will create a three column CSV file SharedDriveNamesIDs.csv with columns: U
|
|||||||
You are building student folders on a Shared Drive as an admin and want to add ACLs to the folders
|
You are building student folders on a Shared Drive as an admin and want to add ACLs to the folders
|
||||||
allowing the student write access and you want a shortcut on the student's My Drive pointing to the folder.
|
allowing the student write access and you want a shortcut on the student's My Drive pointing to the folder.
|
||||||
By adding the student's primary email address to the CSV output, it can be used in subsequent commands.
|
By adding the student's primary email address to the CSV output, it can be used in subsequent commands.
|
||||||
Sustitute for admin@domain.com and `<SharedDriveID>`.
|
Sustitute for admin@domain.com and `<TeamDriveID>`.
|
||||||
```
|
```
|
||||||
Students.csv
|
Students.csv
|
||||||
primaryEmail,Name
|
primaryEmail,Name
|
||||||
@@ -299,7 +299,7 @@ mary@domain.com, Mary Smith
|
|||||||
...
|
...
|
||||||
|
|
||||||
# Create the student folders on the Shared Drive
|
# Create the student folders on the Shared Drive
|
||||||
gam redirect csv ./StudentFolders.csv multiprocess csv Students.csv gam user admin@domain.com create drivefile mimetype gfolder drivefilename "~~Name~~ Digital Portfolio" parentid <SharedDriveID> csv addcsvdata primaryEmail "~primaryEmail"
|
gam redirect csv ./StudentFolders.csv multiprocess csv Students.csv gam user admin@domain.com create drivefile mimetype gfolder drivefilename "~~Name~~ Digital Portfolio" parentid <TeamDriveID> csv addcsvdata primaryEmail "~primaryEmail"
|
||||||
# Add ACLs granting the students write access to their folders; "~User" refers to admin@domain.com
|
# Add ACLs granting the students write access to their folders; "~User" refers to admin@domain.com
|
||||||
gam csv StudentFolders.csv gam user "~User" add drivefileacl "~id" user "~primaryEmail" role fileorganizer
|
gam csv StudentFolders.csv gam user "~User" add drivefileacl "~id" user "~primaryEmail" role fileorganizer
|
||||||
# Add a shortcut to the folder on the student's My Drive
|
# Add a shortcut to the folder on the student's My Drive
|
||||||
@@ -389,7 +389,7 @@ User: user@domain.com, Drive Folder Path:, Create
|
|||||||
|
|
||||||
Build in a Shared Drive Folder
|
Build in a Shared Drive Folder
|
||||||
```
|
```
|
||||||
gam user user@domain.com create drivefolderpath path "Top Folder/Middle Folder/Bottom Folder/Sub Folder" shareddriveparent "TS Shared Drive" shareddriveparentname "TS SD6 Folder"
|
gam user user@domain.com create drivefolderpath path "Top Folder/Middle Folder/Bottom Folder/Sub Folder" teamdriveparent "TS Shared Drive" teamdriveparentname "TS SD6 Folder"
|
||||||
Getting all Drive Files/Folders that match query (mimeType = 'application/vnd.google-apps.folder' and name = 'TS SD6 Folder' and trashed = false) for user@domain.com
|
Getting all Drive Files/Folders that match query (mimeType = 'application/vnd.google-apps.folder' and name = 'TS SD6 Folder' and trashed = false) for user@domain.com
|
||||||
Got 1 Drive File/Folder that matched query (mimeType = 'application/vnd.google-apps.folder' and name = 'TS SD6 Folder' and trashed = false) for user@domain.com...
|
Got 1 Drive File/Folder that matched query (mimeType = 'application/vnd.google-apps.folder' and name = 'TS SD6 Folder' and trashed = false) for user@domain.com...
|
||||||
User: user@domain.com, Drive Folder Path:, Create
|
User: user@domain.com, Drive Folder Path:, Create
|
||||||
@@ -495,10 +495,10 @@ You can change where the new file is to be located; this removes all other paren
|
|||||||
* `parentid <DriveFolderID>` - Folder ID.
|
* `parentid <DriveFolderID>` - Folder ID.
|
||||||
* `parentname <DriveFolderName>` - Folder name; the folder must be owned by `<UserTypeEntity>`.
|
* `parentname <DriveFolderName>` - Folder name; the folder must be owned by `<UserTypeEntity>`.
|
||||||
* `anyownerparentname <DriveFolderName>` - Folder name; the folder can be owned by any user, `<UserTypeEntity>` must be able to write to the folder.
|
* `anyownerparentname <DriveFolderName>` - Folder name; the folder can be owned by any user, `<UserTypeEntity>` must be able to write to the folder.
|
||||||
* `shareddriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specfic Shared Drive folder.
|
* `teamdriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specfic Shared Drive folder.
|
||||||
* `shareddriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
* `teamdriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
||||||
* `shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
* `teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
||||||
* `shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
* `teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
||||||
|
|
||||||
You can add/remove parent folders without affecting other parent folders.
|
You can add/remove parent folders without affecting other parent folders.
|
||||||
* `addparents|removeparents <DriveFolderIDList>` - Specify the parent folders by ID.
|
* `addparents|removeparents <DriveFolderIDList>` - Specify the parent folders by ID.
|
||||||
|
|||||||
@@ -30,13 +30,13 @@
|
|||||||
(parentid <DriveFolderID>)|
|
(parentid <DriveFolderID>)|
|
||||||
(parentname <DriveFolderName>)|
|
(parentname <DriveFolderName>)|
|
||||||
(anyownerparentname <DriveFolderName>)|
|
(anyownerparentname <DriveFolderName>)|
|
||||||
(shareddriveparentid <DriveFolderID>)|
|
(teamdriveparentid <DriveFolderID>)|
|
||||||
(shareddriveparent <SharedDriveName>)|
|
(teamdriveparent <SharedDriveName>)|
|
||||||
(shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>)|
|
(teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>)|
|
||||||
(shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>))|
|
(teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>))|
|
||||||
(shareddriveparentid <DriveFolderID>)|(shareddriveparent <SharedDriveName>)|
|
(teamdriveparentid <DriveFolderID>)|(teamdriveparent <SharedDriveName>)|
|
||||||
(shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>)|
|
(teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>)|
|
||||||
(shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>)
|
(teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>)
|
||||||
|
|
||||||
<DriveOrderByFieldName> ::=
|
<DriveOrderByFieldName> ::=
|
||||||
createddate|createdtime|
|
createddate|createdtime|
|
||||||
|
|||||||
@@ -357,8 +357,8 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
For example, to get the ACLs for your Team Drives with the Team Drive name included in the output:
|
For example, to get the ACLs for your Team Drives with the Team Drive name included in the output:
|
||||||
```
|
```
|
||||||
gam redirect csv ./SharedDrives.csv print shareddrives
|
gam redirect csv ./TeamDrives.csv print teamdrives
|
||||||
gam redirect csv ./SharedDriveACLs.csv multiprocess csv ./SharedDrives.csv gam print drivefileacls shareddriveid "~id" addtitle "~name" fields id,domain,emailaddress,role,type,deleted
|
gam redirect csv ./TeamDriveACLs.csv multiprocess csv ./TeamDrives.csv gam print drivefileacls teamdriveid "~id" addtitle "~name" fields id,domain,emailaddress,role,type,deleted
|
||||||
```
|
```
|
||||||
|
|
||||||
## Delete all ACLs except owner from a file
|
## Delete all ACLs except owner from a file
|
||||||
|
|||||||
@@ -26,10 +26,10 @@
|
|||||||
(parentid <DriveFolderID>)|
|
(parentid <DriveFolderID>)|
|
||||||
(parentname <DriveFolderName>)|
|
(parentname <DriveFolderName>)|
|
||||||
(anyownerparentname <DriveFolderName>)|
|
(anyownerparentname <DriveFolderName>)|
|
||||||
(shareddriveparentid <DriveFolderID>)|
|
(teamdriveparentid <DriveFolderID>)|
|
||||||
(shareddriveparent <SharedDriveName>)|
|
(teamdriveparent <SharedDriveName>)|
|
||||||
(shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>)|
|
(teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>)|
|
||||||
(shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>)
|
(teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>)
|
||||||
|
|
||||||
```
|
```
|
||||||
## Create shortcuts
|
## Create shortcuts
|
||||||
@@ -48,10 +48,10 @@ There are two modes of operaton:
|
|||||||
* `parentid <DriveFolderID>` - Folder ID.
|
* `parentid <DriveFolderID>` - Folder ID.
|
||||||
* `parentname <DriveFolderName>` - Folder name; the folder must be owned by `<UserTypeEntity>`.
|
* `parentname <DriveFolderName>` - Folder name; the folder must be owned by `<UserTypeEntity>`.
|
||||||
* `anyownerparentname <DriveFolderName>` - Folder name; the folder can be owned by any user, `<UserTypeEntity>` must be able to write to the folder.
|
* `anyownerparentname <DriveFolderName>` - Folder name; the folder can be owned by any user, `<UserTypeEntity>` must be able to write to the folder.
|
||||||
* `shareddriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specfic Shared Drive folder.
|
* `teamdriveparentid <DriveFolderID>` - Shared Drive folder ID; when used alone, this indicates a specfic Shared Drive folder.
|
||||||
* `shareddriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
* `teamdriveparent <SharedDriveName>` - Shared Drive name; when used alone, this indicates the root level of the Shared Drive.
|
||||||
* `shareddriveparentid <SharedDriveID> shareddriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
* `teamdriveparentid <SharedDriveID> teamdriveparentname <DriveFolderName>` - A Shared Drive ID and a folder name on that Shared Drive.
|
||||||
* `shareddriveparent <SharedDriveName> shareddriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
* `teamdriveparent <SharedDriveName> teamdriveparentname <DriveFolderName>` - A Shared Drive name and a folder name on that Shared Drive.
|
||||||
* `convertparents` - Convert all but the last parent reference in `<DriveFileEntity>` to shortcuts. My testing shows that as parents are added to a file, they are added to the front of the parents list; thus, the last parent is the original parent.
|
* `convertparents` - Convert all but the last parent reference in `<DriveFileEntity>` to shortcuts. My testing shows that as parents are added to a file, they are added to the front of the parents list; thus, the last parent is the original parent.
|
||||||
|
|
||||||
If neither `<DriveFileParentAttribute>` nor `convertparents` are specified, the shortcut is placed in the root folder (My Drive).
|
If neither `<DriveFileParentAttribute>` nor `convertparents` are specified, the shortcut is placed in the root folder (My Drive).
|
||||||
@@ -142,6 +142,6 @@ gam csv Shortcuts.csv matchfield code 4 gam user "~owner" create drivefileshortc
|
|||||||
|
|
||||||
## Check shortcut validity on Shared Drives
|
## Check shortcut validity on Shared Drives
|
||||||
```
|
```
|
||||||
gam redirect csv ./TDShortcuts.csv user organizer@domain.com print filelist select shareddriveid <SharedDriveID> showmimetype gshortcut fields id
|
gam redirect csv ./TDShortcuts.csv user organizer@domain.com print filelist select teamdriveid <SharedDriveID> showmimetype gshortcut fields id
|
||||||
gam redirect csv ./Shortcuts.csv user organizer@domain.com check drivefileshortcut csvfile TDShortcuts.csv:id csv
|
gam redirect csv ./Shortcuts.csv user organizer@domain.com check drivefileshortcut csvfile TDShortcuts.csv:id csv
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -148,8 +148,6 @@
|
|||||||
<CSVkmdSelector> |
|
<CSVkmdSelector> |
|
||||||
<CSVDataSelector>
|
<CSVDataSelector>
|
||||||
|
|
||||||
<QuerySharedDrive> ::= <String> See: https://developers.google.com/workspace/drive/api/guides/search-shareddrives
|
|
||||||
|
|
||||||
<SharedDriveACLRole> ::=
|
<SharedDriveACLRole> ::=
|
||||||
manager|organizer|owner|
|
manager|organizer|owner|
|
||||||
contentmanager|fileorganizer|
|
contentmanager|fileorganizer|
|
||||||
@@ -161,8 +159,8 @@
|
|||||||
<SharedDriveName> ::= <String>
|
<SharedDriveName> ::= <String>
|
||||||
<SharedDriveEntity> ::=
|
<SharedDriveEntity> ::=
|
||||||
<SharedDriveID>|
|
<SharedDriveID>|
|
||||||
(shareddriveid <SharedDriveID>)|(shareddriveid:<SharedDriveID>)|
|
(teamdriveid <SharedDriveID>)|(teamdriveid:<SharedDriveID>)|
|
||||||
(shareddrive <SharedDriveName>)|(shareddrive:<SharedDriveName>)
|
(teamdrive <SharedDriveName>)|(teamdrive:<SharedDriveName>)
|
||||||
|
|
||||||
<SharedDriveFieldName> ::=
|
<SharedDriveFieldName> ::=
|
||||||
backgroundimagefile|
|
backgroundimagefile|
|
||||||
@@ -176,10 +174,10 @@
|
|||||||
themeid
|
themeid
|
||||||
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
<SharedDriveFieldNameList> ::= "<SharedDriveFieldName>(,<SharedDriveFieldName>)*"
|
||||||
|
|
||||||
<SharedDriveIDEntity> ::= (shareddriveid <DriveFileItem>) | (shareddriveid:<DriveFileItem>)
|
<SharedDriveIDEntity> ::= (teamdriveid <DriveFileItem>) | (teamdriveid:<DriveFileItem>)
|
||||||
<SharedDriveNameEntity> ::= (shareddrive <SharedDriveName>) | (shareddrive:<SharedDriveName>)
|
<SharedDriveNameEntity> ::= (teamdrive <SharedDriveName>) | (teamdrive:<SharedDriveName>)
|
||||||
<SharedDriveFileNameEntity> ::= (shareddrivefilename <DriveFileName>) | (shareddrivefilename:<DriveFileName>)
|
<SharedDriveFileNameEntity> ::= (teamdrivefilename <DriveFileName>) | (teamdrivefilename:<DriveFileName>)
|
||||||
<SharedDriveFileQueryEntity> ::= (shareddrivequery <QueryDriveFile>) | (shareddrivequery:<QueryDriveFile>)
|
<SharedDriveFileQueryEntity> ::= (teamdrivequery <QueryDriveFile>) | (teamdrivequery:<QueryDriveFile>)
|
||||||
<SharedDriveFileQueryShortcut> ::=
|
<SharedDriveFileQueryShortcut> ::=
|
||||||
all_files | all_folders | all_google_files | all_non_google_files | all_items
|
all_files | all_folders | all_google_files | all_non_google_files | all_items
|
||||||
|
|
||||||
@@ -293,11 +291,11 @@ When either of these options is chosen, no infomation about Shared Drive restric
|
|||||||
To retrieve the Shared Drive ID with `returnidonly`:
|
To retrieve the Shared Drive ID with `returnidonly`:
|
||||||
```
|
```
|
||||||
Linux/MacOS
|
Linux/MacOS
|
||||||
shareddriveId=$(gam user user@domain.com create shareddrive ... returnidonly)
|
teamDriveId=$(gam user user@domain.com create shareddrive ... returnidonly)
|
||||||
Windows PowerShell
|
Windows PowerShell
|
||||||
$shareddriveId = & gam user user@domain.com create shareddrive ... returnidonly
|
$teamDriveId = & gam user user@domain.com create shareddrive ... returnidonly
|
||||||
Windows Command Prompt
|
Windows Command Prompt
|
||||||
for /f "delims=" %a in ('gam user user@domain.com create shareddrive ... returnidonly') do set shareddriveId=%a
|
for /f "delims=" %a in ('gam user user@domain.com create shareddrive ... returnidonly') do set teamDriveId=%a
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bulk Create Shared Drives
|
## Bulk Create Shared Drives
|
||||||
@@ -419,12 +417,12 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
Display the number of Shared Drives.
|
Display the number of Shared Drives.
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show|print shareddrives
|
gam <UserTypeEntity> show|print shareddrives
|
||||||
[shareddriveadminquery|query <QuerySharedDrive>]
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
showitemcountonly
|
showitemcountonly
|
||||||
```
|
```
|
||||||
By default, all Shared Drives are counted; use the following options to select a subset of Shared Drives:
|
By default, all Shared Drives are counted; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
|
|
||||||
@@ -468,7 +466,7 @@ Options `shareddriveadminquery|query` and `shareddrives|teamdrives` are mutually
|
|||||||
Options `shareddriveadminquery|query` and `orgunit|org|ou` require `adminaccess|asadmin`.
|
Options `shareddriveadminquery|query` and `orgunit|org|ou` require `adminaccess|asadmin`.
|
||||||
|
|
||||||
By default, organizers for all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
By default, organizers for all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `shareddrives|teamdrives <SharedDriveIDList>` - Select the Shared Drive IDs specified in `<SharedDriveIDList>`
|
* `shareddrives|teamdrives <SharedDriveIDList>` - Select the Shared Drive IDs specified in `<SharedDriveIDList>`
|
||||||
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Select the Shared Drive IDs specified in `<FileSelector>|<CSVFileSelector>`
|
* `shareddrives|teamdrives select <FileSelector>|<CSVFileSelector>` - Select the Shared Drive IDs specified in `<FileSelector>|<CSVFileSelector>`
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
@@ -488,7 +486,7 @@ To select organizers from any domain, use: `domainlist ""`
|
|||||||
|
|
||||||
For example, to get a single user organizer from your domain for all Shared Drives including no organizer drives:
|
For example, to get a single user organizer from your domain for all Shared Drives including no organizer drives:
|
||||||
```
|
```
|
||||||
gam redirect csv ./ShareddriveOrganizers.csv print shareddriveorganizers
|
gam redirect csv ./TeamDriveOrganizers.csv print shareddriveorganizers
|
||||||
```
|
```
|
||||||
|
|
||||||
## Manage Shared Drive access
|
## Manage Shared Drive access
|
||||||
@@ -598,14 +596,14 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
## Display Shared Drive access for selected Shared Drives
|
## Display Shared Drive access for selected Shared Drives
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show shareddriveacls
|
gam <UserTypeEntity> show shareddriveacls
|
||||||
adminaccess [shareddriveadminquery|query <QuerySharedDrive>]
|
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
adminaccess [shareddriveadminquery|query <QuerySharedDrive>]
|
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||||
@@ -617,7 +615,7 @@ Shared Drives in the workspace, `<UserTypeEntity>` should specify a super admin
|
|||||||
option shoud be used.
|
option shoud be used.
|
||||||
|
|
||||||
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
By default, all Shared Drives are displayed; use the following options to select a subset of Shared Drives:
|
||||||
* `shareddriveadminquery|query <QuerySharedDrive>` - Use a query to select Shared Drives
|
* `teamdriveadminquery|query <QueryTeamDrive>` - Use a query to select Shared Drives
|
||||||
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
* `matchname <REMatchPattern>` - Retrieve Shared Drives with names that match a pattern.
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
* `orgunit|org|ou <OrgUnitPath>` - Only Shared Drives in the specified Org Unit are selected
|
||||||
* `<PermissionMatch>* [<PermissionMatchAction>] pmselect` - Use permission matching to select Shared Drives
|
* `<PermissionMatch>* [<PermissionMatchAction>] pmselect` - Use permission matching to select Shared Drives
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.34.01 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.33.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.2 64-bit final
|
Python 3.14.2 64-bit final
|
||||||
macOS Tahoe 26.2 x86_64
|
macOS Tahoe 26.2 x86_64
|
||||||
@@ -15,7 +15,7 @@ Time: 2025-12-23T13:57: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.34.01 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.33.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.2 64-bit final
|
Python 3.14.2 64-bit final
|
||||||
macOS Tahoe 26.2 x86_64
|
macOS Tahoe 26.2 x86_64
|
||||||
@@ -27,7 +27,7 @@ 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.34.01 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.33.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.2 64-bit final
|
Python 3.14.2 64-bit final
|
||||||
macOS Tahoe 26.2 x86_64
|
macOS Tahoe 26.2 x86_64
|
||||||
@@ -68,7 +68,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.34.01
|
Latest: 7.33.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.34.01
|
7.33.03
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -86,7 +86,7 @@ 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.34.01 - https://github.com/GAM-team/GAM
|
GAM 7.33.03 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.2 64-bit final
|
Python 3.14.2 64-bit final
|
||||||
macOS Tahoe 26.2 x86_64
|
macOS Tahoe 26.2 x86_64
|
||||||
|
|||||||
@@ -232,11 +232,6 @@ csv_output_header_order
|
|||||||
Any headers in the file but not in the list will appear after
|
Any headers in the file but not in the list will appear after
|
||||||
the headers in the list
|
the headers in the list
|
||||||
Default: ''
|
Default: ''
|
||||||
csv_output_header_required
|
|
||||||
A list of <Strings> used to specify column headers
|
|
||||||
for inclusion in the CSV file written by a gam print command
|
|
||||||
even if the API didn't return any data for those columns.
|
|
||||||
Default: ''
|
|
||||||
csv_output_line_terminator
|
csv_output_line_terminator
|
||||||
Allowed values: cr, lf, crlf
|
Allowed values: cr, lf, crlf
|
||||||
Designates character(s) used to terminate the lines of a CSV file.
|
Designates character(s) used to terminate the lines of a CSV file.
|
||||||
@@ -735,8 +730,6 @@ Section: DEFAULT
|
|||||||
csv_output_header_drop_filter = ''
|
csv_output_header_drop_filter = ''
|
||||||
csv_output_header_filter = ''
|
csv_output_header_filter = ''
|
||||||
csv_output_header_force = ''
|
csv_output_header_force = ''
|
||||||
csv_output_header_order = ''
|
|
||||||
csv_output_header_required = ''
|
|
||||||
csv_output_line_terminator = lf
|
csv_output_line_terminator = lf
|
||||||
csv_output_no_escape_char = false
|
csv_output_no_escape_char = false
|
||||||
csv_output_quote_char = '"'
|
csv_output_quote_char = '"'
|
||||||
@@ -983,7 +976,6 @@ csv_output_header_drop_filter = ''
|
|||||||
csv_output_header_filter = ''
|
csv_output_header_filter = ''
|
||||||
csv_output_header_force = ''
|
csv_output_header_force = ''
|
||||||
csv_output_header_order = ''
|
csv_output_header_order = ''
|
||||||
csv_output_header_required = ''
|
|
||||||
csv_output_line_terminator = lf
|
csv_output_line_terminator = lf
|
||||||
csv_output_no_escape_char = false
|
csv_output_no_escape_char = false
|
||||||
csv_output_quote_char = '"'
|
csv_output_quote_char = '"'
|
||||||
|
|||||||
Reference in New Issue
Block a user