From 85d6ab81a37cd6216f2289c6b11e0c80e109f04c Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:14:49 -0500 Subject: [PATCH 01/34] refactor(docs): move `Examples` directory to `pages\examples` --- docs/Examples/Managing Users.md | 402 -------------------------------- 1 file changed, 402 deletions(-) delete mode 100644 docs/Examples/Managing Users.md diff --git a/docs/Examples/Managing Users.md b/docs/Examples/Managing Users.md deleted file mode 100644 index dd041734..00000000 --- a/docs/Examples/Managing Users.md +++ /dev/null @@ -1,402 +0,0 @@ -# Managing Users - -This section goes into detail on how to manage users, licenses and custom schemas using this module. - -## Getting User Info - -### Get-GSUser - -_This function pulls info for a specific user, including orgUnitPath, aliases, custom schema values, etc._ - -* Scope(s) required: - * - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab="Get All Users" -Get-GSUser -Filter * -``` - -```PowerShell tab= -Get-GSUser -User john.smith@domain.com -Projection Full -ViewType Admin_View -``` - -```PowerShell tab= -Get-GSUser john.smith@domain.com -``` - -#### Syntax - -```PowerShell tab= -Get-GSUser [-User] [-Projection {Basic | Custom | Full}] [-CustomFieldMask ] [-ViewType {Admin_View | Domain_Public}] [-Fields ] [-AccessToken ] [-P12KeyPath ] [-AppEmail ] [-AdminEmail ] [] -``` - -## Getting User Photos - -To get a user's photo, use the `Get-GSUserPhoto` function: - -### Get-GSUserPhoto - -* Scope(s) required: - * - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Get-GSUserPhoto john.smith@domain.com -``` - -#### Syntax - -```PowerShell tab= -Get-GSUserPhoto [-User] [-AccessToken ] [-P12KeyPath ] [-AppEmail ] [-AdminEmail ] [] -``` - -## Listing Users - -To list all users in the domain or in a specific organizational unit, use the `Get-GSUserList` function: - -### Get-GSUserList - -* Scope(s) required: - * - * -* Mandatory parameters: - * _None_ - -#### Examples - -```PowerShell tab= -Get-GSUserList -``` - -```PowerShell tab= -Get-GSUserList -Query "orgUnitPath='/Users/New Hires'" -``` - -```PowerShell tab= -Get-GSUserList -MaxResults 300 -Query "orgUnitPath='/Users'","email=john.smith@domain.com" -``` - -#### Syntax - -```PowerShell tab= -Get-GSUserList [[-Query] ] [[-PageSize] ] [[-OrderBy] ] [[-SortOrder] ] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [[-CustomerID] ] [[-Domain] ] [[-Preference] ] [] -``` - -## Creating Users - -To create new users, use the `New-GSUser` function: - -### New-GSUser - -* Scope(s) required: - * -* Mandatory parameters: - * PrimaryEmail (user's primary email, must be unique to the domain) - * GivenName (user's first name) - * FamilyName (user's last name) - * Password (user's initial password) - -#### Examples - -```PowerShell tab= -New-GSUser -PrimaryEmail john.smith@domain.com -GivenName John -FamilyName Smith -Password Password123 -``` - -```PowerShell tab= -New-GSUser -PrimaryEmail john.smith@domain.com -GivenName John -FamilyName Smith -Password Password123 -ChangePasswordAtNextLogin True -OrgUnitPath "/Users/New Hires" -IncludeInGlobalAddressList True -``` - -#### Syntax - -```PowerShell tab= -New-GSUser [-PrimaryEmail] [-GivenName] [-FamilyName] [-Password] [[-ChangePasswordAtNextLogin] ] [[-OrgUnitPath] ] [[-Suspended] ] [[-IncludeInGlobalAddressList] ] [[-IPWhitelisted] ] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [] -``` - -## Updating Users - -To update existing users, use the `Update-GSUser` function: - -### Update-GSUser - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Update-GSUser -User john.smith@domain.com -PrimaryEmail johnathan.smith@domain.com -GivenName Johnathan -Suspended False -``` - -#### Syntax - -```PowerShell tab= -Update-GSUser [-User] [[-PrimaryEmail] ] [[-GivenName] ] [[-FamilyName] ] [[-Password] ] [[-ChangePasswordAtNextLogin] ] [[-OrgUnitPath] ] [[-Suspended] ] [[-IncludeInGlobalAddressList] ] [[-IPWhitelisted] ] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [] -``` - -## Removing Users - -To remove users, use the `Remove-GSUser` function: - -### Remove-GSUser - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Remove-GSUser -User john.smith@domain.com -WhatIf -``` - -```PowerShell tab= -Remove-GSUser -User john.smith@domain.com -Confirm:$false -``` - -#### Syntax - -```PowerShell tab= -Remove-GSUser [-User] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [-WhatIf] [-Confirm] [] -``` - -## Restoring Users - -To undelete users, use the `Restore-GSUser` function: - -### Restore-GSUser - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - * OrgUnitPath (the Org Unit path to restore the user to) - -#### Examples - -```PowerShell tab= -Restore-GSUser -User john.smith@domain.com -OrgUnitPath "/Users" -WhatIf -``` - -```PowerShell tab= -Restore-GSUser -User john.smith@domain.com -OrgUnitPath "/Users" -Confirm:$false -``` - -#### Syntax - -```PowerShell tab= -Restore-GSUser [-User] [-OrgUnitPath] [-AccessToken ] [-P12KeyPath ] [-AppEmail ] [-AdminEmail ] [-WhatIf] [-Confirm] [] -``` - -*** - -## Getting License Info - -To get license info, use the `Get-GSUserLicense` function: - -### Get-GSUserLicense - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Get-GSUserLicense -User john.smith@domain.com -``` - -```PowerShell tab= -Get-GSUserLicense -User john.smith@domain.com -License Google-Vault-Former-Employee -``` - -#### Syntax - -```PowerShell tab= -Get-GSUserLicense [-License ] [-ProductID ] [-PageSize ] [-Limit ] [] - -Get-GSUserLicense [[-User] ] [-License ] [] -``` - -#### Listing All Licenses - -To list all licenses in the domain, use the `Get-GSUserLicense` function with no additional parameters - -## Removing Licenses - -To remove licenses, use the `Remove-GSUserLicense` function: - -### Remove-GSUserLicense - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Remove-GSUserLicense -``` - -#### Syntax - -```PowerShell tab= -Remove-GSUserLicense [-User] [-License] [-WhatIf] [-Confirm] [] -``` - - -## Setting Licenses - -To set licenses, use the `Set-GSUserLicense` function: - -### Set-GSUserLicense - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Set-GSUserLicense -User joe.smith@domain.com -License Google-Vault-Former-Employee -``` - -#### Syntax - -```PowerShell tab= - -Set-GSUserLicense [-User] [-License] [] - -``` - -## Updating Licenses - -To update licenses, use the `Update-GSUserLicense` function: - -### Update-GSUserLicense - -* Scope(s) required: - * -* Mandatory parameters: - * User (must be the primary email address of an existing user in the domain) - -#### Examples - -```PowerShell tab= -Update-GSUserLicense -User joe.smith@domain.com -License Google-Vault-Former-Employee -``` - -#### Syntax - -```PowerShell tab= -Update-GSUserLicense [[-User] ] [-License ] [] -``` - -*** - -## Getting Custom Schema Info - -To get info about a specific custom schema, use the `Get-GSUserSchema` function: - -### Get-GSUserSchema - -* Scope(s) required: - * - -#### Examples - -```PowerShell tab= -Get-GSUserSchema -SchemaId $schemaId -``` - -#### Syntax - -```PowerShell tab= -Get-GSUserSchema [[-SchemaId] ] [] -``` - -## Listing Custom Schemas - -To list all custom schemas, use the `Get-GSUserSchema` function and do not specify a SchemaId: - -#### Examples - -```PowerShell tab= -Get-GSUserSchema -``` - -## Creating Custom Schemas - -To create custom schemas, use the `New-GSUserSchema` function: - -### New-GSUserSchema - -* Scope(s) required: - * - -#### Examples - -```PowerShell tab= -New-GSUserSchema -``` - -#### Syntax - -```PowerShell tab= -New-GSUserSchema [-SchemaName] [-Fields] [] -``` - -## Removing Custom Schemas - -To remove custom schemas, use the `Remove-GSUserSchema` function: - -### Remove-GSUserSchema - -* Scope(s) required: - * - -#### Examples - -```PowerShell tab= -Remove-GSUserSchema -``` - -#### Syntax - -```PowerShell tab= -Remove-GSUserSchema [[-SchemaId] ] [-WhatIf] [-Confirm] [] -``` - -## Updating Custom Schemas - -To update custom schemas, use the `Update-GSUserSchema` function: - -### Update-GSUserSchema - -* Scope(s) required: - * - -#### Examples - -```PowerShell tab= -Update-GSUserSchema -``` - -#### Syntax - -```PowerShell tab= -Update-GSUserSchema [-SchemaId] [-SchemaName ] [-Fields ] [] -``` From 964e7f5bf95b380762f5da9bfe76eca515d5ea97 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:15:25 -0500 Subject: [PATCH 02/34] refactor(docs): move `Function Help` directory to `pages\function_help` --- .../function_help}/Authentication/Clear-PSGSuiteServiceCache.md | 0 .../function_help}/Authentication/Get-GSToken.md | 0 .../function_help}/Authentication/Get-PSGSuiteServiceCache.md | 0 .../function_help}/Authentication/New-GoogleService.md | 0 .../function_help}/Calendar/Add-GSCalendarSubscription.md | 0 .../function_help}/Calendar/Get-GSCalendar.md | 0 .../function_help}/Calendar/Get-GSCalendarAcl.md | 0 .../function_help}/Calendar/Get-GSCalendarEvent.md | 0 .../function_help}/Calendar/Get-GSCalendarSubscription.md | 0 .../function_help}/Calendar/New-GSCalendarAcl.md | 0 .../function_help}/Calendar/New-GSCalendarEvent.md | 0 .../function_help}/Calendar/Remove-GSCalendarAcl.md | 0 .../function_help}/Calendar/Remove-GSCalendarEvent.md | 0 .../function_help}/Calendar/Remove-GSCalendarSubscription.md | 0 .../function_help}/Calendar/Update-GSCalendarEvent.md | 0 .../function_help}/Calendar/Update-GSCalendarSubscription.md | 0 .../function_help}/Chat/Get-GSChatMember.md | 0 .../function_help}/Chat/Get-GSChatMessage.md | 0 .../function_help}/Chat/Get-GSChatSpace.md | 0 .../function_help}/Chat/Remove-GSChatMessage.md | 0 .../function_help}/Chat/Send-GSChatMessage.md | 0 .../function_help}/Chat/Update-GSChatMessage.md | 0 .../function_help}/Classroom/Add-GSCourseParticipant.md | 0 .../function_help}/Classroom/Confirm-GSCourseInvitation.md | 0 .../function_help}/Classroom/Get-GSClassroomUserProfile.md | 0 .../function_help}/Classroom/Get-GSCourse.md | 0 .../function_help}/Classroom/Get-GSCourseAlias.md | 0 .../function_help}/Classroom/Get-GSCourseInvitation.md | 0 .../function_help}/Classroom/Get-GSCourseParticipant.md | 0 .../function_help}/Classroom/Get-GSStudentGuardian.md | 0 .../function_help}/Classroom/Get-GSStudentGuardianInvitation.md | 0 .../function_help}/Classroom/New-GSCourse.md | 0 .../function_help}/Classroom/New-GSCourseAlias.md | 0 .../function_help}/Classroom/New-GSCourseInvitation.md | 0 .../function_help}/Classroom/New-GSStudentGuardianInvitation.md | 0 .../function_help}/Classroom/Remove-GSCourse.md | 0 .../function_help}/Classroom/Remove-GSCourseAlias.md | 0 .../function_help}/Classroom/Remove-GSCourseInvitation.md | 0 .../function_help}/Classroom/Remove-GSCourseParticipant.md | 0 .../function_help}/Classroom/Remove-GSStudentGuardian.md | 0 .../Classroom/Revoke-GSStudentGuardianInvitation.md | 0 .../function_help}/Classroom/Update-GSCourse.md | 0 .../function_help}/Configuration/Export-PSGSuiteConfig.md | 0 .../function_help}/Configuration/Get-GSChatConfig.md | 0 .../function_help}/Configuration/Get-PSGSuiteConfig.md | 0 .../function_help}/Configuration/Import-PSGSuiteConfig.md | 0 .../function_help}/Configuration/Set-PSGSuiteConfig.md | 0 .../function_help}/Configuration/Show-PSGSuiteConfig.md | 0 .../function_help}/Configuration/Switch-PSGSuiteConfig.md | 0 .../function_help}/Contacts/Get-GSContactList.md | 0 .../function_help}/Contacts/Remove-GSContact.md | 0 .../function_help}/Customers/Get-GSCustomer.md | 0 .../function_help}/Customers/Update-GSCustomer.md | 0 .../function_help}/Data Transfer/Get-GSDataTransferApplication.md | 0 .../function_help}/Data Transfer/Start-GSDataTransfer.md | 0 .../function_help}/Delegation/Add-GSGmailDelegate.md | 0 .../function_help}/Delegation/Get-GSGmailDelegate.md | 0 .../function_help}/Delegation/Remove-GSGmailDelegate.md | 0 .../function_help}/Domains/Get-GSDomain.md | 0 .../function_help}/Domains/Get-GSDomainAlias.md | 0 .../function_help}/Domains/New-GSDomain.md | 0 .../function_help}/Domains/New-GSDomainAlias.md | 0 .../function_help}/Domains/Remove-GSDomain.md | 0 .../function_help}/Domains/Remove-GSDomainAlias.md | 0 .../function_help}/Drive/Add-GSDocContent.md | 0 .../function_help}/Drive/Add-GSDrivePermission.md | 0 .../function_help}/Drive/Copy-GSDriveFile.md | 0 .../function_help}/Drive/Export-GSDriveFile.md | 0 .../function_help}/Drive/Get-GSDocContent.md | 0 docs/{Function Help => pages/function_help}/Drive/Get-GSDrive.md | 0 .../function_help}/Drive/Get-GSDriveFile.md | 0 .../function_help}/Drive/Get-GSDriveFileList.md | 0 .../function_help}/Drive/Get-GSDriveFileUploadStatus.md | 0 .../function_help}/Drive/Get-GSDriveFolderSize.md | 0 .../function_help}/Drive/Get-GSDrivePermission.md | 0 .../function_help}/Drive/Get-GSDriveProfile.md | 0 .../function_help}/Drive/Get-GSDriveRevision.md | 0 docs/{Function Help => pages/function_help}/Drive/Hide-GSDrive.md | 0 docs/{Function Help => pages/function_help}/Drive/New-GSDrive.md | 0 .../function_help}/Drive/New-GSDriveFile.md | 0 .../function_help}/Drive/Remove-GSDrive.md | 0 .../function_help}/Drive/Remove-GSDriveFile.md | 0 .../function_help}/Drive/Remove-GSDrivePermission.md | 0 .../function_help}/Drive/Remove-GSDriveRevision.md | 0 .../function_help}/Drive/Set-GSDocContent.md | 0 docs/{Function Help => pages/function_help}/Drive/Show-GSDrive.md | 0 .../function_help}/Drive/Start-GSDriveFileUpload.md | 0 .../function_help}/Drive/Stop-GSDriveFileUpload.md | 0 .../function_help}/Drive/Update-GSDrive.md | 0 .../function_help}/Drive/Update-GSDriveFile.md | 0 .../function_help}/Drive/Update-GSDriveRevision.md | 0 .../function_help}/Drive/Watch-GSDriveUpload.md | 0 .../function_help}/Gmail/Add-GSGmailFilter.md | 0 .../function_help}/Gmail/Add-GSGmailForwardingAddress.md | 0 .../function_help}/Gmail/Get-GSGmailAutoForwardingSettings.md | 0 .../function_help}/Gmail/Get-GSGmailFilter.md | 0 .../function_help}/Gmail/Get-GSGmailForwardingAddress.md | 0 .../function_help}/Gmail/Get-GSGmailImapSettings.md | 0 .../function_help}/Gmail/Get-GSGmailLabel.md | 0 .../function_help}/Gmail/Get-GSGmailLanguageSettings.md | 0 .../function_help}/Gmail/Get-GSGmailMessage.md | 0 .../function_help}/Gmail/Get-GSGmailMessageList.md | 0 .../function_help}/Gmail/Get-GSGmailPopSettings.md | 0 .../function_help}/Gmail/Get-GSGmailProfile.md | 0 .../function_help}/Gmail/Get-GSGmailSMIMEInfo.md | 0 .../function_help}/Gmail/Get-GSGmailSendAsAlias.md | 0 .../function_help}/Gmail/Get-GSGmailVacationSettings.md | 0 .../function_help}/Gmail/New-GSGmailLabel.md | 0 .../function_help}/Gmail/New-GSGmailSMIMEInfo.md | 0 .../function_help}/Gmail/New-GSGmailSendAsAlias.md | 0 .../function_help}/Gmail/Remove-GSGmailFilter.md | 0 .../function_help}/Gmail/Remove-GSGmailLabel.md | 0 .../function_help}/Gmail/Remove-GSGmailMessage.md | 0 .../function_help}/Gmail/Remove-GSGmailSMIMEInfo.md | 0 .../function_help}/Gmail/Remove-GSGmailSendAsAlias.md | 0 .../function_help}/Gmail/Restore-GSGmailMessage.md | 0 .../function_help}/Gmail/Send-GSGmailSendAsConfirmation.md | 0 .../function_help}/Gmail/Send-GmailMessage.md | 0 .../function_help}/Gmail/Update-GSGmailAutoForwardingSettings.md | 0 .../function_help}/Gmail/Update-GSGmailImapSettings.md | 0 .../function_help}/Gmail/Update-GSGmailLabel.md | 0 .../function_help}/Gmail/Update-GSGmailLanguageSettings.md | 0 .../function_help}/Gmail/Update-GSGmailMessageLabels.md | 0 .../function_help}/Gmail/Update-GSGmailPopSettings.md | 0 .../function_help}/Gmail/Update-GSGmailSendAsAlias.md | 0 .../function_help}/Gmail/Update-GSGmailSignature.md | 0 .../function_help}/Gmail/Update-GSGmailVacationSettings.md | 0 .../function_help}/Groups/Add-GSGroupMember.md | 0 .../function_help}/Groups/Add-GSPrincipalGroupMembership.md | 0 docs/{Function Help => pages/function_help}/Groups/Get-GSGroup.md | 0 .../function_help}/Groups/Get-GSGroupAlias.md | 0 .../function_help}/Groups/Get-GSGroupMember.md | 0 .../function_help}/Groups/Get-GSGroupSettings.md | 0 docs/{Function Help => pages/function_help}/Groups/New-GSGroup.md | 0 .../function_help}/Groups/New-GSGroupAlias.md | 0 .../function_help}/Groups/Remove-GSGroup.md | 0 .../function_help}/Groups/Remove-GSGroupAlias.md | 0 .../function_help}/Groups/Remove-GSGroupMember.md | 0 .../function_help}/Groups/Remove-GSPrincipalGroupMembership.md | 0 .../function_help}/Groups/Set-GSGroupSettings.md | 0 .../function_help}/Groups/Test-GSGroupMembership.md | 0 .../function_help}/Groups/Update-GSGroupMember.md | 0 .../function_help}/Groups/Update-GSGroupSettings.md | 0 .../function_help}/Helpers/Add-GSCalendarEventReminder.md | 0 .../function_help}/Helpers/Add-GSCalendarNotification.md | 0 .../function_help}/Helpers/Add-GSChatButton.md | 0 .../function_help}/Helpers/Add-GSChatCard.md | 0 .../function_help}/Helpers/Add-GSChatCardAction.md | 0 .../function_help}/Helpers/Add-GSChatCardSection.md | 0 .../function_help}/Helpers/Add-GSChatImage.md | 0 .../function_help}/Helpers/Add-GSChatKeyValue.md | 0 .../function_help}/Helpers/Add-GSChatOnClick.md | 0 .../function_help}/Helpers/Add-GSChatTextParagraph.md | 0 .../function_help}/Helpers/Add-GSCustomerPostalAddress.md | 0 .../function_help}/Helpers/Add-GSEventAttendee.md | 0 .../function_help}/Helpers/Add-GSGmailSmtpMsa.md | 0 .../function_help}/Helpers/Add-GSUserAddress.md | 0 .../function_help}/Helpers/Add-GSUserEmail.md | 0 .../function_help}/Helpers/Add-GSUserExternalId.md | 0 .../function_help}/Helpers/Add-GSUserIm.md | 0 .../function_help}/Helpers/Add-GSUserLocation.md | 0 .../function_help}/Helpers/Add-GSUserOrganization.md | 0 .../function_help}/Helpers/Add-GSUserPhone.md | 0 .../function_help}/Helpers/Add-GSUserRelation.md | 0 .../function_help}/Helpers/Add-GSUserSchemaField.md | 0 .../function_help}/Helpers/Block-CoreCLREncryptionWarning.md | 0 .../function_help}/Helpers/Compare-ModuleVersion.md | 0 .../function_help}/Helpers/Unblock-CoreCLREncryptionWarning.md | 0 .../function_help}/Licensing/Get-GSUserLicense.md | 0 .../function_help}/Licensing/Remove-GSUserLicense.md | 0 .../function_help}/Licensing/Set-GSUserLicense.md | 0 .../function_help}/Licensing/Update-GSUserLicense.md | 0 .../function_help}/Org Units/Get-GSOrganizationalUnit.md | 0 .../function_help}/Org Units/New-GSOrganizationalUnit.md | 0 .../function_help}/Org Units/Remove-GSOrganizationalUnit.md | 0 .../function_help}/Org Units/Update-GSOrganizationalUnit.md | 0 .../function_help}/Reports/Get-GSActivityReport.md | 0 .../function_help}/Reports/Get-GSUsageReport.md | 0 .../function_help}/Resources/Get-GSResource.md | 0 .../function_help}/Resources/New-GSResource.md | 0 .../function_help}/Resources/Remove-GSResource.md | 0 .../function_help}/Resources/Update-GSResource.md | 0 .../function_help}/Role Assignments/Get-GSAdminRoleAssignment.md | 0 .../function_help}/Role Assignments/New-GSAdminRoleAssignment.md | 0 .../Role Assignments/Remove-GSAdminRoleAssignment.md | 0 .../function_help}/RoleAssignments/Get-GSAdminRoleAssignment.md | 0 .../function_help}/RoleAssignments/New-GSAdminRoleAssignment.md | 0 .../RoleAssignments/Remove-GSAdminRoleAssignment.md | 0 .../function_help}/Roles/Get-GSAdminRole.md | 0 .../function_help}/Roles/New-GSAdminRole.md | 0 .../function_help}/Roles/Remove-GSAdminRole.md | 0 .../function_help}/Roles/Update-GSAdminRole.md | 0 .../function_help}/Schemas/Get-GSUserSchema.md | 0 .../function_help}/Schemas/New-GSUserSchema.md | 0 .../function_help}/Schemas/Remove-GSUserSchema.md | 0 .../function_help}/Schemas/Set-GSUserSchema.md | 0 .../function_help}/Schemas/Update-GSUserSchema.md | 0 .../function_help}/Security/Get-GSChromeOSDevice.md | 0 .../function_help}/Security/Get-GSMobileDevice.md | 0 .../function_help}/Security/Get-GSUserASP.md | 0 .../function_help}/Security/Get-GSUserToken.md | 0 .../function_help}/Security/Get-GSUserVerificationCodes.md | 0 .../function_help}/Security/New-GSUserVerificationCodes.md | 0 .../function_help}/Security/Remove-GSMobileDevice.md | 0 .../function_help}/Security/Remove-GSUserASP.md | 0 .../function_help}/Security/Remove-GSUserToken.md | 0 .../function_help}/Security/Revoke-GSUserVerificationCodes.md | 0 .../function_help}/Security/Update-GSChromeOSDevice.md | 0 .../function_help}/Security/Update-GSMobileDevice.md | 0 .../function_help}/Sheets/Clear-GSSheet.md | 0 .../{Function Help => pages/function_help}/Sheets/Copy-GSSheet.md | 0 .../function_help}/Sheets/Export-GSSheet.md | 0 .../function_help}/Sheets/Get-GSSheetInfo.md | 0 .../function_help}/Sheets/Import-GSSheet.md | 0 docs/{Function Help => pages/function_help}/Sheets/New-GSSheet.md | 0 .../function_help}/Tasks/Clear-GSTasklist.md | 0 docs/{Function Help => pages/function_help}/Tasks/Get-GSTask.md | 0 .../function_help}/Tasks/Get-GSTasklist.md | 0 docs/{Function Help => pages/function_help}/Tasks/Move-GSTask.md | 0 docs/{Function Help => pages/function_help}/Tasks/New-GSTask.md | 0 .../function_help}/Tasks/New-GSTasklist.md | 0 .../{Function Help => pages/function_help}/Tasks/Remove-GSTask.md | 0 .../function_help}/Tasks/Remove-GSTasklist.md | 0 .../{Function Help => pages/function_help}/Tasks/Update-GSTask.md | 0 .../function_help}/Tasks/Update-GSTasklist.md | 0 .../function_help}/URL Shortener/Get-GSShortUrl.md | 0 .../function_help}/URL Shortener/New-GSShortUrl.md | 0 docs/{Function Help => pages/function_help}/Users/Get-GSUser.md | 0 .../function_help}/Users/Get-GSUserAlias.md | 0 .../function_help}/Users/Get-GSUserPhoto.md | 0 docs/{Function Help => pages/function_help}/Users/New-GSUser.md | 0 .../function_help}/Users/New-GSUserAlias.md | 0 .../{Function Help => pages/function_help}/Users/Remove-GSUser.md | 0 .../function_help}/Users/Remove-GSUserAlias.md | 0 .../function_help}/Users/Remove-GSUserPhoto.md | 0 .../function_help}/Users/Restore-GSUser.md | 0 .../function_help}/Users/Sync-GSUserCache.md | 0 .../{Function Help => pages/function_help}/Users/Update-GSUser.md | 0 .../function_help}/Users/Update-GSUserPhoto.md | 0 239 files changed, 0 insertions(+), 0 deletions(-) rename docs/{Function Help => pages/function_help}/Authentication/Clear-PSGSuiteServiceCache.md (100%) rename docs/{Function Help => pages/function_help}/Authentication/Get-GSToken.md (100%) rename docs/{Function Help => pages/function_help}/Authentication/Get-PSGSuiteServiceCache.md (100%) rename docs/{Function Help => pages/function_help}/Authentication/New-GoogleService.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Add-GSCalendarSubscription.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Get-GSCalendar.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Get-GSCalendarAcl.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Get-GSCalendarEvent.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Get-GSCalendarSubscription.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/New-GSCalendarAcl.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/New-GSCalendarEvent.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Remove-GSCalendarAcl.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Remove-GSCalendarEvent.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Remove-GSCalendarSubscription.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Update-GSCalendarEvent.md (100%) rename docs/{Function Help => pages/function_help}/Calendar/Update-GSCalendarSubscription.md (100%) rename docs/{Function Help => pages/function_help}/Chat/Get-GSChatMember.md (100%) rename docs/{Function Help => pages/function_help}/Chat/Get-GSChatMessage.md (100%) rename docs/{Function Help => pages/function_help}/Chat/Get-GSChatSpace.md (100%) rename docs/{Function Help => pages/function_help}/Chat/Remove-GSChatMessage.md (100%) rename docs/{Function Help => pages/function_help}/Chat/Send-GSChatMessage.md (100%) rename docs/{Function Help => pages/function_help}/Chat/Update-GSChatMessage.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Add-GSCourseParticipant.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Confirm-GSCourseInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSClassroomUserProfile.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSCourse.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSCourseAlias.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSCourseInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSCourseParticipant.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSStudentGuardian.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Get-GSStudentGuardianInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/New-GSCourse.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/New-GSCourseAlias.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/New-GSCourseInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/New-GSStudentGuardianInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Remove-GSCourse.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Remove-GSCourseAlias.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Remove-GSCourseInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Remove-GSCourseParticipant.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Remove-GSStudentGuardian.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Revoke-GSStudentGuardianInvitation.md (100%) rename docs/{Function Help => pages/function_help}/Classroom/Update-GSCourse.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Export-PSGSuiteConfig.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Get-GSChatConfig.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Get-PSGSuiteConfig.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Import-PSGSuiteConfig.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Set-PSGSuiteConfig.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Show-PSGSuiteConfig.md (100%) rename docs/{Function Help => pages/function_help}/Configuration/Switch-PSGSuiteConfig.md (100%) rename docs/{Function Help => pages/function_help}/Contacts/Get-GSContactList.md (100%) rename docs/{Function Help => pages/function_help}/Contacts/Remove-GSContact.md (100%) rename docs/{Function Help => pages/function_help}/Customers/Get-GSCustomer.md (100%) rename docs/{Function Help => pages/function_help}/Customers/Update-GSCustomer.md (100%) rename docs/{Function Help => pages/function_help}/Data Transfer/Get-GSDataTransferApplication.md (100%) rename docs/{Function Help => pages/function_help}/Data Transfer/Start-GSDataTransfer.md (100%) rename docs/{Function Help => pages/function_help}/Delegation/Add-GSGmailDelegate.md (100%) rename docs/{Function Help => pages/function_help}/Delegation/Get-GSGmailDelegate.md (100%) rename docs/{Function Help => pages/function_help}/Delegation/Remove-GSGmailDelegate.md (100%) rename docs/{Function Help => pages/function_help}/Domains/Get-GSDomain.md (100%) rename docs/{Function Help => pages/function_help}/Domains/Get-GSDomainAlias.md (100%) rename docs/{Function Help => pages/function_help}/Domains/New-GSDomain.md (100%) rename docs/{Function Help => pages/function_help}/Domains/New-GSDomainAlias.md (100%) rename docs/{Function Help => pages/function_help}/Domains/Remove-GSDomain.md (100%) rename docs/{Function Help => pages/function_help}/Domains/Remove-GSDomainAlias.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Add-GSDocContent.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Add-GSDrivePermission.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Copy-GSDriveFile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Export-GSDriveFile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDocContent.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDrive.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDriveFile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDriveFileList.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDriveFileUploadStatus.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDriveFolderSize.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDrivePermission.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDriveProfile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Get-GSDriveRevision.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Hide-GSDrive.md (100%) rename docs/{Function Help => pages/function_help}/Drive/New-GSDrive.md (100%) rename docs/{Function Help => pages/function_help}/Drive/New-GSDriveFile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Remove-GSDrive.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Remove-GSDriveFile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Remove-GSDrivePermission.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Remove-GSDriveRevision.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Set-GSDocContent.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Show-GSDrive.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Start-GSDriveFileUpload.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Stop-GSDriveFileUpload.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Update-GSDrive.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Update-GSDriveFile.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Update-GSDriveRevision.md (100%) rename docs/{Function Help => pages/function_help}/Drive/Watch-GSDriveUpload.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Add-GSGmailFilter.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Add-GSGmailForwardingAddress.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailAutoForwardingSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailFilter.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailForwardingAddress.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailImapSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailLabel.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailLanguageSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailMessage.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailMessageList.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailPopSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailProfile.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailSMIMEInfo.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailSendAsAlias.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Get-GSGmailVacationSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/New-GSGmailLabel.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/New-GSGmailSMIMEInfo.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/New-GSGmailSendAsAlias.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Remove-GSGmailFilter.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Remove-GSGmailLabel.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Remove-GSGmailMessage.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Remove-GSGmailSMIMEInfo.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Remove-GSGmailSendAsAlias.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Restore-GSGmailMessage.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Send-GSGmailSendAsConfirmation.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Send-GmailMessage.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailAutoForwardingSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailImapSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailLabel.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailLanguageSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailMessageLabels.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailPopSettings.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailSendAsAlias.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailSignature.md (100%) rename docs/{Function Help => pages/function_help}/Gmail/Update-GSGmailVacationSettings.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Add-GSGroupMember.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Add-GSPrincipalGroupMembership.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Get-GSGroup.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Get-GSGroupAlias.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Get-GSGroupMember.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Get-GSGroupSettings.md (100%) rename docs/{Function Help => pages/function_help}/Groups/New-GSGroup.md (100%) rename docs/{Function Help => pages/function_help}/Groups/New-GSGroupAlias.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Remove-GSGroup.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Remove-GSGroupAlias.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Remove-GSGroupMember.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Remove-GSPrincipalGroupMembership.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Set-GSGroupSettings.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Test-GSGroupMembership.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Update-GSGroupMember.md (100%) rename docs/{Function Help => pages/function_help}/Groups/Update-GSGroupSettings.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSCalendarEventReminder.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSCalendarNotification.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatButton.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatCard.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatCardAction.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatCardSection.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatImage.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatKeyValue.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatOnClick.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSChatTextParagraph.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSCustomerPostalAddress.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSEventAttendee.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSGmailSmtpMsa.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserAddress.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserEmail.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserExternalId.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserIm.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserLocation.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserOrganization.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserPhone.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserRelation.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Add-GSUserSchemaField.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Block-CoreCLREncryptionWarning.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Compare-ModuleVersion.md (100%) rename docs/{Function Help => pages/function_help}/Helpers/Unblock-CoreCLREncryptionWarning.md (100%) rename docs/{Function Help => pages/function_help}/Licensing/Get-GSUserLicense.md (100%) rename docs/{Function Help => pages/function_help}/Licensing/Remove-GSUserLicense.md (100%) rename docs/{Function Help => pages/function_help}/Licensing/Set-GSUserLicense.md (100%) rename docs/{Function Help => pages/function_help}/Licensing/Update-GSUserLicense.md (100%) rename docs/{Function Help => pages/function_help}/Org Units/Get-GSOrganizationalUnit.md (100%) rename docs/{Function Help => pages/function_help}/Org Units/New-GSOrganizationalUnit.md (100%) rename docs/{Function Help => pages/function_help}/Org Units/Remove-GSOrganizationalUnit.md (100%) rename docs/{Function Help => pages/function_help}/Org Units/Update-GSOrganizationalUnit.md (100%) rename docs/{Function Help => pages/function_help}/Reports/Get-GSActivityReport.md (100%) rename docs/{Function Help => pages/function_help}/Reports/Get-GSUsageReport.md (100%) rename docs/{Function Help => pages/function_help}/Resources/Get-GSResource.md (100%) rename docs/{Function Help => pages/function_help}/Resources/New-GSResource.md (100%) rename docs/{Function Help => pages/function_help}/Resources/Remove-GSResource.md (100%) rename docs/{Function Help => pages/function_help}/Resources/Update-GSResource.md (100%) rename docs/{Function Help => pages/function_help}/Role Assignments/Get-GSAdminRoleAssignment.md (100%) rename docs/{Function Help => pages/function_help}/Role Assignments/New-GSAdminRoleAssignment.md (100%) rename docs/{Function Help => pages/function_help}/Role Assignments/Remove-GSAdminRoleAssignment.md (100%) rename docs/{Function Help => pages/function_help}/RoleAssignments/Get-GSAdminRoleAssignment.md (100%) rename docs/{Function Help => pages/function_help}/RoleAssignments/New-GSAdminRoleAssignment.md (100%) rename docs/{Function Help => pages/function_help}/RoleAssignments/Remove-GSAdminRoleAssignment.md (100%) rename docs/{Function Help => pages/function_help}/Roles/Get-GSAdminRole.md (100%) rename docs/{Function Help => pages/function_help}/Roles/New-GSAdminRole.md (100%) rename docs/{Function Help => pages/function_help}/Roles/Remove-GSAdminRole.md (100%) rename docs/{Function Help => pages/function_help}/Roles/Update-GSAdminRole.md (100%) rename docs/{Function Help => pages/function_help}/Schemas/Get-GSUserSchema.md (100%) rename docs/{Function Help => pages/function_help}/Schemas/New-GSUserSchema.md (100%) rename docs/{Function Help => pages/function_help}/Schemas/Remove-GSUserSchema.md (100%) rename docs/{Function Help => pages/function_help}/Schemas/Set-GSUserSchema.md (100%) rename docs/{Function Help => pages/function_help}/Schemas/Update-GSUserSchema.md (100%) rename docs/{Function Help => pages/function_help}/Security/Get-GSChromeOSDevice.md (100%) rename docs/{Function Help => pages/function_help}/Security/Get-GSMobileDevice.md (100%) rename docs/{Function Help => pages/function_help}/Security/Get-GSUserASP.md (100%) rename docs/{Function Help => pages/function_help}/Security/Get-GSUserToken.md (100%) rename docs/{Function Help => pages/function_help}/Security/Get-GSUserVerificationCodes.md (100%) rename docs/{Function Help => pages/function_help}/Security/New-GSUserVerificationCodes.md (100%) rename docs/{Function Help => pages/function_help}/Security/Remove-GSMobileDevice.md (100%) rename docs/{Function Help => pages/function_help}/Security/Remove-GSUserASP.md (100%) rename docs/{Function Help => pages/function_help}/Security/Remove-GSUserToken.md (100%) rename docs/{Function Help => pages/function_help}/Security/Revoke-GSUserVerificationCodes.md (100%) rename docs/{Function Help => pages/function_help}/Security/Update-GSChromeOSDevice.md (100%) rename docs/{Function Help => pages/function_help}/Security/Update-GSMobileDevice.md (100%) rename docs/{Function Help => pages/function_help}/Sheets/Clear-GSSheet.md (100%) rename docs/{Function Help => pages/function_help}/Sheets/Copy-GSSheet.md (100%) rename docs/{Function Help => pages/function_help}/Sheets/Export-GSSheet.md (100%) rename docs/{Function Help => pages/function_help}/Sheets/Get-GSSheetInfo.md (100%) rename docs/{Function Help => pages/function_help}/Sheets/Import-GSSheet.md (100%) rename docs/{Function Help => pages/function_help}/Sheets/New-GSSheet.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Clear-GSTasklist.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Get-GSTask.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Get-GSTasklist.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Move-GSTask.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/New-GSTask.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/New-GSTasklist.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Remove-GSTask.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Remove-GSTasklist.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Update-GSTask.md (100%) rename docs/{Function Help => pages/function_help}/Tasks/Update-GSTasklist.md (100%) rename docs/{Function Help => pages/function_help}/URL Shortener/Get-GSShortUrl.md (100%) rename docs/{Function Help => pages/function_help}/URL Shortener/New-GSShortUrl.md (100%) rename docs/{Function Help => pages/function_help}/Users/Get-GSUser.md (100%) rename docs/{Function Help => pages/function_help}/Users/Get-GSUserAlias.md (100%) rename docs/{Function Help => pages/function_help}/Users/Get-GSUserPhoto.md (100%) rename docs/{Function Help => pages/function_help}/Users/New-GSUser.md (100%) rename docs/{Function Help => pages/function_help}/Users/New-GSUserAlias.md (100%) rename docs/{Function Help => pages/function_help}/Users/Remove-GSUser.md (100%) rename docs/{Function Help => pages/function_help}/Users/Remove-GSUserAlias.md (100%) rename docs/{Function Help => pages/function_help}/Users/Remove-GSUserPhoto.md (100%) rename docs/{Function Help => pages/function_help}/Users/Restore-GSUser.md (100%) rename docs/{Function Help => pages/function_help}/Users/Sync-GSUserCache.md (100%) rename docs/{Function Help => pages/function_help}/Users/Update-GSUser.md (100%) rename docs/{Function Help => pages/function_help}/Users/Update-GSUserPhoto.md (100%) diff --git a/docs/Function Help/Authentication/Clear-PSGSuiteServiceCache.md b/docs/pages/function_help/Authentication/Clear-PSGSuiteServiceCache.md similarity index 100% rename from docs/Function Help/Authentication/Clear-PSGSuiteServiceCache.md rename to docs/pages/function_help/Authentication/Clear-PSGSuiteServiceCache.md diff --git a/docs/Function Help/Authentication/Get-GSToken.md b/docs/pages/function_help/Authentication/Get-GSToken.md similarity index 100% rename from docs/Function Help/Authentication/Get-GSToken.md rename to docs/pages/function_help/Authentication/Get-GSToken.md diff --git a/docs/Function Help/Authentication/Get-PSGSuiteServiceCache.md b/docs/pages/function_help/Authentication/Get-PSGSuiteServiceCache.md similarity index 100% rename from docs/Function Help/Authentication/Get-PSGSuiteServiceCache.md rename to docs/pages/function_help/Authentication/Get-PSGSuiteServiceCache.md diff --git a/docs/Function Help/Authentication/New-GoogleService.md b/docs/pages/function_help/Authentication/New-GoogleService.md similarity index 100% rename from docs/Function Help/Authentication/New-GoogleService.md rename to docs/pages/function_help/Authentication/New-GoogleService.md diff --git a/docs/Function Help/Calendar/Add-GSCalendarSubscription.md b/docs/pages/function_help/Calendar/Add-GSCalendarSubscription.md similarity index 100% rename from docs/Function Help/Calendar/Add-GSCalendarSubscription.md rename to docs/pages/function_help/Calendar/Add-GSCalendarSubscription.md diff --git a/docs/Function Help/Calendar/Get-GSCalendar.md b/docs/pages/function_help/Calendar/Get-GSCalendar.md similarity index 100% rename from docs/Function Help/Calendar/Get-GSCalendar.md rename to docs/pages/function_help/Calendar/Get-GSCalendar.md diff --git a/docs/Function Help/Calendar/Get-GSCalendarAcl.md b/docs/pages/function_help/Calendar/Get-GSCalendarAcl.md similarity index 100% rename from docs/Function Help/Calendar/Get-GSCalendarAcl.md rename to docs/pages/function_help/Calendar/Get-GSCalendarAcl.md diff --git a/docs/Function Help/Calendar/Get-GSCalendarEvent.md b/docs/pages/function_help/Calendar/Get-GSCalendarEvent.md similarity index 100% rename from docs/Function Help/Calendar/Get-GSCalendarEvent.md rename to docs/pages/function_help/Calendar/Get-GSCalendarEvent.md diff --git a/docs/Function Help/Calendar/Get-GSCalendarSubscription.md b/docs/pages/function_help/Calendar/Get-GSCalendarSubscription.md similarity index 100% rename from docs/Function Help/Calendar/Get-GSCalendarSubscription.md rename to docs/pages/function_help/Calendar/Get-GSCalendarSubscription.md diff --git a/docs/Function Help/Calendar/New-GSCalendarAcl.md b/docs/pages/function_help/Calendar/New-GSCalendarAcl.md similarity index 100% rename from docs/Function Help/Calendar/New-GSCalendarAcl.md rename to docs/pages/function_help/Calendar/New-GSCalendarAcl.md diff --git a/docs/Function Help/Calendar/New-GSCalendarEvent.md b/docs/pages/function_help/Calendar/New-GSCalendarEvent.md similarity index 100% rename from docs/Function Help/Calendar/New-GSCalendarEvent.md rename to docs/pages/function_help/Calendar/New-GSCalendarEvent.md diff --git a/docs/Function Help/Calendar/Remove-GSCalendarAcl.md b/docs/pages/function_help/Calendar/Remove-GSCalendarAcl.md similarity index 100% rename from docs/Function Help/Calendar/Remove-GSCalendarAcl.md rename to docs/pages/function_help/Calendar/Remove-GSCalendarAcl.md diff --git a/docs/Function Help/Calendar/Remove-GSCalendarEvent.md b/docs/pages/function_help/Calendar/Remove-GSCalendarEvent.md similarity index 100% rename from docs/Function Help/Calendar/Remove-GSCalendarEvent.md rename to docs/pages/function_help/Calendar/Remove-GSCalendarEvent.md diff --git a/docs/Function Help/Calendar/Remove-GSCalendarSubscription.md b/docs/pages/function_help/Calendar/Remove-GSCalendarSubscription.md similarity index 100% rename from docs/Function Help/Calendar/Remove-GSCalendarSubscription.md rename to docs/pages/function_help/Calendar/Remove-GSCalendarSubscription.md diff --git a/docs/Function Help/Calendar/Update-GSCalendarEvent.md b/docs/pages/function_help/Calendar/Update-GSCalendarEvent.md similarity index 100% rename from docs/Function Help/Calendar/Update-GSCalendarEvent.md rename to docs/pages/function_help/Calendar/Update-GSCalendarEvent.md diff --git a/docs/Function Help/Calendar/Update-GSCalendarSubscription.md b/docs/pages/function_help/Calendar/Update-GSCalendarSubscription.md similarity index 100% rename from docs/Function Help/Calendar/Update-GSCalendarSubscription.md rename to docs/pages/function_help/Calendar/Update-GSCalendarSubscription.md diff --git a/docs/Function Help/Chat/Get-GSChatMember.md b/docs/pages/function_help/Chat/Get-GSChatMember.md similarity index 100% rename from docs/Function Help/Chat/Get-GSChatMember.md rename to docs/pages/function_help/Chat/Get-GSChatMember.md diff --git a/docs/Function Help/Chat/Get-GSChatMessage.md b/docs/pages/function_help/Chat/Get-GSChatMessage.md similarity index 100% rename from docs/Function Help/Chat/Get-GSChatMessage.md rename to docs/pages/function_help/Chat/Get-GSChatMessage.md diff --git a/docs/Function Help/Chat/Get-GSChatSpace.md b/docs/pages/function_help/Chat/Get-GSChatSpace.md similarity index 100% rename from docs/Function Help/Chat/Get-GSChatSpace.md rename to docs/pages/function_help/Chat/Get-GSChatSpace.md diff --git a/docs/Function Help/Chat/Remove-GSChatMessage.md b/docs/pages/function_help/Chat/Remove-GSChatMessage.md similarity index 100% rename from docs/Function Help/Chat/Remove-GSChatMessage.md rename to docs/pages/function_help/Chat/Remove-GSChatMessage.md diff --git a/docs/Function Help/Chat/Send-GSChatMessage.md b/docs/pages/function_help/Chat/Send-GSChatMessage.md similarity index 100% rename from docs/Function Help/Chat/Send-GSChatMessage.md rename to docs/pages/function_help/Chat/Send-GSChatMessage.md diff --git a/docs/Function Help/Chat/Update-GSChatMessage.md b/docs/pages/function_help/Chat/Update-GSChatMessage.md similarity index 100% rename from docs/Function Help/Chat/Update-GSChatMessage.md rename to docs/pages/function_help/Chat/Update-GSChatMessage.md diff --git a/docs/Function Help/Classroom/Add-GSCourseParticipant.md b/docs/pages/function_help/Classroom/Add-GSCourseParticipant.md similarity index 100% rename from docs/Function Help/Classroom/Add-GSCourseParticipant.md rename to docs/pages/function_help/Classroom/Add-GSCourseParticipant.md diff --git a/docs/Function Help/Classroom/Confirm-GSCourseInvitation.md b/docs/pages/function_help/Classroom/Confirm-GSCourseInvitation.md similarity index 100% rename from docs/Function Help/Classroom/Confirm-GSCourseInvitation.md rename to docs/pages/function_help/Classroom/Confirm-GSCourseInvitation.md diff --git a/docs/Function Help/Classroom/Get-GSClassroomUserProfile.md b/docs/pages/function_help/Classroom/Get-GSClassroomUserProfile.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSClassroomUserProfile.md rename to docs/pages/function_help/Classroom/Get-GSClassroomUserProfile.md diff --git a/docs/Function Help/Classroom/Get-GSCourse.md b/docs/pages/function_help/Classroom/Get-GSCourse.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSCourse.md rename to docs/pages/function_help/Classroom/Get-GSCourse.md diff --git a/docs/Function Help/Classroom/Get-GSCourseAlias.md b/docs/pages/function_help/Classroom/Get-GSCourseAlias.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSCourseAlias.md rename to docs/pages/function_help/Classroom/Get-GSCourseAlias.md diff --git a/docs/Function Help/Classroom/Get-GSCourseInvitation.md b/docs/pages/function_help/Classroom/Get-GSCourseInvitation.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSCourseInvitation.md rename to docs/pages/function_help/Classroom/Get-GSCourseInvitation.md diff --git a/docs/Function Help/Classroom/Get-GSCourseParticipant.md b/docs/pages/function_help/Classroom/Get-GSCourseParticipant.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSCourseParticipant.md rename to docs/pages/function_help/Classroom/Get-GSCourseParticipant.md diff --git a/docs/Function Help/Classroom/Get-GSStudentGuardian.md b/docs/pages/function_help/Classroom/Get-GSStudentGuardian.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSStudentGuardian.md rename to docs/pages/function_help/Classroom/Get-GSStudentGuardian.md diff --git a/docs/Function Help/Classroom/Get-GSStudentGuardianInvitation.md b/docs/pages/function_help/Classroom/Get-GSStudentGuardianInvitation.md similarity index 100% rename from docs/Function Help/Classroom/Get-GSStudentGuardianInvitation.md rename to docs/pages/function_help/Classroom/Get-GSStudentGuardianInvitation.md diff --git a/docs/Function Help/Classroom/New-GSCourse.md b/docs/pages/function_help/Classroom/New-GSCourse.md similarity index 100% rename from docs/Function Help/Classroom/New-GSCourse.md rename to docs/pages/function_help/Classroom/New-GSCourse.md diff --git a/docs/Function Help/Classroom/New-GSCourseAlias.md b/docs/pages/function_help/Classroom/New-GSCourseAlias.md similarity index 100% rename from docs/Function Help/Classroom/New-GSCourseAlias.md rename to docs/pages/function_help/Classroom/New-GSCourseAlias.md diff --git a/docs/Function Help/Classroom/New-GSCourseInvitation.md b/docs/pages/function_help/Classroom/New-GSCourseInvitation.md similarity index 100% rename from docs/Function Help/Classroom/New-GSCourseInvitation.md rename to docs/pages/function_help/Classroom/New-GSCourseInvitation.md diff --git a/docs/Function Help/Classroom/New-GSStudentGuardianInvitation.md b/docs/pages/function_help/Classroom/New-GSStudentGuardianInvitation.md similarity index 100% rename from docs/Function Help/Classroom/New-GSStudentGuardianInvitation.md rename to docs/pages/function_help/Classroom/New-GSStudentGuardianInvitation.md diff --git a/docs/Function Help/Classroom/Remove-GSCourse.md b/docs/pages/function_help/Classroom/Remove-GSCourse.md similarity index 100% rename from docs/Function Help/Classroom/Remove-GSCourse.md rename to docs/pages/function_help/Classroom/Remove-GSCourse.md diff --git a/docs/Function Help/Classroom/Remove-GSCourseAlias.md b/docs/pages/function_help/Classroom/Remove-GSCourseAlias.md similarity index 100% rename from docs/Function Help/Classroom/Remove-GSCourseAlias.md rename to docs/pages/function_help/Classroom/Remove-GSCourseAlias.md diff --git a/docs/Function Help/Classroom/Remove-GSCourseInvitation.md b/docs/pages/function_help/Classroom/Remove-GSCourseInvitation.md similarity index 100% rename from docs/Function Help/Classroom/Remove-GSCourseInvitation.md rename to docs/pages/function_help/Classroom/Remove-GSCourseInvitation.md diff --git a/docs/Function Help/Classroom/Remove-GSCourseParticipant.md b/docs/pages/function_help/Classroom/Remove-GSCourseParticipant.md similarity index 100% rename from docs/Function Help/Classroom/Remove-GSCourseParticipant.md rename to docs/pages/function_help/Classroom/Remove-GSCourseParticipant.md diff --git a/docs/Function Help/Classroom/Remove-GSStudentGuardian.md b/docs/pages/function_help/Classroom/Remove-GSStudentGuardian.md similarity index 100% rename from docs/Function Help/Classroom/Remove-GSStudentGuardian.md rename to docs/pages/function_help/Classroom/Remove-GSStudentGuardian.md diff --git a/docs/Function Help/Classroom/Revoke-GSStudentGuardianInvitation.md b/docs/pages/function_help/Classroom/Revoke-GSStudentGuardianInvitation.md similarity index 100% rename from docs/Function Help/Classroom/Revoke-GSStudentGuardianInvitation.md rename to docs/pages/function_help/Classroom/Revoke-GSStudentGuardianInvitation.md diff --git a/docs/Function Help/Classroom/Update-GSCourse.md b/docs/pages/function_help/Classroom/Update-GSCourse.md similarity index 100% rename from docs/Function Help/Classroom/Update-GSCourse.md rename to docs/pages/function_help/Classroom/Update-GSCourse.md diff --git a/docs/Function Help/Configuration/Export-PSGSuiteConfig.md b/docs/pages/function_help/Configuration/Export-PSGSuiteConfig.md similarity index 100% rename from docs/Function Help/Configuration/Export-PSGSuiteConfig.md rename to docs/pages/function_help/Configuration/Export-PSGSuiteConfig.md diff --git a/docs/Function Help/Configuration/Get-GSChatConfig.md b/docs/pages/function_help/Configuration/Get-GSChatConfig.md similarity index 100% rename from docs/Function Help/Configuration/Get-GSChatConfig.md rename to docs/pages/function_help/Configuration/Get-GSChatConfig.md diff --git a/docs/Function Help/Configuration/Get-PSGSuiteConfig.md b/docs/pages/function_help/Configuration/Get-PSGSuiteConfig.md similarity index 100% rename from docs/Function Help/Configuration/Get-PSGSuiteConfig.md rename to docs/pages/function_help/Configuration/Get-PSGSuiteConfig.md diff --git a/docs/Function Help/Configuration/Import-PSGSuiteConfig.md b/docs/pages/function_help/Configuration/Import-PSGSuiteConfig.md similarity index 100% rename from docs/Function Help/Configuration/Import-PSGSuiteConfig.md rename to docs/pages/function_help/Configuration/Import-PSGSuiteConfig.md diff --git a/docs/Function Help/Configuration/Set-PSGSuiteConfig.md b/docs/pages/function_help/Configuration/Set-PSGSuiteConfig.md similarity index 100% rename from docs/Function Help/Configuration/Set-PSGSuiteConfig.md rename to docs/pages/function_help/Configuration/Set-PSGSuiteConfig.md diff --git a/docs/Function Help/Configuration/Show-PSGSuiteConfig.md b/docs/pages/function_help/Configuration/Show-PSGSuiteConfig.md similarity index 100% rename from docs/Function Help/Configuration/Show-PSGSuiteConfig.md rename to docs/pages/function_help/Configuration/Show-PSGSuiteConfig.md diff --git a/docs/Function Help/Configuration/Switch-PSGSuiteConfig.md b/docs/pages/function_help/Configuration/Switch-PSGSuiteConfig.md similarity index 100% rename from docs/Function Help/Configuration/Switch-PSGSuiteConfig.md rename to docs/pages/function_help/Configuration/Switch-PSGSuiteConfig.md diff --git a/docs/Function Help/Contacts/Get-GSContactList.md b/docs/pages/function_help/Contacts/Get-GSContactList.md similarity index 100% rename from docs/Function Help/Contacts/Get-GSContactList.md rename to docs/pages/function_help/Contacts/Get-GSContactList.md diff --git a/docs/Function Help/Contacts/Remove-GSContact.md b/docs/pages/function_help/Contacts/Remove-GSContact.md similarity index 100% rename from docs/Function Help/Contacts/Remove-GSContact.md rename to docs/pages/function_help/Contacts/Remove-GSContact.md diff --git a/docs/Function Help/Customers/Get-GSCustomer.md b/docs/pages/function_help/Customers/Get-GSCustomer.md similarity index 100% rename from docs/Function Help/Customers/Get-GSCustomer.md rename to docs/pages/function_help/Customers/Get-GSCustomer.md diff --git a/docs/Function Help/Customers/Update-GSCustomer.md b/docs/pages/function_help/Customers/Update-GSCustomer.md similarity index 100% rename from docs/Function Help/Customers/Update-GSCustomer.md rename to docs/pages/function_help/Customers/Update-GSCustomer.md diff --git a/docs/Function Help/Data Transfer/Get-GSDataTransferApplication.md b/docs/pages/function_help/Data Transfer/Get-GSDataTransferApplication.md similarity index 100% rename from docs/Function Help/Data Transfer/Get-GSDataTransferApplication.md rename to docs/pages/function_help/Data Transfer/Get-GSDataTransferApplication.md diff --git a/docs/Function Help/Data Transfer/Start-GSDataTransfer.md b/docs/pages/function_help/Data Transfer/Start-GSDataTransfer.md similarity index 100% rename from docs/Function Help/Data Transfer/Start-GSDataTransfer.md rename to docs/pages/function_help/Data Transfer/Start-GSDataTransfer.md diff --git a/docs/Function Help/Delegation/Add-GSGmailDelegate.md b/docs/pages/function_help/Delegation/Add-GSGmailDelegate.md similarity index 100% rename from docs/Function Help/Delegation/Add-GSGmailDelegate.md rename to docs/pages/function_help/Delegation/Add-GSGmailDelegate.md diff --git a/docs/Function Help/Delegation/Get-GSGmailDelegate.md b/docs/pages/function_help/Delegation/Get-GSGmailDelegate.md similarity index 100% rename from docs/Function Help/Delegation/Get-GSGmailDelegate.md rename to docs/pages/function_help/Delegation/Get-GSGmailDelegate.md diff --git a/docs/Function Help/Delegation/Remove-GSGmailDelegate.md b/docs/pages/function_help/Delegation/Remove-GSGmailDelegate.md similarity index 100% rename from docs/Function Help/Delegation/Remove-GSGmailDelegate.md rename to docs/pages/function_help/Delegation/Remove-GSGmailDelegate.md diff --git a/docs/Function Help/Domains/Get-GSDomain.md b/docs/pages/function_help/Domains/Get-GSDomain.md similarity index 100% rename from docs/Function Help/Domains/Get-GSDomain.md rename to docs/pages/function_help/Domains/Get-GSDomain.md diff --git a/docs/Function Help/Domains/Get-GSDomainAlias.md b/docs/pages/function_help/Domains/Get-GSDomainAlias.md similarity index 100% rename from docs/Function Help/Domains/Get-GSDomainAlias.md rename to docs/pages/function_help/Domains/Get-GSDomainAlias.md diff --git a/docs/Function Help/Domains/New-GSDomain.md b/docs/pages/function_help/Domains/New-GSDomain.md similarity index 100% rename from docs/Function Help/Domains/New-GSDomain.md rename to docs/pages/function_help/Domains/New-GSDomain.md diff --git a/docs/Function Help/Domains/New-GSDomainAlias.md b/docs/pages/function_help/Domains/New-GSDomainAlias.md similarity index 100% rename from docs/Function Help/Domains/New-GSDomainAlias.md rename to docs/pages/function_help/Domains/New-GSDomainAlias.md diff --git a/docs/Function Help/Domains/Remove-GSDomain.md b/docs/pages/function_help/Domains/Remove-GSDomain.md similarity index 100% rename from docs/Function Help/Domains/Remove-GSDomain.md rename to docs/pages/function_help/Domains/Remove-GSDomain.md diff --git a/docs/Function Help/Domains/Remove-GSDomainAlias.md b/docs/pages/function_help/Domains/Remove-GSDomainAlias.md similarity index 100% rename from docs/Function Help/Domains/Remove-GSDomainAlias.md rename to docs/pages/function_help/Domains/Remove-GSDomainAlias.md diff --git a/docs/Function Help/Drive/Add-GSDocContent.md b/docs/pages/function_help/Drive/Add-GSDocContent.md similarity index 100% rename from docs/Function Help/Drive/Add-GSDocContent.md rename to docs/pages/function_help/Drive/Add-GSDocContent.md diff --git a/docs/Function Help/Drive/Add-GSDrivePermission.md b/docs/pages/function_help/Drive/Add-GSDrivePermission.md similarity index 100% rename from docs/Function Help/Drive/Add-GSDrivePermission.md rename to docs/pages/function_help/Drive/Add-GSDrivePermission.md diff --git a/docs/Function Help/Drive/Copy-GSDriveFile.md b/docs/pages/function_help/Drive/Copy-GSDriveFile.md similarity index 100% rename from docs/Function Help/Drive/Copy-GSDriveFile.md rename to docs/pages/function_help/Drive/Copy-GSDriveFile.md diff --git a/docs/Function Help/Drive/Export-GSDriveFile.md b/docs/pages/function_help/Drive/Export-GSDriveFile.md similarity index 100% rename from docs/Function Help/Drive/Export-GSDriveFile.md rename to docs/pages/function_help/Drive/Export-GSDriveFile.md diff --git a/docs/Function Help/Drive/Get-GSDocContent.md b/docs/pages/function_help/Drive/Get-GSDocContent.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDocContent.md rename to docs/pages/function_help/Drive/Get-GSDocContent.md diff --git a/docs/Function Help/Drive/Get-GSDrive.md b/docs/pages/function_help/Drive/Get-GSDrive.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDrive.md rename to docs/pages/function_help/Drive/Get-GSDrive.md diff --git a/docs/Function Help/Drive/Get-GSDriveFile.md b/docs/pages/function_help/Drive/Get-GSDriveFile.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDriveFile.md rename to docs/pages/function_help/Drive/Get-GSDriveFile.md diff --git a/docs/Function Help/Drive/Get-GSDriveFileList.md b/docs/pages/function_help/Drive/Get-GSDriveFileList.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDriveFileList.md rename to docs/pages/function_help/Drive/Get-GSDriveFileList.md diff --git a/docs/Function Help/Drive/Get-GSDriveFileUploadStatus.md b/docs/pages/function_help/Drive/Get-GSDriveFileUploadStatus.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDriveFileUploadStatus.md rename to docs/pages/function_help/Drive/Get-GSDriveFileUploadStatus.md diff --git a/docs/Function Help/Drive/Get-GSDriveFolderSize.md b/docs/pages/function_help/Drive/Get-GSDriveFolderSize.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDriveFolderSize.md rename to docs/pages/function_help/Drive/Get-GSDriveFolderSize.md diff --git a/docs/Function Help/Drive/Get-GSDrivePermission.md b/docs/pages/function_help/Drive/Get-GSDrivePermission.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDrivePermission.md rename to docs/pages/function_help/Drive/Get-GSDrivePermission.md diff --git a/docs/Function Help/Drive/Get-GSDriveProfile.md b/docs/pages/function_help/Drive/Get-GSDriveProfile.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDriveProfile.md rename to docs/pages/function_help/Drive/Get-GSDriveProfile.md diff --git a/docs/Function Help/Drive/Get-GSDriveRevision.md b/docs/pages/function_help/Drive/Get-GSDriveRevision.md similarity index 100% rename from docs/Function Help/Drive/Get-GSDriveRevision.md rename to docs/pages/function_help/Drive/Get-GSDriveRevision.md diff --git a/docs/Function Help/Drive/Hide-GSDrive.md b/docs/pages/function_help/Drive/Hide-GSDrive.md similarity index 100% rename from docs/Function Help/Drive/Hide-GSDrive.md rename to docs/pages/function_help/Drive/Hide-GSDrive.md diff --git a/docs/Function Help/Drive/New-GSDrive.md b/docs/pages/function_help/Drive/New-GSDrive.md similarity index 100% rename from docs/Function Help/Drive/New-GSDrive.md rename to docs/pages/function_help/Drive/New-GSDrive.md diff --git a/docs/Function Help/Drive/New-GSDriveFile.md b/docs/pages/function_help/Drive/New-GSDriveFile.md similarity index 100% rename from docs/Function Help/Drive/New-GSDriveFile.md rename to docs/pages/function_help/Drive/New-GSDriveFile.md diff --git a/docs/Function Help/Drive/Remove-GSDrive.md b/docs/pages/function_help/Drive/Remove-GSDrive.md similarity index 100% rename from docs/Function Help/Drive/Remove-GSDrive.md rename to docs/pages/function_help/Drive/Remove-GSDrive.md diff --git a/docs/Function Help/Drive/Remove-GSDriveFile.md b/docs/pages/function_help/Drive/Remove-GSDriveFile.md similarity index 100% rename from docs/Function Help/Drive/Remove-GSDriveFile.md rename to docs/pages/function_help/Drive/Remove-GSDriveFile.md diff --git a/docs/Function Help/Drive/Remove-GSDrivePermission.md b/docs/pages/function_help/Drive/Remove-GSDrivePermission.md similarity index 100% rename from docs/Function Help/Drive/Remove-GSDrivePermission.md rename to docs/pages/function_help/Drive/Remove-GSDrivePermission.md diff --git a/docs/Function Help/Drive/Remove-GSDriveRevision.md b/docs/pages/function_help/Drive/Remove-GSDriveRevision.md similarity index 100% rename from docs/Function Help/Drive/Remove-GSDriveRevision.md rename to docs/pages/function_help/Drive/Remove-GSDriveRevision.md diff --git a/docs/Function Help/Drive/Set-GSDocContent.md b/docs/pages/function_help/Drive/Set-GSDocContent.md similarity index 100% rename from docs/Function Help/Drive/Set-GSDocContent.md rename to docs/pages/function_help/Drive/Set-GSDocContent.md diff --git a/docs/Function Help/Drive/Show-GSDrive.md b/docs/pages/function_help/Drive/Show-GSDrive.md similarity index 100% rename from docs/Function Help/Drive/Show-GSDrive.md rename to docs/pages/function_help/Drive/Show-GSDrive.md diff --git a/docs/Function Help/Drive/Start-GSDriveFileUpload.md b/docs/pages/function_help/Drive/Start-GSDriveFileUpload.md similarity index 100% rename from docs/Function Help/Drive/Start-GSDriveFileUpload.md rename to docs/pages/function_help/Drive/Start-GSDriveFileUpload.md diff --git a/docs/Function Help/Drive/Stop-GSDriveFileUpload.md b/docs/pages/function_help/Drive/Stop-GSDriveFileUpload.md similarity index 100% rename from docs/Function Help/Drive/Stop-GSDriveFileUpload.md rename to docs/pages/function_help/Drive/Stop-GSDriveFileUpload.md diff --git a/docs/Function Help/Drive/Update-GSDrive.md b/docs/pages/function_help/Drive/Update-GSDrive.md similarity index 100% rename from docs/Function Help/Drive/Update-GSDrive.md rename to docs/pages/function_help/Drive/Update-GSDrive.md diff --git a/docs/Function Help/Drive/Update-GSDriveFile.md b/docs/pages/function_help/Drive/Update-GSDriveFile.md similarity index 100% rename from docs/Function Help/Drive/Update-GSDriveFile.md rename to docs/pages/function_help/Drive/Update-GSDriveFile.md diff --git a/docs/Function Help/Drive/Update-GSDriveRevision.md b/docs/pages/function_help/Drive/Update-GSDriveRevision.md similarity index 100% rename from docs/Function Help/Drive/Update-GSDriveRevision.md rename to docs/pages/function_help/Drive/Update-GSDriveRevision.md diff --git a/docs/Function Help/Drive/Watch-GSDriveUpload.md b/docs/pages/function_help/Drive/Watch-GSDriveUpload.md similarity index 100% rename from docs/Function Help/Drive/Watch-GSDriveUpload.md rename to docs/pages/function_help/Drive/Watch-GSDriveUpload.md diff --git a/docs/Function Help/Gmail/Add-GSGmailFilter.md b/docs/pages/function_help/Gmail/Add-GSGmailFilter.md similarity index 100% rename from docs/Function Help/Gmail/Add-GSGmailFilter.md rename to docs/pages/function_help/Gmail/Add-GSGmailFilter.md diff --git a/docs/Function Help/Gmail/Add-GSGmailForwardingAddress.md b/docs/pages/function_help/Gmail/Add-GSGmailForwardingAddress.md similarity index 100% rename from docs/Function Help/Gmail/Add-GSGmailForwardingAddress.md rename to docs/pages/function_help/Gmail/Add-GSGmailForwardingAddress.md diff --git a/docs/Function Help/Gmail/Get-GSGmailAutoForwardingSettings.md b/docs/pages/function_help/Gmail/Get-GSGmailAutoForwardingSettings.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailAutoForwardingSettings.md rename to docs/pages/function_help/Gmail/Get-GSGmailAutoForwardingSettings.md diff --git a/docs/Function Help/Gmail/Get-GSGmailFilter.md b/docs/pages/function_help/Gmail/Get-GSGmailFilter.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailFilter.md rename to docs/pages/function_help/Gmail/Get-GSGmailFilter.md diff --git a/docs/Function Help/Gmail/Get-GSGmailForwardingAddress.md b/docs/pages/function_help/Gmail/Get-GSGmailForwardingAddress.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailForwardingAddress.md rename to docs/pages/function_help/Gmail/Get-GSGmailForwardingAddress.md diff --git a/docs/Function Help/Gmail/Get-GSGmailImapSettings.md b/docs/pages/function_help/Gmail/Get-GSGmailImapSettings.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailImapSettings.md rename to docs/pages/function_help/Gmail/Get-GSGmailImapSettings.md diff --git a/docs/Function Help/Gmail/Get-GSGmailLabel.md b/docs/pages/function_help/Gmail/Get-GSGmailLabel.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailLabel.md rename to docs/pages/function_help/Gmail/Get-GSGmailLabel.md diff --git a/docs/Function Help/Gmail/Get-GSGmailLanguageSettings.md b/docs/pages/function_help/Gmail/Get-GSGmailLanguageSettings.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailLanguageSettings.md rename to docs/pages/function_help/Gmail/Get-GSGmailLanguageSettings.md diff --git a/docs/Function Help/Gmail/Get-GSGmailMessage.md b/docs/pages/function_help/Gmail/Get-GSGmailMessage.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailMessage.md rename to docs/pages/function_help/Gmail/Get-GSGmailMessage.md diff --git a/docs/Function Help/Gmail/Get-GSGmailMessageList.md b/docs/pages/function_help/Gmail/Get-GSGmailMessageList.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailMessageList.md rename to docs/pages/function_help/Gmail/Get-GSGmailMessageList.md diff --git a/docs/Function Help/Gmail/Get-GSGmailPopSettings.md b/docs/pages/function_help/Gmail/Get-GSGmailPopSettings.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailPopSettings.md rename to docs/pages/function_help/Gmail/Get-GSGmailPopSettings.md diff --git a/docs/Function Help/Gmail/Get-GSGmailProfile.md b/docs/pages/function_help/Gmail/Get-GSGmailProfile.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailProfile.md rename to docs/pages/function_help/Gmail/Get-GSGmailProfile.md diff --git a/docs/Function Help/Gmail/Get-GSGmailSMIMEInfo.md b/docs/pages/function_help/Gmail/Get-GSGmailSMIMEInfo.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailSMIMEInfo.md rename to docs/pages/function_help/Gmail/Get-GSGmailSMIMEInfo.md diff --git a/docs/Function Help/Gmail/Get-GSGmailSendAsAlias.md b/docs/pages/function_help/Gmail/Get-GSGmailSendAsAlias.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailSendAsAlias.md rename to docs/pages/function_help/Gmail/Get-GSGmailSendAsAlias.md diff --git a/docs/Function Help/Gmail/Get-GSGmailVacationSettings.md b/docs/pages/function_help/Gmail/Get-GSGmailVacationSettings.md similarity index 100% rename from docs/Function Help/Gmail/Get-GSGmailVacationSettings.md rename to docs/pages/function_help/Gmail/Get-GSGmailVacationSettings.md diff --git a/docs/Function Help/Gmail/New-GSGmailLabel.md b/docs/pages/function_help/Gmail/New-GSGmailLabel.md similarity index 100% rename from docs/Function Help/Gmail/New-GSGmailLabel.md rename to docs/pages/function_help/Gmail/New-GSGmailLabel.md diff --git a/docs/Function Help/Gmail/New-GSGmailSMIMEInfo.md b/docs/pages/function_help/Gmail/New-GSGmailSMIMEInfo.md similarity index 100% rename from docs/Function Help/Gmail/New-GSGmailSMIMEInfo.md rename to docs/pages/function_help/Gmail/New-GSGmailSMIMEInfo.md diff --git a/docs/Function Help/Gmail/New-GSGmailSendAsAlias.md b/docs/pages/function_help/Gmail/New-GSGmailSendAsAlias.md similarity index 100% rename from docs/Function Help/Gmail/New-GSGmailSendAsAlias.md rename to docs/pages/function_help/Gmail/New-GSGmailSendAsAlias.md diff --git a/docs/Function Help/Gmail/Remove-GSGmailFilter.md b/docs/pages/function_help/Gmail/Remove-GSGmailFilter.md similarity index 100% rename from docs/Function Help/Gmail/Remove-GSGmailFilter.md rename to docs/pages/function_help/Gmail/Remove-GSGmailFilter.md diff --git a/docs/Function Help/Gmail/Remove-GSGmailLabel.md b/docs/pages/function_help/Gmail/Remove-GSGmailLabel.md similarity index 100% rename from docs/Function Help/Gmail/Remove-GSGmailLabel.md rename to docs/pages/function_help/Gmail/Remove-GSGmailLabel.md diff --git a/docs/Function Help/Gmail/Remove-GSGmailMessage.md b/docs/pages/function_help/Gmail/Remove-GSGmailMessage.md similarity index 100% rename from docs/Function Help/Gmail/Remove-GSGmailMessage.md rename to docs/pages/function_help/Gmail/Remove-GSGmailMessage.md diff --git a/docs/Function Help/Gmail/Remove-GSGmailSMIMEInfo.md b/docs/pages/function_help/Gmail/Remove-GSGmailSMIMEInfo.md similarity index 100% rename from docs/Function Help/Gmail/Remove-GSGmailSMIMEInfo.md rename to docs/pages/function_help/Gmail/Remove-GSGmailSMIMEInfo.md diff --git a/docs/Function Help/Gmail/Remove-GSGmailSendAsAlias.md b/docs/pages/function_help/Gmail/Remove-GSGmailSendAsAlias.md similarity index 100% rename from docs/Function Help/Gmail/Remove-GSGmailSendAsAlias.md rename to docs/pages/function_help/Gmail/Remove-GSGmailSendAsAlias.md diff --git a/docs/Function Help/Gmail/Restore-GSGmailMessage.md b/docs/pages/function_help/Gmail/Restore-GSGmailMessage.md similarity index 100% rename from docs/Function Help/Gmail/Restore-GSGmailMessage.md rename to docs/pages/function_help/Gmail/Restore-GSGmailMessage.md diff --git a/docs/Function Help/Gmail/Send-GSGmailSendAsConfirmation.md b/docs/pages/function_help/Gmail/Send-GSGmailSendAsConfirmation.md similarity index 100% rename from docs/Function Help/Gmail/Send-GSGmailSendAsConfirmation.md rename to docs/pages/function_help/Gmail/Send-GSGmailSendAsConfirmation.md diff --git a/docs/Function Help/Gmail/Send-GmailMessage.md b/docs/pages/function_help/Gmail/Send-GmailMessage.md similarity index 100% rename from docs/Function Help/Gmail/Send-GmailMessage.md rename to docs/pages/function_help/Gmail/Send-GmailMessage.md diff --git a/docs/Function Help/Gmail/Update-GSGmailAutoForwardingSettings.md b/docs/pages/function_help/Gmail/Update-GSGmailAutoForwardingSettings.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailAutoForwardingSettings.md rename to docs/pages/function_help/Gmail/Update-GSGmailAutoForwardingSettings.md diff --git a/docs/Function Help/Gmail/Update-GSGmailImapSettings.md b/docs/pages/function_help/Gmail/Update-GSGmailImapSettings.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailImapSettings.md rename to docs/pages/function_help/Gmail/Update-GSGmailImapSettings.md diff --git a/docs/Function Help/Gmail/Update-GSGmailLabel.md b/docs/pages/function_help/Gmail/Update-GSGmailLabel.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailLabel.md rename to docs/pages/function_help/Gmail/Update-GSGmailLabel.md diff --git a/docs/Function Help/Gmail/Update-GSGmailLanguageSettings.md b/docs/pages/function_help/Gmail/Update-GSGmailLanguageSettings.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailLanguageSettings.md rename to docs/pages/function_help/Gmail/Update-GSGmailLanguageSettings.md diff --git a/docs/Function Help/Gmail/Update-GSGmailMessageLabels.md b/docs/pages/function_help/Gmail/Update-GSGmailMessageLabels.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailMessageLabels.md rename to docs/pages/function_help/Gmail/Update-GSGmailMessageLabels.md diff --git a/docs/Function Help/Gmail/Update-GSGmailPopSettings.md b/docs/pages/function_help/Gmail/Update-GSGmailPopSettings.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailPopSettings.md rename to docs/pages/function_help/Gmail/Update-GSGmailPopSettings.md diff --git a/docs/Function Help/Gmail/Update-GSGmailSendAsAlias.md b/docs/pages/function_help/Gmail/Update-GSGmailSendAsAlias.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailSendAsAlias.md rename to docs/pages/function_help/Gmail/Update-GSGmailSendAsAlias.md diff --git a/docs/Function Help/Gmail/Update-GSGmailSignature.md b/docs/pages/function_help/Gmail/Update-GSGmailSignature.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailSignature.md rename to docs/pages/function_help/Gmail/Update-GSGmailSignature.md diff --git a/docs/Function Help/Gmail/Update-GSGmailVacationSettings.md b/docs/pages/function_help/Gmail/Update-GSGmailVacationSettings.md similarity index 100% rename from docs/Function Help/Gmail/Update-GSGmailVacationSettings.md rename to docs/pages/function_help/Gmail/Update-GSGmailVacationSettings.md diff --git a/docs/Function Help/Groups/Add-GSGroupMember.md b/docs/pages/function_help/Groups/Add-GSGroupMember.md similarity index 100% rename from docs/Function Help/Groups/Add-GSGroupMember.md rename to docs/pages/function_help/Groups/Add-GSGroupMember.md diff --git a/docs/Function Help/Groups/Add-GSPrincipalGroupMembership.md b/docs/pages/function_help/Groups/Add-GSPrincipalGroupMembership.md similarity index 100% rename from docs/Function Help/Groups/Add-GSPrincipalGroupMembership.md rename to docs/pages/function_help/Groups/Add-GSPrincipalGroupMembership.md diff --git a/docs/Function Help/Groups/Get-GSGroup.md b/docs/pages/function_help/Groups/Get-GSGroup.md similarity index 100% rename from docs/Function Help/Groups/Get-GSGroup.md rename to docs/pages/function_help/Groups/Get-GSGroup.md diff --git a/docs/Function Help/Groups/Get-GSGroupAlias.md b/docs/pages/function_help/Groups/Get-GSGroupAlias.md similarity index 100% rename from docs/Function Help/Groups/Get-GSGroupAlias.md rename to docs/pages/function_help/Groups/Get-GSGroupAlias.md diff --git a/docs/Function Help/Groups/Get-GSGroupMember.md b/docs/pages/function_help/Groups/Get-GSGroupMember.md similarity index 100% rename from docs/Function Help/Groups/Get-GSGroupMember.md rename to docs/pages/function_help/Groups/Get-GSGroupMember.md diff --git a/docs/Function Help/Groups/Get-GSGroupSettings.md b/docs/pages/function_help/Groups/Get-GSGroupSettings.md similarity index 100% rename from docs/Function Help/Groups/Get-GSGroupSettings.md rename to docs/pages/function_help/Groups/Get-GSGroupSettings.md diff --git a/docs/Function Help/Groups/New-GSGroup.md b/docs/pages/function_help/Groups/New-GSGroup.md similarity index 100% rename from docs/Function Help/Groups/New-GSGroup.md rename to docs/pages/function_help/Groups/New-GSGroup.md diff --git a/docs/Function Help/Groups/New-GSGroupAlias.md b/docs/pages/function_help/Groups/New-GSGroupAlias.md similarity index 100% rename from docs/Function Help/Groups/New-GSGroupAlias.md rename to docs/pages/function_help/Groups/New-GSGroupAlias.md diff --git a/docs/Function Help/Groups/Remove-GSGroup.md b/docs/pages/function_help/Groups/Remove-GSGroup.md similarity index 100% rename from docs/Function Help/Groups/Remove-GSGroup.md rename to docs/pages/function_help/Groups/Remove-GSGroup.md diff --git a/docs/Function Help/Groups/Remove-GSGroupAlias.md b/docs/pages/function_help/Groups/Remove-GSGroupAlias.md similarity index 100% rename from docs/Function Help/Groups/Remove-GSGroupAlias.md rename to docs/pages/function_help/Groups/Remove-GSGroupAlias.md diff --git a/docs/Function Help/Groups/Remove-GSGroupMember.md b/docs/pages/function_help/Groups/Remove-GSGroupMember.md similarity index 100% rename from docs/Function Help/Groups/Remove-GSGroupMember.md rename to docs/pages/function_help/Groups/Remove-GSGroupMember.md diff --git a/docs/Function Help/Groups/Remove-GSPrincipalGroupMembership.md b/docs/pages/function_help/Groups/Remove-GSPrincipalGroupMembership.md similarity index 100% rename from docs/Function Help/Groups/Remove-GSPrincipalGroupMembership.md rename to docs/pages/function_help/Groups/Remove-GSPrincipalGroupMembership.md diff --git a/docs/Function Help/Groups/Set-GSGroupSettings.md b/docs/pages/function_help/Groups/Set-GSGroupSettings.md similarity index 100% rename from docs/Function Help/Groups/Set-GSGroupSettings.md rename to docs/pages/function_help/Groups/Set-GSGroupSettings.md diff --git a/docs/Function Help/Groups/Test-GSGroupMembership.md b/docs/pages/function_help/Groups/Test-GSGroupMembership.md similarity index 100% rename from docs/Function Help/Groups/Test-GSGroupMembership.md rename to docs/pages/function_help/Groups/Test-GSGroupMembership.md diff --git a/docs/Function Help/Groups/Update-GSGroupMember.md b/docs/pages/function_help/Groups/Update-GSGroupMember.md similarity index 100% rename from docs/Function Help/Groups/Update-GSGroupMember.md rename to docs/pages/function_help/Groups/Update-GSGroupMember.md diff --git a/docs/Function Help/Groups/Update-GSGroupSettings.md b/docs/pages/function_help/Groups/Update-GSGroupSettings.md similarity index 100% rename from docs/Function Help/Groups/Update-GSGroupSettings.md rename to docs/pages/function_help/Groups/Update-GSGroupSettings.md diff --git a/docs/Function Help/Helpers/Add-GSCalendarEventReminder.md b/docs/pages/function_help/Helpers/Add-GSCalendarEventReminder.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSCalendarEventReminder.md rename to docs/pages/function_help/Helpers/Add-GSCalendarEventReminder.md diff --git a/docs/Function Help/Helpers/Add-GSCalendarNotification.md b/docs/pages/function_help/Helpers/Add-GSCalendarNotification.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSCalendarNotification.md rename to docs/pages/function_help/Helpers/Add-GSCalendarNotification.md diff --git a/docs/Function Help/Helpers/Add-GSChatButton.md b/docs/pages/function_help/Helpers/Add-GSChatButton.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatButton.md rename to docs/pages/function_help/Helpers/Add-GSChatButton.md diff --git a/docs/Function Help/Helpers/Add-GSChatCard.md b/docs/pages/function_help/Helpers/Add-GSChatCard.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatCard.md rename to docs/pages/function_help/Helpers/Add-GSChatCard.md diff --git a/docs/Function Help/Helpers/Add-GSChatCardAction.md b/docs/pages/function_help/Helpers/Add-GSChatCardAction.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatCardAction.md rename to docs/pages/function_help/Helpers/Add-GSChatCardAction.md diff --git a/docs/Function Help/Helpers/Add-GSChatCardSection.md b/docs/pages/function_help/Helpers/Add-GSChatCardSection.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatCardSection.md rename to docs/pages/function_help/Helpers/Add-GSChatCardSection.md diff --git a/docs/Function Help/Helpers/Add-GSChatImage.md b/docs/pages/function_help/Helpers/Add-GSChatImage.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatImage.md rename to docs/pages/function_help/Helpers/Add-GSChatImage.md diff --git a/docs/Function Help/Helpers/Add-GSChatKeyValue.md b/docs/pages/function_help/Helpers/Add-GSChatKeyValue.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatKeyValue.md rename to docs/pages/function_help/Helpers/Add-GSChatKeyValue.md diff --git a/docs/Function Help/Helpers/Add-GSChatOnClick.md b/docs/pages/function_help/Helpers/Add-GSChatOnClick.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatOnClick.md rename to docs/pages/function_help/Helpers/Add-GSChatOnClick.md diff --git a/docs/Function Help/Helpers/Add-GSChatTextParagraph.md b/docs/pages/function_help/Helpers/Add-GSChatTextParagraph.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSChatTextParagraph.md rename to docs/pages/function_help/Helpers/Add-GSChatTextParagraph.md diff --git a/docs/Function Help/Helpers/Add-GSCustomerPostalAddress.md b/docs/pages/function_help/Helpers/Add-GSCustomerPostalAddress.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSCustomerPostalAddress.md rename to docs/pages/function_help/Helpers/Add-GSCustomerPostalAddress.md diff --git a/docs/Function Help/Helpers/Add-GSEventAttendee.md b/docs/pages/function_help/Helpers/Add-GSEventAttendee.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSEventAttendee.md rename to docs/pages/function_help/Helpers/Add-GSEventAttendee.md diff --git a/docs/Function Help/Helpers/Add-GSGmailSmtpMsa.md b/docs/pages/function_help/Helpers/Add-GSGmailSmtpMsa.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSGmailSmtpMsa.md rename to docs/pages/function_help/Helpers/Add-GSGmailSmtpMsa.md diff --git a/docs/Function Help/Helpers/Add-GSUserAddress.md b/docs/pages/function_help/Helpers/Add-GSUserAddress.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserAddress.md rename to docs/pages/function_help/Helpers/Add-GSUserAddress.md diff --git a/docs/Function Help/Helpers/Add-GSUserEmail.md b/docs/pages/function_help/Helpers/Add-GSUserEmail.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserEmail.md rename to docs/pages/function_help/Helpers/Add-GSUserEmail.md diff --git a/docs/Function Help/Helpers/Add-GSUserExternalId.md b/docs/pages/function_help/Helpers/Add-GSUserExternalId.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserExternalId.md rename to docs/pages/function_help/Helpers/Add-GSUserExternalId.md diff --git a/docs/Function Help/Helpers/Add-GSUserIm.md b/docs/pages/function_help/Helpers/Add-GSUserIm.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserIm.md rename to docs/pages/function_help/Helpers/Add-GSUserIm.md diff --git a/docs/Function Help/Helpers/Add-GSUserLocation.md b/docs/pages/function_help/Helpers/Add-GSUserLocation.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserLocation.md rename to docs/pages/function_help/Helpers/Add-GSUserLocation.md diff --git a/docs/Function Help/Helpers/Add-GSUserOrganization.md b/docs/pages/function_help/Helpers/Add-GSUserOrganization.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserOrganization.md rename to docs/pages/function_help/Helpers/Add-GSUserOrganization.md diff --git a/docs/Function Help/Helpers/Add-GSUserPhone.md b/docs/pages/function_help/Helpers/Add-GSUserPhone.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserPhone.md rename to docs/pages/function_help/Helpers/Add-GSUserPhone.md diff --git a/docs/Function Help/Helpers/Add-GSUserRelation.md b/docs/pages/function_help/Helpers/Add-GSUserRelation.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserRelation.md rename to docs/pages/function_help/Helpers/Add-GSUserRelation.md diff --git a/docs/Function Help/Helpers/Add-GSUserSchemaField.md b/docs/pages/function_help/Helpers/Add-GSUserSchemaField.md similarity index 100% rename from docs/Function Help/Helpers/Add-GSUserSchemaField.md rename to docs/pages/function_help/Helpers/Add-GSUserSchemaField.md diff --git a/docs/Function Help/Helpers/Block-CoreCLREncryptionWarning.md b/docs/pages/function_help/Helpers/Block-CoreCLREncryptionWarning.md similarity index 100% rename from docs/Function Help/Helpers/Block-CoreCLREncryptionWarning.md rename to docs/pages/function_help/Helpers/Block-CoreCLREncryptionWarning.md diff --git a/docs/Function Help/Helpers/Compare-ModuleVersion.md b/docs/pages/function_help/Helpers/Compare-ModuleVersion.md similarity index 100% rename from docs/Function Help/Helpers/Compare-ModuleVersion.md rename to docs/pages/function_help/Helpers/Compare-ModuleVersion.md diff --git a/docs/Function Help/Helpers/Unblock-CoreCLREncryptionWarning.md b/docs/pages/function_help/Helpers/Unblock-CoreCLREncryptionWarning.md similarity index 100% rename from docs/Function Help/Helpers/Unblock-CoreCLREncryptionWarning.md rename to docs/pages/function_help/Helpers/Unblock-CoreCLREncryptionWarning.md diff --git a/docs/Function Help/Licensing/Get-GSUserLicense.md b/docs/pages/function_help/Licensing/Get-GSUserLicense.md similarity index 100% rename from docs/Function Help/Licensing/Get-GSUserLicense.md rename to docs/pages/function_help/Licensing/Get-GSUserLicense.md diff --git a/docs/Function Help/Licensing/Remove-GSUserLicense.md b/docs/pages/function_help/Licensing/Remove-GSUserLicense.md similarity index 100% rename from docs/Function Help/Licensing/Remove-GSUserLicense.md rename to docs/pages/function_help/Licensing/Remove-GSUserLicense.md diff --git a/docs/Function Help/Licensing/Set-GSUserLicense.md b/docs/pages/function_help/Licensing/Set-GSUserLicense.md similarity index 100% rename from docs/Function Help/Licensing/Set-GSUserLicense.md rename to docs/pages/function_help/Licensing/Set-GSUserLicense.md diff --git a/docs/Function Help/Licensing/Update-GSUserLicense.md b/docs/pages/function_help/Licensing/Update-GSUserLicense.md similarity index 100% rename from docs/Function Help/Licensing/Update-GSUserLicense.md rename to docs/pages/function_help/Licensing/Update-GSUserLicense.md diff --git a/docs/Function Help/Org Units/Get-GSOrganizationalUnit.md b/docs/pages/function_help/Org Units/Get-GSOrganizationalUnit.md similarity index 100% rename from docs/Function Help/Org Units/Get-GSOrganizationalUnit.md rename to docs/pages/function_help/Org Units/Get-GSOrganizationalUnit.md diff --git a/docs/Function Help/Org Units/New-GSOrganizationalUnit.md b/docs/pages/function_help/Org Units/New-GSOrganizationalUnit.md similarity index 100% rename from docs/Function Help/Org Units/New-GSOrganizationalUnit.md rename to docs/pages/function_help/Org Units/New-GSOrganizationalUnit.md diff --git a/docs/Function Help/Org Units/Remove-GSOrganizationalUnit.md b/docs/pages/function_help/Org Units/Remove-GSOrganizationalUnit.md similarity index 100% rename from docs/Function Help/Org Units/Remove-GSOrganizationalUnit.md rename to docs/pages/function_help/Org Units/Remove-GSOrganizationalUnit.md diff --git a/docs/Function Help/Org Units/Update-GSOrganizationalUnit.md b/docs/pages/function_help/Org Units/Update-GSOrganizationalUnit.md similarity index 100% rename from docs/Function Help/Org Units/Update-GSOrganizationalUnit.md rename to docs/pages/function_help/Org Units/Update-GSOrganizationalUnit.md diff --git a/docs/Function Help/Reports/Get-GSActivityReport.md b/docs/pages/function_help/Reports/Get-GSActivityReport.md similarity index 100% rename from docs/Function Help/Reports/Get-GSActivityReport.md rename to docs/pages/function_help/Reports/Get-GSActivityReport.md diff --git a/docs/Function Help/Reports/Get-GSUsageReport.md b/docs/pages/function_help/Reports/Get-GSUsageReport.md similarity index 100% rename from docs/Function Help/Reports/Get-GSUsageReport.md rename to docs/pages/function_help/Reports/Get-GSUsageReport.md diff --git a/docs/Function Help/Resources/Get-GSResource.md b/docs/pages/function_help/Resources/Get-GSResource.md similarity index 100% rename from docs/Function Help/Resources/Get-GSResource.md rename to docs/pages/function_help/Resources/Get-GSResource.md diff --git a/docs/Function Help/Resources/New-GSResource.md b/docs/pages/function_help/Resources/New-GSResource.md similarity index 100% rename from docs/Function Help/Resources/New-GSResource.md rename to docs/pages/function_help/Resources/New-GSResource.md diff --git a/docs/Function Help/Resources/Remove-GSResource.md b/docs/pages/function_help/Resources/Remove-GSResource.md similarity index 100% rename from docs/Function Help/Resources/Remove-GSResource.md rename to docs/pages/function_help/Resources/Remove-GSResource.md diff --git a/docs/Function Help/Resources/Update-GSResource.md b/docs/pages/function_help/Resources/Update-GSResource.md similarity index 100% rename from docs/Function Help/Resources/Update-GSResource.md rename to docs/pages/function_help/Resources/Update-GSResource.md diff --git a/docs/Function Help/Role Assignments/Get-GSAdminRoleAssignment.md b/docs/pages/function_help/Role Assignments/Get-GSAdminRoleAssignment.md similarity index 100% rename from docs/Function Help/Role Assignments/Get-GSAdminRoleAssignment.md rename to docs/pages/function_help/Role Assignments/Get-GSAdminRoleAssignment.md diff --git a/docs/Function Help/Role Assignments/New-GSAdminRoleAssignment.md b/docs/pages/function_help/Role Assignments/New-GSAdminRoleAssignment.md similarity index 100% rename from docs/Function Help/Role Assignments/New-GSAdminRoleAssignment.md rename to docs/pages/function_help/Role Assignments/New-GSAdminRoleAssignment.md diff --git a/docs/Function Help/Role Assignments/Remove-GSAdminRoleAssignment.md b/docs/pages/function_help/Role Assignments/Remove-GSAdminRoleAssignment.md similarity index 100% rename from docs/Function Help/Role Assignments/Remove-GSAdminRoleAssignment.md rename to docs/pages/function_help/Role Assignments/Remove-GSAdminRoleAssignment.md diff --git a/docs/Function Help/RoleAssignments/Get-GSAdminRoleAssignment.md b/docs/pages/function_help/RoleAssignments/Get-GSAdminRoleAssignment.md similarity index 100% rename from docs/Function Help/RoleAssignments/Get-GSAdminRoleAssignment.md rename to docs/pages/function_help/RoleAssignments/Get-GSAdminRoleAssignment.md diff --git a/docs/Function Help/RoleAssignments/New-GSAdminRoleAssignment.md b/docs/pages/function_help/RoleAssignments/New-GSAdminRoleAssignment.md similarity index 100% rename from docs/Function Help/RoleAssignments/New-GSAdminRoleAssignment.md rename to docs/pages/function_help/RoleAssignments/New-GSAdminRoleAssignment.md diff --git a/docs/Function Help/RoleAssignments/Remove-GSAdminRoleAssignment.md b/docs/pages/function_help/RoleAssignments/Remove-GSAdminRoleAssignment.md similarity index 100% rename from docs/Function Help/RoleAssignments/Remove-GSAdminRoleAssignment.md rename to docs/pages/function_help/RoleAssignments/Remove-GSAdminRoleAssignment.md diff --git a/docs/Function Help/Roles/Get-GSAdminRole.md b/docs/pages/function_help/Roles/Get-GSAdminRole.md similarity index 100% rename from docs/Function Help/Roles/Get-GSAdminRole.md rename to docs/pages/function_help/Roles/Get-GSAdminRole.md diff --git a/docs/Function Help/Roles/New-GSAdminRole.md b/docs/pages/function_help/Roles/New-GSAdminRole.md similarity index 100% rename from docs/Function Help/Roles/New-GSAdminRole.md rename to docs/pages/function_help/Roles/New-GSAdminRole.md diff --git a/docs/Function Help/Roles/Remove-GSAdminRole.md b/docs/pages/function_help/Roles/Remove-GSAdminRole.md similarity index 100% rename from docs/Function Help/Roles/Remove-GSAdminRole.md rename to docs/pages/function_help/Roles/Remove-GSAdminRole.md diff --git a/docs/Function Help/Roles/Update-GSAdminRole.md b/docs/pages/function_help/Roles/Update-GSAdminRole.md similarity index 100% rename from docs/Function Help/Roles/Update-GSAdminRole.md rename to docs/pages/function_help/Roles/Update-GSAdminRole.md diff --git a/docs/Function Help/Schemas/Get-GSUserSchema.md b/docs/pages/function_help/Schemas/Get-GSUserSchema.md similarity index 100% rename from docs/Function Help/Schemas/Get-GSUserSchema.md rename to docs/pages/function_help/Schemas/Get-GSUserSchema.md diff --git a/docs/Function Help/Schemas/New-GSUserSchema.md b/docs/pages/function_help/Schemas/New-GSUserSchema.md similarity index 100% rename from docs/Function Help/Schemas/New-GSUserSchema.md rename to docs/pages/function_help/Schemas/New-GSUserSchema.md diff --git a/docs/Function Help/Schemas/Remove-GSUserSchema.md b/docs/pages/function_help/Schemas/Remove-GSUserSchema.md similarity index 100% rename from docs/Function Help/Schemas/Remove-GSUserSchema.md rename to docs/pages/function_help/Schemas/Remove-GSUserSchema.md diff --git a/docs/Function Help/Schemas/Set-GSUserSchema.md b/docs/pages/function_help/Schemas/Set-GSUserSchema.md similarity index 100% rename from docs/Function Help/Schemas/Set-GSUserSchema.md rename to docs/pages/function_help/Schemas/Set-GSUserSchema.md diff --git a/docs/Function Help/Schemas/Update-GSUserSchema.md b/docs/pages/function_help/Schemas/Update-GSUserSchema.md similarity index 100% rename from docs/Function Help/Schemas/Update-GSUserSchema.md rename to docs/pages/function_help/Schemas/Update-GSUserSchema.md diff --git a/docs/Function Help/Security/Get-GSChromeOSDevice.md b/docs/pages/function_help/Security/Get-GSChromeOSDevice.md similarity index 100% rename from docs/Function Help/Security/Get-GSChromeOSDevice.md rename to docs/pages/function_help/Security/Get-GSChromeOSDevice.md diff --git a/docs/Function Help/Security/Get-GSMobileDevice.md b/docs/pages/function_help/Security/Get-GSMobileDevice.md similarity index 100% rename from docs/Function Help/Security/Get-GSMobileDevice.md rename to docs/pages/function_help/Security/Get-GSMobileDevice.md diff --git a/docs/Function Help/Security/Get-GSUserASP.md b/docs/pages/function_help/Security/Get-GSUserASP.md similarity index 100% rename from docs/Function Help/Security/Get-GSUserASP.md rename to docs/pages/function_help/Security/Get-GSUserASP.md diff --git a/docs/Function Help/Security/Get-GSUserToken.md b/docs/pages/function_help/Security/Get-GSUserToken.md similarity index 100% rename from docs/Function Help/Security/Get-GSUserToken.md rename to docs/pages/function_help/Security/Get-GSUserToken.md diff --git a/docs/Function Help/Security/Get-GSUserVerificationCodes.md b/docs/pages/function_help/Security/Get-GSUserVerificationCodes.md similarity index 100% rename from docs/Function Help/Security/Get-GSUserVerificationCodes.md rename to docs/pages/function_help/Security/Get-GSUserVerificationCodes.md diff --git a/docs/Function Help/Security/New-GSUserVerificationCodes.md b/docs/pages/function_help/Security/New-GSUserVerificationCodes.md similarity index 100% rename from docs/Function Help/Security/New-GSUserVerificationCodes.md rename to docs/pages/function_help/Security/New-GSUserVerificationCodes.md diff --git a/docs/Function Help/Security/Remove-GSMobileDevice.md b/docs/pages/function_help/Security/Remove-GSMobileDevice.md similarity index 100% rename from docs/Function Help/Security/Remove-GSMobileDevice.md rename to docs/pages/function_help/Security/Remove-GSMobileDevice.md diff --git a/docs/Function Help/Security/Remove-GSUserASP.md b/docs/pages/function_help/Security/Remove-GSUserASP.md similarity index 100% rename from docs/Function Help/Security/Remove-GSUserASP.md rename to docs/pages/function_help/Security/Remove-GSUserASP.md diff --git a/docs/Function Help/Security/Remove-GSUserToken.md b/docs/pages/function_help/Security/Remove-GSUserToken.md similarity index 100% rename from docs/Function Help/Security/Remove-GSUserToken.md rename to docs/pages/function_help/Security/Remove-GSUserToken.md diff --git a/docs/Function Help/Security/Revoke-GSUserVerificationCodes.md b/docs/pages/function_help/Security/Revoke-GSUserVerificationCodes.md similarity index 100% rename from docs/Function Help/Security/Revoke-GSUserVerificationCodes.md rename to docs/pages/function_help/Security/Revoke-GSUserVerificationCodes.md diff --git a/docs/Function Help/Security/Update-GSChromeOSDevice.md b/docs/pages/function_help/Security/Update-GSChromeOSDevice.md similarity index 100% rename from docs/Function Help/Security/Update-GSChromeOSDevice.md rename to docs/pages/function_help/Security/Update-GSChromeOSDevice.md diff --git a/docs/Function Help/Security/Update-GSMobileDevice.md b/docs/pages/function_help/Security/Update-GSMobileDevice.md similarity index 100% rename from docs/Function Help/Security/Update-GSMobileDevice.md rename to docs/pages/function_help/Security/Update-GSMobileDevice.md diff --git a/docs/Function Help/Sheets/Clear-GSSheet.md b/docs/pages/function_help/Sheets/Clear-GSSheet.md similarity index 100% rename from docs/Function Help/Sheets/Clear-GSSheet.md rename to docs/pages/function_help/Sheets/Clear-GSSheet.md diff --git a/docs/Function Help/Sheets/Copy-GSSheet.md b/docs/pages/function_help/Sheets/Copy-GSSheet.md similarity index 100% rename from docs/Function Help/Sheets/Copy-GSSheet.md rename to docs/pages/function_help/Sheets/Copy-GSSheet.md diff --git a/docs/Function Help/Sheets/Export-GSSheet.md b/docs/pages/function_help/Sheets/Export-GSSheet.md similarity index 100% rename from docs/Function Help/Sheets/Export-GSSheet.md rename to docs/pages/function_help/Sheets/Export-GSSheet.md diff --git a/docs/Function Help/Sheets/Get-GSSheetInfo.md b/docs/pages/function_help/Sheets/Get-GSSheetInfo.md similarity index 100% rename from docs/Function Help/Sheets/Get-GSSheetInfo.md rename to docs/pages/function_help/Sheets/Get-GSSheetInfo.md diff --git a/docs/Function Help/Sheets/Import-GSSheet.md b/docs/pages/function_help/Sheets/Import-GSSheet.md similarity index 100% rename from docs/Function Help/Sheets/Import-GSSheet.md rename to docs/pages/function_help/Sheets/Import-GSSheet.md diff --git a/docs/Function Help/Sheets/New-GSSheet.md b/docs/pages/function_help/Sheets/New-GSSheet.md similarity index 100% rename from docs/Function Help/Sheets/New-GSSheet.md rename to docs/pages/function_help/Sheets/New-GSSheet.md diff --git a/docs/Function Help/Tasks/Clear-GSTasklist.md b/docs/pages/function_help/Tasks/Clear-GSTasklist.md similarity index 100% rename from docs/Function Help/Tasks/Clear-GSTasklist.md rename to docs/pages/function_help/Tasks/Clear-GSTasklist.md diff --git a/docs/Function Help/Tasks/Get-GSTask.md b/docs/pages/function_help/Tasks/Get-GSTask.md similarity index 100% rename from docs/Function Help/Tasks/Get-GSTask.md rename to docs/pages/function_help/Tasks/Get-GSTask.md diff --git a/docs/Function Help/Tasks/Get-GSTasklist.md b/docs/pages/function_help/Tasks/Get-GSTasklist.md similarity index 100% rename from docs/Function Help/Tasks/Get-GSTasklist.md rename to docs/pages/function_help/Tasks/Get-GSTasklist.md diff --git a/docs/Function Help/Tasks/Move-GSTask.md b/docs/pages/function_help/Tasks/Move-GSTask.md similarity index 100% rename from docs/Function Help/Tasks/Move-GSTask.md rename to docs/pages/function_help/Tasks/Move-GSTask.md diff --git a/docs/Function Help/Tasks/New-GSTask.md b/docs/pages/function_help/Tasks/New-GSTask.md similarity index 100% rename from docs/Function Help/Tasks/New-GSTask.md rename to docs/pages/function_help/Tasks/New-GSTask.md diff --git a/docs/Function Help/Tasks/New-GSTasklist.md b/docs/pages/function_help/Tasks/New-GSTasklist.md similarity index 100% rename from docs/Function Help/Tasks/New-GSTasklist.md rename to docs/pages/function_help/Tasks/New-GSTasklist.md diff --git a/docs/Function Help/Tasks/Remove-GSTask.md b/docs/pages/function_help/Tasks/Remove-GSTask.md similarity index 100% rename from docs/Function Help/Tasks/Remove-GSTask.md rename to docs/pages/function_help/Tasks/Remove-GSTask.md diff --git a/docs/Function Help/Tasks/Remove-GSTasklist.md b/docs/pages/function_help/Tasks/Remove-GSTasklist.md similarity index 100% rename from docs/Function Help/Tasks/Remove-GSTasklist.md rename to docs/pages/function_help/Tasks/Remove-GSTasklist.md diff --git a/docs/Function Help/Tasks/Update-GSTask.md b/docs/pages/function_help/Tasks/Update-GSTask.md similarity index 100% rename from docs/Function Help/Tasks/Update-GSTask.md rename to docs/pages/function_help/Tasks/Update-GSTask.md diff --git a/docs/Function Help/Tasks/Update-GSTasklist.md b/docs/pages/function_help/Tasks/Update-GSTasklist.md similarity index 100% rename from docs/Function Help/Tasks/Update-GSTasklist.md rename to docs/pages/function_help/Tasks/Update-GSTasklist.md diff --git a/docs/Function Help/URL Shortener/Get-GSShortUrl.md b/docs/pages/function_help/URL Shortener/Get-GSShortUrl.md similarity index 100% rename from docs/Function Help/URL Shortener/Get-GSShortUrl.md rename to docs/pages/function_help/URL Shortener/Get-GSShortUrl.md diff --git a/docs/Function Help/URL Shortener/New-GSShortUrl.md b/docs/pages/function_help/URL Shortener/New-GSShortUrl.md similarity index 100% rename from docs/Function Help/URL Shortener/New-GSShortUrl.md rename to docs/pages/function_help/URL Shortener/New-GSShortUrl.md diff --git a/docs/Function Help/Users/Get-GSUser.md b/docs/pages/function_help/Users/Get-GSUser.md similarity index 100% rename from docs/Function Help/Users/Get-GSUser.md rename to docs/pages/function_help/Users/Get-GSUser.md diff --git a/docs/Function Help/Users/Get-GSUserAlias.md b/docs/pages/function_help/Users/Get-GSUserAlias.md similarity index 100% rename from docs/Function Help/Users/Get-GSUserAlias.md rename to docs/pages/function_help/Users/Get-GSUserAlias.md diff --git a/docs/Function Help/Users/Get-GSUserPhoto.md b/docs/pages/function_help/Users/Get-GSUserPhoto.md similarity index 100% rename from docs/Function Help/Users/Get-GSUserPhoto.md rename to docs/pages/function_help/Users/Get-GSUserPhoto.md diff --git a/docs/Function Help/Users/New-GSUser.md b/docs/pages/function_help/Users/New-GSUser.md similarity index 100% rename from docs/Function Help/Users/New-GSUser.md rename to docs/pages/function_help/Users/New-GSUser.md diff --git a/docs/Function Help/Users/New-GSUserAlias.md b/docs/pages/function_help/Users/New-GSUserAlias.md similarity index 100% rename from docs/Function Help/Users/New-GSUserAlias.md rename to docs/pages/function_help/Users/New-GSUserAlias.md diff --git a/docs/Function Help/Users/Remove-GSUser.md b/docs/pages/function_help/Users/Remove-GSUser.md similarity index 100% rename from docs/Function Help/Users/Remove-GSUser.md rename to docs/pages/function_help/Users/Remove-GSUser.md diff --git a/docs/Function Help/Users/Remove-GSUserAlias.md b/docs/pages/function_help/Users/Remove-GSUserAlias.md similarity index 100% rename from docs/Function Help/Users/Remove-GSUserAlias.md rename to docs/pages/function_help/Users/Remove-GSUserAlias.md diff --git a/docs/Function Help/Users/Remove-GSUserPhoto.md b/docs/pages/function_help/Users/Remove-GSUserPhoto.md similarity index 100% rename from docs/Function Help/Users/Remove-GSUserPhoto.md rename to docs/pages/function_help/Users/Remove-GSUserPhoto.md diff --git a/docs/Function Help/Users/Restore-GSUser.md b/docs/pages/function_help/Users/Restore-GSUser.md similarity index 100% rename from docs/Function Help/Users/Restore-GSUser.md rename to docs/pages/function_help/Users/Restore-GSUser.md diff --git a/docs/Function Help/Users/Sync-GSUserCache.md b/docs/pages/function_help/Users/Sync-GSUserCache.md similarity index 100% rename from docs/Function Help/Users/Sync-GSUserCache.md rename to docs/pages/function_help/Users/Sync-GSUserCache.md diff --git a/docs/Function Help/Users/Update-GSUser.md b/docs/pages/function_help/Users/Update-GSUser.md similarity index 100% rename from docs/Function Help/Users/Update-GSUser.md rename to docs/pages/function_help/Users/Update-GSUser.md diff --git a/docs/Function Help/Users/Update-GSUserPhoto.md b/docs/pages/function_help/Users/Update-GSUserPhoto.md similarity index 100% rename from docs/Function Help/Users/Update-GSUserPhoto.md rename to docs/pages/function_help/Users/Update-GSUserPhoto.md From ae59ad0443e7f10bc922ca1dc77717e6fe3461b5 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:15:56 -0500 Subject: [PATCH 03/34] refactor(docs): move `Examples` directory to `pages\examples` --- docs/pages/examples/managing_users.md | 402 ++++++++++++++++++++++++++ 1 file changed, 402 insertions(+) create mode 100644 docs/pages/examples/managing_users.md diff --git a/docs/pages/examples/managing_users.md b/docs/pages/examples/managing_users.md new file mode 100644 index 00000000..dd041734 --- /dev/null +++ b/docs/pages/examples/managing_users.md @@ -0,0 +1,402 @@ +# Managing Users + +This section goes into detail on how to manage users, licenses and custom schemas using this module. + +## Getting User Info + +### Get-GSUser + +_This function pulls info for a specific user, including orgUnitPath, aliases, custom schema values, etc._ + +* Scope(s) required: + * + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab="Get All Users" +Get-GSUser -Filter * +``` + +```PowerShell tab= +Get-GSUser -User john.smith@domain.com -Projection Full -ViewType Admin_View +``` + +```PowerShell tab= +Get-GSUser john.smith@domain.com +``` + +#### Syntax + +```PowerShell tab= +Get-GSUser [-User] [-Projection {Basic | Custom | Full}] [-CustomFieldMask ] [-ViewType {Admin_View | Domain_Public}] [-Fields ] [-AccessToken ] [-P12KeyPath ] [-AppEmail ] [-AdminEmail ] [] +``` + +## Getting User Photos + +To get a user's photo, use the `Get-GSUserPhoto` function: + +### Get-GSUserPhoto + +* Scope(s) required: + * + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Get-GSUserPhoto john.smith@domain.com +``` + +#### Syntax + +```PowerShell tab= +Get-GSUserPhoto [-User] [-AccessToken ] [-P12KeyPath ] [-AppEmail ] [-AdminEmail ] [] +``` + +## Listing Users + +To list all users in the domain or in a specific organizational unit, use the `Get-GSUserList` function: + +### Get-GSUserList + +* Scope(s) required: + * + * +* Mandatory parameters: + * _None_ + +#### Examples + +```PowerShell tab= +Get-GSUserList +``` + +```PowerShell tab= +Get-GSUserList -Query "orgUnitPath='/Users/New Hires'" +``` + +```PowerShell tab= +Get-GSUserList -MaxResults 300 -Query "orgUnitPath='/Users'","email=john.smith@domain.com" +``` + +#### Syntax + +```PowerShell tab= +Get-GSUserList [[-Query] ] [[-PageSize] ] [[-OrderBy] ] [[-SortOrder] ] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [[-CustomerID] ] [[-Domain] ] [[-Preference] ] [] +``` + +## Creating Users + +To create new users, use the `New-GSUser` function: + +### New-GSUser + +* Scope(s) required: + * +* Mandatory parameters: + * PrimaryEmail (user's primary email, must be unique to the domain) + * GivenName (user's first name) + * FamilyName (user's last name) + * Password (user's initial password) + +#### Examples + +```PowerShell tab= +New-GSUser -PrimaryEmail john.smith@domain.com -GivenName John -FamilyName Smith -Password Password123 +``` + +```PowerShell tab= +New-GSUser -PrimaryEmail john.smith@domain.com -GivenName John -FamilyName Smith -Password Password123 -ChangePasswordAtNextLogin True -OrgUnitPath "/Users/New Hires" -IncludeInGlobalAddressList True +``` + +#### Syntax + +```PowerShell tab= +New-GSUser [-PrimaryEmail] [-GivenName] [-FamilyName] [-Password] [[-ChangePasswordAtNextLogin] ] [[-OrgUnitPath] ] [[-Suspended] ] [[-IncludeInGlobalAddressList] ] [[-IPWhitelisted] ] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [] +``` + +## Updating Users + +To update existing users, use the `Update-GSUser` function: + +### Update-GSUser + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Update-GSUser -User john.smith@domain.com -PrimaryEmail johnathan.smith@domain.com -GivenName Johnathan -Suspended False +``` + +#### Syntax + +```PowerShell tab= +Update-GSUser [-User] [[-PrimaryEmail] ] [[-GivenName] ] [[-FamilyName] ] [[-Password] ] [[-ChangePasswordAtNextLogin] ] [[-OrgUnitPath] ] [[-Suspended] ] [[-IncludeInGlobalAddressList] ] [[-IPWhitelisted] ] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [] +``` + +## Removing Users + +To remove users, use the `Remove-GSUser` function: + +### Remove-GSUser + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Remove-GSUser -User john.smith@domain.com -WhatIf +``` + +```PowerShell tab= +Remove-GSUser -User john.smith@domain.com -Confirm:$false +``` + +#### Syntax + +```PowerShell tab= +Remove-GSUser [-User] [[-AccessToken] ] [[-P12KeyPath] ] [[-AppEmail] ] [[-AdminEmail] ] [-WhatIf] [-Confirm] [] +``` + +## Restoring Users + +To undelete users, use the `Restore-GSUser` function: + +### Restore-GSUser + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + * OrgUnitPath (the Org Unit path to restore the user to) + +#### Examples + +```PowerShell tab= +Restore-GSUser -User john.smith@domain.com -OrgUnitPath "/Users" -WhatIf +``` + +```PowerShell tab= +Restore-GSUser -User john.smith@domain.com -OrgUnitPath "/Users" -Confirm:$false +``` + +#### Syntax + +```PowerShell tab= +Restore-GSUser [-User] [-OrgUnitPath] [-AccessToken ] [-P12KeyPath ] [-AppEmail ] [-AdminEmail ] [-WhatIf] [-Confirm] [] +``` + +*** + +## Getting License Info + +To get license info, use the `Get-GSUserLicense` function: + +### Get-GSUserLicense + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Get-GSUserLicense -User john.smith@domain.com +``` + +```PowerShell tab= +Get-GSUserLicense -User john.smith@domain.com -License Google-Vault-Former-Employee +``` + +#### Syntax + +```PowerShell tab= +Get-GSUserLicense [-License ] [-ProductID ] [-PageSize ] [-Limit ] [] + +Get-GSUserLicense [[-User] ] [-License ] [] +``` + +#### Listing All Licenses + +To list all licenses in the domain, use the `Get-GSUserLicense` function with no additional parameters + +## Removing Licenses + +To remove licenses, use the `Remove-GSUserLicense` function: + +### Remove-GSUserLicense + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Remove-GSUserLicense +``` + +#### Syntax + +```PowerShell tab= +Remove-GSUserLicense [-User] [-License] [-WhatIf] [-Confirm] [] +``` + + +## Setting Licenses + +To set licenses, use the `Set-GSUserLicense` function: + +### Set-GSUserLicense + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Set-GSUserLicense -User joe.smith@domain.com -License Google-Vault-Former-Employee +``` + +#### Syntax + +```PowerShell tab= + +Set-GSUserLicense [-User] [-License] [] + +``` + +## Updating Licenses + +To update licenses, use the `Update-GSUserLicense` function: + +### Update-GSUserLicense + +* Scope(s) required: + * +* Mandatory parameters: + * User (must be the primary email address of an existing user in the domain) + +#### Examples + +```PowerShell tab= +Update-GSUserLicense -User joe.smith@domain.com -License Google-Vault-Former-Employee +``` + +#### Syntax + +```PowerShell tab= +Update-GSUserLicense [[-User] ] [-License ] [] +``` + +*** + +## Getting Custom Schema Info + +To get info about a specific custom schema, use the `Get-GSUserSchema` function: + +### Get-GSUserSchema + +* Scope(s) required: + * + +#### Examples + +```PowerShell tab= +Get-GSUserSchema -SchemaId $schemaId +``` + +#### Syntax + +```PowerShell tab= +Get-GSUserSchema [[-SchemaId] ] [] +``` + +## Listing Custom Schemas + +To list all custom schemas, use the `Get-GSUserSchema` function and do not specify a SchemaId: + +#### Examples + +```PowerShell tab= +Get-GSUserSchema +``` + +## Creating Custom Schemas + +To create custom schemas, use the `New-GSUserSchema` function: + +### New-GSUserSchema + +* Scope(s) required: + * + +#### Examples + +```PowerShell tab= +New-GSUserSchema +``` + +#### Syntax + +```PowerShell tab= +New-GSUserSchema [-SchemaName] [-Fields] [] +``` + +## Removing Custom Schemas + +To remove custom schemas, use the `Remove-GSUserSchema` function: + +### Remove-GSUserSchema + +* Scope(s) required: + * + +#### Examples + +```PowerShell tab= +Remove-GSUserSchema +``` + +#### Syntax + +```PowerShell tab= +Remove-GSUserSchema [[-SchemaId] ] [-WhatIf] [-Confirm] [] +``` + +## Updating Custom Schemas + +To update custom schemas, use the `Update-GSUserSchema` function: + +### Update-GSUserSchema + +* Scope(s) required: + * + +#### Examples + +```PowerShell tab= +Update-GSUserSchema +``` + +#### Syntax + +```PowerShell tab= +Update-GSUserSchema [-SchemaId] [-SchemaName ] [-Fields ] [] +``` From b154d9eca82bd02b0840ab8aff75e1026df32967 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:16:30 -0500 Subject: [PATCH 04/34] refactor(docs): move `Multiple Configurations.md` to `pages\examples\multiple_configurations.md` --- .../examples/multiple_configurations.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{Multiple Configurations.md => pages/examples/multiple_configurations.md} (100%) diff --git a/docs/Multiple Configurations.md b/docs/pages/examples/multiple_configurations.md similarity index 100% rename from docs/Multiple Configurations.md rename to docs/pages/examples/multiple_configurations.md From 9b906b7ce3f96a0d7c048bff6d2cb43cc00bbfc3 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:26:55 -0500 Subject: [PATCH 05/34] refactor(docs): split `Initial Setup.md` into `pages\module_installation\module_installation.md` and `pages\initial_configuration\initial_configuration.md` --- .../initial_configuration.md | 9 ++ .../module_installation.md} | 92 +++++++++++++------ 2 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 docs/pages/initial_configuration/initial_configuration.md rename docs/{Initial Setup.md => pages/module_installation/module_installation.md} (87%) diff --git a/docs/pages/initial_configuration/initial_configuration.md b/docs/pages/initial_configuration/initial_configuration.md new file mode 100644 index 00000000..58a1a741 --- /dev/null +++ b/docs/pages/initial_configuration/initial_configuration.md @@ -0,0 +1,9 @@ +# Initial Configuration + +## Google Workspace + +### Google Workspace Super Admin + +### Google Workspace Standard User + +## Personal Google Account diff --git a/docs/Initial Setup.md b/docs/pages/module_installation/module_installation.md similarity index 87% rename from docs/Initial Setup.md rename to docs/pages/module_installation/module_installation.md index 21280227..fc6aec5d 100644 --- a/docs/Initial Setup.md +++ b/docs/pages/module_installation/module_installation.md @@ -1,63 +1,95 @@ -# Initial Setup - -Getting started with PSGSuite. +# Module Installation ## Prerequisites In order to use this module, you will need the following: -* PowerShell 4.0+ or PowerShell Core 6+ -* G Suite account (SuperAdmin needed for full functionality of the module) +* Version 2.36.4 and earlier: + * Windows PowerShell 4.0+ + * PowerShell 6.0+ +* Version 3.0.0 and newer: + * PowerShell 7.4+ +* Full Module Functionality: + * Google Workspace SuperAdmin account +* Partial Module Functionality: + * Google Workspace Standard account + * Personal Google account *** ## Installing the Module -### From the PowerShell Gallery +### [PowerShell Gallery](https://www.powershellgallery.com/packages/PSGSuite) + +#### Powershell Gallery Requirements -Installing items from the Gallery requires the latest version of the PowerShellGet module, which is available in Windows 10, in Windows Management Framework (WMF) 5.0, or in the MSI-based installer (for PowerShell 3 and 4). +* PowershellGet Module (latest version) + * Available in Windows 10 and later + * Available in [Windows Management Framework 5.0](http://aka.ms/wmf5download) + * Available in the PowerShell 3 and 4 MSI-based installer -**This will be slightly behind the GitHub repo. Please see below for installation instructions from the GitHub repo.** +??? info -1. Open Powershell and run the following command: + PowerShell Gallery releases will be slightly behind the GitHub repo. Please see [GitHub Release Page](#github-release-page) if you wish to install a newer version. -```PowerShell tab= +```powershell {linenums="1"} Install-Module -Name PSGSuite -Scope CurrentUser ``` -For more information, please visit the [PSGSuite page on the Powershell Gallery](https://www.powershellgallery.com/packages/PSGSuite) +### GitHub Release Page -### From the GitHub release page +??? info + The GitHub release page will be the same as the PowerShell Gallery. However, if you are looking for a specific version or a pre-release version, you may find it here first. -_**This will be equal to the Powershell Gallery, usually**_ +???+ warning + You **must** have the module 'Configuration' installed as a prerequisite. Installing the module from the repo source or the release page does not automatically install dependencies. -**IMPORTANT: You MUST have the module 'Configuration' installed as a prerequisite! Installing the module from the repo source or the release page does not automatically install dependencies!!** +1. Navigate to the [releases page](https://github.com/nferrell/PSGSuite/releases). +1. Expand `Assets` and download `PSGSuite.zip`. +1. Unblock the zip file before unzipping it - this is to prevent from having to unblock each file individually after unzipping. -1. [Click here](https://github.com/nferrell/PSGSuite/releases) to go to the latest releases, then download the *PSGSuite.zip* file attached to the release -2. Right-click the downloaded zip, select Properties, then unblock the file. - _This is to prevent having to unblock each file individually after unzipping._ -3. Unzip the archive. -4. (Optional) Place the module somewhere in your PSModulePath. - * You can view the paths listed by running the environment variable `$env:PSModulePath` + ```powershell {linenums="1"} + Unblock-File -Path C:\Path\To\PSGSuite.zip -Verbose + ``` -### Build from the GitHub repo +1. Unzip the archive. +1. Place the module somewhere in `$env:PSModulePath`. -_**Bleeding edge fans, contributors, etc**_ +### Build From Source -**IMPORTANT: You MUST have the module 'Configuration' installed as a prerequisite! Installing the module from the repo source or the release page does not automatically install dependencies!!** +??? note + This is intended for developers, contributors and bleeding edge fans. -1. Clone the repo to your computer: `git clone https://github.com/scrthq/PSGSuite.git` -2. Open the cloned directory: `cd PSGSuite` -3. Build the module: `.\build.ps1` +???+ warning + You **must** have the module 'Configuration' installed as a prerequisite. Installing the module from the repo source or the release page does not automatically install dependencies. -To import the compiled module in a new session, run this from the repo root: +1. Clone the repo to your computer -```PowerShell -Import-Module ./BuildOutput/PSGSuite -Force -``` + ```{linenums="1"} + git clone https://github.com/scrthq/PSGSuite.git + ``` + +1. Open the cloned directory + + ```{linenums="1"} + cd \\Path\To\PSGSuite + ``` + +1. Build the module + + ```powershell {linenums="1"} + .\build.ps1 + ``` + +1. Import the compiled module in a new session - from the repo root run the following: + + ```powershell {linenums="1"} + Import-Module ./BuildOutput/PSGSuite -Force + ``` *** + ## G Suite Users _with_ SuperAdmin access ### Creating the Project, Service Account and P12 Key in Google's Developer Console From 4d11f47b790d58de75b77587662dc1802dccb430 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:28:01 -0500 Subject: [PATCH 06/34] refactor(docs): improve formatting in `index.md` --- docs/index.md | 130 +++++++++++--------------------------------------- 1 file changed, 27 insertions(+), 103 deletions(-) diff --git a/docs/index.md b/docs/index.md index 22ac45b8..cc7bbaae 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,23 +1,29 @@ # PSGSuite +
+ Azure Pipelines      + Discord - Chat      + Slack - Chat      +

