Je suis vraiment en difficulté pour créer la requête qui exportera les éléments suivants: Compte FirstName Nom Le nom de l'utilisateur réside dans
Idéalement, j'aimerais cela comme un CSV. Je n'ai pas accès au contrôleur de domaine, mais je peux exécuter DSQUERY/DSGET/etc. de mon pc.
En fonction de vos outils, vous pouvez faire
dsquery user dc=contoso,dc=com | dsget user -samid -fn -ln -dn > names.csv
Cela créera une liste de nom de compte séparé de l'espace, prénom, lastname et emplacement.
La convertir en un vrai CSV prend un peu plus de travail.
$userList=dsquery user dc=contoso,dc=com | dsget user -samid -fn -ln -dn
foreach ($user in $userList) {
$outstring=$user.trim(" ") -replace('\s+',',')
write-Host `"$outstring`"
}
Qui vous obtiendra de la sortie comme
"samid","fn","ln","dn"
"jarey.boe","jarey","boe","cn=jarey.boe,ou=users,dc=contoso,dc=com"
dSQUERY fonctionne, mais la conversion en CSV en fractionnement sur un ou plusieurs espaces (\ S +) est ténu. Toute valeur d'attribut avec des espaces incorporés va déplacer les valeurs restantes à droite. De plus, par défaut DSQUERY s'arrêtera après la sortie de 100 objets; "-Limit 0" va émettre tous les résultats.
La bonne façon de faire cela via la ligne de commande utilise CSVDE:
csvde -f names.csv -r "(&(objectClass=user)(objectCategory=user))" -l samAccountName,givenName,sn
La méthode obligatoire PowerShell est:
$a = [adsisearcher]'(&(objectClass=user)(objectCategory=user))'
$a.PageSize = 1000
$a.PropertiesToLoad.AddRange(@('samAccountName','givenName','sn','distinguishedName'))
$a.FindAll() | ForEach-Object {
$b = $_.properties
$op = '' | select DN,sAMAccountName,sn,givenName
$op.DN = $b.distinguishedname[0]
if ($b.samaccountname) { $op.samAccountName = $b.samaccountname[0] }
if ($b.givenname) { $op.givenName = $b.givenname[0] }
if ($b.sn) { $op.sn = $b.sn[0] }
$op
} | Export-Csv names3.csv -NoTypeInformation