Получение списка почтовых пользователей с помощью командной консоли 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 пользователей почтового ящика. Чтобы упростить код в этом примере, не выполняется фильтрация либо же другим способом ограничивается количество возвращаемых пользователей.