J'ai un script que j'ai besoin de trouver le nom distinctif complet ( Juste au cas où il s'agit d'un problème XY, ce que j'essaie de faire Déplacez l'ordinateur vers un ou sur une unité spécifique, mais j'ai besoin d'un moyen d'obtenir l'entrée ASDI pour l'ordinateur que je cours. P> cn = mycomputer, ou = ordinateurs, dc = vw, dc = local code>) de l'ordinateur il marche sur, mais je Impossible de garantir que le module
ActiveDirectory code> sera disponible sur tous les ordinateurs que ce script sera exécuté. Y a-t-il un moyen d'obtenir le nom distinctif complet de l'ordinateur actuel sans utiliser
get-adcomputer $ env: nom d'ordinateur code>?
[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);
}
8 Réponses :
Je pense que vous pouvez l'obtenir de l'environnement en utilisant: ou est-ce exactement ce que vous ne voulez pas? Je suis terrible avec PowerShell. P> P>
Non, ce n'est le nom commun de l'ordinateur, j'ai besoin de son nom distinctif B>, j'ai besoin de "CN = MyComputer, DC = exemple, DC = com", votre réponse vient de retourner "mycomputer"
Essayez quelque chose comme ceci:
$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
Je l'essaie, mais $ r code> est NULL après la
FINCHONE () code>,
résultats () code> renvoie également aucun résultat. Le filtre que je reçois après une expansion variable est
(& (objetCategory = ordinateur) (objetClass = ordinateur) (SamAccount Name = (vwdev) $)) code> Cela vous a-t-il l'air de vous exercer? Je ne suis pas pleinement à la hauteur des quirites LDAP, mais il me semble étrange d'avoir une parenthèse entre le nom de l'ordinateur et le $
Non, il ne devrait pas y avoir de parens autour de VWDEV. Modifiez le filtre en "(& (objetCategory = ordinateur) (objetClass = ordinateur) (samaccoun tname = $ ($ env: calculer RName) $)" code>
Essayez ceci (nécessite v2):
$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))" ([adsisearcher]$filter).FindOne().Properties.distinguishedname
Merci, que l'on fonctionne parfaitement. En fait, je n'ai même pas besoin de propriétés.DistingushnamedName, je viens de changer la deuxième ligne vers $ ordinateur = [ADSI] (([Adsisearcher] $ filtre) .Findone (). Chemin) code> et i pourrait l'utiliser avec ma commande
moveto code>.
Merci. Vous pouvez également obtenir l'objet ordinateur avec: ([[adsisearcher] $ filtre) .Findone (). GetDirectoryENTRY ()
Cela a renvoyé null pour moi.
La cmdlet get-adcompomputer (PS Ver 2.0) peut vous aider.
PS:\> $(Get-ADComputer 'mycomputer').distinguishedName
FYI: Nécessite Rsat sur Windows 7
Soyez prudent avec la méthode AdSiséearcher. Si vous avez deux ordinateurs portant le même nom dans différents domaines de la même forêt (le problème qui m'a amené à effectuer la recherche renvoyée cet article), cette méthode n'est pas garantie de renvoyer la bonne. Cette méthode permettra simplement de rechercher dans AD pour un ordinateur avec le nom renvoyé par la variable d'environnement ComputerName. Vous devez vous assurer de référencer le domaine auquel l'ordinateur est rejoint si vous êtes dans un environnement avec plusieurs domaines dans une forêt. p>
Modérateur, cela devrait vraiment être un commentaire à la réponse de Shay Levy, mais je ne peux pas faire de commentaire parce que je suis nouveau. p>
Bienvenue à bord. Une fois que vous avez atteint 50 réputation, vous pourrez commenter partout. Merci pour le commentaire.
Essayez ceci ... Facile à comprendre et facile à retenir aussi ..... p>
$ CN = Lecture-hôte code> "Entrez le nom d'ordinateur" p>
$ cnobj = get-adcompomputert $ CN code> p>
$ ou = $ cnobj.distinguéeName code> p>
$ ou code> p>
N'est-ce pas une partie Get-AdComputer une partie du module Active Directory qui peut être installée ou non sur le système (le point de la question de la question est d'avoir un moyen qui fonctionnera toujours et ne s'appuie pas sur des modules "facultatifs")
@ Scott-Chamberlain Le module n'a pas nécessairement besoin d'être installé. Vous pouvez utiliser une technique de télécommande implicite en PS. De cette façon, tous les CMDlets de module ActiveDirectory fonctionneront comme s'ils sont installés localement sur votre PC. Lire la suite: TechTutsonline
Le seul moyen sûr de trouver le nom distinctifName de l'ordinateur est le suivant qui doit être exécuté en tant qu'administrateur:
Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\DataStore\Machine\0" -Name "DNName"
Pourquoi aller à tous ces problèmes plutôt que d'exécuter ce get-ComputerInfo | Sélectionnez -Property CSname code>?