Function Get-ExchangeServerInSite { $ADSite = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite] $siteDN = $ADSite::GetComputerSite().GetDirectoryEntry().distinguishedName $configNC=([ADSI]"LDAP://RootDse").configurationNamingContext $search = new-object DirectoryServices.DirectorySearcher([ADSI]"LDAP://$configNC") $objectClass = "objectClass=msExchExchangeServer" $version = "versionNumber>=1937801568" $site = "msExchServerSite=$siteDN" $search.Filter = "(&($objectClass)($version)($site))" $search.PageSize=1000 [void] $search.PropertiesToLoad.Add("name") [void] $search.PropertiesToLoad.Add("msexchcurrentserverroles") [void] $search.PropertiesToLoad.Add("networkaddress") $search.FindAll() | %{ New-Object PSObject -Property @{ Name = $_.Properties.name[0] FQDN = $_.Properties.networkaddress | %{if ($_ -match "ncacn_ip_tcp") {$_.split(":")[1]}} Roles = $_.Properties.msexchcurrentserverroles[0] } } } #add all servers in the local site to an array $servers = New-Object System.Collections.ArrayList Get-ExchangeServerInSite | %{ [void]$servers.Add(($_.fqdn)) } #select a random server from the current site if($servers.count -gt 1) { $random = Get-Random -Minimum 0 -Maximum $servers.count $fqdn = $servers[$random] } else { $fqdn = $servers[0] } #create the session $session = New-PSSession -ConfigurationName Microsoft.Exchange ` -ConnectionUri "http://$fqdn/PowerShell/" -Authentication Kerberos #import the session Import-PSSession $session