7
votes

Obtenez le nom de l'ordinateur actuel distingué dans PowerShell sans utiliser le module Active Directory

J'ai un script que j'ai besoin de trouver le nom distinctif complet ( 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>?


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>

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


0 commentaires

8 Réponses :


-1
votes

Je pense que vous pouvez l'obtenir de l'environnement en utilisant: xxx

ou est-ce exactement ce que vous ne voulez pas? Je suis terrible avec PowerShell.


1 commentaires

Non, ce n'est le nom commun de l'ordinateur, j'ai besoin de son nom distinctif , j'ai besoin de "CN = MyComputer, DC = exemple, DC = com", votre réponse vient de retourner "mycomputer"



0
votes

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


2 commentaires

Je l'essaie, mais $ r est NULL après la FINCHONE () , résultats () renvoie également aucun résultat. Le filtre que je reçois après une expansion variable est (& (objetCategory = ordinateur) (objetClass = ordinateur) (SamAccount Name = (vwdev) $)) 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) $)"



11
votes

Essayez ceci (nécessite v2):

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


3 commentaires

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) et i pourrait l'utiliser avec ma commande moveto .


Merci. Vous pouvez également obtenir l'objet ordinateur avec: ([[adsisearcher] $ filtre) .Findone (). GetDirectoryENTRY ()


Cela a renvoyé null pour moi.



4
votes

La cmdlet get-adcompomputer (PS Ver 2.0) peut vous aider.

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


1 commentaires

FYI: Nécessite Rsat sur Windows 7



5
votes

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.

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.


1 commentaires

Bienvenue à bord. Une fois que vous avez atteint 50 réputation, vous pourrez commenter partout. Merci pour le commentaire.



0
votes

Essayez ceci ... Facile à comprendre et facile à retenir aussi .....

$ CN = Lecture-hôte "Entrez le nom d'ordinateur"

$ cnobj = get-adcompomputert $ CN

$ ou = $ cnobj.distinguéeName

$ ou


2 commentaires

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



0
votes

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: xxx


0 commentaires

0
votes
Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\DataStore\Machine\0" -Name "DNName"

1 commentaires

Pourquoi aller à tous ces problèmes plutôt que d'exécuter ce get-ComputerInfo | Sélectionnez -Property CSname ?