Compartir a través de


Consiga una lista de usuarios de correo usando el Shell de administración de Exchange

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.

Se aplica a: 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. 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.

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.

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.

Requisitos previos para conseguir una lista de usuarios de buzón de correo

Para realizar esta tarea, se necesita una referencia para los siguientes espacios de nombres:

  • System.Collections.ObjectModel
  • System.Management.Automation
  • System.Management.Automation.Remoting
  • System.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:

  • En los sistemas operativos Windows XP y Windows Vista, el directorio de instalación de Windows PowerShell ($PSHOME).
  • En los sistemas operativos Windows 7 y Windows 8, la siguiente carpeta: Windows\assembly\GAC_MSIL\System.Management.Automation.

No cargue el complemento Administración de Exchange 2013 en el espacio de ejecución en equipos que ejecutan aplicaciones que automatizan los cmdlets del Shell de administración de Exchange. 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.

Conectarse a un espacio de ejecución remoto en un servidor Exchange

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.

Método de autenticación Se aplica a URI
Conéctese a un espacio de ejecución remoto de Exchange Online mediante una autenticación básica Servidores Exchange Online https://outlook.office365.com/PowerShell-LiveID
https://<server>/PowerShell-LiveID
Conectarse a un espacio de ejecución remoto mediante la autenticación de certificados Servidores Exchange Online y Exchange local 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 Kerberos Servidores Exchange Online y Exchange local https://<server>/PowerShell
http://<server>/PowerShell

Conéctese a un espacio de ejecución remoto de Exchange Online mediante una autenticación básica

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. 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.

Este método requiere los siguientes parámetros:

  • liveIDConnectionUri – una cadena que contiene el URI del servidor Exchange Online que autenticará la aplicación. Si Exchange Online se ejecuta en Office 365, el URI es https://outlook.office365.com/PowerShell-LiveID; de lo contrario, el URI es 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. El URI del esquema es https://schemas.microsoft.com/powershell/Microsoft.Exchange.
  • credenciales – Un objeto PSCredential que contiene las credenciales del usuario que ejecuta la aplicación.
  • count – el número de usuarios del buzón de Exchange que se devuelve.
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 certificados

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. 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.

Este método requiere los siguientes parámetros:

  • thumbprint – una cadena que contiene la huella digital del certificado que se utiliza para autenticar la aplicación.

  • certConnectionUri – La cadena que contiene el URI del servidor que autenticará el certificado. El URI será uno de los recogidos en la tabla siguiente.

    Tabla 1. URI certConnectionUri

    Server URI
    Servidor Exchange sin SSL http://<servername>/PowerShell
    Servidor Exchange con SSL https://<servername>/PowerShell
    Exchange Online como parte de 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. El URI del esquema es https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • count – el número de usuarios del buzón de Exchange que se devuelve.

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 Kerberos

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. 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.

Este método requiere los siguientes parámetros:

  • kerberosUri – La cadena que contiene el URI del servidor Kerberos que autenticará la aplicación. El URI será uno de los recogidos en la tabla siguiente.

    Tabla 2. URI kerberosUri

    Server URI
    Servidor Exchange sin SSL http://<servername>/PowerShell
    Servidor Exchange con 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. El URI del esquema es https://schemas.microsoft.com/powershell/Microsoft.Exchange.

  • credenciales – Un objeto PSCredential que contiene las credenciales del usuario que ejecuta la aplicación.

  • count – el número de usuarios del buzón de Exchange que se devuelve.

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 remoto

En el siguiente ejemplo de código se define el método GetUserInformation que devuelve una colección de instancias de PSObject que representan buzones de Exchange. 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.

Este método requiere los siguientes parámetros:

  • count – el número de usuarios del buzón de Exchange que se devuelve.
  • runspace – El espacio de ejecución remoto que se establece para el servidor Exchange remoto.
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 obtendrá más de count usuarios de buzones de correo. 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.

Vea también