Obtener una lista de usuarios de correo mediante el shell de administración de ExchangeGet a list of mail users by using the Exchange Management Shell

Aprenda a usar los cmdlets del Shell de administración de Exchange para crear una herramienta que devuelva una lista de los usuarios de buzones de correo de Exchange.Learn how to use Exchange Management Shell cmdlets to create a tool that returns a list of Exchange mailbox users.

Se aplica a: Exchange Online | Exchange Server 2013 | Office 365Applies to: Exchange Online | Exchange Server 2013 | Office 365

Conseguir una lista de usuarios de Exchange Online, Exchange Online como parte de Office 365, o una versión de Exchange a partir de Exchange 2013 usando una herramienta administrada que invoque un cmdlet del Shell de administración de Exchange es un proceso dividido en dos pasos.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. En primer lugar, establezca un espacio de ejecución remoto en un servidor de Exchange; a continuación, ejecute el cmdlet para obtener la información de usuario en el espacio de ejecución remoto.First, you establish a remote runspace on an Exchange server; then, you run the cmdlet to retrieve the user information in the remote runspace.

Para conectar con el espacio de ejecución remoto, tendrá que autenticarse con el servidor de Exchange mediante el esquema de autenticación que cumpla los requisitos de seguridad de la organización.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.

Este artículo proporciona ejemplos de código que puede utilizar para configurar un espacio de ejecución remoto y ejecutar un cmdlet del Shell de administración de Exchange para conseguir una lista de usuarios desde un servidor 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.

Requisitos previos para conseguir una lista de usuarios de buzón de correoPrerequisites for getting a list of mailbox users

Para realizar esta tarea, se necesita una referencia para los siguientes espacios de nombres: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. espacios deSystem.Management.Automation.Runspaces

Nota

Cuando utiliza Visual Studio para crear una aplicación, debe agregar una referencia al ensamblado System.Management.Automation.dll para el proyecto. El ensamblado puede encontrarse en una de las siguientes ubicaciones: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:

  • En los sistemas operativos Windows XP y Windows Vista, el directorio de instalación de Windows PowerShell ($PSHOME).For Windows XP and Windows Vista operating systems, the Windows PowerShell installation directory ($PSHOME).
  • En los sistemas operativos Windows 7 y Windows 8, la siguiente carpeta: 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.

No cargue el complemento de administración de Exchange 2013 en el espacio de ejecución en los equipos que ejecutan aplicaciones que automatizan los cmdlets del shell de administración de 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. La aplicación debe crear en su lugar un espacio de ejecución remoto, tal como se describe más adelante en este artículo.The application should instead create a remote runspace, as described later in this article.

Conectarse a un espacio de ejecución remoto en un servidor ExchangeConnect to a remote runspace on an Exchange server

El método que utilice para conectarse a un espacio de ejecución remoto para usar un cmdlet de Shell de administración de Exchange varía en función del esquema de autenticación que esté utilizando. Esta sección proporciona ejemplos de código que muestran cómo conectarse a un espacio de ejecución remoto cuando utiliza un método de autenticación indicado en la tabla siguiente.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.

Método de autenticaciónAuthentication method Se aplica aApplies to URIURI
Conéctese a un espacio de ejecución remoto de Exchange Online mediante una autenticación básicaConnect to a remote runspace on Exchange Online by using basic authentication
Servidores Exchange OnlineExchange Online servers
https://outlook.office365.com/PowerShell-LiveID

https://<server>/PowerShell-LiveID
Conectarse a un espacio de ejecución remoto mediante la autenticación de certificadosConnect to a remote runspace by using certificate authentication
Servidores Exchange Online y Exchange localExchange Online and Exchange on-premises servers
https://outlook.office365.com/PowerShell

https://<server>/PowerShell

http://<server>/PowerShell
Conectarse a un espacio de ejecución remoto del servidor Exchange mediante una autenticación KerberosConnect to a remote runspace on an Exchange server by using Kerberos authentication
Servidores Exchange Online y Exchange localExchange Online and Exchange on-premises servers
https://<server>/PowerShell

http://<server>/PowerShell

Conéctese a un espacio de ejecución remoto de Exchange Online mediante una autenticación básicaConnect to a remote runspace on Exchange Online by using basic authentication

El siguiente ejemplo de código define el método GetUsersUsingBasicAuth, que crea un espacio de ejecución de Shell de administración de Exchange en un servidor remoto de Exchange Online mediante autenticación básica.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. A continuación, el método invoca al método GetUserInformation, tal como se define en la sección Conseguir una lista de los usuarios de buzones de correo desde un espacio de ejecución remoto, para devolver una lista de usuarios en el servidor remoto.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.

Este método requiere los siguientes parámetros:This method requires the following parameters:

  • liveIDConnectionUri – Una cadena que contiene el URI del servidor de Exchange online que autenticará la aplicación.liveIDConnectionUri – A string that contains the URI of the Exchange Online server that will authenticate the application. Si Exchange Online se está ejecutando en Office 365, el URI es https://outlook.office365.com/PowerShell-LiveID ; de lo contrario, el URI es 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 – Una cadena que contiene el URI del documento de esquema que define el esquema del shell de administración de Exchange.schemaUri – A string that contains the URI of the schema document that defines the Exchange Management Shell schema. El URI del esquema es https://schemas.microsoft.com/powershell/Microsoft.Exchange .The schema URI is https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • credenciales – Un objeto PSCredential que contiene las credenciales del usuario que está ejecutando la aplicación.credentials – A PSCredential object that contains the credentials of the user who is running the application.

  • número – de Número de usuarios de buzones de Exchange que se van a devolver.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

