Src/Private/Get-ADExchangeServer.ps1
|
function Get-ADExchangeServer { <# .SYNOPSIS Used by As Built Report to get Exchange information from AD forest. .DESCRIPTION .NOTES Version: 0.1.0 Author: Brian Farnsworth .EXAMPLE Get-ADExchangeServer .LINK https://codeandkeep.com/PowerShell-ActiveDirectory-Exchange-Part1/ #> function ConvertToExchangeRole { param( [Parameter(Position = 0)] [int]$roles ) $roleNumber = @{ 2 = 'MBX'; 4 = 'CAS'; 16 = 'UM'; 32 = 'HUB'; 64 = 'EDGE'; } $roleList = New-Object -TypeName Collections.ArrayList foreach ($key in ($roleNumber).Keys) { if ($key -band $roles) { [void]$roleList.Add($roleNumber.$key) } } Write-Output $roleList } # Get the Configuration Context $rootDse = Invoke-CommandWithTimeout -Session $TempPssSession -ScriptBlock { Get-ADRootDSE } $cfgCtx = $rootDse.ConfigurationNamingContext # Query AD for Exchange Servers $exchServers = Invoke-CommandWithTimeout -ErrorAction SilentlyContinue -Session $TempPssSession -ScriptBlock { Get-ADObject -Filter "ObjectCategory -eq 'msExchExchangeServer'" -SearchBase $using:cfgCtx -Properties msExchCurrentServerRoles, networkAddress, serialNumber } foreach ($server in $exchServers) { try { $roles = ConvertToExchangeRole -roles $server.msExchCurrentServerRoles $fqdn = ($server.networkAddress | Where-Object { $_ -like 'ncacn_ip_tcp:*' }).Split(':')[1] New-Object -TypeName PSObject -Property @{ Name = $server.Name; DnsHostName = $fqdn; Version = $server.serialNumber[0]; ServerRoles = $roles; } } catch { Write-PScriboMessage -IsWarning -Message "ExchangeServer: [$($server.Name)]. $($_.Exception.Message)" } } } |