Public/Users/Get-GSUser.ps1
function Get-GSUser { <# .SYNOPSIS Gets the specified G SUite User or a list of Users .DESCRIPTION Gets the specified G SUite User. Designed for parity with Get-ADUser as much as possible .PARAMETER User The primary email or UserID of the user who you are trying to get info for. You can exclude the '@domain.com' to insert the Domain in the config or use the special 'me' to indicate the AdminEmail in the config. Defaults to the AdminEmail in the config .PARAMETER Filter Query string for searching user fields For more information on constructing user queries, see: https://developers.google.com/admin-sdk/directory/v1/guides/search-users PowerShell filter syntax here is supported as "best effort". Please use Google's filter operators and syntax to ensure best results .PARAMETER Domain The specific domain you would like to list users for. Useful for customers with multiple domains. .PARAMETER SearchBase The organizational unit path that you would like to list users from .PARAMETER SearchScope The depth at which to return the list of users Available values are: * "Base": only return the users specified in the SearchBase * "Subtree": return the full list of users underneath the specified SearchBase * "OneLevel": return the SearchBase and the Users directly underneath it .PARAMETER ShowDeleted Returns deleted users .PARAMETER Projection What subset of fields to fetch for this user Acceptable values are: * "Basic": Do not include any custom fields for the user * "Custom": Include custom fields from schemas requested in customFieldMask * "Full": Include all fields associated with this user (default for this module) .PARAMETER CustomFieldMask A comma-separated list of schema names. All fields from these schemas are fetched. This should only be set when using '-Projection Custom' .PARAMETER ViewType Whether to fetch the administrator-only or domain-wide public view of the user. For more information, see Retrieve a user as a non-administrator Acceptable values are: * "Admin_View": Results include both administrator-only and domain-public fields for the user. (default) * "Domain_Public": Results only include fields for the user that are publicly visible to other users in the domain. .PARAMETER Fields The specific fields to fetch for this user .PARAMETER PageSize Page size of the result set .PARAMETER OrderBy Property to use for sorting results. Acceptable values are: * "Email": Primary email of the user. * "FamilyName": User's family name. * "GivenName": User's given name. .PARAMETER SortOrder Whether to return results in ascending or descending order. Acceptable values are: * "Ascending": Ascending order. * "Descending": Descending order. .EXAMPLE Get-GSUser Gets the user info for the AdminEmail on the config .EXAMPLE Get-GSUser -Filter * Gets the list of users .EXAMPLE Get-GSUser -Filter "IsAdmin -eq '$true'" Gets the list of SuperAdmin users .EXAMPLE Get-GSUser -Filter "IsEnrolledIn2Sv -eq '$false'" -SearchBase /Contractors -SearchScope Subtree Gets the list of users not currently enrolled in 2-Step Verification from the Contractors OrgUnit or any OrgUnits underneath it #> [cmdletbinding(DefaultParameterSetName = "Get")] Param ( [parameter(Mandatory = $false,Position = 0,ValueFromPipeline = $true,ValueFromPipelineByPropertyName = $true,ParameterSetName = "Get")] [Alias("PrimaryEmail","UserKey","Mail","Email")] [ValidateNotNullOrEmpty()] [String[]] $User = $Script:PSGSuite.AdminEmail, [parameter(Mandatory = $false,ParameterSetName = "List")] [Alias("Query")] [String[]] $Filter, [parameter(Mandatory = $false,ParameterSetName = "List")] [String] $Domain, [parameter(Mandatory = $false,ParameterSetName = "List")] [Alias("OrgUnitPath")] [String] $SearchBase, [parameter(Mandatory = $false,ParameterSetName = "List")] [ValidateSet("Base","OneLevel","Subtree")] [String] $SearchScope, [parameter(Mandatory = $false,ParameterSetName = "List")] [Switch] $ShowDeleted, [parameter(Mandatory = $false)] [ValidateSet("Basic","Custom","Full")] [string] $Projection = "Full", [parameter(Mandatory = $false)] [String] $CustomFieldMask, [parameter(Mandatory = $false)] [ValidateSet("Admin_View","Domain_Public")] [String] $ViewType = "Admin_View", [parameter(Mandatory = $false)] [String[]] $Fields, [parameter(Mandatory = $false,ParameterSetName = "List")] [ValidateRange(1,500)] [Alias("MaxResults")] [Int] $PageSize = "500", [parameter(Mandatory = $false,ParameterSetName = "List")] [ValidateSet("Email","GivenName","FamilyName")] [String] $OrderBy, [parameter(Mandatory = $false,ParameterSetName = "List")] [ValidateSet("Ascending","Descending")] [String] $SortOrder ) Begin { if ($PSCmdlet.ParameterSetName -eq 'Get' -and $MyInvocation.InvocationName -ne 'Get-GSUserList') { $serviceParams = @{ Scope = 'https://www.googleapis.com/auth/admin.directory.user.readonly' ServiceType = 'Google.Apis.Admin.Directory.directory_v1.DirectoryService' } $service = New-GoogleService @serviceParams } } Process { try { switch ($PSCmdlet.ParameterSetName) { Get { if ($MyInvocation.InvocationName -ne 'Get-GSUserList') { foreach ($U in $User) { try { [decimal]$U | Out-Null Write-Verbose "Getting User ID '$U'" } catch { if ($U -ceq 'me') { $U = $Script:PSGSuite.AdminEmail } elseif ($U -notlike "*@*.*") { $U = "$($U)@$($Script:PSGSuite.Domain)" } Write-Verbose "Getting User '$U'" } $request = $service.Users.Get($U) $request.Projection = $Projection $request.ViewType = ($ViewType -replace '_','') if ($CustomFieldMask) { $request.CustomFieldMask = $CustomFieldMask } if ($Fields) { $request.Fields = "$($Fields -join ",")" } $request.Execute() | Add-Member -MemberType NoteProperty -Name 'User' -Value $U -PassThru | Add-Member -MemberType ScriptMethod -Name ToString -Value {$this.PrimaryEmail} -PassThru -Force } } else { Get-GSUserListPrivate @PSBoundParameters } } List { Get-GSUserListPrivate @PSBoundParameters } } } catch { if ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } else { Write-Error $_ } } } } |