Exchange 管理シェルを使用してメールユーザーの一覧を取得するGet a list of mail users by using the Exchange Management Shell

Exchange 管理シェル コマンドレットを使用して、Exchange メールボックスのユーザーの一覧を取得するツールを作成する方法について説明します。Learn 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 管理シェル コマンドレットを呼び出す管理ツールを使用して、Exchange Online、Office 365 の一部としての Exchange Online、Exchange 2013 以降のバージョンの Exchange からユーザーの一覧を取得することは、2 段階のプロセスです。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.web モデルSystem.Collections.ObjectModel
  • システム管理System.Management.Automation
  • システムの管理System.Management.Automation.Remoting
  • システム管理の自動化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 管理シェルコマンドレットを自動化するアプリケーションを実行しているコンピューターの実行空間に、Exchange 2013 管理スナップインを読み込まないようにします。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.

Exchange サーバーのリモートの実行空間に接続するConnect 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 Online サーバーExchange Online servers
https://outlook.office365.com/PowerShell-LiveID

https://<server>/PowerShell-LiveID
証明書による認証を使用してリモートの実行空間に接続します。Connect to a remote runspace by using certificate authentication
Exchange Online と Exchange オンプレミス サーバーExchange Online and Exchange on-premises servers
https://outlook.office365.com/PowerShell

https://<server>/PowerShell

http://<server>/PowerShell
Kerberos 認証を使用して Exchange サーバーのリモートの実行空間に接続するConnect to a remote runspace on an Exchange server by using Kerberos authentication
Exchange Online と Exchange オンプレミス サーバーExchange 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 Server に 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:

  • liveIDConnectionUri –アプリケーションを認証する Exchange Online サーバーの URI を含む文字列。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.

  • Schemauri –Exchange 管理シェルスキーマを定義するスキーマドキュメントの URI を含む文字列。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 管理シェルの実行空間を作成します。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.

  • Certconnectionuri –証明書の認証を行うサーバーの URI を含む文字列。certConnectionUri – A string that contains the URI of the server that will authenticate the certificate. URI は、次の表に記載されているいずれかになります。The URI will be one of those listed in the following table.

    表1certConnectionUri UriTable 1. certConnectionUri URIs

    ServerServer URIURI
    SSL を使用しない Exchange サーバーExchange server without using SSL
    http://<servername>/PowerShell
    SSL を使用する Exchange サーバーExchange server using SSL
    https://<servername>/PowerShell
    Office 365 の一部としての Exchange OnlineExchange Online as part of Office 365
    https://outlook.office365.com/PowerShell
  • Schemauri –Exchange 管理シェルスキーマを定義するスキーマドキュメントの URI を含む文字列。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

Kerberos 認証を使用して Exchange サーバーのリモートの実行空間に接続するConnect to a remote runspace on an Exchange server by using Kerberos authentication

次のコード例では、 GetUsersUsingKerberosメソッドを定義します。このメソッドは、Kerberos 認証を使用してリモートサーバー上に Exchange 管理シェルの実行空間を作成します。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:

  • kerberosUri –アプリケーションを認証する Kerberos サーバーの URI を含む文字列。kerberosUri – A string that contains the URI of the Kerberos server that will authenticate the application. URI は、次の表に記載されているいずれかになります。The URI will be one of those listed in the following table.

    表2kerberosUri UriTable 2. kerberosUri URIs

    ServerServer URIURI
    SSL を使用しない Exchange サーバーExchange server without using SSL
    http://<servername>/PowerShell
    SSL を使用する Exchange サーバーExchange server using SSL
    https://<servername>/PowerShell
  • Schemauri –Exchange 管理シェルスキーマを定義するスキーマドキュメントの URI を含む文字列。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

次のコード例では、Exchange メールボックスユーザーを表すPSObjectインスタンスのコレクションを返すgetuserinformationメソッドを定義します。The following code example defines the GetUserInformation method, which returns a collection of PSObject instances that represent Exchange mailbox users. このメソッドは、 GetUsersUsingBasicAuthGetUsersUsingCertificate、および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

Getuserinformationメソッドは、 _count ユーザー数_を超える数のメールボックスを返します。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