Получение списка пользователей почты с помощью командной консоли ExchangeGet a list of mail users by using the Exchange Management Shell

Использование командлетов командной консоли Exchange для создания инструмента, который возвращает список пользователей почтового ящика ExchangeLearn how to use Exchange Management Shell cmdlets to create a tool that returns a list of Exchange mailbox users.

Применимо к: Exchange Online | Exchange Server 2013 | Office 365Applies to: Exchange Online | Exchange Server 2013 | Office 365

Получение списка пользователей из Exchange Online, Exchange Online в составе Office 365 или версий Exchange начиная с Exchange 2013 с помощью управляемого инструмента для вызова командлета командной консоли Exchange — это двухэтапный процесс.Getting a list of users from Exchange Online, Exchange Online as part of Office 365, or a version of Exchange starting with Exchange 2013 by using a managed tool that calls an Exchange Management Shell cmdlet is a two-step process. Сначала необходимо создать удаленное пространство выполнения на сервере Exchange, а затем запустить командлет для получения сведений о пользователях в удаленном пространстве выполнения.First, you establish a remote runspace on an Exchange server; then, you run the cmdlet to retrieve the user information in the remote runspace.

Для подключения к удаленному пространству выполнения необходимо пройти проверку подлинности на сервере Exchange согласно схеме, принятой в соответствии с требованиями безопасности вашей организации.To connect to the remote runspace, you have to authenticate with the Exchange server by using the authentication scheme that meets the security requirements of your organization.

В этой статье приведены примеры кодов, которые можно использовать для создания удаленного пространства выполнения, запуска командлета командной консоли Exchange и получения списка пользователей с сервера Exchange.This article provides code examples that you can use to set up a remote runspace and run an Exchange Management Shell cmdlet to get a list of users from an Exchange server.

Необходимые условия для получения списка пользователей почтового ящикаPrerequisites for getting a list of mailbox users

Для выполнения этой задачи требуется ссылка на следующие пространства имен:To perform this task, you need a reference to the following namespaces:

  • System. Collections. ObjectModelSystem.Collections.ObjectModel
  • System. Management. AutomationSystem.Management.Automation
  • System. Management. Automation. RemotingSystem.Management.Automation.Remoting
  • System. Management. Automation. пространстваSystem.Management.Automation.Runspaces

Примечание

При создании приложения с помощью Visual Studio необходимо добавить к проекту ссылку на сборку System.Management.Automation.dll. Найти сборку можно, пройдя по одной из следующих ссылок:When you are using Visual Studio to create an application, you must add a reference to the System.Management.Automation.dll assembly to the project. The assembly can be found in one of the following locations:

  • Для ОС Windows XP и Windows Vista — каталог установки Windows PowerShell ($PSHOME).For Windows XP and Windows Vista operating systems, the Windows PowerShell installation directory ($PSHOME).
  • Для ОС Windows 7 и Windows 8 — папка Windows\assembly\GAC_MSIL\System.Management.Automation.For the Windows 7 and Windows 8 operating systems, the following folder: Windows\assembly\GAC_MSIL\System.Management.Automation.

Не загружайте оснастку управления Exchange 2013 в пространство выполнения на компьютерах, где запущены приложения, автоматизирующие командлеты командной консоли Exchange.Do not load the Exchange 2013 Management snap-in into the runspace on computers that are running applications that automate Exchange Management Shell cmdlets. Вместо этого приложение должно создать удаленное пространство выполнения так, как будет описано ниже.The application should instead create a remote runspace, as described later in this article.

Создание удаленного пространства выполнения на сервере ExchangeConnect to a remote runspace on an Exchange server

Метод подключения к удаленному пространству выполнения, в котором будет использован командлет командной консоли Exchange, зависит от выбранной схемы проверки подлинности. В этом разделе приведены примеры кодов для подключения к удаленному пространству выполнения при использовании одного из методов проверки подлинности, перечисленных в таблице ниже.The method that you use to connect to a remote runspace to use an Exchange Management Shell cmdlet varies based on the authentication scheme that you are using. This section provides code examples that show how to connect to a remote runspace when you are using an authentication method listed in the following table.

Метод проверки подлинностиAuthentication method Относится кApplies to URIURI
Подключение к удаленному пространству выполнения на сервере Exchange Online с помощью обычной проверки подлинностиConnect to a remote runspace on Exchange Online by using basic authentication
Серверы Exchange OnlineExchange Online servers
https://outlook.office365.com/PowerShell-LiveID