Conectarse a un espacio de ejecución remoto mediante la autenticación de certificadosConnect to a remote runspace by using certificate authentication

El siguiente ejemplo de código define el método GetUsersUsingCertificate, que crea un espacio de ejecución del Shell de administración de Exchange en un servidor remoto mediante un certificado.The following code example defines the GetUsersUsingCertificate method, which creates an Exchange Management Shell runspace on a remote server by using a certificate. A continuación, el método invoca al método GetUserInformation, tal como se define en la sección Conseguir una lista de los usuarios de buzones de correo desde un espacio de ejecución remoto, para devolver una lista de usuarios en el servidor remoto.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.

Este método requiere los siguientes parámetros:This method requires the following parameters:

  • huella digital – Una cadena que contiene la huella digital del certificado que se usa para autenticar la aplicación.thumbprint – A string that contains the thumbprint of the certificate that is used to authenticate the application.

  • certConnectionUri – Una cadena que contiene el URI del servidor que va a autenticar el certificado.certConnectionUri – A string that contains the URI of the server that will authenticate the certificate. El URI será uno de los recogidos en la tabla siguiente.The URI will be one of those listed in the following table.

    Tabla 1. URI de certConnectionUriTable 1. certConnectionUri URIs

    ServidorServer URIURI
    Servidor Exchange sin SSLExchange server without using SSL
    http://<servername>/PowerShell
    Servidor Exchange con SSLExchange server using SSL
    https://<servername>/PowerShell
    Exchange Online como parte de Office 365Exchange Online as part of Office 365
    https://outlook.office365.com/PowerShell
  • schemaUri – Una cadena que contiene el URI del documento de esquema que define el esquema del shell de administración de Exchange.schemaUri – A string that contains the URI of the schema document that defines the Exchange Management Shell schema. El URI del esquema es https://schemas.microsoft.com/powershell/Microsoft.Exchange .The schema URI is https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • número – de Número de usuarios de buzones de Exchange que se van a devolver.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

Conectarse a un espacio de ejecución remoto del servidor Exchange mediante una autenticación KerberosConnect to a remote runspace on an Exchange server by using Kerberos authentication

El siguiente ejemplo de código define el método GetUsersUsingKerberos, que crea un espacio de ejecución del Shell de administración de Exchange en un servidor remoto mediante la autenticación Kerberos.The following code example defines the GetUsersUsingKerberos method, which creates an Exchange Management Shell runspace on a remote server by using Kerberos authentication. A continuación, el método invoca al método GetUserInformation, tal como se define en la sección Conseguir una lista de los usuarios de buzones de correo desde un espacio de ejecución remoto, para devolver una lista de usuarios en el servidor remoto.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.

Este método requiere los siguientes parámetros:This method requires the following parameters:

  • kerberosUri – Una cadena que contiene el URI del servidor Kerberos que autenticará la aplicación.kerberosUri – A string that contains the URI of the Kerberos server that will authenticate the application. El URI será uno de los recogidos en la tabla siguiente.The URI will be one of those listed in the following table.

    Tabla 2. URI de kerberosUriTable 2. kerberosUri URIs

    ServidorServer URIURI
    Servidor Exchange sin SSLExchange server without using SSL
    http://<servername>/PowerShell
    Servidor Exchange con SSLExchange server using SSL
    https://<servername>/PowerShell
  • schemaUri – Una cadena que contiene el URI del documento de esquema que define el esquema del shell de administración de Exchange.schemaUri – A string that contains the URI of the schema document that defines the Exchange Management Shell schema. El URI del esquema es https://schemas.microsoft.com/powershell/Microsoft.Exchange .The schema URI is https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • credenciales – Un objeto PSCredential que contiene las credenciales del usuario que está ejecutando la aplicación.credentials – A PSCredential object that contains the credentials of the user who is running the application.

  • número – de Número de usuarios de buzones de Exchange que se van a devolver.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

Conseguir una lista de los usuarios de buzones de correo desde un espacio de ejecución remotoGet a list of mailbox users from a remote runspace

El siguiente ejemplo de código define el método GetUserInformation , que devuelve una colección de instancias de PSObject que representan usuarios de buzones de correo de Exchange.The following code example defines the GetUserInformation method, which returns a collection of PSObject instances that represent Exchange mailbox users. También se puede invocar este método mediante los métodos GetUsersUsingBasicAuth, GetUsersUsingCertificate y GetUsersUsingKerberos para obtener la lista de usuarios desde el servidor remoto.This method is called by the GetUsersUsingBasicAuth, GetUsersUsingCertificate, and GetUsersUsingKerberos methods to return the list of users from the remote server.

Este método requiere los siguientes parámetros:This method requires the following parameters:

  • número – de Número de usuarios de buzones de Exchange que se van a devolver.count – The number of Exchange mailbox users to return.

  • runspace – El espacio de ejecución remoto que se establece para el servidor remoto de 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

El método GetUserInformation no devolverá más que el número de usuarios de buzones.The GetUserInformation method will return no more than count mailbox users. Para simplificar el código de este ejemplo, el método no filtra ni limita a los usuarios del buzón de correo que se obtienen.To simplify the code for this example, the method does not filter or otherwise limit the mailbox users that are returned.

Vea tambiénSee also