Abrufen einer Liste von E-Mail-Benutzern mithilfe der Exchange-Verwaltungsshell
In diesem Artikel erfahren Sie, wie Sie mithilfe von Exchange-Verwaltungsshell-Cmdlets ein Tool erstellen, das eine Liste von Exchange-Postfachbenutzern zurückgibt.
Gilt für: Exchange Online | Exchange Server 2013 | Office 365
Zum Abrufen einer Liste von Benutzern aus Exchange Online, Exchange Online als Teil von Office 365 oder einer Exchange-Version ab Exchange 2013 mithilfe eines verwalteten Tools, das ein Exchange-Verwaltungsshell-Cmdlet aufruft, müssen zwei Schritte ausgeführt werden. Zuerst bestimmen Sie einen Remoterunspace auf einem Exchange-Server, dann führen Sie das Cmdlet aus, um Benutzerinformationen aus dem Remoterunspace abzurufen.
Zum Herstellen einer Verbindung mit dem Remoterunspace müssen Sie sich unter Verwendung des Authentifizierungsschemas, das die Sicherheitsanforderungen Ihrer Organisation erfüllt, beim Exchange-Server authentifizieren.
Dieser Artikel enthält Codebeispiele, die Sie verwenden können, um einen Remoterunspace einzurichten und ein Exchange-Verwaltungsshell-Cmdlet zum Abrufen einer Liste von Benutzern von einem Exchange-Server auszuführen.
Voraussetzungen für das Abrufen einer Liste von Postfachbenutzern
Um diese Aufgabe auszuführen, benötigen Sie einen Verweis auf die folgenden Namespaces:
- System.Collections.ObjectModel
- System.Management.Automation
- System.Management.Automation.Remoting
- System.Management.Automation.Runspaces
Hinweis
Wenn Sie Visual Studio zum Erstellen einer Anwendung verwenden, müssen Sie dem Projekt einen Verweis auf die Assembly "System.Management.Automation.dll" hinzufügen. Die Assembly finden Sie an einem der folgenden Speicherorte:
- Für die Betriebssysteme Windows XP und Windows Vista im Windows PowerShell-Installationsverzeichnis ($PSHOME)
- Für die Betriebssysteme Windows 7 und Windows 8 im folgenden Ordner: Windows\assembly\GAC_MSIL\System.Management.Automation
Auf Computern mit Anwendungen, die Exchange-Verwaltungsshell-Cmdlets automatisieren, darf das Exchange 2013-Verwaltungs-Snap-In nicht in den Runspace geladen werden. Stattdessen muss die Anwendung einen Remoterunspace erstellen, wie an späterer Stelle in diesem Artikel beschrieben.
Herstellen einer Verbindung mit einem Remoterunspace auf einem Exchange-Server
Die Methode zum Herstellen einer Verbindung mit einem Remoterunspace zur Verwendung eines Exchange-Verwaltungsshell-Cmdlets ist je nach verwendetem Authentifizierungsschema verschieden. Die Codebeispiele in diesem Abschnitt zeigen, wie Sie eine Verbindung mit einem Remoterunspace herstellen, wenn Sie eine der in der folgenden Tabelle aufgeführten Authentifizierungsmethoden verwenden.
Authentifizierungsmethode | Gilt für | uri |
---|---|---|
Herstellen einer Verbindung mit einem Remoterunspace in Exchange Online mithilfe der Standardauthentifizierung | Exchange Online-Server | https://outlook.office365.com/PowerShell-LiveID https://<server>/PowerShell-LiveID |
Herstellen einer Verbindung mit einem Remoterunspace mithilfe der Zertifikatauthentifizierung | Exchange Online- und Exchange lokal-Server | https://outlook.office365.com/PowerShell https://<server>/PowerShell http://<server>/PowerShell |
Herstellen einer Verbindung mit einem Remoterunspace auf einem Exchange-Server mithilfe der Kerberos-Authentifizierung | Exchange Online- und Exchange lokal-Server | https://<server>/PowerShell http://<server>/PowerShell |
Herstellen einer Verbindung mit einem Remoterunspace in Exchange Online mithilfe der Standardauthentifizierung
Im folgenden Codebeispiel wird die GetUsersUsingBasicAuth-Methode definiert, die unter Verwendung der Standardauthentifizierung einen Exchange-Verwaltungsshell-Runspace auf einem Exchange Online-Remoteserver erstellt. Anschließend ruft die Methode die GetUserInformation-Methode auf, wie im Abschnitt Abrufen einer Liste von Postfachbenutzern aus einem Remoterunspace definiert, um eine Liste der Benutzer auf dem Remoteserver zurückzugeben.
This method requires the following parameters:
- liveIDConnectionUri – Eine Zeichenfolge mit dem URI des Exchange Online-Servers, der die Anwendung authentifiziert. Wenn Exchange Online in Office 365 ausgeführt wird, lautet der URI
https://outlook.office365.com/PowerShell-LiveID
, andernfalls lautet der URIhttps://<servername>/PowerShell-LiveID
. - schemaUri – Eine Zeichenfolge mit dem URI des Schemadokuments, das das Exchange-Verwaltungsshell-Schema definiert. Der Schema-URI ist
https://schemas.microsoft.com/powershell/Microsoft.Exchange
. - credentials : Ein PSCredential-Objekt , das die Anmeldeinformationen des Benutzers enthält, der die Anwendung ausführt.
- count – Die Anzahl der zurückzugebenden Exchange-Postfachbenutzer.
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
Herstellen einer Verbindung mit einem Remoterunspace mithilfe der Zertifikatauthentifizierung
Im folgenden Codebeispiel wird die GetUsersUsingCertificate-Methode definiert, die unter Verwendung einer Zertifikatauthentifizierung einen Exchange-Verwaltungsshell-Runspace auf einem Remoteserver erstellt. Anschließend ruft die Methode die GetUserInformation-Methode auf, wie im Abschnitt Abrufen einer Liste von Postfachbenutzern aus einem Remoterunspace definiert, um eine Liste der Benutzer auf dem Remoteserver zurückzugeben.
This method requires the following parameters:
thumbprint – Eine Zeichenfolge mit dem Fingerabdruck des Zertifikats, das zum Authentifizieren der Anwendung verwendet wird.
certConnectionUri – Eine Zeichenfolge mit dem URI des Servers, der das Zertifikat authentifiziert. Die möglichen URIs sind in der folgenden Tabelle aufgeführt.
Tabelle 1. certConnectionUri-URIs
Server uri Exchange-Server ohne SSL http://<servername>/PowerShell
Exchange-Server mit SSL https://<servername>/PowerShell
Exchange Online als Teil von Office 365 https://outlook.office365.com/PowerShell
schemaUri – Eine Zeichenfolge mit dem URI des Schemadokuments, das das Exchange-Verwaltungsshell-Schema definiert. Der Schema-URI ist https://schemas.microsoft.com/powershell/Microsoft.Exchange.
count – Die Anzahl der zurückzugebenden Exchange-Postfachbenutzer.
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
Herstellen einer Verbindung mit einem Remoterunspace auf einem Exchange-Server mithilfe der Kerberos-Authentifizierung
Im folgenden Codebeispiel wird die GetUsersUsingKerberos-Methode definiert, die unter Verwendung der Kerberos-Authentifizierung einen Exchange-Verwaltungsshell-Runspace auf einem Remoteserver erstellt. Anschließend ruft die Methode die GetUserInformation-Methode auf, wie im Abschnitt Abrufen einer Liste von Postfachbenutzern aus einem Remoterunspace definiert, um eine Liste der Benutzer auf dem Remoteserver zurückzugeben.
This method requires the following parameters:
kerberosUri – Eine Zeichenfolge mit dem URI des Kerberos-Servers, der die Anwendung authentifiziert. Die möglichen URIs sind in der folgenden Tabelle aufgeführt.
Tabelle 2. kerberosUri-URIs
Server uri Exchange-Server ohne SSL http://<servername>/PowerShell
Exchange-Server mit SSL https://<servername>/PowerShell
schemaUri – Eine Zeichenfolge mit dem URI des Schemadokuments, das das Exchange-Verwaltungsshell-Schema definiert. Der Schema-URI ist https://schemas.microsoft.com/powershell/Microsoft.Exchange.
credentials : Ein PSCredential-Objekt , das die Anmeldeinformationen des Benutzers enthält, der die Anwendung ausführt.
count – Die Anzahl der zurückzugebenden Exchange-Postfachbenutzer.
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
Im folgenden Codebeispiel wird die GetUserInformation-Methode definiert, die eine Sammlung von PSObject-Instanzen zurückgibt, die Exchange-Postfachbenutzer darstellen. 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 – The number of Exchange mailbox users to return.
- 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.