Получение списка почтовых пользователей с помощью командной консоли Exchange

Использование командлетов командной консоли Exchange для создания инструмента, который возвращает список пользователей почтового ящика Exchange

Область применения: Exchange Online | Exchange Server 2013 | Office 365

Получение списка пользователей из Exchange Online, Exchange Online в составе Office 365 или версий Exchange начиная с Exchange 2013 с помощью управляемого инструмента для вызова командлета командной консоли Exchange — это двухэтапный процесс. Сначала необходимо создать удаленное пространство выполнения на сервере Exchange, а затем запустить командлет для получения сведений о пользователях в удаленном пространстве выполнения.

Для подключения к удаленному пространству выполнения необходимо пройти проверку подлинности на сервере Exchange согласно схеме, принятой в соответствии с требованиями безопасности вашей организации.

В этой статье приведены примеры кодов, которые можно использовать для создания удаленного пространства выполнения, запуска командлета командной консоли Exchange и получения списка пользователей с сервера Exchange.

Необходимые условия для получения списка пользователей почтового ящика

Для выполнения этой задачи требуется ссылка на следующие пространства имен:

  • System.Collections.ObjectModel
  • System.Management.Automation
  • System.Management.Automation.Remoting
  • System.Management.Automation.Runspaces

Примечание

При создании приложения с помощью Visual Studio необходимо добавить к проекту ссылку на сборку System.Management.Automation.dll. Найти сборку можно, пройдя по одной из следующих ссылок:

  • Для ОС Windows XP и Windows Vista — каталог установки Windows PowerShell ($PSHOME).
  • Для ОС Windows 7 и Windows 8 — папка Windows\assembly\GAC_MSIL\System.Management.Automation.

Не загружайте оснастку управления Exchange 2013 в пространство выполнения компьютеров, на которых используются приложения, автоматически запускающие командлеты командной консоли Exchange. Вместо этого приложение должно создать удаленное пространство выполнения так, как будет описано ниже.

Создание удаленного пространства выполнения на сервере Exchange

Метод подключения к удаленному пространству выполнения, в котором будет использован командлет командной консоли Exchange, зависит от выбранной схемы проверки подлинности. В этом разделе приведены примеры кодов для подключения к удаленному пространству выполнения при использовании одного из методов проверки подлинности, перечисленных в таблице ниже.

Метод проверки подлинности Область применения URI
Подключение к удаленному пространству выполнения на сервере Exchange Online с помощью обычной проверки подлинности Серверы Exchange Online https://outlook.office365.com/PowerShell-LiveID
https://<server>/PowerShell-LiveID
Подключение к удаленному пространству выполнения с помощью проверки подлинности на основе сертификата Серверы Exchange Online и локальные серверы Exchange https://outlook.office365.com/PowerShell
https://<server>/PowerShell
http://<server>/PowerShell
Подключение к удаленному пространству выполнения на сервере Exchange с помощью проверки подлинности Kerberos Серверы Exchange Online и локальные серверы Exchange https://<server>/PowerShell
http://<server>/PowerShell

Подключение к удаленному пространству выполнения на сервере Exchange Online с помощью обычной проверки подлинности

Следующий код определяет метод GetUsersUsingBasicAuth, с помощью которого на удаленном сервере Exchange Online создается пространство выполнения для командной консоли Exchange с помощью обычной проверки подлинности. Затем этот метод вызывает метод GetUserInformation, как это описано в разделе Получение списка пользователей почтового ящика из удаленного пространства выполнения, для возврата списка пользователей на удаленном сервере.

Для этого метода требуются следующие параметры:

  • liveIDConnectionUri– — строка с универсальным кодом URI сервера Exchange Online, на котором будет выполняться проверка подлинности. Если сервер Exchange Online запущен в Office 365, URI имеет значение https://outlook.office365.com/PowerShell-LiveID; в противном случае — https://<servername>/PowerShell-LiveID.
  • schemaUri– — строка с универсальным кодом URI документа схемы, который определяет схему командной консоли Exchange. URI схемы имеет значение https://schemas.microsoft.com/powershell/Microsoft.Exchange.
  • credentials– — объект PSCredential, в котором содержатся учетные данные пользователя, запускающего приложение.
  • count– — число пользователей почтового ящика Exchange, которое необходимо вернуть.
public Collection<PSObject> GetUsersUsingBasicAuth(
    string liveIDConnectionUri, string schemaUri, PSCredential credentials, int count)
{
    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
        new Uri(liveIDConnectionUri),
        schemaUri, credentials);
    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
    using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
    {
        return GetUserInformation(count, runspace);
    }
}
  Function GetUsersUsingBasicAuth( _
    ByVal LiveIDConnectionUri As String, ByVal ScehmaUri As String, _
    ByVal Credentials As PSCredential, ByVal Count As Integer) As Collection(Of PSObject)
    Dim ConnectionInfo As WSManConnectionInfo = _
        New WSManConnectionInfo(New Uri(LiveIDConnectionUri), ScehmaUri, Credentials)
    ConnectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic
    Dim RemoteRunspace As Runspace
    RemoteRunspace = RunspaceFactory.CreateRunspace(ConnectionInfo)
    Return GetUserInformation(Count, RemoteRunspace)
  End Function

Подключение к удаленному пространству выполнения с помощью проверки подлинности на основе сертификата

Следующий код определяет метод GetUsersUsingCertificate, с помощью которого на удаленном сервере Exchange Online создается пространство выполнения для командной консоли Exchange с помощью проверки подлинности на основе сертификата. Затем этот метод вызывает метод GetUserInformation, как это описано в разделе Получение списка пользователей почтового ящика из удаленного пространства выполнения, для возврата списка пользователей на удаленном сервере.