https://<server>/PowerShell-LiveID
Подключение к удаленному пространству выполнения с помощью проверки подлинности на основе сертификатаConnect to a remote runspace by using certificate authentication
Серверы Exchange Online и локальные серверы ExchangeExchange Online and Exchange on-premises servers
https://outlook.office365.com/PowerShell

https://<server>/PowerShell

http://<server>/PowerShell
Подключение к удаленному пространству выполнения на сервере Exchange с помощью проверки подлинности KerberosConnect to a remote runspace on an Exchange server by using Kerberos authentication
Серверы Exchange Online и локальные серверы ExchangeExchange Online and Exchange on-premises servers
https://<server>/PowerShell

http://<server>/PowerShell

Подключение к удаленному пространству выполнения на сервере Exchange Online с помощью обычной проверки подлинностиConnect to a remote runspace on Exchange Online by using basic authentication

Следующий код определяет метод GetUsersUsingBasicAuth, с помощью которого на удаленном сервере Exchange Online создается пространство выполнения для командной консоли Exchange с помощью обычной проверки подлинности.The following code example defines the GetUsersUsingBasicAuth method, which creates an Exchange Management Shell runspace on a remote Exchange Online server by using basic authentication. Затем этот метод вызывает GetUserInformation, как это описано в разделе Получение списка пользователей почтового ящика из удаленного пространства, для возврата списка пользователей на удаленном сервере.The method then calls the GetUserInformation method, as defined in the section Get a list of mailbox users from a remote runspace, to return a list of users on the remote server.

Для этого метода требуются следующие параметры:This method requires the following parameters:

  • ливеидконнектионури – Строка, содержащая универсальный код ресурса (URI) сервера Exchange Online, который будет выполнять проверку подлинности для приложения.liveIDConnectionUri – A string that contains the URI of the Exchange Online server that will authenticate the application. Если Exchange Online работает в Office 365, URI имеет значение https://outlook.office365.com/PowerShell-LiveID ; в противном случае — URI https://<servername>/PowerShell-LiveID .If Exchange Online is running in Office 365, the URI is https://outlook.office365.com/PowerShell-LiveID; otherwise, the URI is https://<servername>/PowerShell-LiveID.

  • счемаури – Строка, содержащая URI документа схемы, который определяет схему командной консоли Exchange.schemaUri – A string that contains the URI of the schema document that defines the Exchange Management Shell schema. URI схемы https://schemas.microsoft.com/powershell/Microsoft.Exchange .The schema URI is https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • учетные данные – Объект PSCredential , содержащий учетные данные пользователя, запустившего приложение.credentials – A PSCredential object that contains the credentials of the user who is running the application.

  • Count (количество – ) Число возвращаемых пользователей почтовых ящиков Exchange.count – The number of Exchange mailbox users to return.

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

Подключение к удаленному пространству выполнения с помощью проверки подлинности на основе сертификатаConnect to a remote runspace by using certificate authentication

Следующий код определяет метод GetUsersUsingCertificate, с помощью которого на удаленном сервере Exchange Online создается пространство выполнения для командной консоли Exchange с помощью проверки подлинности на основе сертификата.The following code example defines the GetUsersUsingCertificate method, which creates an Exchange Management Shell runspace on a remote server by using a certificate. Затем этот метод вызывает GetUserInformation, как это описано в разделе Получение списка пользователей почтового ящика из удаленного пространства, для возврата списка пользователей на удаленном сервере.The method then calls the GetUserInformation method, as defined in the section Get a list of mailbox users from a remote runspace, to return a list of users on the remote server.

