Powershell - Filtrage des unités d'organisation tout en utilisant get-adcomputer
Je suis en train de créer un script qui génère une liste d'ordinateurs basés sur des propriétés spécifiques dont un ordinateur peut avoir. Par exemple, je suis en train de faire une liste des ordinateurs Windows XP et Windows 7 ordinateurs, jettent leurs noms dans un .fichier csv et à la sortie le nombre final de chaque.
Voici mon code si loin
import-module ActiveDirectory
$computers = get-adcomputer -Filter 'ObjectClass -eq "Computer"' -properties "OperatingSystem"
$i = 0
$j = 0
Foreach ($computer in $computers) {
if ($computer.operatingSystem -like "Windows 7*") {
$i++
'"{0}","{1}","{2}"' -f $computer.Name, $computer.OperatingSystem, "$computer.DistinguishedName" | Out-file -append C:\users\admin\desktop\test.txt
}
elseif ($computer.OperatingSystem -like "Windows XP*") {
$j++
'"{0}","{1}","{2}"' -f $computer.Name, $computer.OperatingSystem, "$computer.DistinguishedName" | Out-file -append C:\users\admin\desktop\test.txt
}
else {
$_
}
}
write-host "$i Win 7"
write-host "$j Win xp"
$k = $i+$j
write-host "$k Total"
Exemple De Sortie:
104 Win 7
86 Win xp
190 Total
Ce script fonctionne cependant je voudrais faire un peu mieux en étant en mesure de dire qui OU de ne pas regarder, mais je ne peux pas tout à fait le comprendre.
Si quelqu'un a des informations sur la manière de le faire, ou même juste pour faire le code ci-dessus, mieux je serais ravi de l'entendre.
Merci!
OriginalL'auteur smierdziel | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
La
-like
opérateur ne semble pas fonctionner avec des caractères génériques pour les DistinguishedName. Donc, l'évidence de l'opérationGet-ADComputer -Filter {(DistinguishedName -notlike "*OU=evil,*")}
ne fonctionne pas.La méthode la plus simple solution de contournement est d'obtenir tous les ordinateurs dans une collection et filtrer par la suite pour répondre à vos besoins. Comme si,
Additif
De combiner les règles de correspondance, l'utilisation
-and
-or
et-like
. N'oubliez pas d'utiliser*
générique avec? (where-object)
}
des exemples concrets, et d'essayer cela ne fonctionne pas non plus. $filteredComputers = $ordinateurs | where-object {($_.DistinguishedName -notlike "OU=ordinateurs Portables,") -ou ($_.DistinguishedName -notlike "*CN=Ressources,*") -ou ($_.DistinguishedName -notlike "CN=Ordinateurs,")}
OriginalL'auteur vonPryz
alors il n'y a rien de mal avec le filtrage après avoir recueilli tous les ordinateurs, une façon plus efficace de restreindre vos données à une unité d'organisation serait d'utiliser l'-searchbase commutateur dans votre GET-ADCOMPUTER cmdlt.
J'ai aussi remarqué que vous êtes filtrage du type d'objet pour spécifier ordinateur, ce qui est un peu redondant comme le adcomputer cmdlt déjà des filtres d'autres types d'objets.
j'ai pris ton code et il fixe un peu.
Ci-dessus l'exemple ci-dessus devrait fonctionner de la même manière que la précédente optionnel, sauf qu'il va énumérer tous les ordinateurs avec windows 7 ou xp qui sont dans le mal OU. qui est situé dans les postes de travail OU sur le ds.Domain.Net domaine.
Vous avez sans doute aussi remarqué que votre nom unique est arriver ".DistinguishedName" ajouté à la fin de chaque colonne, c'est parce que votre ordinateur$.DistinguishedName expression n'est pas pleinement évalué, alors qu'il est dans les citations, facilement résolu avec la modification suivante:
à
le "$(<...>)" syntaxe indique powershell pour évaluer la pleine expression entre parenthèses avant la conversion de la sortie de chaîne.
OriginalL'auteur LorackNaul