Для этого метода требуются следующие параметры:

  • thumbprint– — строка с отпечатком сертификата, используемого для проверки подлинности приложения.

  • certConnectionUri– — строка с универсальным кодом URI сервера, на котором будет выполняться проверка подлинности сертификата. Необходимо использовать один из универсальных кодов, приведенных в таблице ниже.

    Таблица 1. Универсальные коды ресурса certConnectionUri

    Server URI
    Сервер Exchange, не использующий протокол SSL http://<servername>/PowerShell
    Сервер Exchange, использующий протокол SSL https://<servername>/PowerShell
    Exchange Online в составе Office 365 https://outlook.office365.com/PowerShell
  • schemaUri– — строка с универсальным кодом URI документа схемы, который определяет схему командной консоли Exchange. URI схемы имеет значение https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • count– — число пользователей почтового ящика Exchange, которое необходимо вернуть.

public Collection<PSObject> GetUsersUsingCertificate(
    string thumbprint, string certConnectionUri, string schemaUri, int count)
{
    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
        new Uri(certConnectionUri),
        schemaUri,
        thumbprint)
    using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
    {
        return GetUserInformation(count, runspace);
    }
}
  Function GetUsersUsingCertificate( _
    ByVal Thumbprint As String, ByVal CertConnectionUri As String, _
    ByVal SchemaUri As String, ByVal Count As Integer) As Collection(Of PSObject)
    Dim ConnectionInfo As WSManConnectionInfo
    ConnectionInfo = New WSManConnectionInfo(New Uri(CertConnectionUri), SchemaUri, Thumbprint)
    Dim RemoteRunspace As Runspace
    RemoteRunspace = RunspaceFactory.CreateRunspace(ConnectionInfo)
    Return GetUserInformation(Count, RemoteRunspace)
  End Function

Подключение к удаленному пространству выполнения на сервере Exchange с помощью проверки подлинности Kerberos

Следующий код определяет метод GetUsersUsingKerberos, с помощью которого на удаленном сервере создается пространство выполнения для командной консоли Exchange с помощью проверки подлинности Kerberos. Затем этот метод вызывает GetUserInformation, как это описано в разделе Получение списка пользователей почтового ящика из удаленного пространства, для возврата списка пользователей на удаленном сервере.

Для этого метода требуются следующие параметры:

  • kerberosUri– — строка с универсальным кодом URI сервера Kerberos, на котором будет выполняться проверка подлинности приложения. Необходимо использовать один из универсальных кодов, приведенных в таблице ниже.

    Таблица 2. Универсальные коды ресурса kerberosUri

    Server URI
    Сервер Exchange, не использующий протокол SSL http://<servername>/PowerShell
    Сервер Exchange, использующий протокол SSL https://<servername>/PowerShell
  • schemaUri– — строка с универсальным кодом URI документа схемы, который определяет схему командной консоли Exchange. URI схемы имеет значение https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • credentials– — объект PSCredential, в котором содержатся учетные данные пользователя, запускающего приложение.

  • count– — число пользователей почтового ящика Exchange, которое необходимо вернуть.

public Collection<PSObject> GetUsersUsingKerberos(
    string kerberosUri, string schemaUri, PSCredential credentials, int count)
{
    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
        new Uri(kerberosUri),
        schemaUri, credentials);
    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos;
    using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
    {
        return GetUserInformation(count, runspace);
    }
}
  Function GetUsersUsingKerberos( _
    ByVal KerberosUri As String, ByVal ScehmaUri As String, _
    ByVal Credentials As PSCredential, ByVal Count As Integer) As Collection(Of PSObject)
    Dim ConnectionInfo As WSManConnectionInfo = _
        New WSManConnectionInfo(New Uri(KerberosUri), ScehmaUri, Credentials)
    ConnectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos
    Dim RemoteRunspace As Runspace
    RemoteRunspace = RunspaceFactory.CreateRunspace(ConnectionInfo)
    Return GetUserInformation(Count, RemoteRunspace)
  End Function

Получение списка пользователей почтового ящика из удаленного пространства

С помощью следующего примера кода определяется метод GetUserInformation, который возвращает набор экземпляров PSObject, представляющих пользователей почтового ящика Exchange. Этот метод вызывается с помощью методов GetUsersUsingBasicAuth, GetUsersUsingCertificate и GetUsersUsingKerberos для возврата списка пользователей на удаленном сервере.

Для этого метода требуются следующие параметры:

  • count– — число пользователей почтового ящика Exchange, которое необходимо вернуть.
  • runspace– — удаленное пространство выполнения, созданное на удаленном сервере Exchange.
public Collection<PSObject> GetUserInformation(int count, Runspace runspace)
{
    using (PowerShell powershell = PowerShell.Create())
    {
        powershell.AddCommand("Get-Users");
        powershell.AddParameter("ResultSize", count);
        runspace.Open();
        powershell.Runspace = runspace;
        return powershell.Invoke();
    }
}
Function GetUserInformation(ByVal Count As Integer, ByVal RemoteRunspace As Runspace) As Collection(Of PSObject)
    Dim RemotePowerShell As PowerShell = PowerShell.Create
    RemotePowerShell.AddCommand("Get-Users")
    RemotePowerShell.AddParameter("ResultSize", Count)
    ' Open the remote runspace on the server.
    RemoteRunspace.Open()
    ' Associate the runspace with the Exchange Management Shell.
    RemotePowerShell.Runspace = RemoteRunspace
    ' Invoke the Exchange Management Shell to run the command.
    Return RemotePowerShell.Invoke
End Function

С помощью метода GetUserInformation можно вернуть не более count пользователей почтового ящика. Чтобы упростить код в этом примере, не выполняется фильтрация либо же другим способом ограничивается количество возвращаемых пользователей.

См. также