Belt/ActiveDirectory.ps1
<# .SYNOPSIS Gets a computer object. .DESCRIPTION Gets a computer object with the matching hostname from Active Directory. #> function Get-Computer { [CmdletBinding()] param( [Parameter(ValueFromPipeline)] [String] $Computer ) process { try { Get-ADComputer -Filter "Name -like '*$Computer*'" -Properties CanonicalName | Select-Object Name,Enabled,CanonicalName } catch { 'Computer not found: ' + $Computer | Write-Warning throw $_ } } } <# .SYNOPSIS Gets a list of group members. .DESCRIPTION Gets the "Name" and "DisplayName" properties for all members in a given Active Directory group. #> function Get-GroupMember { [CmdletBinding()] param( [Parameter(ValueFromPipeline)] [String] $Group ) process { $GroupColumn = @{ 'Name' = 'Group' 'Expression' = { $Group } } try { Get-ADGroupMember -Identity $Group -Recursive | Get-ADUser -Property DisplayName | Select-Object $GroupColumn,Name,DisplayName } catch { 'Group not found: ' + $Group | Write-Warning throw $_ } } } <# .SYNOPSIS Get the mailbox type from a User. .DESCRIPTION Checks the Active Directory attributes for a given user and translates the mailbox type into a human-readable form. #> function Get-MailboxType { [CmdletBinding()] param( [Parameter(ValueFromPipeline)] [String] $Username ) begin { $MailboxType = @{ 'Name' = 'Mailbox Type' 'Expression' = { Resolve-MailboxType $_.msExchRemoteRecipientType } } } process { try { Get-ADUser $Username -Properties msExchRemoteRecipientType | Select-Object Name, $MailboxType } catch [System.Management.Automation.CommandNotFoundException] { 'Missing ActiveDirectory module' | Write-Warning } catch { 'Not found: ' + $Username | Write-Warning } } } function Get-User { [CmdletBinding()] param( [Parameter(ValueFromPipeline)] [String] $Username ) process { Get-ADUser $Username -Properties * } } function Get-UserFromEmail { [CmdletBinding()] param( [Parameter(ValueFromPipeline)] [String] ) process { Get-ADUser -Filter "UserPrincipalName -like '$Email'" -Properties * } } <# .SYNOPSIS Resolve the numeric mailbox type to a string. .DESCRIPTION Returns a human-readable string translation of the msExchRemoteRecipientType prop. #> function Resolve-MailboxType { param( [Parameter(ValueFromPipeline)] [Int] $Mailbox ) begin { $MailboxTypes = @{ 1='ProvisionedCloudMailbox' 2='ProvisionedCloudArchive' 4='MigratedMailbox' 8='DeprovisionedMailbox' 16='DeprovisionedArchive' 32='RoomMailbox' 64='EquipmentMailbox' 96='SharedMailbox' } } process { # use a dynamic type as temporary storage $Result = [System.Collections.ArrayList]@() $MailboxTypes.Keys | # bitwise operations to decode the type Where-Object { $Mailbox -bAnd $_ } | # swallow the return value ForEach-Object { $_ = $Result.Add($MailboxTypes.Get_Item($_)) } # returns a human-readable single string $Result -Join ', ' } } |