2012-06-21 9 views
5

Tengo un script que necesito encontrar el nombre completo completo (CN=MyComputer, OU=Computers, DC=vw, DC=local) de la computadora en la que se está ejecutando, pero no puedo garantizar que el módulo ActiveDirectory será disponible en todas las computadoras en las que se ejecutará este script. ¿Hay alguna forma de obtener el nombre Completo completo de la computadora actual sin usar Get-ADComputer $Env:COMPUTERNAME?Obtener el nombre completo de la computadora actual en powershell sin usar el módulo ActiveDirectory


Sólo en caso de que esto es un problema XY, lo que estoy tratando de hacer es mover el equipo a una unidad organizativa específica, pero necesito una manera de conseguir la entrada ASDI para la computadora que estoy ejecutando.

[ADSI]$computer = ("LDAP://" + $localDN) 
if($Production) 
{ 
    [ADSI]$destination = 'LDAP://ou=Production,ou=Computers,ou=VetWeb,dc=vw,dc=local' 
    $computer.MoveTo($destination); 
} 
else 
{ 
    [ADSI]$destination = 'LDAP://ou=Test,ou=Computers,ou=VetWeb,dc=vw,dc=local' 
    $computer.MoveTo($destination); 
} 

Respuesta

9

probar este (requiere v2):

$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))" 
([adsisearcher]$filter).FindOne().Properties.distinguishedname 
+0

Gracias, que uno funciona a la perfección. De hecho, ni siquiera necesito el Properties.distingushedname, simplemente cambié la segunda línea a '$ computer = [ADSI] (([adsisearcher] $ filter) .FindOne(). Path)' y podría usarlo con mi 'MoveTo' comando. –

+2

Gracias. También podría obtener el objeto de la computadora con: ([adsisearcher] $ filter) .FindOne(). GetDirectoryEntry() –

+0

Esto me devolvió la nulidad. –

-1

Creo que se puede obtener desde el medio ambiente mediante el uso de:

$computer = gc env:computername 

o esto es exactamente lo que no quiere? Soy terrible con PowerShell.

+0

No, ese es el nombre común de la computadora, necesito su ** nombre distinguido **, necesito "CN = MyComput er, DC = ejemplo, DC = com ", su respuesta simplemente devuelve" Mi Computadora " –

0

intentar algo como esto:

$de = New-Object System.DirectoryServices.DirectoryEntry 
$ds = New-Object System.DirectoryServices.DirectorySearcher 
$ds.SearchRoot = $de 
$ds.Filter = "(&(objectCategory=computer)(objectClass=computer)(samAccountName=($($env:ComputerName))$))" 
$ds.SearchScope = "SubTree" 

$r = $ds.FindOne() 

$r.Path 
+0

Lo intento pero' $ r' es nulo después de que 'FindOne()', 'FindAll()' tampoco devuelve resultados. El filtro que obtengo después de la expansión de la variable es '(& (objectCategory = computer) (objectClass = computer) (samAccountName = (VWDEV) $))' ¿te parece correcto? No estoy completamente al día con las consultas de LDAP, pero me parece extraño tener un paréntesis entre el nombre de la computadora y el $ –

+0

No, no debería haber pares en torno a VWDEV.Cambie el filtro a '" (& (objectCategory = computer) (objectClass = computer) (samAccountName = $ ($ env: ComputerName) $)) ' –

+0

Ninguno de esos funcionó para mí. –

3

El cmdlet Get-ADComputer (PS versión 2.0) puede ayudar.

PS:\> $(Get-ADComputer 'mycomputer').distinguishedName 

El nombre de la computadora debe ser el nombre abreviado, como $ env: COMPUTERNAME.

+1

FYI: requiere RSAT en Windows 7 –

1

Tenga cuidado con el método ADSIsearcher. Si tiene dos computadoras con el mismo nombre en diferentes dominios en el mismo bosque (el problema que me obligó a realizar la búsqueda que devolvió este artículo), no se garantiza que este método devuelva el correcto. Este método simplemente buscará en AD una computadora con el nombre devuelto por ComputerName Environment Variable. Debe asegurarse de hacer una referencia cruzada del dominio al que está unida la computadora si se encuentra en un entorno con múltiples dominios en un bosque.

Moderador, esto realmente debería ser un comentario a la respuesta de Shay Levy, pero no puedo hacer un comentario porque soy nuevo.

+0

Bienvenido a bordo. Una vez que alcances la reputación de 50, podrás comentar en todas partes. Gracias por el comentario. – Onots

0

intenta esto ... Es fácil de entender y fácil de recordar, así .....

$cn = Read-Host "Enter the ComputerName"

$cnObj = Get-ADComputer $cn

$ou = $cnObj.distinguishedname

$ou

+1

No es que Get-ADComputer sea parte del módulo de directorio activo que puede o no estar instalado en el sistema (todo el punto de la pregunta es tener una manera que siempre funcione y no dependa de módulos "opcionales") –

Cuestiones relacionadas