2012-06-21 6 views
5

Ich habe ein Skript, das ich den vollständigen Distinguished Name (CN=MyComputer, OU=Computers, DC=vw, DC=local) des Computers finden muss, auf dem es ausgeführt wird, jedoch kann ich nicht garantieren, dass das ActiveDirectory-Modul sein wird Verfügbar auf allen Computern, auf denen dieses Skript ausgeführt wird. Gibt es eine Möglichkeit, den vollständigen Distinguished Name des aktuellen Computers zu erhalten, ohne Get-ADComputer $Env:COMPUTERNAME zu verwenden?Abrufen des aktuellen Computername in Powershell ohne Verwendung des ActiveDirectory-Moduls


Für den Fall, das ein XY Problem ist, was ich versuche, den Computer auf eine bestimmte OU zu tun ist, zu bewegen, aber ich brauche einen Weg, den ASDI Eintrag für den Computer zu bekommen ich leite.

[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); 
} 

Antwort

9

Versuchen Sie, diese (erfordert v2):

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

Danke, dass man perfekt funktioniert. Tatsächlich brauche ich nicht einmal den Properties.distedushedname, ich habe gerade die zweite Zeile in '$ computer = [ADSI] (([adsisarcher] $ filter) .FindOne(). Path)' geändert und ich könnte es mit meinem verwenden 'MoveTo' Befehl. –

+2

Danke. Sie könnten das Computerobjekt auch mit erhalten: ([adsisarcher] $ filter) .FindOne(). GetDirectoryEntry() –

+0

Dies gab null für mich zurück. –

-1

Ich glaube, Sie es aus der Umgebung durch die Verwendung erhalten können:

$computer = gc env:computername 

Oder ist dies genau das, was Sie nicht wollen? Ich bin schrecklich mit Powershell.

+0

Nein, das ist der allgemeine Name des Computers, ich brauche seinen ** definierten Namen **, ich brauche "CN = MyComput äh, DC = Beispiel, DC = com ", Ihre Antwort gibt einfach" MyComputer "zurück –

0

versuchen, etwas wie folgt aus:

$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

Ich versuche es, aber' $ r' ist null nach dem 'FindOne()', 'FindAll()' gibt auch keine Ergebnisse zurück. Der Filter, den ich nach der Variablenerweiterung bekomme, ist '(& (objectCategory = computer) (objectClass = computer) (samAccountName = (VWDEV) $)) sieht das für dich richtig aus? Ich bin nicht voll auf Geschwindigkeit in LDAP-Warteschlangen, aber es scheint mir seltsam, eine Klammer zwischen dem Computernamen und der $ –

+0

Nein, es sollte nicht Parens um VWDEV.Ändere den Filter in '" (& (objectCategory = computer) (objectClass = computer) (samAccountName = $ ($ env: Computername) $)) '' –

+0

Keiner von denen funktionierte für mich. –

3

Das Cmdlet Get-ADComputer (PS Version 2.0) kann helfen.

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

Der Name des Computers sollte der Kurzname sein, wie $ env: COMPUTERNAME.

+1

FYI: erfordert RSAT unter Windows 7 –

1

Seien Sie vorsichtig mit der ADSIsearcher-Methode. Wenn Sie zwei Computer mit demselben Namen in verschiedenen Domänen in derselben Gesamtstruktur haben (das Problem, das mich veranlasst hat, die Suche durchzuführen, die diesen Artikel zurückgegeben hat), gibt diese Methode nicht garantiert die richtige zurück. Diese Methode sucht in AD einfach nach einem Computer mit dem von der ComputerName-Umgebungsvariablen zurückgegebenen Namen. Sie müssen sicherstellen, dass Sie auf die Domäne verweisen, mit der der Computer verbunden ist, wenn Sie sich in einer Umgebung mit mehreren Domänen in einer Gesamtstruktur befinden.

Moderator, sollte dies wirklich ein Kommentar zu der Antwort von Shay Levy sein, aber ich kann keinen Kommentar abgeben, weil ich neu bin.

+0

Willkommen an Bord. Sobald Sie 50 Reputation erreicht haben, können Sie überall Kommentare abgeben. Danke für den Kommentar. – Onots

0

Try This ... Leicht verständlich und einfach wie gut sich zu erinnern .....

$cn = Read-Host "Geben Sie den Computername"

$cnObj = Get-ADComputer $cn

$ou = $cnObj.distinguishedname

$ou

+1

Ist Get-ADComputer nicht Teil des Active Directory-Moduls, das auf dem System installiert werden kann oder nicht (der ganze Punkt der Frage soll einen Weg haben, der immer funktioniert und nicht auf "optionalen" Modulen beruht) –

Verwandte Themen