Для этого метода требуются следующие параметры:This method requires the following parameters:

  • Thumbprint (отпечаток – ) Строка, содержащая отпечаток сертификата, используемого для проверки подлинности приложения.thumbprint – A string that contains the thumbprint of the certificate that is used to authenticate the application.

  • цертконнектионури – Строка, содержащая универсальный код ресурса (URI) сервера, который будет выполнять проверку подлинности сертификата.certConnectionUri – A string that contains the URI of the server that will authenticate the certificate. Необходимо использовать один из универсальных кодов, приведенных в таблице ниже.The URI will be one of those listed in the following table.

    Таблица 1. URI ЦертконнектионуриTable 1. certConnectionUri URIs

    ServerServer URIURI
    Сервер Exchange, не использующий протокол SSLExchange server without using SSL
    http://<servername>/PowerShell
    Сервер Exchange, использующий протокол SSLExchange server using SSL
    https://<servername>/PowerShell
    Exchange Online в составе Office 365Exchange Online as part of Office 365
    https://outlook.office365.com/PowerShell
  • счемаури – Строка, содержащая URI документа схемы, который определяет схему командной консоли Exchange.schemaUri – A string that contains the URI of the schema document that defines the Exchange Management Shell schema. URI схемы https://schemas.microsoft.com/powershell/Microsoft.Exchange .The schema URI is https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • Count (количество – ) Число возвращаемых пользователей почтовых ящиков Exchange.count – The number of Exchange mailbox users to return.

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 с помощью проверки подлинности KerberosConnect to a remote runspace on an Exchange server by using Kerberos authentication

Следующий код определяет метод GetUsersUsingKerberos, с помощью которого на удаленном сервере создается пространство выполнения для командной консоли Exchange с помощью проверки подлинности Kerberos.The following code example defines the GetUsersUsingKerberos method, which creates an Exchange Management Shell runspace on a remote server by using Kerberos authentication. Затем этот метод вызывает GetUserInformation, как это описано в разделе Получение списка пользователей почтового ящика из удаленного пространства, для возврата списка пользователей на удаленном сервере.The method then calls the GetUserInformation method, as defined in the section Get a list of mailbox users from a remote runspace, to return a list of users on the remote server.

Для этого метода требуются следующие параметры:This method requires the following parameters:

  • керберосури – Строка, содержащая URI сервера Kerberos, который будет выполнять проверку подлинности для приложения.kerberosUri – A string that contains the URI of the Kerberos server that will authenticate the application. Необходимо использовать один из универсальных кодов, приведенных в таблице ниже.The URI will be one of those listed in the following table.

    Таблица 2. URI КерберосуриTable 2. kerberosUri URIs

    ServerServer URIURI
    Сервер Exchange, не использующий протокол SSLExchange server without using SSL
    http://<servername>/PowerShell
    Сервер Exchange, использующий протокол SSLExchange server using SSL
    https://<servername>/PowerShell
  • счемаури – Строка, содержащая URI документа схемы, который определяет схему командной консоли Exchange.schemaUri – A string that contains the URI of the schema document that defines the Exchange Management Shell schema. URI схемы https://schemas.microsoft.com/powershell/Microsoft.Exchange .The schema URI is https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • учетные данные – Объект PSCredential , содержащий учетные данные пользователя, запустившего приложение.credentials – A PSCredential object that contains the credentials of the user who is running the application.

  • Count (количество – ) Число возвращаемых пользователей почтовых ящиков Exchange.count – The number of Exchange mailbox users to return.

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

Получение списка пользователей почтового ящика из удаленного пространстваGet a list of mailbox users from a remote runspace

В следующем примере кода определяется метод жетусеринформатион , который возвращает коллекцию экземпляров PSObject , представляющих пользователей почтовых ящиков Exchange.The following code example defines the GetUserInformation method, which returns a collection of PSObject instances that represent Exchange mailbox users. Этот метод вызывается с помощью методов GetUsersUsingBasicAuth, GetUsersUsingCertificate и GetUsersUsingKerberos для возврата списка пользователей на удаленном сервере.This method is called by the GetUsersUsingBasicAuth, GetUsersUsingCertificate, and GetUsersUsingKerberos methods to return the list of users from the remote server.

Для этого метода требуются следующие параметры:This method requires the following parameters:

  • Count (количество – ) Число возвращаемых пользователей почтовых ящиков Exchange.count – The number of Exchange mailbox users to return.

  • пространство выполнения – Удаленное пространство выполнения, установленное для удаленного сервера Exchange.runspace – The remote runspace that is established for the remote Exchange server.

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

Метод жетусеринформатион будет возвращать не больше, чем количество пользователей почтовых ящиков.The GetUserInformation method will return no more than count mailbox users. Чтобы упростить код в этом примере, не выполняется фильтрация либо же другим способом ограничивается количество возвращаемых пользователей.To simplify the code for this example, the method does not filter or otherwise limit the mailbox users that are returned.

См. такжеSee also