El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

PowerShell: Cmdlet Para Obtener Un Objeto DirectoryEntry a Partir de su Ruta LDAP

Posted by urpiano en Domingo 21 \21\UTC octubre \21\UTC 2012

Este Cmdlet recibe como parámetro la ruta LDAP de un objeto de Active Directory y devuelve el objeto DirectoryEntry, cuya ruta LDAP es la recibida. Es un pequeño Cmdlet pensado para facilitar la obtención de objetos DirectoryEntry cuando se tiene su ruta LDAP obtenida por otros objetos, como pueda ser la propiedad Parent de los objetos DirectoryEntry, que es el contenedor en el que están ubicados; esto es muy útil para poder obtener información de la Unidad Organizativa a la que pertenece un objeto.

El Cmdlet admite además que se le pasen usuario y contraseña para autenticar la conexión a Active Directory; si no se pasa usuario la validación es la del usuario que está lanzando el Cmdlet.

El Cmdlet incluye ayuda, pego a continuación la ayuda con modificador -Detailed (esta ayuda se basa en la prestación de ayuda basada en comentarios de PowerShell 2.0 ¿Qué todavía tienes la versión 1.0 y no la 2.0? ¿A qué esperas para instalarla si es mucho mejor?):

NOMBRE
    Get-DirectoryEntryByPath
    
SINOPSIS
    Devuelve el objeto DirectoryEntry correspondiente a una ruta LDAP.
    
SINTAXIS
    Get-DirectoryEntryByPath [[-Path] ] [[-UserName] ] [[-Password] ] []
    
    
DESCRIPCIÓN
    Esta función recibe una ruta LDAP y devuelve el objeto DirectoryEntry
    correspondiente a esa ruta. Puede recibir o no nombre de usuario y contraseña
    con las que se accederá a Active Directory para obtener el objeto.
    
    Si bien puede tener más usos, está principalmente pensada para poder
    obtener el objeto DirectoryEntry del contenedor en el que está otro objeto, pues
    la propiedad Parent de un DirectoryEntry tiene la ruta LDAP del contenedor en el
    que está ubicado.

PARÁMETROS
    -Path 
        Ruta LDAP del objeto DirectoryEntry a obtener.
        
    -UserName 
        Nombre del usuario con el que se conecta a Active Directory para
        obtener el objeto.
        
    -Password 
        Contraseña del usuario con el que se conecta a Active Directory para
        obtener el objeto.
        
    
        Este cmdlet admite los parámetros comunes Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer y OutVariable. Para obtener más información, escriba:
        "get-help about_commonparameters".
    
    -------------------------- EJEMPLO 1 --------------------------
    
    PS C:\>$Path = "LDAP://cn=Mortadelo,ou=Agentes,dc=tia,dc=org"
    
    PS C:\> Get-DirectoryEntry -Path $Path
    
    Devuelve el objeto DirectoryEntry cuya ruta LDAP es la pasada como Path.
    
    -------------------------- EJEMPLO 2 --------------------------
    
    PS C:\>$Path = "LDAP://cn=Mortadelo,ou=Agentes,dc=tia,dc=org"
    
    PS C:\> $U = "bacterio"
    PS C:\> $P = "OfeliaFOCA"
    PS C:\> Get-DirectoryEntry -Path $Path -UserName $U -Password $P
    
    Devuelve el objeto DirectoryEntry cuya ruta LDAP es la pasada como Path,
    conectando a active directory con el usuario "bacterio" cuya contraseña es
    "OfeliaFOCA".
    
    -------------------------- EJEMPLO 3 --------------------------
    
    PS C:\>$Path = "LDAP://cn=Mortadelo,ou=Agentes,dc=tia,dc=org"
    
    PS C:\> $Mortadelo = Get-DirectoryEntry -Path $Path
    PS C:\> $MortadeloOU = Get-DirectoryEntry -Path $Mortadelo.Parent
    
    Devuelve el objeto DirectoryEntry cuya ruta LDAP es la pasada como Path y lo
    almacena en la variable $Mortadelo. A continuación se obtiene el objeto
    DirectoryEntry del contenedor en el que está $Mortadelo y se almacena en la
    variable $MortadeloOU.
    
