-
Notifications
You must be signed in to change notification settings - Fork 88
Meta Commands and File Redirection
Meta commands are used to configure GAM operation. File redirection is used to intelligently redirect output from GAM: CSV data, stdout and stderr.
The meta commands and file redirection must come before all other arguments and in this order, ... indicates that additional GAM arguments may appear.
gam [<Select>] [showsections] [<SelectOutputFilter>|<SelectInputFilter>] [<Config>] [<MultiprocessExit>] [<Redirect>] ...
Select a section from gam.cfg and process a GAM command using values from that section.
<Select> ::=
select <Section> [save] [verify]
-
save
- Set
section = <Section>
in the[DEFAULT]
section and write configuration data to gam.cfg
- Set
-
verify
- Print the variable values for the selected section
- Values are determined in this order: Selected section, DEFAULT section, Program default
Display all of the sections in gam.cfg and mark the currently selected section with a *.
showsections
Select an output filter section from gam.cfg and process a GAM command using values from that section.
<SelectOutputFilter> ::=
selectfilter|selectoutputfilter <Section>
The only <VariableNames>
recognized in this <Section>
are:
csv_output_header_filter
csv_output_header_drop_filter
csv_output_header_force
csv_output_header_order
csv_output_row_filter
csv_output_row_filter_mode
csv_output_row_drop_filter
csv_output_row_drop_filter_mode
csv_output_row_limit
csv_output_sort_headers
Select an input filter section from gam.cfg and process a GAM command using values from that section.
<SelectInputFilter> ::=
selectinputfilter <Section>
The only <VariableNames>
recognized in this <Section>
are:
csv_input_row_filter
csv_input_row_filter_mode
csv_input_row_drop_filter
csv_input_row_drop_filter_mode
csv_input_row_limit
Set variables in gam.cfg.
<Config> ::=
config (<VariableName> [=] <Value>)* [save] [verify]
-
<VariableName> [=] <Value>
- Set
<VariableName> = <Value>
in the current section - All
<VariableNames>
except section are allowed. - The
=
is optional but must be surrounded by spaces if included.
- Set
-
save
- Write configuration data to gam.cfg
-
verify
- Print the variable values for the current section
- Values are determined in this order: Current section, DEFAULT section, Program default
You can prefix <Config>
with <Select>
to set a variable in a particular section.
-
select default <Config>
- Set a variable in theDEFAULT
section -
select xyz <Config>
- Set a variable in thexyz
section
Terminate processing of a CSV or batch file when one of the subprocesses returns a matching return code.
<Operator> ::= <|<=|>=|>|=|!=
<ReturnCodeSelection> ::=
rc<Operator><Number>|
rcrange=<Number>/<Number>|
rcrange!=<Number>/<Number>
<MultiProcessExit> :=
multiprocessexit <ReturnCodeSelection>
You can redirect CSV file output and stdout/stderr output to files. By using redirect, you have more control over the output from GAM.
You can redirect stdout and stderr to null and stderr can be redirected to stdout.
<Redirect> ::=
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
[sortheaders <StringList>] [timestampcolumn <String>]
[todrive <ToDriveAttribute>*] |
redirect stdout <FileName> [multiprocess] [append] |
redirect stdout null [multiprocess] |
redirect stderr <FileName> [multiprocess] [append] |
redirect stderr null [multiprocess] |
redirect stderr stdout [multiprocess]
For redirect
, the optional subarguments must appear in the order shown.
If <FileName>
specifies a relative path, the file will be put in the directory specified by drive_dir
in gam.cfg.
If <FileName>
specifies an absolute path, the file will be put in the directory specified.
Specify ./<FileName>
to put the file in your current working directory.
The multiprocess
subargument allows the multiple subprocesses started by gam csv
to write intelligently
to a single redirected CSV/stdout/stderr file. If you don't specify multiprocess
, each subprocess
writes <FileName>
independently; you end up with a single file written by the last subprocess.
For redirect csv
, if you don't specify multiprocess
and do specify todrive
, each subprocess uploads a separate Google sheet.
The append
subargument causes GAM to append data to <FileName>
rather that rewriting the file.
The noheader
subargument causes GAM to suppress writing a CSV file header. This might be used when you are running
several GAM commands that output the same CSV columns but want all of the data in a single file; the second and
subsequent GAM commands specify append noheader
.
The charset <Charset>
subargument sets the character set of the CSV file; the default is the value of charset
in gam.cfg
which defaults to UTF-8.
The columndelimiter <Character>
subargument sets the intercolumn delimiter of the CSV file; the default value
is the value of csv_output_column_delimiter
in gam.cfg
which defaults to comma.
The noescapechar <Boolean>
subargument controls whether \
is used as an escape character when writing the CSV file; the default value
is the value of csv_output_no_escape_char
in gam.cfg
which defaults to False.
The quotechar <Character>
subargument sets the character used to quote fields in the CSV file
that contaim special charactere; the default value is the value of csv_output_quote_char
in gam.cfg
which defaults to double quote.
The sortheaders <StringList>
argument causes GAM to sort CSV output rows by the column headers specified in <StringList>
.
The column headers are case insensitive and if column header does not appear in the CSV output, it is ignored.
The timestampcolumn <String>
adds a column named <String>
to the CSV file; the value is the
timestamp of when the GAM command started.
If you are doing redirect csv <FileName> multiprocess
, it is more efficient to specify todrive <ToDriveAttribute>*
as part of
the redirect as verification of the todrive
settings, which can involve several API calls, is done once rather than in each of the subprocesses.
By setting <FileName>
to -
, you can redirect to stdout/stderr rather than a file; this is typically used when multiprocess
is specified.
-
redirect csv - multiprocess
- Send CSV output to stdout; intelligently aggregate data by process -
redirect stdout - multiprocess
- Send normal output stdout; intelligently aggregate data by process -
redirect stderr - multiprocess
- Sendgetting
messages and error messages to stderr; intelligently aggregate data by process
If the pattern {{Section}}
appears in <FileName>
, it will be replaced with the name of the current section of gam.cfg.
Suppose that you have a CSV file CourseList.csv with a column labeled CourseId that contains course Ids. You want a single CSV file with participant information for these courses.
gam redirect csv ./CourseInfo.csv multiprocess csv CourseList.csv gam print course-participants course "~CourseId"
redirect csv ./CourseInfo.csv multiprocess
causes gam to collect output from all of the processes started by csv CourseList.csv gam print course-participants course "~CourseId"
and produces a single CSV file CourseInfo.csv.
Generate a list of CrOS devices and update an existing sheet in a Google spreadsheet. The file ID and sheet IDs are preserved so other appplications can access the data using the file ID and sheet ID. By setting 'tdtimestamp true`, the file name will the updated to reflect the time of execution, but the file ID will not change.
gam redirect csv - todrive tdtitle "CrOS" tdtimestamp true tdfileid 12345-mizZ6Q2vP1rcHQH3tAZQt_NVB2EOxmS2SU3yM tdsheet id:0 tdupdatesheet true print cros fields deviceId,notes,orgUnitPath,serialNumber,osversion
For a collection of users, generate a list of files shared with anyone; combine the output for all users into a single file.
gam redirect csv - multiprocess todrive tdtitle AnyoneShares-All csv Users.csv gam user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em
For a collection of users, generate a list of files shared with anyone; generate a separate file for each user. The two forms of the command are equivalent.
gam csv Users.csv gam redirect csv - todrive tdtitle "AnyoneShares-~~primaryEmail~~" user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em
gam csv Users.csv gam user "~primaryEmail" print filelist fields id,name,permissions pm type anyone em todrive tdtitle "AnyoneShares-~~primaryEmail~~"
The output from each of the gam info user "~primaryEmail"
commands will be combined into the single file Users.txt.
The value of show_multiprocess_info
from gam.cfg
controls whether information identifying the processes is also shown.
$ gam config show_multiprocess_info false redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
$ more Users.txt
User: [email protected] (1/1)
Settings:
First Name: Test
Last Name: User1
Full Name: Test User1
...
User: [email protected]@ (1/1)
Settings:
First Name: Test
Last Name: User2
Full Name: Test User2
...
$ gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
$ more Users.txt
stdout: 0, Start: 2017-01-26T11:35:00.897773-08:00, RC: 0, Cmd: /Users/admin/gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
stdout: 1, Start: 2017-01-26T11:35:00.902709-08:00, RC: 0, Cmd: gam info user [email protected]
User: [email protected] (1/1)
Settings:
First Name: Test
Last Name: User1
Full Name: Test User1
...
stdout: 1, End: 2017-01-26T11:35:02.656837-08:00, RC: 0, Cmd: gam info user [email protected]
stdout: 2, Start: 2017-01-26T11:35:00.910729-08:00, RC: 0, Cmd: gam info user [email protected]
User: [email protected]@ (1/1)
Settings:
First Name: Test
Last Name: User2
Full Name: Test User2
...
stdout: 2, End: 2017-01-26T11:35:02.849646-08:00, RC: 0, Cmd: gam info user [email protected]
stdout: 0, End: 2017-01-26T11:35:02.907141-08:00, RC: 0, Cmd: /Users/admin/gam config show_multiprocess_info true redirect stdout ./Users.txt multiprocess csv Users.csv gam info user "~primaryEmail"
Need more help? Ask on the GAM Discussion Group
Update History
Installation
- How to Install GAM7
- How to Uograde GAMADV-XTD3 to GAM7
- How to Upgrade Legacy GAM to GAM7
- How to Update GAM7
- Install GAM as Python Library
- GAM7 on Chrome OS Devices
- GAM7 on Android Devices
- Google Network Addresses
- HTTPS Proxy
- SSL Root CA Certificates
- How to Uninstall GAM7
Configuration
- Authorization
- GAM Configuration
- Running GAM7 securely on a Google Compute Engine
- Using GAM7 with a delegated admin service account
- Using GAM7 with a YubiKey
Notes and Information
- Upgrade Benefits
- Questions? Visit the GAM Discussion Forum
- GAM Public Chat Room
- Scripts
- Other Resources
- Drive REST API v3
- BNF Syntax
- GAM Return Codes
- Python Regular Expressions
- Rclone
Definitions
Command Processing
- Bulk Processing
- Command Line Parsing
- Command Logging and Progress
- Command data from Google Docs/Sheets/Storage
- CSV Special Characters
- CSV Input Filtering
- CSV Output Filtering
- Meta Commands and File Redirection
- Permission matches
- Tag Replace
- Todrive
Collections
Client Access
- Addresses
- Administrators
- Alert Center
- Aliases
- Calendars
- Calendars - Access
- Calendars - Events
- Chrome Auto Update Expiration Counts
- Chrome Browser Cloud Management
- Chrome Device Needs Attention Counts
- Chrome Installed Apps
- Chrome Policies
- Chrome Printers
- Chrome Profile Management
- Chrome Version Counts
- Chrome Version History
- ChromeOS Devices
- Classroom - Courses
- Classroom - Guardians
- Classroom - Invitations
- Classroom - Membership
- Cloud Channel
- Cloud Identity Devices
- Cloud Identity Groups
- Cloud Identity Groups - Membership
- Cloud Identity Policies
- Cloud Storage
- Context Aware Access Levels
- Customer
- Domains
- Domains - Verification
- Domain People - Contacts & Profiles
- Domain Shared Contacts - Global Address List
- Email Audit Monitor
- Find File Owner
- Google Data Transfers
- Groups
- Groups - Membership
- Inbound SSO
- Licenses
- Mobile Devices
- Organizational Units
- Reports
- Reseller
- Resources
- Send Email
- Schemas
- Shared Drives
- Sites
- Users
- Unmanaged Accounts
- Users - Signout and Turn off 2-Step Verification
- Vault - Takeout
- Version and Help
Special Service Account Access
Service Account Access
- Users - Analytics Admin
- Users - Application Specific Passwords
- Users - Backup Verification Codes
- Users - Calendars
- Users - Calendars - Access
- Users - Calendars - Events
- Users - Chat
- Users - Classification Labels
- Users - Classroom - Profile
- Users - Deprovision
- Users - Contacts
- Users - Contacts - Delegates
- Users - Drive - File Selection
- Users - Drive - Activity/Settings
- Users - Drive - Cleanup
- Users - Drive - Comments
- Users - Drive - Copy/Move
- Users - Drive - Files-Display
- Users - Drive - Files-Manage
- Users - Drive - Orphans
- Users - Drive - Ownership
- Users - Drive - Permissions
- Users - Drive - Query
- Users - Drive - Revisions
- Users - Drive - Shortcuts
- Users - Drive - Transfer
- Users - Forms
- Users - Gmail - Client Side Encryption
- Users - Gmail - Delegates
- Users - Gmail - Filters
- Users - Gmail - Forwarding
- Users - Gmail - Labels
- Users - Gmail - Messages/Threads
- Users - Gmail - Profile
- Users - Gmail - S/MIME
- Users - Gmail - SendAs/Signature/Vacation
- Users - Gmail - Settings
- Users - Group Membership
- Users - Keep
- Users - Looker Studio
- Users - Meet
- Users - Classroom - Profile
- Users - People - Contacts & Profiles
- Users - Photo
- Users - Profile Sharing
- Users - Shared Drives
- Users - Spreadsheets
- Users - Tasks
- Users - Tokens
- Users - YouTube