Uncategorized
Misha Hanin  

Determine the Number of Active Users on Exchange Servers with PowerShell

It’s always good to know how many users might be affected by an taking a server down. The following PowerShell function will grab performance counter data from each server to determine the number of active OWA and RPC connections:

function Get-CASActiveUsers {
 [CmdletBinding()]

param(
 [Parameter(Position=0,
ParameterSetName="Value", Mandatory=$true)]

[String[]]$ComputerName,

[Parameter(Position=0, ParameterSetName="Pipeline",
ValueFromPipelineByPropertyName=$true,
Mandatory=$true)]

[String]$Name
 )
 process {
 switch($PsCmdlet.ParameterSetName)
{
 "Value" {$servers =
$ComputerName}
 "Pipeline" {$servers =
$Name}
 }
 $servers |
%{
 $RPC = Get-Counter "\MSExchange
RpcClientAccess\User Count" -ComputerName $_

$OWA = Get-Counter "\MSExchange OWA\Current Unique Users" -ComputerName
$_
 New-Object PSObject -Property
@{
 Server =
$_
 "RPC Client Access" =
$RPC.CounterSamples[0].CookedValue

"Outlook Web App" =
$OWA.CounterSamples[0].CookedValue

}
 }
 }
}

Just add the function to your shell session and when you run it, specify one or more server names using the -ComputerName parameter:

Get-CASActiveUsers -ComputerName ex1,ex2

The function is also written to support pipeline input, so you can pipe the Get-ClientAccessServer cmdlet to it as well:

Get-ClientAccessServer | Get-CASActiveUsers

It can take a few minutes before the values are updated as clients connect or disconnect.