Public/Disable-Mailbox.ps1
|
function Disable-Mailbox { <# .SYNOPSIS Disables a Google Workspace user account. .DESCRIPTION Suspends the user account and moves it to the '/Disabled Accounts' organizational unit. The account remains in the system but the user cannot access their mailbox or services. .PARAMETER Email The email address of the user to disable. .EXAMPLE Disable-Mailbox -Email user@domain.com .EXAMPLE Get-Mailbox | Where-Object { $_.LastLogin -eq 'Never' } | Disable-Mailbox .OUTPUTS PSCustomObject with Email, Suspended status, and OUMoved status. #> [CmdletBinding()] param( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [string] $Email ) process { $activity = 'Disable-Mailbox' Write-Verbose "$activity : $Email" Write-Progress -Activity $activity -Status 'Fetching user info...' -PercentComplete 20 $user = & gam info user $Email formatjson | ConvertFrom-Json $suspended = $false if (-not $user.suspended) { Write-Progress -Activity $activity -Status 'Suspending account...' -PercentComplete 55 & gam update user $Email suspended on | Out-Null $suspended = $true } $ouMoved = $false if (-not $user.orgUnitPath.StartsWith('/Disabled Accounts')) { Write-Progress -Activity $activity -Status 'Moving to Disabled Accounts OU...' -PercentComplete 80 & gam update user $Email orgUnitPath '/Disabled Accounts' | Out-Null $ouMoved = $true } Write-Progress -Activity $activity -Completed [PSCustomObject]@{ Email = $Email Suspended = if ($suspended) { 'Yes' } else { 'Already suspended' } OUMoved = if ($ouMoved) { 'Yes (-> /Disabled Accounts)' } else { 'Already in Disabled Accounts' } } | Format-List }} |