+
Codacy      + PowerShell Gallery      + GitHub Releases      + Date: Fri, 11 Apr 2025 23:28:09 -0500 Subject: [PATCH 07/34] feat(docs): add navigation configuration in `.nav.yml` --- docs/.nav.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 docs/.nav.yml diff --git a/docs/.nav.yml b/docs/.nav.yml new file mode 100644 index 00000000..27ae1fed --- /dev/null +++ b/docs/.nav.yml @@ -0,0 +1,7 @@ +nav: + - PSGSuite: index.md + - Module Installation: pages/module_installation/module_installation.md + - Initial Configuration: pages/initial_configuration/initial_configuration.md + - Examples: pages/examples + - Function Help: pages/function_help +append_unmatched: true \ No newline at end of file From 4b225db781b4adda04613dae39b762b8350cf99c Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:29:16 -0500 Subject: [PATCH 08/34] fix(docs): ensure newline at end of `.nav.yml` for proper formatting --- docs/.nav.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.nav.yml b/docs/.nav.yml index 27ae1fed..c0054a7e 100644 --- a/docs/.nav.yml +++ b/docs/.nav.yml @@ -4,4 +4,4 @@ nav: - Initial Configuration: pages/initial_configuration/initial_configuration.md - Examples: pages/examples - Function Help: pages/function_help -append_unmatched: true \ No newline at end of file +append_unmatched: true From aec231768f3532aaf3f4827b6225d06551149ec0 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sat, 12 Apr 2025 15:33:29 -0500 Subject: [PATCH 09/34] refactor(assets): move icons under `assets/icons` --- docs/{images => assets/icons}/icons-192.png | Bin docs/{images => assets/icons}/icons-512.png | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename docs/{images => assets/icons}/icons-192.png (100%) rename docs/{images => assets/icons}/icons-512.png (100%) diff --git a/docs/images/icons-192.png b/docs/assets/icons/icons-192.png similarity index 100% rename from docs/images/icons-192.png rename to docs/assets/icons/icons-192.png diff --git a/docs/images/icons-512.png b/docs/assets/icons/icons-512.png similarity index 100% rename from docs/images/icons-512.png rename to docs/assets/icons/icons-512.png From a46e5b1fe263d6681d62e110c0e0fe2a12b09339 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sat, 12 Apr 2025 15:34:13 -0500 Subject: [PATCH 10/34] refactor(manifest): update icon paths to use the correct assets directory --- docs/manifest.webmanifest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manifest.webmanifest b/docs/manifest.webmanifest index 7a85891d..41074ab4 100644 --- a/docs/manifest.webmanifest +++ b/docs/manifest.webmanifest @@ -3,12 +3,12 @@ "name": "PSGSuite Docs", "icons": [ { - "src": "/images/icons-192.png", + "src": "/assets/icons/icons-192.png", "type": "image/png", "sizes": "192x192" }, { - "src": "/images/icons-512.png", + "src": "/assets/icons/icons-512.png", "type": "image/png", "sizes": "512x512" } From bcfa5615edb1231d149bcc007fe9256945128c4f Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sat, 12 Apr 2025 18:04:47 -0500 Subject: [PATCH 11/34] refactor(styles): enhance styling css - use `@media (prefers-color-scheme)` to apply different styles for light and dark modes. - adjusts background and text colors for better readability in both light and dark modes. --- docs/stylesheets/extra.css | 55 +++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 35d0a905..7e88a71a 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,25 +1,32 @@ +/* General Styling for Superfences Tabs */ .superfences-tabs { display: flex; position: relative; flex-wrap: wrap; + margin-bottom: 1em; } .superfences-tabs .highlight { - background: #ddd; + background: var(--md-code-bg-color, #f5f5f5); /* Use theme variable or fallback */ } .superfences-tabs .superfences-content { display: none; order: 99; width: 100%; + background: var(--md-default-bg-color, #ffffff); /* Use theme variable or fallback */ + padding: 1em; + border-radius: 4px; } .superfences-tabs label { width: auto; margin: 0 0.5em; - padding: 0.25em; + padding: 0.25em 0.5em; font-size: 120%; cursor: pointer; + border-radius: 4px; + transition: background 0.3s, color 0.3s; } .superfences-tabs input { @@ -28,13 +35,53 @@ } .superfences-tabs input:nth-child(n+1) { - color: #333333; + color: var(--md-text-color, #333333); /* Use theme variable or fallback */ } .superfences-tabs input:nth-child(n+1):checked + label { - color: #2196F3; + color: var(--md-primary-fg-color, #2196F3); /* Use theme variable or fallback */ + font-weight: bold; } .superfences-tabs input:nth-child(n+1):checked + label + .superfences-content { display: block; } + +/* Light Mode Specific Styling */ +@media (prefers-color-scheme: light) { + .superfences-tabs .highlight { + background: #f5f5f5; + } + + .superfences-tabs label { + background: #e0e0e0; + color: #333333; + } + + .superfences-tabs input:nth-child(n+1):checked + label { + background: #ffffff; + color: #2196F3; + } +} + +/* Dark Mode Specific Styling */ +@media (prefers-color-scheme: dark) { + .superfences-tabs .highlight { + background: #333333; + } + + .superfences-tabs label { + background: #444444; + color: #cccccc; + } + + .superfences-tabs input:nth-child(n+1):checked + label { + background: #555555; + color: #90caf9; /* Lighter blue for better contrast in dark mode */ + } + + .superfences-tabs .superfences-content { + background: #222222; + color: #ffffff; + } +} \ No newline at end of file From 86828ed9d08706417330195b052b6f4acb6a14bb Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sat, 12 Apr 2025 18:24:56 -0500 Subject: [PATCH 12/34] feat(config): enhance mkdocs.yml with modern features and improved organization - added support for external navigation structure with `.nav.yml` - added dynamic dark/light mode support using `palette` with `prefers-color-scheme`. - introduced new plugins: - `awesome-nav` for enhanced navigation customization. - `glightbox` for advanced image handling with zoom and captions. - `open-in-new-tab` to ensure external links open in a new tab. - expanded Markdown extensions: - Added `pymdownx.highlight` with `auto_title` for better code block titles. - improved organization: - grouped sections logically (theme, plugins, extensions, extras). - alphabetized plugins and extensions for better readability. - removed deprecated configurations like `google_analytics`. --- docs/.nav.yml | 10 +++- mkdocs.yml | 144 +++++++++++++++++++++++++++++++------------------- 2 files changed, 98 insertions(+), 56 deletions(-) diff --git a/docs/.nav.yml b/docs/.nav.yml index c0054a7e..7432a562 100644 --- a/docs/.nav.yml +++ b/docs/.nav.yml @@ -1,7 +1,13 @@ nav: - PSGSuite: index.md - - Module Installation: pages/module_installation/module_installation.md - - Initial Configuration: pages/initial_configuration/initial_configuration.md + - Installation: + - Overview: pages/installation/overview.md + - Powershell Gallery: pages/installation/powershell_gallery.md + - GitHub Releases: pages/installation/github_releases.md + - Building From Source: pages/installation/building_from_source.md + - First Time Configuration: + - Google Cloud: pages/first_time_configuration/google_cloud_configuration.md + - Module Configuration: pages/first_time_configuration/module_configuration.md - Examples: pages/examples - Function Help: pages/function_help append_unmatched: true diff --git a/mkdocs.yml b/mkdocs.yml index 28bf9364..85aa19e8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,71 +1,107 @@ # Project information -site_name: 'PSGSuite' -site_description: 'PowerShell for G Suite' -site_author: 'Nate Ferrell' -site_url: 'https://psgsuite.io' +site_name: PSGSuite +site_description: PSGSuite is a Powershell module for Google/Google Workspace API calls wrapped in handy functions. Authentication can be established using a service account via a P12 key to negate the consent popup and allow for a greater hands off automation capabilities. +site_author: Nate Ferrell +site_url: https://psgsuite.io # Repository -repo_name: 'SCRT-HQ/PSGSuite' -repo_url: 'https://github.com/SCRT-HQ/PSGSuite' -edit_uri: 'edit/main/docs' +repo_name: SCRT-HQ/PSGSuite +repo_url: https://github.com/SCRT-HQ/PSGSuite +edit_uri: edit/main/docs # Copyright -copyright: 'Copyright © 2015 - 2024 Nate Ferrell' +copyright: 'Copyright © 2015 - 2025 Nate Ferrell' -# Configuration +# Theme configuration theme: - name: 'material' - language: 'en' - logo: - icon: 'keyboard' + name: material + logo: assets/icons/icons-512.png + favicon: assets/icons/icons-192.png + language: en + features: + - announce.dismiss + - content.code.annotate + - content.code.copy + - content.tabs.link + - content.tooltips + - header.autohide + - navigation.footer + - navigation.instant + - navigation.tabs + - navigation.tabs.sticky + - navigation.top + - navigation.tracking + - search.highlight + - search.share + - search.suggest + - toc.follow palette: - primary: 'blue' - accent: 'green' - font: - text: 'Roboto' - code: 'Roboto Mono' - feature: - tabs: true + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: custom + toggle: + icon: material/theme-light-dark + name: Light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: custom + toggle: + icon: material/theme-light-dark + name: Dark mode -# Customization -extra: - disqus: 'psgsuite' - manifest: 'manifest.webmanifest' - search: - tokenizer: '\s+' - social: - - type: 'github' - link: 'https://github.com/scrthq' - - type: 'twitter' - link: 'https://twitter.com/scrthq' - - type: 'linkedin' - link: 'https://linkedin.com/in/scrthq' - -extra_css: - - 'stylesheets/extra.css' - -# Google Analytics -google_analytics: - - 'UA-101420411-4' - - 'auto' +# Plugins +plugins: + - awesome-nav + - glightbox: + auto_caption: false + caption_position: bottom + draggable: true + effect: zoom + height: auto + loop: false + touchNavigation: true + width: 100% + zoomable: true + - open-in-new-tab + - search + - social -# Extensions +# Markdown extensions markdown_extensions: - admonition - - pymdownx.superfences + - attr_list + - md_in_html + - pymdownx.critic + - pymdownx.details - pymdownx.emoji - - pymdownx.tasklist - - pymdownx.mark + - pymdownx.highlight: + auto_title: true + auto_title_map: + Text Only: Plaintext - pymdownx.keys - - pymdownx.details - - pymdownx.critic - - codehilite: - guess_lang: true + - pymdownx.mark + - pymdownx.superfences + - pymdownx.tasklist + - tables - toc: permalink: true -# Plugins -plugins: - - search - - minify: - minify_html: true +# Extra configurations +extra_css: + - stylesheets/extra.css + +extra: + analytics: + provider: google + property: UA-101420411-4 + disqus: psgsuite + manifest: manifest.webmanifest + search: + tokenizer: '\s+' + social: + - icon: material/github + link: https://github.com/scrthq + - icon: material/twitter + link: https://twitter.com/scrthq + - icon: material/linkedin + link: https://linkedin.com/in/scrthq From 1523978e8b6b7cc7faee6fa599b025f7376c510d Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sat, 12 Apr 2025 20:10:25 -0500 Subject: [PATCH 13/34] refactor(docs): break up `module_installtion.md` into its own individual pages --- .../installation/building_from_source.md | 37 ++++++++ docs/pages/installation/github_releases.md | 18 ++++ .../installation.md} | 85 +------------------ docs/pages/installation/overview.md | 14 +++ docs/pages/installation/powershell_gallery.md | 18 ++++ 5 files changed, 88 insertions(+), 84 deletions(-) create mode 100644 docs/pages/installation/building_from_source.md create mode 100644 docs/pages/installation/github_releases.md rename docs/pages/{module_installation/module_installation.md => installation/installation.md} (86%) create mode 100644 docs/pages/installation/overview.md create mode 100644 docs/pages/installation/powershell_gallery.md diff --git a/docs/pages/installation/building_from_source.md b/docs/pages/installation/building_from_source.md new file mode 100644 index 00000000..76328fad --- /dev/null +++ b/docs/pages/installation/building_from_source.md @@ -0,0 +1,37 @@ +# Building From Source + +???+ danger + This is intended for developers, contributors and bleeding edge fans. + +???+ warning + You **must** have the module 'Configuration' installed as a prerequisite. Installing the module from the repo source or the release page does not automatically install dependencies. + +1. Clone the repo locally: + +```{linenums="1"} +git clone https://github.com/scrthq/PSGSuite.git +``` + +1. Navigate to the cloned repo: + +```{linenums="1"} +cd \\path\to\PSGSuite +``` + +1. To build the module locally to test changes run `build.ps1` at the root of the repo: + +```powershell {linenums="1"} +.\build.ps1 +``` + +1. To run the Pester tests locally to test changes run `build.ps1` with the `-Task` parameter set to `Test` at the root of the repo: + +```powershell {linenums="1"} +.\build.ps1 -Task Test +``` + +1. Import the compiled module in a new session - from the root of the repo run the following: + +```powershell {linenums="1"} +Import-Module .\BuildOutput\PSGSuite -Force +``` diff --git a/docs/pages/installation/github_releases.md b/docs/pages/installation/github_releases.md new file mode 100644 index 00000000..1478a413 --- /dev/null +++ b/docs/pages/installation/github_releases.md @@ -0,0 +1,18 @@ +# GitHub Releases Page + +???+ info + The GitHub releases page will likely be the same as the PowerShell Gallery. However, if you are looking for a specific version or a pre-release version, you may find it here first. + +???+ warning + You **must** have the module 'Configuration' installed as a prerequisite. Installing the module from the repo source or the release page does not automatically install dependencies. + +1. Navigate to the [releases page](https://github.com/SCRT-HQ/PSGSuite/releases). +1. Expand `Assets` and download `PSGSuite.zip`. +1. Unblock the zip file before unzipping it - this is to prevent from having to unblock each file individually after unzipping. + + ```powershell {linenums="1"} + Unblock-File -Path C:\Path\To\PSGSuite.zip -Verbose + ``` + +1. Unzip the archive. +1. Place the module somewhere in `$env:PSModulePath`. diff --git a/docs/pages/module_installation/module_installation.md b/docs/pages/installation/installation.md similarity index 86% rename from docs/pages/module_installation/module_installation.md rename to docs/pages/installation/installation.md index fc6aec5d..544a60ab 100644 --- a/docs/pages/module_installation/module_installation.md +++ b/docs/pages/installation/installation.md @@ -1,91 +1,7 @@ # Module Installation -## Prerequisites -In order to use this module, you will need the following: -* Version 2.36.4 and earlier: - * Windows PowerShell 4.0+ - * PowerShell 6.0+ -* Version 3.0.0 and newer: - * PowerShell 7.4+ -* Full Module Functionality: - * Google Workspace SuperAdmin account -* Partial Module Functionality: - * Google Workspace Standard account - * Personal Google account - -*** - -## Installing the Module - -### [PowerShell Gallery](https://www.powershellgallery.com/packages/PSGSuite) - -#### Powershell Gallery Requirements - -* PowershellGet Module (latest version) - * Available in Windows 10 and later - * Available in [Windows Management Framework 5.0](http://aka.ms/wmf5download) - * Available in the PowerShell 3 and 4 MSI-based installer - -??? info - - PowerShell Gallery releases will be slightly behind the GitHub repo. Please see [GitHub Release Page](#github-release-page) if you wish to install a newer version. - -```powershell {linenums="1"} -Install-Module -Name PSGSuite -Scope CurrentUser -``` - -### GitHub Release Page - -??? info - The GitHub release page will be the same as the PowerShell Gallery. However, if you are looking for a specific version or a pre-release version, you may find it here first. - -???+ warning - You **must** have the module 'Configuration' installed as a prerequisite. Installing the module from the repo source or the release page does not automatically install dependencies. - -1. Navigate to the [releases page](https://github.com/nferrell/PSGSuite/releases). -1. Expand `Assets` and download `PSGSuite.zip`. -1. Unblock the zip file before unzipping it - this is to prevent from having to unblock each file individually after unzipping. - - ```powershell {linenums="1"} - Unblock-File -Path C:\Path\To\PSGSuite.zip -Verbose - ``` - -1. Unzip the archive. -1. Place the module somewhere in `$env:PSModulePath`. - -### Build From Source - -??? note - This is intended for developers, contributors and bleeding edge fans. - -???+ warning - You **must** have the module 'Configuration' installed as a prerequisite. Installing the module from the repo source or the release page does not automatically install dependencies. - -1. Clone the repo to your computer - - ```{linenums="1"} - git clone https://github.com/scrthq/PSGSuite.git - ``` - -1. Open the cloned directory - - ```{linenums="1"} - cd \\Path\To\PSGSuite - ``` - -1. Build the module - - ```powershell {linenums="1"} - .\build.ps1 - ``` - -1. Import the compiled module in a new session - from the repo root run the following: - - ```powershell {linenums="1"} - Import-Module ./BuildOutput/PSGSuite -Force - ``` *** @@ -111,6 +27,7 @@ Install-Module -Name PSGSuite -Scope CurrentUser * Hangouts Chat API * People API * Tasks API +* 2. Leave the dropdown set to 'Create a project' and click the blue 'Continue' button. * If you encounter an error stating that `You may not have permission to create projects in this organization. Contact your Google Apps account admin to verify you have the Project Creator role.`, you may need to manually create a project instead as noted in [Issue #116](https://github.com/scrthq/PSGSuite/issues/116). If you are still unable to create a project manually, you will need to contact your domain's G Suite administrators to have them place you in the Project Creator role or create the project for you. 3. On the next screen, it will run the wizard to assist in adding credentials. Click the blue link that says 'service account' right above the '**Which API are you using?**' question to go to the Service Account Creation page. diff --git a/docs/pages/installation/overview.md b/docs/pages/installation/overview.md new file mode 100644 index 00000000..4c549a49 --- /dev/null +++ b/docs/pages/installation/overview.md @@ -0,0 +1,14 @@ +# Overview + +In order to use this module, you will need the following: + +* Version 2.36.4 and earlier: + * Windows PowerShell 4.0+ + * PowerShell 6.0+ +* Version 3.0.0 and newer: + * PowerShell 7.4+ +* Full Module Functionality: + * Google Workspace SuperAdmin account +* Partial Module Functionality: + * Google Workspace Standard account + * Personal Google account diff --git a/docs/pages/installation/powershell_gallery.md b/docs/pages/installation/powershell_gallery.md new file mode 100644 index 00000000..30643d40 --- /dev/null +++ b/docs/pages/installation/powershell_gallery.md @@ -0,0 +1,18 @@ +# Powershell Gallery + +* [PowerShell Gallery](https://www.powershellgallery.com/packages/PSGSuite) + +## Powershell Gallery Requirements + +* [PowershellGet Module](https://learn.microsoft.com/en-us/powershell/module/powershellget/?view=powershellget-3.x) + * Available in Windows 10 and later + * Available in [Windows Management Framework 5.0](http://aka.ms/wmf5download) + * Available in the PowerShell 3 and 4 MSI-based installer + +???+ info + + Powershell Gallery versions might not include *all* pre-release versions. Please visit [GitHub Releases](../installation/github_releases.md) for versions that might not be available in the gallery. + +```powershell {linenums="1"} +Install-Module -Name PSGSuite -Scope CurrentUser +``` From 3dd6fdf557f3300c94c83223f58abf82eba74a62 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sun, 13 Apr 2025 12:21:28 -0500 Subject: [PATCH 14/34] refactor(docs): rename multiple_configurations.md - renamed `multiple_configurations.md` to `multi_use_configurations.md` --- .../pages/examples/multi_use_configuration.md | 28 +++++++++++++++++++ .../pages/examples/multiple_configurations.md | 26 ----------------- 2 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 docs/pages/examples/multi_use_configuration.md delete mode 100644 docs/pages/examples/multiple_configurations.md diff --git a/docs/pages/examples/multi_use_configuration.md b/docs/pages/examples/multi_use_configuration.md new file mode 100644 index 00000000..5cb7c2f2 --- /dev/null +++ b/docs/pages/examples/multi_use_configuration.md @@ -0,0 +1,28 @@ +# Multi-Use Configuration + +PSGSuite 2.0.0 and later uses a single file configuration stored outside of the module folder. The file is normally located in `$env:LOCALAPPDATA\powershell\SCRT HQ\PSGSuite\Configuration.psd1`. + +If you intend to use the module with more than one user account on the same machine, you will want to create your configuration with an AES key as the encryption method. To do this you'll want to create a key then pass the key as the first argument when importing the module. + +!!! danger + You **must** pass `$null` after the `$key` argument as shown to force the full key to be used, otherwise only the first byte in the array will be passed as the key value + +```powershell {linenums="1"} +$key = [byte[]]::new(32) # 32 bytes for AES-256 +[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($key) + +Import-Module PSGSuite -ArgumentList $key,$null + +$props = @{ + ConfigName = 'MyMultiUseConfig' + P12KeyPath = '\\path\to\your\p12key.p12' + AppEmail = 'service_account_email' + AdminEmail = 'admin_email' + CustomerID = 'customer_id' + Domain = "domain.com" + Preference = "CustomerID" + ServiceAccountClientID = "service_account_client_id" +} + +Set-PSGSuiteConfig @props +``` diff --git a/docs/pages/examples/multiple_configurations.md b/docs/pages/examples/multiple_configurations.md deleted file mode 100644 index f91f573e..00000000 --- a/docs/pages/examples/multiple_configurations.md +++ /dev/null @@ -1,26 +0,0 @@ -# Multiple Configurations - -PSGSuite 2.0.0 uses a single file configuration stored outside of the module folder. If you intend to use the module with more than one account on the same machine, you will want to create your configuration with an AES key as the encryption method. - -To do this you'll want to create a key then pass the key as the first argument when importing the module. - -**You must pass `$null` after the key as shown to force the full key to be used, otherwise only the first byte in the array will be passed as the key value** - -```powershell -$key = [Byte[]]@(1..16) # Don't actually use something this easy to replicate, this is just an example - -Import-Module PSGSuite -ArgumentList $key,$null - -$props = @{ - ConfigName = "client1" - P12KeyPath = "C:\P12s\PSGSuite-theirdomain.p12" - AppEmail = "psgsuite@theirdomain.iam.gserviceaccount.com" - AdminEmail = "admin@theirdomain.io" - CustomerID = "C092xxxxxx" - Domain = "theirdomain.io" - Preference = "CustomerID" - ServiceAccountClientID = "12399898494949494994949" -} - -Set-PSGSuiteConfig @props -``` From 908a558e4c18436b6b1879897fb5459e06b2c7b5 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sun, 13 Apr 2025 12:22:23 -0500 Subject: [PATCH 15/34] refactor(docs): split `initial_configuration.md` - split `initial_configuration.md` into individual files for a better configuration flow --- .../google_cloud_configuration.md | 236 ++++++++++++++++++ .../getting_started/module_configuration.md | 166 ++++++++++++ .../initial_configuration.md | 9 - 3 files changed, 402 insertions(+), 9 deletions(-) create mode 100644 docs/pages/getting_started/google_cloud_configuration.md create mode 100644 docs/pages/getting_started/module_configuration.md delete mode 100644 docs/pages/initial_configuration/initial_configuration.md diff --git a/docs/pages/getting_started/google_cloud_configuration.md b/docs/pages/getting_started/google_cloud_configuration.md new file mode 100644 index 00000000..f2fe9716 --- /dev/null +++ b/docs/pages/getting_started/google_cloud_configuration.md @@ -0,0 +1,236 @@ +# Google Cloud Configuration + +## Overview + +Depending on your account type, please click on the appropriate link below to begin the Google Cloud Project creation: + + +* [Google Workspace Super Admin](#project-creation-super-admin) +* [Google Workspace User or Google Personal Account](#project-creation-user-or-personal-account) + +!!! info + If **you are not** a Google Workspace Super Admin, the APIs you can enable are limited. + + * Google Workspace Super Admins: Admin SDK, Drive Activity, Enterprise License Manager, Gmail, Google Calendar, Google Chat, Google Classroom, Google Docs, Google Drive, Google Sheets, Google Slides, Google Tasks, Groups Settings, and People API. + + * Google Workspace Users or Google Personal Accounts: Contacts, Gmail, Google Calendar, Google Docs, Google Drive, Google Sheets, Google Slides, People, and Tasks API. + +!!! warning + If you are a Google Workspace Standard user, you **must** have the `Project Creator` role assigned to your user account by a Google Workspace Super Admin. If you do not have this role, you will receive an error similar to: + + ``` + You may not have permission to create projects in this organization. + Contact your Google Apps account admin to verify you have the Project Creator role. + ``` + +*** + +## Project Creation Super Admin + +1. Follow this [link](https://console.developers.google.com/flows/enableapi?apiid=admin.googleapis.com,calendar-json.googleapis.com,chat.googleapis.com,classroom.googleapis.com,docs.googleapis.com,drive.googleapis.com,driveactivity.googleapis.com,licensing.googleapis.com,gmail.googleapis.com,groupssettings.googleapis.com,people.googleapis.com,sheets.googleapis.com,slides.googleapis.com,tasks.googleapis.com) to create or edit an existing project and enable all applicable APIs. + 1. If creating a new project for the very first time, click on `Create Project`. + ![google_cloud_project_creation.png](../../assets/screenshots/google_cloud_project_creation.png) + 1. If you have existing projects, make sure to select the correct project from the dropdown menu or create a new one. + ![google_cloud_project_selection.png](../../assets/screenshots/google_cloud_project_selection.png) + +1. On the `New Project` page: + 1. Give your project a meaningful name, e.g. `PSGSuite Powershell Module`. + 1. Click `Create`. + + ![google_cloud_project_creation_info.png](../../assets/screenshots/google_cloud_project_creation_new_project.png) + +1. On the `Enable access to APIs` page: + 1. On the `Confirm Project` page, click `Next` + ![google_cloud_project_creation_enable_access_to_apis_confirm_project.png](../../assets/screenshots/google_cloud_project_creation_enable_access_to_apis_confirm_project.png) + 1. On the `Enable APIs` page: + 1. Review the APIs that will be enabled for your project and click `Enable`. + ![google_cloud_project_creation_enable_access_to_apis_enable_apis_superadmin.png](../../assets/screenshots/google_cloud_project_creation_enable_access_to_apis_enable_apis_superadmin.png) + +*** + +## Project Creation User or Personal Account + +1. Follow this [link](https://console.developers.google.com/flows/enableapi?apiid=calendar-json.googleapis.com,docs.googleapis.com,drive.googleapis.com,gmail.googleapis.com,people.googleapis.com,sheets.googleapis.com,slides.googleapis.com,tasks.googleapis.com) to create or edit an existing project and enable all applicable APIs. + 1. If creating a new project for the very first time, click on `Create Project`. + ![google_cloud_project_creation.png](../../assets/screenshots/google_cloud_project_creation.png) + 1. If you have existing projects, make sure to select the correct project from the dropdown menu or create a new one. + ![google_cloud_project_selection.png](../../assets/screenshots/google_cloud_project_selection.png) + +1. On the `New Project` page: + * Give your project a meaningful name, e.g. `PSGSuite Powershell Module`. + * Click `Create`. + + ![google_cloud_project_creation_info.png](../../assets/screenshots/google_cloud_project_creation_new_project.png) + +1. On the `Enable access to APIs` page: + 1. On the `Confirm Project` page, click `Next` + ![google_cloud_project_creation_enable_access_to_apis_confirm_project.png](../../assets/screenshots/google_cloud_project_creation_enable_access_to_apis_confirm_project.png) + 1. On the `Enable APIs` page: + 1. Review the APIs that will be enabled for your project and click `Enable`. + ![google_cloud_project_creation_enable_access_to_apis_enable_apis_standard.png](../../assets/screenshots/google_cloud_project_creation_enable_access_to_apis_enable_apis_standard.png) + +*** + +## Credentials + +1. Navigate to [Credentials](https://console.cloud.google.com/apis/credentials) +1. Click on `Create Credentials` +1. Choose one of the credential types depending on your needs: + * [OAuth 2.0 Client ID](#oauth-20) + * [Service Account](#service-account) + +!!! tip + For Super Admins, it is recommended to use the Service Account method + + For Users or Personal Accounts, it is recommended to use the OAuth 2.0 Client ID method. + +![google_cloud_project_credentials.png](../../assets/screenshots/google_cloud_project_credentials.png) + +### OAuth 2.0 + +#### OAuth Consent Screen + +Before setting up OAuth 2.0 credentials, you need to set up the OAuth consent screen. The consent screen is what the user will see when they are asked to authorize your application to access the data associated with the enabled APIs. + +![google_cloud_project_oauth_consent_screen.png](../../assets/screenshots/google_cloud_project_oauth_consent_screen.png) + +1. On the `OAuth Overview` page click `Get Started` +![google_cloud_project_oauth_consent_screen_overview.png](../../assets/screenshots/google_cloud_project_oauth_consent_screen_overview.png) + +1. On the `Project Configuration` page: + 1. Under `App Information`: + 1. On the `App name` field, give your app a meaningful name, e.g. `PSGSuite Powershell Module`. + 1. On the `User support email` field, enter your email address. + ![google_cloud_project_oauth_consent_screen_app_name.png](../../assets/screenshots/google_cloud_project_oauth_consent_screen_app_name.png) + 1. Under `Audience`: + 1. If using Google Workspace, select `Internal`. + 1. If using a Google Personal Account, select `External`. + 1. Under `Contact Information`, enter your email address. + 1. Under `Finish`, check the box next to `I agree to the Google API Services User Data Policy`. + 1. Click `Continue` and click `Create` + ![google_cloud_project_oauth_consent_screen_finish.png](../../assets/screenshots/google_cloud_project_oauth_consent_screen_finish.png) + +#### OAuth 2.0 Audience For External Apps + +1. Navigate to [OAuth Overview](https://console.cloud.google.com/auth/overview) +1. Click on `Audience` +1. You have two options: + 1. Publish your app + 1. If you choose, to publish your app anyone can use it. + 1. Leave your app as `Testing` + 1. If you choose to leave your app as `Testing`, you will need to add users to the `Test Users` list. + +!!! warning + Be aware of some of the limitations of an `External` application that is under `Testing` mode. + + The refresh token will expire after 7 days. + + If you want to have a non-expiring refresh token, you need to publish your application or use an `Internal` application. + +#### OAuth 2.0 Credentials + +1. Navigate to [Credentials](https://console.cloud.google.com/apis/credentials) +1. Click on `Create Credentials` +1. Choose `OAuth client ID` +1. On the `Create OAuth client ID` page: + 1. Under the `Application type` dropdown, select `Desktop App` + 1. Under `Name`, give your OAuth client ID a meaningful name, e.g. `PSGSuite Powershell Module OAuth Credentials`. + ![google_cloud_project_oauth_client_id.png](../../assets/screenshots/google_cloud_project_oauth_client_id.png) + 1. Click `Create`. +1. On the `OAuth client created` pop-up, download the JSON file and save it to a location on your computer. You will need the path where you saved the JSON file later on. + ![google_cloud_project_oauth_client_id_download.png](../../assets/screenshots/google_cloud_project_oauth_client_id_download.png) +1. [You can now begin configuring the module](../getting_started/module_configuration.md) + +*** + +### Service Account + +1. On the `Create service account` page: + 1. Under `Service Account Details`: + 1. On the `Service account name` field, give your service a meaningful name, e.g. `svc_psgsuite_pwsh_module`. + 1. (Optional) On the `Service account description` field, give your service a meaningful description, e.g. `PSGSuite PowerShell Module Service Account`. + 1. Click on `Create and continue`. + ![google_cloud_project_service_account_details.png](../../assets/screenshots/google_cloud_project_service_account_details.png) + 1. Under `Grant this service account access to project (optional)`: + 1. Click on `Select a role` dropdown menu. + 1. Select --> `Project` --> `Owner` + 1. Click on `Continue`. + ![google_cloud_project_service_account_role.png](../../assets/screenshots/google_cloud_project_service_account_role.png) + 1. Under `Grant users access to this service account (optional)`: + 1. If you want to grant users access to this service account, you can do so here. Otherwise, you can skip this step. + ![google_cloud_project_service_account_done.png](../../assets/screenshots/google_cloud_project_service_account_done.png) +1. On the `Credentials` page: + 1. Under the `Actions` column, click on the pencil icon to edit the service account you just created. + ![google_cloud_project_service_account_edit.png](../../assets/screenshots/google_cloud_project_service_account_edit.png) + 1. Select `Keys`. + 1. Click on `Add Key` and select `Create new key`. + ![google_cloud_project_service_account_add_key.png](../../assets/screenshots/google_cloud_project_service_account_add_key.png) + 1. Select `P12` and click `Create` + ![google_cloud_project_service_account_create_key.png](../../assets/screenshots/google_cloud_project_service_account_create_key.png) + 1. Save the key to a location on your computer. You will need the path where you saved the key later on. + ![google_cloud_project_service_account_key_download.png](../../assets/screenshots/google_cloud_project_service_account_key_download.png) + +#### Domain Wide Delegation + +In order for the service account to impersonate one or more users in your domain, you need to enable domain-wide delegation. + +1. On the `Credentials` page: + 1. Under the `Actions` column, click on the pencil icon to edit the service account you just created. + ![google_cloud_project_service_account_edit.png](../../assets/screenshots/google_cloud_project_service_account_edit.png) +1. On the `Details` tab, expand `Advanced Settings`: + 1. Copy your `Client ID` + 1. Click on `View Google Workspace Admin Console` +![google_cloud_project_service_account_advanced_settings.png](../../assets/screenshots/google_cloud_project_service_account_advanced_settings.png) +1. On the `Google Admin Console` page, navigate to `Security` --> `Access and data control` --> `API Controls` --> `Manage Domain Wide Delegation` +![google_cloud_project_service_account_domain_wide_delegation.png](../../assets/screenshots/google_cloud_project_service_account_domain_wide_delegation.png) +1. On the `Domain-wide Delegation` page, click on `Add new` + 1. Paste your client ID from step 2.2 into the `Client ID` field. + 1. Copy/paste the OAuth scopes below into the `OAuth Scopes` field and click `Authorize` + ![google_cloud_project_service_account_domain_wide_delegation_add.png](../../assets/screenshots/google_cloud_project_service_account_domain_wide_delegation_add.png) + !!! info + Although the module does not use **all** of these scopes currently, additional functions are being built to leverage this entire list. + If for security reasons you want to limit the scopes, please remove the ones you do not need. + + ```plaintext {linenums="1"} + https://mail.google.com/, + https://www.googleapis.com/auth/activity, + https://www.googleapis.com/auth/admin.datatransfer, + https://www.googleapis.com/auth/admin.directory.customer, + https://www.googleapis.com/auth/admin.directory.device.chromeos, + https://www.googleapis.com/auth/admin.directory.device.mobile, + https://www.googleapis.com/auth/admin.directory.domain, + https://www.googleapis.com/auth/admin.directory.group, + https://www.googleapis.com/auth/admin.directory.orgunit, + https://www.googleapis.com/auth/admin.directory.resource.calendar, + https://www.googleapis.com/auth/admin.directory.rolemanagement, + https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly, + https://www.googleapis.com/auth/admin.directory.user, + https://www.googleapis.com/auth/admin.directory.user.readonly, + https://www.googleapis.com/auth/admin.directory.user.security, + https://www.googleapis.com/auth/admin.directory.userschema, + https://www.googleapis.com/auth/admin.reports.audit.readonly, + https://www.googleapis.com/auth/admin.reports.usage.readonly, + https://www.googleapis.com/auth/apps.groups.settings, + https://www.googleapis.com/auth/apps.licensing, + https://www.googleapis.com/auth/calendar, + https://www.googleapis.com/auth/chat.bot, + https://www.googleapis.com/auth/classroom.announcements, + https://www.googleapis.com/auth/classroom.courses, + https://www.googleapis.com/auth/classroom.coursework.me, + https://www.googleapis.com/auth/classroom.coursework.students, + https://www.googleapis.com/auth/classroom.guardianlinks.students, + https://www.googleapis.com/auth/classroom.profile.emails, + https://www.googleapis.com/auth/classroom.profile.photos, + https://www.googleapis.com/auth/classroom.push-notifications, + https://www.googleapis.com/auth/classroom.rosters, + https://www.googleapis.com/auth/classroom.rosters.readonly, + https://www.googleapis.com/auth/drive, + https://www.googleapis.com/auth/gmail.settings.basic, + https://www.googleapis.com/auth/gmail.settings.sharing, + https://www.googleapis.com/auth/tasks, + https://www.googleapis.com/auth/tasks.readonly, + https://www.googleapis.com/auth/userinfo.email, + https://www.googleapis.com/auth/userinfo.profile + ``` + +1. [You can now begin configuring the module](../getting_started/module_configuration.md) diff --git a/docs/pages/getting_started/module_configuration.md b/docs/pages/getting_started/module_configuration.md new file mode 100644 index 00000000..8d8f9eca --- /dev/null +++ b/docs/pages/getting_started/module_configuration.md @@ -0,0 +1,166 @@ +# Configuring the PSGSuite Configuration File + +You will need certain information to configure the PSGSuite configuration file. Depending on the credential type you are using, please click the appropriate link below to collect the information you need before configuring the module. + + +- [OAuth 2.0 Client ID](#oauth-20-client-id) +- [Service Account](#service-account) + +*** + +## Import PSGSuite Module + +1. Import the module to your PowerShell session: + 1. If the module is located in your `$PSModulePath` + + ```powershell {linenums="1"} + Import-Module PSGSuite -Verbose + ``` + + 1. If the module is located in a different path, use the `-Path` parameter: + + ```powershell {linenums="1"} + Import-Module -Path 'C:\Path\To\PSGSuite\PSGSuite.psd1' -Verbose + ``` + +## OAuth 2.0 Client ID + +In your Powershell session, create the following variables with the requested information: + +1. `$clientSecretsPath`: Path to the OAuth 2.0 JSON file you downloaded previously, e.g. `C:\Path\To\OAuth.json`. +1. `$adminEmail`: Your email. + +```powershell {linenums="1"} +$params = @{ + ConfigName = 'PersonalGoogle' + ClientSecretsPath = $clientSecretsPath + AdminEmail = $adminEmail + } + +Set-PSGSuiteConfig @params +``` + +### First Time Authentication + +When using OAuth Client ID, must also complete OAuth in browser to finalize your configuration. This step will generate your `refresh_token` and initial `access_token` for the scopes listed below. + +```plaintext {linenums="1"} + https://mail.google.com/, + https://mail.google.com/, + https://www.googleapis.com/auth/calendar, + https://www.googleapis.com/auth/drive, + https://www.googleapis.com/auth/gmail.settings.basic, + https://www.googleapis.com/auth/gmail.settings.sharing, + https://www.googleapis.com/auth/tasks, + https://www.googleapis.com/auth/tasks.readonly, + https://www.googleapis.com/auth/userinfo.email, + https://www.googleapis.com/auth/userinfo.profile +``` + +Run the following command to start the authentication process: + +```powershell {linenums="1"} + # We are just running a random cmdlet to force the authentication process to start. + Get-GSGmailProfile -Verbose +``` + +After running the above command, if you are using Powershell 6.0 or later: + +1. Click on the link in the console output to open a browser window. + ![powershell_oauth_link.png](../../assets/screenshots/powershell_oauth_link.png) +1. On the `Choose an account` page, select the appropriate account. + ![oauth_select_account.png](../../assets/screenshots/oauth_select_account.png) + +!!! info + If you are using an `External` application that is set to `Testing` you might see a message similar to the following: + + ```plaintext + Google hasn’t verified this app + + You’ve been given access to an app that’s currently being tested. + + You should only continue if you know the developer that invited you. + ``` + +1. On the next page, you will be asked to allow the application to access your data. + 1. Place a checkmark next to `Select All` + 1. Click `Continue` + + ![oauth_allow_access.png](../../assets/screenshots/oauth_allow_access.png) + +1. On the next page, you will see your authorization code you need to enter in the console window. + + ![oauth_authorization_code.png](../../assets/screenshots/oauth_authorization_code.png) + +1. If the authentication was successful, your Powershell console should look similar to the following: + + ![powershell_oauth_success.png](../../assets/screenshots/powershell_oauth_success.png) + +*** + +## Service Account + +In your Powershell session, create the following variables with the requested information: + +1. `$p12KeyPath`: Path to P12 Key File you downloaded previously, e.g. `C:\Path\To\Key.p12`. +1. `$appEmail`: Service Account Email Address + - Navigate to [Credentials](https://console.cloud.google.com/apis/credentials) + - Click on the the service account you created. + - Copy the value under 'Email' + ![Service Account Email Address](../../assets/screenshots/service_account_email_address.png) +1. `$adminEmail`: This is email address for the SuperAdmin account that created the project (usually your email) +1. (Optional) `$customerId`: This is the customer ID associated with your Google Workspace account. + - Navigate to the [Google Workspace Account Settings](https://admin.google.com/ac/accountsettings/profile) + ![Customer ID](../../assets/screenshots/customer_id.png) +1. `$domain`: This is the domain name associated with your Google Workspace account. +1. `$preference`: This is referenced by certain functions that allow either the Customer ID or Domain to be queried against. You can choose between "CustomerID" or "Domain" for this value. +1. `$serviceAccountClientId`: This will store the service account client ID in the configuration file and it is purely a convenience parameter. The service account client ID is what you copied on Step 2 when you were setting up [Domain Wide Delegation](../getting_started/google_cloud_configuration.md/#domain-wide-delegation) + +Run the following command to create the configuration file: + +```powershell {linenums="1"} +$params = @{ + AdminEmail = $adminEmail + AppEmail = $appEmail + ConfigName = 'GoogleWorkspace' + CustomerID = $customerID + Domain = $domain + P12KeyPath = $p12KeyPath + Preference = $preference + ServiceAccountClientID = $serviceAccountClientID + SetAsDefaultConfig = $true +} +Set-PSGSuiteConfig @params +``` + +## Multiple Configurations At Once + +If you wanted to configure multiple configurations at once, i.e., one for your personal account and one for your work account, you can do so by following the example below: + +```powershell {linenums="1"} +@( + @{ + AdminEmail = $googleWorkspaceAdminEmail + AppEmail = $appEmail + ConfigName = 'GoogleWorkspace' + CustomerID = $customerID + Domain = $domain + P12KeyPath = $p12KeyPath + Preference = $preference + ServiceAccountClientID = $serviceAccountClientID + SetAsDefaultConfig = $true + } + @{ + ConfigName = 'PersonalGoogle' + ClientSecretsPath = $clientSecretsPath + AdminEmail = $gmailEmail + } +) | ForEach-Object { + $props = $_ + Set-PSGSuiteConfig @props +} +``` + +## Configuration File Location + +The configuration file is located in `$env:LOCALAPPDATA\powershell\SCRT HQ\PSGSuite\Configuration.psd1`. diff --git a/docs/pages/initial_configuration/initial_configuration.md b/docs/pages/initial_configuration/initial_configuration.md deleted file mode 100644 index 58a1a741..00000000 --- a/docs/pages/initial_configuration/initial_configuration.md +++ /dev/null @@ -1,9 +0,0 @@ -# Initial Configuration - -## Google Workspace - -### Google Workspace Super Admin - -### Google Workspace Standard User - -## Personal Google Account From 568f9f5993c156a5a0194b29ec60c09fdec9a403 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sun, 13 Apr 2025 12:23:02 -0500 Subject: [PATCH 16/34] refactor(docs): remove `installation.md` as part of documentation restructuring --- docs/pages/installation/installation.md | 280 ------------------------ 1 file changed, 280 deletions(-) delete mode 100644 docs/pages/installation/installation.md diff --git a/docs/pages/installation/installation.md b/docs/pages/installation/installation.md deleted file mode 100644 index 544a60ab..00000000 --- a/docs/pages/installation/installation.md +++ /dev/null @@ -1,280 +0,0 @@ -# Module Installation - - - - -*** - - -## G Suite Users _with_ SuperAdmin access - -### Creating the Project, Service Account and P12 Key in Google's Developer Console - -1. [Click here to create a new project with the following API's enabled](https://console.developers.google.com/flows/enableapi?apiid=admin,appsactivity,contacts,driveactivity.googleapis.com,licensing,gmail,calendar,classroom.googleapis.com,docs.googleapis.com,drive,sheets.googleapis.com,slides.googleapis.com,groupssettings,chat.googleapis.com,people.googleapis.com,tasks): - * Admin SDK - * Apps Activity API - * Contacts API - * Drive Activity API (Apps Activity API v2) - * Enterprise License Manager API - * Gmail API - * Google Calendar API - * Google Classroom API - * Google Docs API - * Google Drive API - * Google Sheets API - * Google Slides API - * Groups Settings API - * Hangouts Chat API - * People API - * Tasks API -* -2. Leave the dropdown set to 'Create a project' and click the blue 'Continue' button. - * If you encounter an error stating that `You may not have permission to create projects in this organization. Contact your Google Apps account admin to verify you have the Project Creator role.`, you may need to manually create a project instead as noted in [Issue #116](https://github.com/scrthq/PSGSuite/issues/116). If you are still unable to create a project manually, you will need to contact your domain's G Suite administrators to have them place you in the Project Creator role or create the project for you. -3. On the next screen, it will run the wizard to assist in adding credentials. Click the blue link that says 'service account' right above the '**Which API are you using?**' question to go to the Service Account Creation page. -4. On the Service Accounts page, click the blue button on the top of the screen to 'CREATE SERVICE ACCOUNT' and you'll be walked through the following 3 pages: - * **Service account details:** - 1. Set the service account name to whatever you'd like and optionally add a description - 2. Click the `CREATE` button - * **Grant this service account access to this project:** - 1. Set the Service Account permissions to _Project > Owner_ - * **Grant users access to this service account** - 1. Click the `CREATE KEY` button - 2. Set **Key type** to **P12** - 3. Click the blue `CREATE` button. You should download the P12 key file in your browser once clicking it. - 4. Click the blue `DONE` button to return to the Service accounts screen. -5. Click the 3 dots button at the right side of the service account you just created then select `Edit`. -6. Click the blue link to `SHOW DOMAIN-WIDE DELEGATION`. -7. Check the box to allow `Enable G Suite Domain-wide Delegation`. You should see additional fields appear for Product Name and Email Address. -8. Set an appropriate product name (i.e. `PSGSuite`), then click the blue `SAVE` button. -9. Once back on the Service Accounts page, click the link under where it says DwD to 'View Client ID'. You will be taken to a page that lists the AppEmail (e.g. `psgsuite@kindred-spirit-20183.iam.gserviceaccount.com`) and the ServiceAccountClientID (e.g. `10264827741861193783987`). Save these two in a Notepad, you will need them when you fill out the configuration. -10. Under [API Manager >> Library](https://console.developers.google.com/apis/dashboard), make sure the following API's are showing as enabled: - * Admin SDK - * Apps Activity API - * Contacts API - * Drive Activity API (Apps Activity API v2) - * Enterprise License Manager API - * Gmail API - * Google Calendar API - * Google Classroom API - * Google Docs API - * Google Drive API - * Google Sheets API - * Google Slides API - * Groups Settings API - * Hangouts Chat API - * People API - * Tasks API - -*** - -### Adding API Client Access in Admin Console - -1. Open a new tab or window to the [Google Admin Console](https://admin.google.com/) -2. Go to Security -3. Expand 'Advanced Settings' -4. Click 'Manage API client access' -5. Take the ServiceAccountClientID you copied to Notepad earlier (e.g. _10264827741861193783987_) and paste it in the left field for 'Client Name' - * If you have already set up a PSGSuiteConfig, you can retrieve your ServiceAccountClientId by running `(Show-PSGSuiteConfig).ServiceAccountClientId` -6. Copy / paste the following scopes together on the field on the right for 'One or more API scopes': - -```text -https://apps-apis.google.com/a/feeds/emailsettings/2.0/, -https://mail.google.com/, -https://sites.google.com/feeds, -https://www.google.com/m8/feeds/contacts, -https://www.googleapis.com/auth/activity, -https://www.googleapis.com/auth/admin.datatransfer, -https://www.googleapis.com/auth/admin.directory, -https://www.googleapis.com/auth/admin.directory.customer, -https://www.googleapis.com/auth/admin.directory.device.chromeos, -https://www.googleapis.com/auth/admin.directory.device.mobile, -https://www.googleapis.com/auth/admin.directory.domain, -https://www.googleapis.com/auth/admin.directory.group, -https://www.googleapis.com/auth/admin.directory.orgunit, -https://www.googleapis.com/auth/admin.directory.resource.calendar, -https://www.googleapis.com/auth/admin.directory.rolemanagement, -https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly, -https://www.googleapis.com/auth/admin.directory.user, -https://www.googleapis.com/auth/admin.directory.user.readonly, -https://www.googleapis.com/auth/admin.directory.user.security, -https://www.googleapis.com/auth/admin.directory.userschema, -https://www.googleapis.com/auth/admin.reports.audit.readonly, -https://www.googleapis.com/auth/admin.reports.usage.readonly, -https://www.googleapis.com/auth/apps.groups.settings, -https://www.googleapis.com/auth/apps.licensing, -https://www.googleapis.com/auth/calendar, -https://www.googleapis.com/auth/chat.bot, -https://www.googleapis.com/auth/classroom.announcements, -https://www.googleapis.com/auth/classroom.courses, -https://www.googleapis.com/auth/classroom.coursework.me, -https://www.googleapis.com/auth/classroom.coursework.students, -https://www.googleapis.com/auth/classroom.guardianlinks.students, -https://www.googleapis.com/auth/classroom.profile.emails, -https://www.googleapis.com/auth/classroom.profile.photos, -https://www.googleapis.com/auth/classroom.push-notifications, -https://www.googleapis.com/auth/classroom.rosters, -https://www.googleapis.com/auth/classroom.rosters.readonly, -https://www.googleapis.com/auth/drive, -https://www.googleapis.com/auth/gmail.settings.basic, -https://www.googleapis.com/auth/gmail.settings.sharing, -https://www.googleapis.com/auth/plus.login, -https://www.googleapis.com/auth/plus.me, -https://www.googleapis.com/auth/tasks, -https://www.googleapis.com/auth/tasks.readonly, -https://www.googleapis.com/auth/userinfo.email, -https://www.googleapis.com/auth/userinfo.profile -``` - -* _Although the module does not use all of these scopes currently, additional functions are being built to leverage this entire list._ - -## Free Google Account Users and G Suite Users _without_ SuperAdmin access - -If you are not a G Suite super admin or even a G Suite user at all, you can still use PSGSuite for the following APIs: - -* Contacts API -* Gmail API -* Google Calendar API -* Google Docs API -* Google Drive API -* Google Sheets API -* Google Slides API -* People API (new Contacts API) -* Tasks API - -You will also need to take a slightly different route when creating credentials and create an OAuth Client ID instead of a Service Account and P12 Key. - -### Creating the Project and Client ID/Secret in Google's Developer Console - -1. [Click here to create a new project with the following API's enabled](https://console.developers.google.com/flows/enableapi?apiid=contacts,calendar,gmail,docs.googleapis.com,drive,sheets.googleapis.com,slides.googleapis.com,people.googleapis.com,tasks): - * Contacts API - * Gmail API - * Google Calendar API - * Google Docs API - * Google Drive API - * Google Sheets API - * Google Slides API - * People API (new Contacts API) - * Tasks API - - ![image](https://user-images.githubusercontent.com/12724445/50328194-da546100-04b7-11e9-9ddd-c151fc8e83d3.png) -2. Leave the dropdown set to `Create a project` and click the blue 'Continue' button. - * If you encounter an error stating that `You may not have permission to create projects in this organization. Contact your Google Apps account admin to verify you have the Project Creator role.`, you may need to manually create a project instead as noted in [Issue #116](https://github.com/scrthq/PSGSuite/issues/116). - * If you are still unable to create a project manually, you will need to contact your domain's G Suite administrators to have them place you in the Project Creator role or create the project for you. -3. On the next screen, it will run the wizard to assist in adding credentials. Click the blue link that says `client ID` right above the '**Which API are you using?**' question to go to the OAuth Client ID Creation page: - ![image](https://user-images.githubusercontent.com/12724445/50328262-0bcd2c80-04b8-11e9-8ffe-32ee580880c0.png) -4. On the OAuth Client ID creation page, click the blue button on the top of the screen to `Configure consent screen`: - ![image](https://user-images.githubusercontent.com/12724445/50328306-33bc9000-04b8-11e9-85d7-94a6827a312e.png) -5. On the OAuth consent screen... - ![image](https://user-images.githubusercontent.com/12724445/50328331-4f279b00-04b8-11e9-86cb-6c33d5af1a77.png) - 1. Set the Application Name. This is what you will see when authorizing the Console Project access to you data via API. - 2. Under `Scopes for Google APIs`, click the `Add scope` button. - 3. Check the check box on the top-left of the pop-up to check all of the boxes, then click `Add` on the bottom-right of the pop-up. - ![image](https://user-images.githubusercontent.com/12724445/50328360-741c0e00-04b8-11e9-82e4-667bebd1210e.png) - 4. Scroll to the bottom of the OAuth consent screen, the click the blue `Save` button. -6. Once saved, scroll up to the top of the page then click the main `Credentials` tab. -7. Click the drop-down button to `Create credentials`, then select `OAuth client ID`. -8. Choose `Other` as the Application type and enter a friendly name such as PSGSuite, then click the blue `Create` button: - ![image](https://user-images.githubusercontent.com/12724445/50328408-9877ea80-04b8-11e9-8004-ee071db4b6a7.png) -9. Once created, you'll get a pop-up with the client_id / client_secrets info, just click ok to close the pop-up: - ![image](https://user-images.githubusercontent.com/12724445/50328462-c9f0b600-04b8-11e9-9d5d-da0edc108e17.png) -10. Once back on the Credentials screen, click the ⬇️ icon on the far right next to your new OAuth Client ID to download the client_secrets.json file to your preferred location: - ![image](https://user-images.githubusercontent.com/12724445/50303600-320cb100-0453-11e9-84da-3f70b322e836.png) - -*** - -## Creating the PSGSuite Configuration File - -1. Import the module: - * Module located in PSModulePath: ```Import-Module PSGSuite``` - * or somewhere else: ```Import-Module C:\Path\To\PSGSuite\PSGSuite.psd1``` -2. Have the following information available to paste during Step 3: - * _**G Suite SuperAdmins**_ - * **P12KeyPath**: This is the full path to the P12 file that you created during Step 9 of [Creating the Project, Service Account and P12 Key in Google's Developer Console](#creating-the-project-service-account-and-p12-key-in-googles-developer-console) - * **AppEmail**: This is email address for the service account created earlier. It will look something like this: - * _{service account name}_@_{project name}_.iam.gserviceaccount.com - * **AdminEmail**: This is email address for the SuperAdmin account that created the project (usually your email) - * **CustomerId**: This is the Customer ID of the G Suite account. If you do not know it currently, you can set it later. After importing the module, you can run ```(Get-GSUser).CustomerId``` and view the Customer ID in the response. - * **Domain**: This is the primary domain name for the customer, i.e. _scrthq.com_ - * **Preference**: This is referenced by certain functions that allow either the Customer ID or Domain to be queried against. You can choose between "CustomerID" or "Domain" for this value. - * **Service Account Client ID**: This stores the Service Account Client ID to allow easy callback without having to open the project page. It is purely a convenience parameter. The Service Account Client ID is the large integer that you copy during Steps 7 & 8 while [Adding API Client Access in Admin Console](#adding-api-client-access-in-admin-console) - * _**Free account / G Suite standard users**_ - > Free accounts only need 2 pieces of information in a config for PSGSuite to work with the APIs available to them: ClientSecretsPath and AdminEmail. - * **ClientSecretsPath**: This is the full path to the JSON file that you downloaded during Step 10 of [Creating the Project and Client ID/Secret in Google's Developer Console](#creating-the-project-and-client-idsecret-in-googles-developer-console) - * **AdminEmail**: This is the email address for your account. -3. Run the appropriate command from the following to create the config file using the values from Step 2 of this section to replace the variables below: - - _**G Suite SuperAdmins**_ - - ```PowerShell - Set-PSGSuiteConfig -ConfigName MyConfig -SetAsDefaultConfig -P12KeyPath $P12KeyPath -AppEmail $AppEmail -AdminEmail $AdminEmail -CustomerID $CustomerID -Domain $Domain -Preference $Preference -ServiceAccountClientID $ServiceAccountClientID - ``` - - _**Free account / G Suite standard users**_ - - ```PowerShell - Set-PSGSuiteConfig -ConfigName MyConfig -SetAsDefaultConfig -ClientSecretsPath $ClientSecretsPath -AdminEmail $AdminEmail - ``` - - Here's another way to set multiple configs at the same time: - - ```PowerShell - @( - @{ - SetAsDefaultConfig = $true - ConfigName = "GSuite" - P12KeyPath = "C:\P12s\PSGSuite.p12" - AppEmail = "psgsuite@developer-shore.iam.gserviceaccount.com" - AdminEmail = "admin@mydomain.io" - CustomerID = "C021xxxxxx" - Domain = "mydomain.io" - Preference = "CustomerID" - ServiceAccountClientID = "98723498723489723498239" - } - @{ - ConfigName = "Gmail" - ClientSecretsPath = "C:\Keys\client_secret.json" - AdminEmail = "mypersonalinbox@gmail.com" - } - ) | ForEach-Object { - $props = $_ - Set-PSGSuiteConfig @props - } - ``` - -*** - -## First-time authentication for free/non-admin accounts - -If you are using a `client_secrets.json` for your configuration, you must also complete OAuth in browser to finalize your configuration. This will generate your `refresh_token` and initial `access_token` for the scopes listed below. Follow these steps to complete your configuration: - -1. Import the module: `Import-Module PSGSuite` -2. Run `Get-GSGmailProfile -Verbose` (or any other Gmail, Drive, Calendar, Contacts or Tasks command) to trigger the authentication/authorization process: - * If you are using Windows PowerShell, you should see your browser open with a Google login prompt: - 1. Authenticate using the AdminEmail account configured with `Set-PSGSuiteConfig`. - 2. Allow PSGSuite to access the below scopes on your account that you desire. - 3. You should see a message in your browser tab stating the following once complete: `Received verification code. You may now close this window.` - - * If you are using PowerShell Core (6+), you will be provided a URL to visit to complete authentication/authorization: - 1. Open your browser and go the the URL provided in the console output. - 2. Authenticate using the AdminEmail account configured with `Set-PSGSuiteConfig`. - 3. Allow PSGSuite to access the below scopes on your account that you desire. - 4. You should see a pop-up in your browser with a code to copy. Select and copy or click the button to the right of the code to copy, then paste the code back in your console where prompted, then hit `Enter`. -3. You should see the command complete successfully at this point. - -* Scopes included with `client_secrets.json` auth: - * - * - * - * - * - * - * - * - -* Screenshots of the PowerShell Core process: - -![image](https://user-images.githubusercontent.com/12724445/50432027-bb2d4900-0894-11e9-8aa7-fe5f22e8cdc6.png) - -![image](https://user-images.githubusercontent.com/12724445/50432132-63dba880-0895-11e9-8c96-ba23bf994757.png) - -![image](https://user-images.githubusercontent.com/12724445/50432170-99809180-0895-11e9-87db-866450e7f6bf.png) From aed7b0c42e5ce4dc1844577460e00e492053dbd6 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sun, 13 Apr 2025 12:23:12 -0500 Subject: [PATCH 17/34] refactor(docs): reorganize navigation structure --- docs/.nav.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/.nav.yml b/docs/.nav.yml index 7432a562..ca9ed52c 100644 --- a/docs/.nav.yml +++ b/docs/.nav.yml @@ -5,9 +5,10 @@ nav: - Powershell Gallery: pages/installation/powershell_gallery.md - GitHub Releases: pages/installation/github_releases.md - Building From Source: pages/installation/building_from_source.md - - First Time Configuration: - - Google Cloud: pages/first_time_configuration/google_cloud_configuration.md - - Module Configuration: pages/first_time_configuration/module_configuration.md - - Examples: pages/examples + - Getting Started: + - Google Cloud: pages/getting_started/google_cloud_configuration.md + - Module Configuration: pages/getting_started/module_configuration.md + - Examples: + - Managing Users: pages/examples/managing_users.md + - Multi-Use Configuration: pages/examples/multi_use_configuration.md - Function Help: pages/function_help -append_unmatched: true From b2c6f4f1e36dc937d7ac925cf21be0278a836a97 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sun, 13 Apr 2025 12:23:34 -0500 Subject: [PATCH 18/34] refactor(docs): add detailed description to the About section --- docs/index.md | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/docs/index.md b/docs/index.md index cc7bbaae..ba23bca7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -60,6 +60,10 @@ *** +## About + +PSGSuite is a Powershell module for Google/Google Workspace API calls wrapped in handy functions. Authentication can be established using a service account via a P12 key to negate the consent popup and allow for a greater hands off automation capabilities. + ## Documentation * [Getting started](https://psgsuite.io/docs\pages\getting_started\getting_started.md) @@ -68,29 +72,11 @@ ## Contributing -Interested in helping out with PSGSuite development? Please check out our [Contribution Guidelines](https://github.com/scrthq/PSGSuite/blob/main/CONTRIBUTING.md). - -### Building PSGSuite Locally - -To build the module locally to test changes run `build.ps1` at the root of the repo. - -```powershell {linenums="1"} -.\build.ps1 -``` - -This will compile the module with your changes and import the newly compiled module at the end by default. - -#### Pester Tests - -To run the Pester tests locally pass `Test` as the value to the `Task` script parameter like so: - -```powershell {linenums="1"} -.\build.ps1 -Task Test -``` +Interested in helping out with PSGSuite development? Please check out our [Contribution Guidelines](https://github.com/SCRT-HQ/PSGSuite/blob/main/CONTRIBUTING.md). ## Code of Conduct -Please adhere to our [Code of Conduct](https://github.com/scrthq/PSGSuite/blob/main/CODE_OF_CONDUCT.md) when interacting with this repo. +Please adhere to our [Code of Conduct](https://github.com/SCRT-HQ/PSGSuite/blob/main/CODE_OF_CONDUCT.md) when interacting with this repo. ## License @@ -98,6 +84,4 @@ Please adhere to our [Code of Conduct](https://github.com/scrthq/PSGSuite/blob/m ## Changelog -[Full CHANGELOG here](https://github.com/scrthq/PSGSuite/blob/main/CHANGELOG.md) - -*** +[CHANGELOG](https://github.com/SCRT-HQ/PSGSuite/blob/main/CHANGELOG.md) From f25a4b0734a04631fe32afbd1a5e1fc255ebf203 Mon Sep 17 00:00:00 2001 From: Angry Cuban <39564898+angrycuban13@users.noreply.github.com> Date: Sun, 13 Apr 2025 12:31:18 -0500 Subject: [PATCH 19/34] refactor(docs): add assets - add screenshots for documentation - all files have been compressed using compresspng.com --- docs/assets/icons/icons-192.png | Bin 16066 -> 7629 bytes docs/assets/icons/icons-512.png | Bin 43079 -> 19073 bytes docs/assets/screenshots/customer_id.png | Bin 0 -> 49447 bytes .../google_cloud_project_creation.png | Bin 0 -> 9895 bytes ..._enable_access_to_apis_confirm_project.png | Bin 0 -> 8521 bytes ...le_access_to_apis_enable_apis_standard.png | Bin 0 -> 8633 bytes ..._access_to_apis_enable_apis_superadmin.png | Bin 0 -> 11829 bytes ...gle_cloud_project_creation_new_project.png | Bin 0 -> 10357 bytes .../google_cloud_project_credentials.png | Bin 0 -> 23760 bytes .../google_cloud_project_oauth_client_id.png | Bin 0 -> 15730 bytes ...cloud_project_oauth_client_id_download.png | Bin 0 -> 22768 bytes ...gle_cloud_project_oauth_consent_screen.png | Bin 0 -> 21553 bytes ..._project_oauth_consent_screen_app_name.png | Bin 0 -> 13761 bytes ...ud_project_oauth_consent_screen_finish.png | Bin 0 -> 19075 bytes ..._project_oauth_consent_screen_overview.png | Bin 0 -> 16204 bytes .../google_cloud_project_oauth_playground.png | Bin 0 -> 51972 bytes ...ct_oauth_playground_authorization_code.png | Bin 0 -> 19001 bytes ...ject_oauth_playground_external_testing.png | Bin 0 -> 12527 bytes ..._cloud_project_oauth_playground_scopes.png | Bin 0 -> 20638 bytes ...roject_oauth_playground_sign_in_to_app.png | Bin 0 -> 20614 bytes .../google_cloud_project_selection.png | Bin 0 -> 23119 bytes ..._cloud_project_service_account_add_key.png | Bin 0 -> 20054 bytes ...ject_service_account_advanced_settings.png | Bin 0 -> 28930 bytes ...oud_project_service_account_create_key.png | Bin 0 -> 11128 bytes ..._cloud_project_service_account_details.png | Bin 0 -> 15052 bytes ...service_account_domain_wide_delegation.png | Bin 0 -> 40276 bytes ...ice_account_domain_wide_delegation_add.png | Bin 0 -> 21300 bytes ...gle_cloud_project_service_account_done.png | Bin 0 -> 20681 bytes ...gle_cloud_project_service_account_edit.png | Bin 0 -> 21642 bytes ...d_project_service_account_key_download.png | Bin 0 -> 31052 bytes ...gle_cloud_project_service_account_role.png | Bin 0 -> 22085 bytes .../assets/screenshots/oauth_allow_access.png | Bin 0 -> 36383 bytes .../screenshots/oauth_authorization_code.png | Bin 0 -> 28890 bytes .../screenshots/oauth_select_account.png | Bin 0 -> 25321 bytes .../screenshots/powershell_oauth_link.png | Bin 0 -> 15407 bytes .../screenshots/powershell_oauth_success.png | Bin 0 -> 22709 bytes .../service_account_email_address.png | Bin 0 -> 18443 bytes 37 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/screenshots/customer_id.png create mode 100644 docs/assets/screenshots/google_cloud_project_creation.png create mode 100644 docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_confirm_project.png create mode 100644 docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_enable_apis_standard.png create mode 100644 docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_enable_apis_superadmin.png create mode 100644 docs/assets/screenshots/google_cloud_project_creation_new_project.png create mode 100644 docs/assets/screenshots/google_cloud_project_credentials.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_client_id.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_client_id_download.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_consent_screen.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_consent_screen_app_name.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_consent_screen_finish.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_consent_screen_overview.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_playground.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_playground_authorization_code.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_playground_external_testing.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_playground_scopes.png create mode 100644 docs/assets/screenshots/google_cloud_project_oauth_playground_sign_in_to_app.png create mode 100644 docs/assets/screenshots/google_cloud_project_selection.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_add_key.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_advanced_settings.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_create_key.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_details.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_domain_wide_delegation.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_domain_wide_delegation_add.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_done.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_edit.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_key_download.png create mode 100644 docs/assets/screenshots/google_cloud_project_service_account_role.png create mode 100644 docs/assets/screenshots/oauth_allow_access.png create mode 100644 docs/assets/screenshots/oauth_authorization_code.png create mode 100644 docs/assets/screenshots/oauth_select_account.png create mode 100644 docs/assets/screenshots/powershell_oauth_link.png create mode 100644 docs/assets/screenshots/powershell_oauth_success.png create mode 100644 docs/assets/screenshots/service_account_email_address.png diff --git a/docs/assets/icons/icons-192.png b/docs/assets/icons/icons-192.png index 1176232e198cec224b573ed005316de152cb7d52..1893bac21e5d9e7ab22332f1331e4342d02ff5c9 100644 GIT binary patch literal 7629 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

{>f}dahysxZc@INE>xCqA8tK@5kw>4THSS+tn zaIfJRDl02~ajez)GCZXPl|Q?QkTglrTfFf$D6ZOFP)}(9{L8OQGor|h*B;C+h*l_R zNg#^NwtW)$HB%zqjP;_z>dGCRe!J;2;>V_VP21k+ZAEX2HH1DiI}!2(`Y}HkIo@0f zW#H}2Q#K7FQn=bYILnf)zZ-{BVHZp!j+e!~^(hr}Sa^rVPPjgY46y;He^Lf2D8FeWK zUlY7b!81HemoarDgZ^084EAU^pRQ`tZavj&bb7UpnZqHZsvS0ueh(Tg ze5(UY3}?f~WOTDjeQov_Zub$>A3@+*i;KR;A1Uz_1ahOIPJ4vB2BA?rNZk6PnGtzBk)+`DDs zFSDFq7CTKq`zEaw2fE1RX817PY$oG zd-Xk3*;sw4;*oQ7#B){-#&8{pW4Fr4p`!SRva^??lDYnVNi;**bzbOQFGyN z(7ER|qe4s02P2Q6rzDJjl=Y0d-NavYE1P1oRz;V==L_fG#R=v@}$Ssgj* zvbv)5yGva$N3VDR>l$zS+yU9bNlXr%8mL_P{ph;{+x9sZltpK-8cdiQQd)&JknE?u z_@+s*8O&{x>hK*8{mNEYE`;=-jC4O!D{kPRfGc#dCUH9C@BDN32I;z@nFdWZK%cUo zmE4AYG3GD0-$im~#F+@tw~+uV^!Lwh@f0v6@XjQ~++81^mTolb^+N0)Ld|;&o*0R7 zKMYi02Mz;=VAB|=ri*32T@!`yQ}9rA{FGp&wS8WiuncBOJfX6q|JZ;f%G)aJR#Z8W z9uk3|{s2vy9z$j{IF2~KtaahG@hZz6KX5|GV&gKdEC^VK05<5Loxm zH;UhZDUEZs+O7g!668u!n>Rg^-HhZCYsmJ>hWJ19tM;<$ffd%uG!G^Pk4tPpcP7d6 z{H-n~k$^-iUdJgrXJJ=%`ccYjBfj@4Z|IaOn0SW`Tb)Ol8Gc_E;BVEx12rRIY(yAQ zRXUZ34*VN8F4`F4+&K&_0J|?}%Ji;w_>XHO)JkTEj_o4uBw-)qCo#yrH>=G6^epCm zR2Xyf$Ko?HU*z?)5!H45cF7Qp()uU>t6q94Rf?F~V;fWKncM`i)E&%7mad3Uls?c| z@7jhta#?bKC6+QU#T6eDkV&tKwqhUOh?a>z#>QZ_&{Fh;@TZ#+=NK(1Y88VrMAXbf zIL&u=YGCaofL`?*)P_jcb=$8cZQ^3`mEWF1yCo$9oP@5YAzE#Wf?}j#bEy|7T^2Pb z>p*Lh=Isd0J|;G~hgh5Bz;$&r5TAl=ci!JS0|ua1!)}tYJcL(kjgs{yMguNx#wiy?qsp zljh23>(H*2-M&EwkIiMka*p-6Wi>8NU#>)vKt z`UKNcWZ2e}x!^uC*WgGDX1k~p&kwe~GxeOl2>O_lIHmKXrIzUVHm}to8F~jC8q0Z4 zN_xJxH!c>8Bd?LClOI)11iL^Q^tC{nQ$e|@Cv@y%UON*(S4Zd%#?*E35dFJ-0@jd6O z?<&aiWr&jv(SwPTS8kx0{8;I!t`kaR#RJ*nN+CHt<5%ZT8V$6)mkS zlaleLZgn@5HOCk25zW@I_mV9hvLPHtDO}Uh9vVO$>RU@z$8Tm?bKxoPdkbCa7@?%b zTa3D^M$x&F#1>u_quhU%7g=&n=EZ&X8|lrOA`y$&-+jANfq0uN1*(Tq&MO;8>U!2K z|EsKc_t2=|TV84-i@w>eA>jyt?_=*N2FONbcqWjws0|2dUx&X!*Br$Zead+;!=Z7^ zk91($thpq5S?@)vyHmpD~X2?=(sTM-!IP6tW-0yHa=fJOh zPV6CuKIN7jNR~}Vtc@BWL1L^hRn^d~M6+F)F1Mw|x?9a}r`TgMf9d&rRgRjo!CoHs z{%&_`G`82I0{*_s)!#*>-2}r;79YuURV^$DM~JjW7WghD8r-Il>Y?vt1N9FEzMCqH zj=W(p4H$$nZANx4PPaoD;d&?Vtv? zqep`5Qbgz#7msqbKjTe5TU9+J^$Wn*tO}VoLh|j6NhvnMc`WrUeZ^9DW+^ zK0rB+QcA(Re1|??2)|a7m|{ED8RNh>LRC5}npP*r{H_A+G zJ`m~AxW-?$Qe{VY8_OXA3Z`{gXODEmTBn+4-cVphBJN)f>3VqNUaYk`O1+n=5KXdB=$<^F@u9S z0Hs3BNt55pt&66DA88nq=L!3oZ5$0%Q8TRk6##LgPMYZ69sCf~sEFQv^*EX%?%1L| zG*tvHNgQjH4OW}tp0(hgEDF#L8F#g4y`#PJ+iwza zm>2+wG7fq?U|HUvBJ6(UB7qhgC&xV|Js9li(WzbnwTWff;Ofc^&pbzAxee@ZwxXFF zxclzFP9F93;|*@Wv260})bLzDTX-}k;IdOZU@Q7X1!`^03^)6=UMLUC7AQ^uw8@g{ ziF^`W{du`B-FY(ywf2unQv$>F0KmAu+*ubG>lztS5;Ts=bdx_Di|z(B&_967X~3DX z43e@mw3S1m4ZANn@ex$`8Ik(g{jq_NRt{28r3uoYU6)mo%Avf3%IM{gAz`@1Ke<8= zedTXuVRS zfTSx0>Kj?{8ncwAs}KEqo2MK1Qcy)O$~E?><7j%b)`xE2A#1Q>T0IwzsPdz}1m-!H z7fYw<*{{lvl5ggG(>jwyHkiM#QRzh?+5hYn*7}@vp@W)=QMqN&$Dm326h=1FO)%|r zR;wFZQf152ME~ZB3RY*66HcQyy!4u`+Pm zOFL_e0Kf(^5eKoF$jdFc*4g$NXRtuB#*j&~o)mc7-^Q1>vw`w8gKJs_mSz1lg(gc$ z$C0&rshNCR4f+1RybZ?+*bF(=SN@`?hSKl~{a=jb&XyT0 zZc&@jas?7+|3Dx69z{E(Ba4;ISmcwQb^I2KK)J10%E>EqO?BaQA2q3Q@^7XAqviEf z9e(a&WC$_SE?J(aNYh_E14A%}Jk7o_7(gNkjB@_lS8N=v%(ReX-<-m=48cSoJ1;3` zoE$EUbUl5^#rvGXtqgzcS7tC}d9R?<3Vrpyx^>K>M)DEM;M?G#G*hUbK*(|2nZ|ym zxp&cc&7Ni>S&0L5)#ZT|ttwMEb_PHCj*8D5@~nSQCZg*wp^jdzL|Kl!^f;(kQ3i9s;_IVJF6ench#bHE zi4DF9GY>Yk`E`mjIu8-kT7f>3nG&{y%jrk=#-}M!ZA@D1=6t2@oD&ay6NA3lHm_N7 z^%4!cg?|pFUmFF(n12*R3iFSO6US=-GSVSTHh}0QW3=+tCcfR0S?InKV?taVJ z(q-`c?P5`ihTW?o`r|W!WJ5T0K0_1ztmmjdMC}DMin4c-_{oEBJ@bE1AE@;csb)3y z&mt_iquep7;l0@}hVdGpyOQXOZ_Q@~i>l5y$B}xZ4BDwkb`HS+j ziKRr3{AtREqEA~PL#|TneSGExWj@yp6D|?FBBfjbti%C58>nJ-PebH!fW0C9iy@zXFWW#7)+jFX$o_tvfL*!=W|LX<`#7!=} zG3<(=@$=JTYz2N}ZxlG8tT*m*vzD_o>b-~4zS9;@P7L7A!vpTwI2nBc4bfJuUO#z4 z5ukjiB!GIbhB($bx&?m{Ym(*7sp~M$d{eylzxU&(_5xd*S>)MUSkBE8*6Sb7w>P0# z56n7t_BpEAMwpyTQZyOft5U(U*y|Z3&=)iViQn;t{-yJcfLKQ@;VR>34@kkhqxH_4 z%C*%X#$^Tgv0fMjBZD$9DNo1nk|??v>|p(RTp{{Z%{2UOMQ|futQG7$I*`Rz7qv51 z?D)a(Jwf^$FONlEX@P+Znn%^4F=9mW29Fb3`81YzllJx|{m@D#TSyO3#{p?&cuKS5 z_ovliI&hD2m9OsP!2;j64z! z?PtS$Rb56HK-4u+k{mJ~g=DYt9@P+Q0qJnxFL>8sj8vI(VcOZG6pYtllQMzclF59S zZZAACb=Uz?;jEvFr*3IxGkk^raC*TPLO(($@rtrd4UO5Jf+4a*wWcE@KORyK&GMd2 zWTN7-)lX#Mf8+yjLXTkgC$k08@61o}wgI!ca03^Lv-i>=-^K)BvZxp8Aq~`k9}fk~ z#bU7+EfaV}R5zy1%c{{UnBQ=^)w$_T2WMFU>qC5$iZ5}5y$)nB2Jk}^HfjvYIL&&Bim~Qog%b!CL(+E0t$<>??GFy z|507J`r4Ap!?i0fzvyDRC47_hMhPxuGTnYNzVXEb7Lw^>ggR{Dn2{%MtTrDS0~x>% z^)8r22i{T?QT`N$_3zlCThsi_De-rpdR2|&@ z))WS}sF;=bLNRYeer{#aH7nnw?w@>7`n{gUlmp!#ggYr}A6;M;(%xuFy4MU~%go&d z`x`^NXww&Wk9C0^6IlIvSyD{&3-5RNWab(XC(i`Pd$>#H? z*E1py@A_hBa;SgSVeQVfW9Z^Fg!6}?pFVtv^@`sXnP?q`7f$B0IcZLK>+!#J8qBGO zjY<_zC?~T?`_v#acuzNcaBUE^(5yRR6q=UT?HF+oSr%3p1S^2(Xu8Z%)$)=;YKtUlSLj9H_|JUE9Rwdo#I5@26e10SO>H` z+5Y5U-k0&+=oD@r^3ui8QwH~)oSOyNt$(-Y8 zE9z~(2ac0P1~+hKSMR{5;Opx6eXwHY6cbNY3!*U>P~=t5ftk`jH6}`ZH?vML`gh{O zcTuQX&J@K9ZutP|6b?U@YoClaeSZ5bDRvd>2EJdURO0f5Co#hzv@B0zBq?g6oXJ5v+M7l_m5AV6weQKSK-6K30J7ouoBCoQkt?Hb{LNunuv*a`+;{#;x@!1SxFFJ_4?BciSTI4qT-$S<;Vq*$78LQ^ z@7;%!6Z%k8+|cwCT%oCUT^op0Ei&iSJpT6Hc^#q`&bjZtd-K^N(eM_)vx4kU%Zvd` z9P1S$krn&PQVwttoE&8wO4zm-vMN-SaA|2KV3P~!LruH&s` zhq_D2`h5W;bKRr?OjD4}>LOuhe+v>Um2&?ywB8ruhyi!%Js3`NVF#iZ)+ zlkTT-YZ)b;aDgsj0f+!lF7dW{+(dkBuI$SzX!P&5otRkSAt};M#e!dp`CfQ=_y7Yp zTcprB!oiH6GiWn>Z zS67k$_DW{NH{Uxs87)_4Xw`o^=J{&u!#b%QW2Aka|3%Sx^uW{=*1bRL;8opv;^|8k z(i&|~II+LoX;OV2{vYv*Ytie2l5$@sd}A_I$iXpLw=>B3K+>`^-weg{W%;=A1w%AW4w6Jj zdJK&eJLYkTz9wSabu&usx~B=)MC{PbTrqo8M%{Jp{!=F=pyzM1P%RsR+*+47Eb|nq2bEtAPzr(&M$Sai>498Mi3qq zC(2M&TJQ<3ldgG6Y`#IMDz^6NaGyhzSEf{4PbAsO_gi!Yd(yAUnR@}Uem*VsH&qSS zQ<0n3YLw4$Gl4*kq)9*No95q~9}~0t6#Gs%z>IC1>{Bu$+gJ9O)o2|S2jQ*%)qhV_ zf}8(*1`&L6B{~>T3}}VWNowy1&h4|Y7TTL>4PMmNla6K5($XY8^YC~`0uB@7ccSu9 zG|4NzwEUe`{2Ry!Q~HcyfkCjm5^TNP1guT|eO!MNc^+#Tcr|iK^jLv zZP7bJ#1Uh)6>cW;Cy3s0vI#jTE^})R9~pRz&ZPe7>+)?fQ6i>`^p^+y$U8`I`z(h& zXD$TNtxEr(`uc~bs_4SnquO{&>ZvdPzha+~eWb+NPazYB!`LAs!Pw^Ju{MD^{&RUp znd=sBWWuh?#w>3Y8L@dp`qLf}+fGk0zG1D1a3h9B8PrLwHVZeIF~Ie-Hi;Ot{`x7-y3XI`do!LF{wy zK<|-6`AW4M3Sm7q(}4%pp=On@3+Wtq@#2c=EuV}Jk5m?Wf=q8~!9k<5MHA@nd_m<6 zSQE+3r;|D%4?j`_gY+9dMWG$G>88n=GP2fds=q7oGT$ea2!YI`w+Sic5(OR2=~v(~ z9&XQ@2(AE{jKO}t` zn_Bs}z^j}LCykFJD3$j4t(apiQS!et`WUZTaLC}N!_EiE!i5`4*o3*jm0Gm3_p7(Tz_>+Q;&G1X-)rU82p^teUvoTyt zy{40wd#*^m97n3}!cLEU+eQ9uQsM+|AN}p4cRp$lCZNqvFK#JWrDycXU3_1RU^5(9 zIEgc$1z0+ZRj?!sKwLl(J%HoCs5WG-yAE>AFGZ**Y)Xuk}g zW)m@Z?ZVfo@jcru$9KH1w!v>B{=-g|g1Ct=W4K-0;jNRQ2f3S7y=u|zTj__!qDUY9 z5yeh7q@$Z`!ZI8YxfMeyEQ?&K6eo)a7WOd*OqPs$(Y94|s^)xt-MY(EcoUO3>ES4& z6mE7b?Yua8JX;?*=nzmE%XdZ*rKIDswib`H^3(a?dt`h`*X^CZIdXz?+}bf30XVL{ z5gR|j&X(-}nJyZ}-M|Ns3Gn6PmhQi;*O-ovVXtH6)b4GH1=RK*VUJ++_EZ~xcHZ|t z$Qb9=eJjb=oU7ppTql}RUZBku9&Eqt2oD%k3O%SZ+@H$gS`P4=LUBGr?rdTOF+Y`c z1aV(cai#z6(69V6a@5UD|Hrua3U<{@M1LHVT9l1EhYgs&cDpY6lf2#1^}t7@WA>70 z?+QcwCN>#hRgJcOr%9jAc3Mc_wNpDKa*y)b^Q(RMKIRht@LWe#BUChmqNb(W-Qh25 zf`N4(4)g1+kI&fW`w+i;S3Wj*Cm;)Aw-PIUHT0!CaH)Fyt$b6Jrr>_>HcoT&3l8&* znC1yTpGN`KU`O<9Vvu`ndE@ye*bC05B15FIr14tBAt+~=p>0`Ku#eyjD0XX`j^%EC<$ zpBL-I{PXX*LZ{LWJL|aP*%h# z!7A;I3J%Gw^V(s2Js+~0x04}bjHR32g4@`7e!3(YIx?B}G~IunTAJUGm|tf4(0ehY z_hE5!dp-1I&Mfd^Abo11Cu*T$PWGumdCBX*Ij6&pM=Aakp9!SeETq4dcrNkmJtw>> zvwYY|XWaJ%CD@a=FhKT3SJ%FWFwJF`yDFIY+MtowBPs?{%5+=Q_q#jBKbP90WK-4U zmft>hPl?EOcT|d!Z+VbV!A+j6d$6@7lN1MIsZdb>_KKl)Iu?&-}e9oFbdYhLfI7d+U z?XNvIfFF7^hsuX$mdvONsCmMk{HkF@%iWY4oTB?WpRj`zAA8& z&}N}qwKJD+`;G8Ci4HRNV2N@Cq%MZ}zpDcY&Jfp}PDKwty~78kFh2aabx_5gSnid%I0Fel%Z~{rH zeqLfHvSAIg_vU)HXE&@E+>F{13QK|0U(VAKafBH?I@G)NL9lDAFq1Cm8-!Iq$dgic_S4P3YM>vYnr| zEv2FP-*~}D#yK{VH;jhgT6`|UOsywdWS^5-*j*Ty3(Zf{cV!m-M$XjiNV>*Rj0Kqc zI+$8jiy~mJ(TXt1;a-OYEE{dqqFslz3r?2W29P3v__qYBuQ%@W$`>miv%n}H;04i& z^?;^Cl>d=0G(CNkBgj7}zC%By2NI+nAF#Xh?igUgO^GN8(GCJnp81zD2iKY*e7PC3 zZ2;ZvaclPk%H*qy?B>`V)DMCOi$q2<))Sqw1Gb)fbw+;naxW=_eUVf-jZ1*+b{*;M z@9PQev@3SEV?`+3LsUoWaJP}=O_-41SPpp|kzmhp#^MhT#u)1)IjpmQY)n9GD^hR* zqa&_W)o`ixVphLWDUf?jne+SvyZN!O6&)7syr|&2YZEtotg=Acfci62@xe2Iy0bkwv8?14(zBS_?q3@ zX(|pL>ZI8ZaE0NP4o%igtOw7^mhfOl+3|Ap@t7GDZGPp39Cs;%73QHSJ657hh2j^I zxG?+DSWxx=bdMQtyNl79)+w@Orsh=G3aA^B7SOhSfr|JK^N2qdf1eaj|FopW9opY? z`5GpOL3L&6prIqX94Xs}q=En9OS&gKD+R-sVUNL!eq(v6Hx8;D{lQ^{I8?qnVTC?B ziXOby=#NG5X`@{1ySb&COhrUN^dYzS+Z-I#^IOyI_`w^kp!T%aj7zqD`Z09Gs?u8< zGffjuJ@a|4Ouv4@%IeEjR*AdJLzie;nmuz=7Mu%H|!Zad~CK=t_xA6B=@4cn|^ ziraq;eI|zLidW^qA`Y3+_%p8kn%B0n6T-%+xB^jMZ@vh>`@*vYtKgNNaKY{HFo1u* zBtK76i33rUdkEa^MU3?T)}>mIC&0ct z1i{z*w#YRPQBYJ9ihm+`8wWYX9JUSwV$++2=G@#D2}XtV_owa)(T2VH(|?`2B-i^M z`W#N=T{+bsnY0!V%jFMBA0ZZ?A)GB2TkZR*#*Z8P>3Bu-!lQKbPp1`}C4F+O8h%5G zG<~c|f-s8C8=ObTN9}rFfQJwE}O-xIAmmsRvu9>N6(BY#9LnLc>+ zonjJC86u?O2TF+7nyzDZn;$Zd9WbO@>`!R;=f}$ugbLF+vkm^TcjKy+;CFEXh2cCa zp)K6LRtMHPo(Q)d>nihZId|Lyyqo_5_RbdKc%XV~Is_EPyr(oNnJnXaVQ*7JEI4#WL;lxVz-mn|U&aNx-h(b4d3teOV*%f5PFU{TTmchg&X@6#0N)Y`ufTbg}alv$|q5RX!|fSj^crOhGA`VCVy}+Pr9!vJO z@GwtNL!31cGUED(TV{XQ|%gfb3ovC2(YQ9S*AZ(W@O)A&27fw(%XWZVw)hA zJ~q?gE|rbSYuXI9@!sr{_1vzr3f=S2=Ysfo06ZdAUT6Xkl_s<2w%)@?%T#`B4p>CF zsphzk!!dygx;?ZKztH`(4~!AD_`$mQ-9M2Z$)4R=D?C>GS1Oge8U8FjL!7u=ZDs93 zS|T(eI2VcqQ^O^2p0t;*3(`N(j)n9Kqv~?JHb9e|O*ejghySd5;rI)Rp$1WN*{+Cq z@?&g|v+S42#+ zV^lv1&2>}X#A$Bhe3Jx5odjQsVKsCWjX4dzud-YJS<<${Uqd(RVj>BXZvMQyc@6yl z$6B1tT4jFnLpQe9eHSr5C^$Y-PCn*36n)>Gcc04U`kIMq$LOf)?*hAQtJ|W8ZJhrE zLV&+7I1HlLC2HW>W=db^jQo5q1djC4V%@5y2XF{%lAoW6w+1z%ANmblkfnZu)KfTF zBBM7B+z3{|xx?8Ln&g3*MaVEZ3>uGj8U~!ruy#A89bYTN2LW=kR8~P-R1rn^_hW&% zs=7tmGk^8vTK=@)3-XzD&&WUKJEj(s`>e92Q$P&;&fvDbZq&S?laq6ZEyv1mGPC{V zr>HzX-QB~ipaCJv0M*O2v_dw zQLSRJ!{89>bGQj}m8<6mISa&Q%(E<>aA)+^n=jJN|43l|Z#W~}@pz%3MC;DyS0npf zrWo0bc@-=lFqC&>@RxtVX3lOUd^CJpe%AI^{tJ)Vg{xGq~ zn6FB1zRi$vMNs{(-_GBqszK9KEjzp&iES&r6i;Q*z>^_6*B*`-Q6$$nE#>!rArWP# zVH|DeQ(9l3%tWLd)rgfgyvW1cRXq{L>u&mtn`=vJ&WtbE3X5Qz8&@1?mbpg(C@8Tc z%AE*i&X$*cQl_BMU^ zj7@pww`Sx%n#T#pZ#jc^ygv>(UA=70Twm-CYCABQ<>^wBmi{j{+Sg*PE~s|PCdL@M z2m81C5PwZ@r5go6`5ZvI!AnZ=4ZBnK_adcArgovh0;MBC)fnCpiRARst~Ok5Sgn37 zcW^(`Uk>Kl9~Rw6djkSiM#%cp&^+tmD1ljYSD0Fuc%p#U?)woBxc{0V-A0?bgD3c; z`-rsg7%|RNMw+(%!>A8M-S6DwkjQE&y$f_V(R44G7KdXyb-xVXKlphqN57G1jcDd_ ztE?E1e}%vG%)qae^2;sH%5BbqqOsHAn8_vTy`psN4P2bvXkF{7uH638mO!^pS{HV9 z3U@m($EtV4;t-p)=A(@h7p7@Yi~H~>L!-3_N6(w{YkJN;+2zU{ z4SAbe@lTrg%``E~u)4;dUw%CX1`t{Vav3i{ai1em7FJh(>ec1rY?D$6P8_I3@r!EH zQDe`~AqwGRBP2Xxil2mWDO(;)^5#t&v0hCiRmt92jK0X9;%UYbL8TfDoZy1xSxooN z;^C$LL-yo)>cZL<@;b^WTtW}ln%nQUmu8)JHQ@|%p^;&h__;lbd7v_b|L0@3$}4-_ zHJ?V=e~{B|Qp<>N9G$9?@wPE>Lp`MtYwTnaR_&V6;u3hv^*oXa>!DR4{zC zKt?Aa_YZy!PmeLYH6Q86rC$&= zN?-l@!{U$I&Z9tFI!x#GI-ot}K*L9)zsUQcf3Zcshk8DJ)!D;*dz0#(<~xS*qwr*{ zh*N`;bfiUqrlmtq)}HrHDx+NGHrA!pNzy?k=MAH_qH>QUo$@3U;%(g*=xEVuMYiqB z(NT=(P$mP(+Bp>R#z_HUqV@&@$ZA>o;FFct$6XeI4T+FnJrH_u) zAys^3cZ-eaV>dcxwD+dXHLYjTM&&;GMExTk0~J!6>9OLb*jj6J#PGP9ft7TNVd(U z{AnCIaRAl1QioNMZWXk!d5G3SJ3L3pi28oCG>w()zM7fx%3S`Hq}guCdPf)0f&v5sD%n!cow_bs^PbQ-mpt8oO#z-f1D{%# z4j46ZUc74x#k!JHn6verOB0wwP`+&yMe}h6qtW9z0Z=tR@T^71bNdv}Y7;IYQvf!@ z1VGKK6_VnLQcYA*6U>IN#ZK|8DN*Bd&ah@^-^X}r#bO~6whvYH8OLo9_Wlpx;(Urv zaFXKW#mBW|wbev1E`w#sE>-FGcik<>^QjxVL4w|$r_EkSKvqm|NtvaL=hL_|Qg6Ov zTVhQLCmXp9i@J1FDG?wAPq6hTbyF?VEbOiazZ60NbW{~I&MK@*__jv>Fc#}5Gob~g zy2P+67L9d_wy|uqIIIe4B860P16q9KY21V0i#d%jQj3-5Ri}ipv!@N~aG{W#puCAA zzGixKz@cKd5FF=^&Kx`zuSOTY63?*@8%Za_>=!073kCvu`ajQ^3W{!#j+H48N>1>c zusH*>T0-rI>>n+{j5Rm-3oHH@P+7=dqtmKKjaqf6NtYk?#%2ceT`4m0 zSK+m*QR5-6Qmc?5hmJ8M#4|bx=oEd<((i2Wf+1}f5X_@5oNB140xm*lMC-90YU+R# zR++qG>fX4hLCpk<>yeKnA7wOGtDbb>`beLODS?d>npcUbK2bB*N8uCSS3*GA?*nMpYaKm8hQXjv%(x&mfC|mXVoNfUj=usi*|Jv(9~zm zkm4F$oi!X!V#o zqq0L& zPPmNkH@c9i7-yx`XIzjMh-qLhlR_bb?)9Qu;;dVW)qv=o3eM+Ff0!j{t;O5fZ8Cx` zU_wv{Avj$P9G4OBdBlM1#pa#F=PlbKqFec#hTacM5Rv2EWR+^sW6hgyJfWn~6 z&*LO$<_BX)GyyeO^a~e{>nvGbcLGm2QQEJ|Pj)_k+H%jBZ>o}Qi<=1+?x z78-$o2nxFpGqiW=KR1z_`7~N3+)SNjKI=sYno)BqrRbccy<#_@2nvyQQcu8sv_}l~ zciy}P2dE9ActRhPtpE|lf>R+km6t!bi*l}TZz4g46xKC&8Z0S}^QfUtbPQ!Any9<# z|3K9V{;r`J)uQJF>wHf)So;#8PtFkG$XC`q*KWj7p4<5+LZekPhM2z2X9WhgW%zF15}g zvOzl|w;IP8DVCvW26B}%2QYZU8I#An9z?q*HPRQZAd*tyr~@7%AVuZ6E-JJ zV8M%;NPb8t1ndZ4P5y*)i%zKpUa7)k=LW>uM{5yZ36N>7X2yEkG9aNht-<|nxOyzw zCI;yRF_XI&Uc_i@X8-%%sbHyjv5C&ASo)7si=D$9rQeOR5f_v>RrPE~YFn#5bLkL5 zWrIxBrF`M{S`z(BSZ3@(kMw?^$im=Qmgp92Mm7Uo)ke}mKMwt*`LD{D)KbCR(cI(BsBVWRG%Mx-hQ2tCDNYIl&r#Jql8}`* zg<3(dWkh;r^7{zeMPgFDtRIZUrGvgU3qW|mZ>@ht|3zOht5U>gh;coZ5wMg28cf|} zIc>pVC1+w{_qIe7uf6=T;+D9aGlV|#{%E)$G!&l29cncMhE+~OB<6X66TD4us4V!{ z8L^tHiSkB$W!+7O3~I%bQfi2o_mgwNM(gA?HH!->k|kPt|LMNxJ((`{YDjKl9}-N* z5T!?&`IjUrwdYNfN>VU{+O5!0TnSpj&EyqjewoLVM!jHj`I^r=YEqom%$BWAQW;;h ztnklwHLl`T+UtvV%2c1DYFPb5M+!ya_qi7+fBt1rF+GMR)J41UHDM?FHQt5qT2V9B z{?Ayr@^{o?OY@KVg+gXEqn2EtJ`K%t_fvFH&^XiDsA8O;mVWKEfFnkSbVGDb}=iA@tav@3YYF1Yr046lMnzr&8=a26Z9sxp`l{7Q;PCu z-B1mkG#&!G5}(E;0xc7;E?X24 z0!qB)c6#IQlsv7L(fADNY` zItzY8vi-6$jBPOoW_w;y)+fdXtm!i-SbB*ItPqaQeE%[OKl5$7RcV8ZQ5>yokq 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 Gq5ltcp|Ym{ diff --git a/docs/assets/icons/icons-512.png b/docs/assets/icons/icons-512.png index 0d19f116f2eea53f784b3e1f8401785a6da50a74..4f3df8d66058123663894171a9206a8495915147 100644 GIT binary patch literal 19073 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 literal 0 HcmV?d00001 diff --git a/docs/assets/screenshots/google_cloud_project_creation.png b/docs/assets/screenshots/google_cloud_project_creation.png new file mode 100644 index 0000000000000000000000000000000000000000..25a8ffed2e61c55df9317839004e2c672dd57ac7 GIT binary patch literal 9895 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 ZjVes$9HL2)MR?)?s48o|s8Tc!{x7Orwx|FA literal 0 HcmV?d00001 diff --git a/docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_confirm_project.png b/docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_confirm_project.png new file mode 100644 index 0000000000000000000000000000000000000000..952124299985cfd42f2985b3a8727947f481d6c4 GIT binary patch literal 8521 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 literal 0 HcmV?d00001 diff --git a/docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_enable_apis_superadmin.png b/docs/assets/screenshots/google_cloud_project_creation_enable_access_to_apis_enable_apis_superadmin.png new file mode 100644 index 0000000000000000000000000000000000000000..6507034f6f29884417ac79fd1ea389e9f24f9c12 GIT binary patch literal 11829 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