NOTAS
    Para ver los ejemplos, escriba: "get-help Get-DirectoryEntryByPath -examples".
    Para obtener más información, escriba: "get-help Get-DirectoryEntryByPath -detailed".
    Para obtener información técnica, escriba: "get-help Get-DirectoryEntryByPath -full".

Este es el código del Cmdlet:

Function Get-DirectoryEntryByPath([String]$Path, `
                                  [String]$UserName, `
                                  [String]$Password)
{
    # Obtendremos el objeto DirectoryEntry del contenedor pasando o no usuario y
    # contraseña en función de lo recibido como parámetros
    If([System.String]::IsNullOrEmpty($UserName))
    {
        # Obtenemos el objeto DirectoryEntry del contenedor sin pasar usuario y
        # contraseña
        $Parent = New-Object System.DirectoryServices.DirectoryEntry $Path
    }
    Else
    {
        # Obtenemos el objeto DirectoryEntry del contenedor pasando usuario y
        # contraseña
        $Parent = New-Object System.DirectoryServices.DirectoryEntry `
                                $Path,$UserName,$Password
    }
    
    # Devolvemos el objeto DirectoryEntry del contenedor
    Return $Parent

<#
    .SYNOPSIS
        Devuelve el objeto DirectoryEntry correspondiente a una ruta LDAP.

    .DESCRIPTION
        Esta función recibe una ruta LDAP y devuelve el objeto DirectoryEntry
correspondiente a esa ruta. Puede recibir o no nombre de usuario y contraseña
con las que se accederá a Active Directory para obtener el objeto.
        
        Si bien puede tener más usos, está principalmente pensada para poder
obtener el objeto DirectoryEntry del contenedor en el que está otro objeto, pues
la propiedad Parent de un DirectoryEntry tiene la ruta LDAP del contenedor en el
que está ubicado.

    .PARAMETER  Path
        Ruta LDAP del objeto DirectoryEntry a obtener.

    .PARAMETER  UserName
        Nombre del usuario con el que se conecta a Active Directory para
obtener el objeto.

    .PARAMETER  Password
        Contraseña del usuario con el que se conecta a Active Directory para
obtener el objeto.

    .EXAMPLE
        PS C:\> $Path = "LDAP://cn=Mortadelo,ou=Agentes,dc=tia,dc=org"
        PS C:\> Get-DirectoryEntry -Path $Path

Devuelve el objeto DirectoryEntry cuya ruta LDAP es la pasada como Path.

    .EXAMPLE
        PS C:\> $Path = "LDAP://cn=Mortadelo,ou=Agentes,dc=tia,dc=org"
        PS C:\> $U = "bacterio"
        PS C:\> $P = "OfeliaFOCA"
        PS C:\> Get-DirectoryEntry -Path $Path -UserName $U -Password $P

Devuelve el objeto DirectoryEntry cuya ruta LDAP es la pasada como Path,
conectando a active directory con el usuario "bacterio" cuya contraseña es
"OfeliaFOCA".

    .EXAMPLE
        PS C:\> $Path = "LDAP://cn=Mortadelo,ou=Agentes,dc=tia,dc=org"
        PS C:\> $Mortadelo = Get-DirectoryEntry -Path $Path
        PS C:\> $MortadeloOU = Get-DirectoryEntry -Path $Mortadelo.Parent

Devuelve el objeto DirectoryEntry cuya ruta LDAP es la pasada como Path y lo
almacena en la variable $Mortadelo. A continuación se obtiene el objeto
DirectoryEntry del contenedor en el que está $Mortadelo y se almacena en la
variable $MortadeloOU.

    .INPUTS
        System.String,System.String,System.String

    .OUTPUTS
        System.DirectoryServices.DirectoryEntry

    .NOTES
        Fernando Reyes López © 2012.

    .LINK
        http://freyes.svetlian.com

    .LINK
        https://urpiano.wordpress.com

#>

}

Una respuesta to “PowerShell: Cmdlet Para Obtener Un Objeto DirectoryEntry a Partir de su Ruta LDAP”

  1. […] PowerShell: Cmdlet Para Obtener Un Objeto DirectoryEntry a Partir de su Ruta LDAP […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: