Liste Powershell des utilisateurs publicitaires actifs. Comment obtenir une liste des groupes AD sélectionnés dont sont membres une grande liste d’utilisateurs ? Demander le code sous spoiler

Aujourd'hui, nous allons essayer de télécharger une liste de tous les utilisateurs dans un fichier séparé à partir d'Active Directory. Notre principal assistant dans ce domaine sera PowerShell. Le fait est que Microsoft avait initialement prévu la console de commande PowerShell comme principal outil de gestion des composants du serveur Windows. Et aujourd'hui, alors que nous avons déjà la version 2.0, dans l'ensemble, c'est le cas.

Même dans un passé récent, pour interagir d'une manière ou d'une autre avec AD, les administrateurs devaient disposer soit de l'utilitaire dsquery, soit de divers types de scripts ou d'utilitaires. Aujourd'hui, à partir de Windows Server 2008 R2, nous pouvons travailler avec AD via PowerShell. Avec l'avènement de PowerShell 2.0, un module spécial est utilisé pour interagir avec Active Directory Module Active Directory pour Windows PowerShell, qui contient la liste nécessaire des applets de commande. Pour nos tâches, nous utiliserons la commande Obtenir-ADUUser.

Ainsi, en fonction du système d'exploitation sous lequel nous exécuterons la console PowerShell, nous devrons effectuer des « étapes préparatoires ».

1) Si nous travaillons sous Windows Server jusqu'à la version 2012, alors nous devons exécuter la commande :

  • ActiveDirectory du module d'importation – commande pour importer un module dans AD

Pour les versions du système d'exploitation à partir de 2012, ce module est déjà activé par défaut.

2) Si nous travaillons à partir d'un client Windows, le package d'administration à distance RSAT doit y être installé, avec le composant Active Directory Module pour Windows PowerShell installé.

Il convient de noter qu'il est recommandé d'exécuter l'applet de commande Get-ADUser lorsque la quantité de données téléchargées atteint 1 000 utilisateurs.

Exportation des utilisateurs AD à l'aide de PowerShell vers un fichier séparé

Tout d’abord, appelons l’aide de la commande Get-ADUser. En conséquence, vous recevrez toutes les commandes nécessaires pour une administration ultérieure.

  • aide Get-ADUser – commande pour appeler de l'aide

Pour obtenir une liste de tous les utilisateurs avec toutes les propriétés dans une fenêtre PowerShell, vous devez exécuter la commande suivante :

  • Get-ADUser-filter * – exporter une liste d’utilisateurs AD

Ce téléchargement n'est pas entièrement informatif et ne contient pas toutes les informations nécessaires dans la fenêtre. Essayons donc de restreindre la recherche et d’afficher les propriétés d’un utilisateur spécifique nommé user1 :

  • Get-ADUser -identité utilisateur1 -propriétés * – exporter les propriétés d’un utilisateur spécifique

Essayons maintenant d'exporter la liste de tous les utilisateurs avec leurs propriétés vers un serveur externe. txt ou csv déposer:

  • Get-ADUser -filter * -properties * | Export-csv -chemin c:\users.csv -encodage Unicode – exporter les utilisateurs vers un fichier séparé

Je voudrais porter une attention particulière à la clé -encodage Unicode. Il sert à garantir que l'alphabet cyrillique russe, après l'exportation depuis AD, puisse être affiché correctement dans le fichier téléchargé. Par exemple, grâce à Microsoft Excel, nous verrons des points d'interrogation au lieu de lettres russes.

Lors de la visualisation d'un fichier, les données sont exportées sur une seule ligne et ne sont donc pas lisibles. Pour changer cela, nous devons procéder comme suit :

Dédié à l'utilisation de PowerShell pour administrer AD. Comme point de départ, l'auteur a décidé de prendre 10 tâches d'administration AD courantes et d'examiner comment elles peuvent être simplifiées à l'aide de PowerShell :

  1. Réinitialiser le mot de passe utilisateur
  2. Activer et désactiver des comptes
  3. Débloquer le compte utilisateur
  4. Supprimer le compte
  5. Rechercher des groupes vides
  6. Ajouter des utilisateurs à un groupe
  7. Répertorier les membres du groupe
  8. Trouver des comptes informatiques obsolètes
  9. Désactiver un compte d'ordinateur
  10. Rechercher des ordinateurs par type

De plus, l'auteur tient un blog (en utilisant PowerShell, bien sûr), nous vous recommandons d'y jeter un œil - jdhitsolutions.com/blog. Et vous pouvez obtenir les informations les plus récentes sur son Twitter twitter.com/jeffhicks.
Vous trouverez ci-dessous la traduction de l'article « Top 10 des tâches Active Directory résolues avec PowerShell ».

La gestion d'Active Directory (AD) à l'aide de Windows PowerShell est plus simple que vous ne le pensez, et je veux vous le prouver. Vous pouvez simplement prendre les scripts ci-dessous et les utiliser pour résoudre un certain nombre de tâches de gestion AD.

Exigences

Pour utiliser PowerShell pour gérer AD, vous devez remplir plusieurs conditions. Je vais montrer comment fonctionnent les applets de commande AD en utilisant un ordinateur Windows 7 comme exemple.
Pour utiliser les applets de commande, vous devez disposer d'un contrôleur de domaine Windows Server 2008 R2, ou vous pouvez télécharger et installer le service Active Directory Management Gateway sur les anciens contrôleurs de domaine. Veuillez lire attentivement la documentation avant l'installation ; Redémarrage du CD requis.
Côté client, téléchargez et installez (RSAT) pour Windows 7 ou Windows 8. Sous Windows 7, vous devrez ouvrir dans Panneaux de contrôle chapitre Programmes et choisissez Activer ou désactiver des fonctionnalités Windows. Trouver Outils d'administration de serveur distant et développez la section Outils d'administration des rôles. Sélectionnez les éléments appropriés pour les outils AD DS et AD LDS, notez en particulier que l'élément doit être sélectionné Module Active Directory pour Windows PowerShell, comme le montre la figure 1. (Sous Windows 8, tous les outils sont sélectionnés par défaut). Nous sommes maintenant prêts à travailler.

Fig.1 Activation des outils AD DS et AD LDS

Je suis connecté avec un compte disposant des droits d'administrateur de domaine. La plupart des applets de commande que je vais vous montrer vous permettront de spécifier des informations d'identification alternatives. Dans tous les cas, je recommande de lire l'aide ( Obtenir de l'aide) et des exemples que je vais démontrer ci-dessous.
Démarrez une session PowerShell et importez le module :

PS C:\> Importer le module ActiveDirectory

L'importation crée un nouveau PSDrive, mais nous ne l'utiliserons pas. Cependant, vous pouvez voir quelles commandes sont disponibles dans le module importé.

PS C:\> get-command -module ActiveDirectory

La beauté de ces commandes est que si je peux utiliser une commande sur un objet AD, elle peut alors être utilisée sur 10, 100 et même 1 000. Voyons comment fonctionnent certaines de ces applets de commande.

Tâche 1 : Réinitialiser le mot de passe de l'utilisateur

Commençons par une tâche typique : réinitialiser le mot de passe d'un utilisateur. Vous pouvez le faire facilement et simplement à l'aide d'une applet de commande Définir-ADAccountPassword. La partie délicate est que le nouveau mot de passe doit être qualifié de chaîne protégée : un morceau de texte chiffré et stocké en mémoire pendant toute la durée de la session PowerShell. Tout d'abord, créons une variable avec le nouveau mot de passe :
PS C:\> $new=Read-Host "Entrez le nouveau mot de passe" -AsSecureString

Ensuite, saisissez un nouveau mot de passe :

Nous pouvons maintenant extraire le compte (en utilisant samNom du compte– la meilleure option) et définissez un nouveau mot de passe. Voici un exemple pour l'utilisateur Jack Frost :

PS C:\> Set-ADAccountPassword jfrost -NewPassword $new

Malheureusement, il y a un bug avec cette applet de commande : -Passthru, -Et si, Et -Confirmer ne fonctionne pas. Si vous préférez un raccourci, essayez ceci :

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

Par conséquent, j'ai besoin que Jack change son mot de passe la prochaine fois qu'il se connectera, donc je modifie le compte en utilisant Définir-ADUUser.

PS C:\> Set-ADUser jfrost -ChangePasswordAtLogon $True

Les résultats de l’exécution de l’applet de commande ne sont pas écrits dans la console. Si cela doit être fait, utilisez -Vrai. Mais je peux savoir si l'opération a réussi ou non en récupérant le nom d'utilisateur à l'aide de l'applet de commande. Obtenir-ADUUser et en précisant la propriété Mot de passe expiré, comme le montre la figure 2.


Riz. 2. Résultats de la cmdlet Get-ADUser avec la propriété PasswordExpired

Conclusion : réinitialiser le mot de passe d'un utilisateur à l'aide de PowerShell n'est pas difficile du tout. J'avoue que réinitialiser le mot de passe est également facile grâce au snap Utilisateurs et ordinateurs Active Directory consoles Console de gestion Microsoft (MMC). Mais l'utilisation de PowerShell est appropriée si vous devez déléguer une tâche, si vous ne souhaitez pas déployer le composant logiciel enfichable mentionné ci-dessus ou si vous réinitialisez un mot de passe dans le cadre d'un vaste processus informatique automatisé.

Tâche 2 : Activer et désactiver des comptes

Désactivons maintenant le compte. Continuons à travailler avec Jack Frost. Ce code utilise le paramètre -Et si, que vous pouvez trouver dans d'autres comadlets qui apportent des modifications pour tester ma commande sans l'exécuter.

PS C:\> Disable-ADAccount jfrost -whatif Et si : Effectuer l'opération "Set" sur la cible "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Maintenant, désactivons-le pour de vrai :

PS C:\> Désactiver-ADAAccount jfrost

Et quand viendra le temps d’activer le compte, quelle applet de commande nous aidera ?

PS C:\>Activer-ADAAccount jfrost

Ces applets de commande peuvent être utilisées dans une expression pipeline, vous permettant d'activer ou de désactiver autant de comptes que vous le souhaitez. Par exemple, ce code désactivera tous les comptes du service Ventes

PS C:\> get-aduser -filter "department -eq "ventes"" | désactiver-un compte

Bien sûr, écrivez un filtre pour Obtenir-ADUUser assez compliqué, mais c'est là que réside l'utilisation du paramètre -Et si avec l'applet de commande Désactiver le compte AD vient à la rescousse.

Tâche 3 : Déverrouiller le compte utilisateur

Imaginons une situation dans laquelle Jack a verrouillé son compte en essayant de saisir un nouveau mot de passe. Au lieu d'essayer de retrouver son compte via l'interface graphique, la procédure de déverrouillage peut être effectuée à l'aide d'une simple commande.

PS C:\> Déverrouiller-ADAAccount jfrost

L'applet de commande prend également en charge les paramètres -Et si Et -Confirmer.

Tâche 4 : Supprimer le compte

Peu importe le nombre d'utilisateurs que vous supprimez : c'est facile à faire à l'aide de l'applet de commande. Supprimer-ADUUser. Je ne veux pas supprimer Jack Frost, mais si je le voulais, j'utiliserais un code comme celui-ci :

PS C:\> Remove-ADUser jfrost -whatif Et si : Effectuer l'opération "Supprimer" sur la cible "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Ou je peux saisir plusieurs utilisateurs et les supprimer avec une simple commande :

PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=Employés, DC=Globomantics,DC=Local" | où ($_.WhenChanged -le (Get-Date).AddDays(-180)) | Supprimer-ADuser -whatif

Cette commande recherchera et supprimera tous les comptes OU des employés désactivés qui n'ont pas été modifiés depuis 180 jours ou plus.

Tâche 5 : Rechercher des groupes vides

Gérer des groupes est une tâche sans fin et ingrate. Il existe de nombreuses façons de rechercher des groupes vides. Certaines expressions peuvent fonctionner mieux que d’autres, selon votre organisation. Le code ci-dessous trouvera tous les groupes du domaine, y compris ceux intégrés.

PS C:\> get-adgroup -filter * | où (-Not ($_ | get-adgroupmember)) | Sélectionnez un nom

Si vous avez des groupes comptant des centaines de membres, l'utilisation de cette commande peut prendre beaucoup de temps ; Get-ADGroupMember vérifie chaque groupe. Si vous pouvez limiter ou personnaliser, ce sera mieux.
Voici une autre approche :

PS C:\> get-adgroup -filter "members -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Groupes,OU=Employés,DC=Globomantics, DC=local" | Sélectionnez Nom, Groupe*

Cette commande recherche tous les groupes universels qui ne sont pas membres des groupes OU et affiche certaines propriétés. Le résultat est présenté dans la figure 3.


Riz. 3. Rechercher et filtrer les groupes universels

Tâche 6 : Ajouter des utilisateurs à un groupe

Ajoutons Jack Frost au groupe informatique de Chicago :

PS C:\> add-adgroupmember "chicago IT" -Membres jfrost

Oui, c'est aussi simple que cela. Vous pouvez également facilement ajouter des centaines d’utilisateurs à des groupes, même si je trouve cela un peu gênant :

PS C:\> Add-ADGroupMember "Chicago Employees" -member (get-aduser -filter "city -eq "Chicago"")

J'ai utilisé l'expression pipeline entre parenthèses pour rechercher tous les utilisateurs possédant la propriété City à Chicago. Le code entre parenthèses est exécuté et les objets résultants sont passés au paramètre –Member. Chaque objet utilisateur est ajouté au groupe Chicago Employees. Peu importe qu'il s'agisse de 5 ou de 5 000 utilisateurs, la mise à jour des adhésions aux groupes ne prend que quelques secondes. Cette expression peut également être écrite en utilisant PourEach-Objet ce qui pourrait être plus pratique :

PS C:\> Get-ADUser -filter "city -eq "Chicago"" | foreach (Add-ADGroupMember "Employés de Chicago" -Membre $_)

Tâche 7 : Répertorier les membres du groupe

Vous voudrez peut-être savoir qui fait partie d’un certain groupe. Par exemple, vous devez périodiquement découvrir qui est membre du groupe Administrateurs de domaine :

PS C:\> Get-ADGroupMember "Administrateurs de domaine"

La figure 4 montre le résultat.


Riz. 4. Membres du groupe Administrateurs de domaine

L'applet de commande affiche l'objet AD pour chaque membre du groupe. Que faire des groupes imbriqués ? Mon groupe Chicago All Users est une collection de groupes imbriqués. Pour avoir la liste de tous les comptes, il me suffit d'utiliser le paramètre –Récursif.

PS C:\> Get-ADGroupMember "Chicago Tous les utilisateurs" -Récursif | Sélectionnez un nom distinctif

Si vous souhaitez procéder dans l'autre sens - recherchez les groupes auxquels appartient un utilisateur - utilisez la propriété user MembreDe:

PS C:\> get-aduser jfrost -property Memberof | Sélectionnez -ExpandProperty memberOf CN=NewTest,OU=Groups,OU=Employees, DC=GLOBOMANTICS,DC=local CN=Chicago Test,OU=Groups,OU=Employees, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= Groupes,OU=Employés, DC=GLOBOMANTICS,DC=local CN=Chicago Sales Users,OU=Groupes,OU=Employés, DC=GLOBOMANTICS,DC=local

J'ai utilisé le paramètre -Développer la propriété pour afficher les noms MembreDe comme des lignes.

Tâche 8 : Rechercher des comptes d'ordinateur obsolètes

On me pose souvent cette question : « Comment trouver des comptes informatiques obsolètes ? Et je réponds toujours : « Qu’est-ce qui est dépassé pour vous ? Les entreprises ont différentes définitions du moment où un compte d'ordinateur (ou un compte d'utilisateur, peu importe) est considéré comme obsolète et ne peut plus être utilisé. Pour moi, je fais attention aux comptes dont les mots de passe n'ont pas été modifiés depuis un certain temps. Cette période pour moi est de 90 jours - si l'ordinateur n'a pas modifié le mot de passe ainsi que le domaine pendant cette période, il est probablement hors ligne et obsolète. Applet de commande utilisée Obtenir-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Sélectionnez le nom, le dernier mot de passe

Le filtre fonctionne très bien avec une valeur fixe, mais ce code sera mis à jour pour tous les comptes d'ordinateurs qui n'ont pas modifié leur mot de passe depuis le 1er janvier 2012. Les résultats sont présentés dans la figure 5.


Riz. 5. Rechercher des comptes informatiques obsolètes

Autre option : supposons que vous soyez au moins au niveau fonctionnel du domaine Windows 2003. Filtrer par propriété. LastLogontimeStamp. Cette valeur correspond au nombre d'intervalles de 100 nanosecondes depuis le 1er janvier 1601 et est stockée en GMT, donc travailler avec cette valeur est un peu délicat :

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | sélectionnez le nom, lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | Trier LastLogonTimeStamp


Riz. 6. Convertissez la valeur LastLogonTimeStamp dans un format familier

Pour créer un filtre, je dois convertir la date, par exemple le 1er janvier 2012, dans le format correct. La conversion s'effectue dans FileTime :

PS C:\> $cutoff=(Get-Date "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

Maintenant, je peux utiliser cette variable dans le filtre pour Obtenir-ADComputer:

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -property * | Sélectionnez Nom, LastlogonTimestamp, PasswordLastSet

Le code ci-dessus recherche les mêmes ordinateurs que ceux présentés dans la figure 5.

Tâche 9 : Désactiver le compte de l'ordinateur

Peut-être que lorsque vous trouverez des comptes inactifs ou obsolètes, vous souhaiterez les désactiver. C'est assez facile à faire. Nous utiliserons la même applet de commande que celle utilisée pour travailler avec les comptes d'utilisateurs. Vous pouvez le clarifier en utilisant samNom du compte compte.

PS C:\> Disable-ADAccount -Identity "chi-srv01$" -whatif Et si : Effectuer l'opération "Set" sur la cible "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=local".

Ou en utilisant une expression de pipeline :

PS C:\> get-adcomputer "chi-srv01" | Désactiver le compte AD

Je peux également utiliser mon code pour rechercher des comptes obsolètes et tous les désactiver :

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Désactiver le compte AD

Tâche 10 : Rechercher des ordinateurs par type

On me demande aussi souvent comment trouver des comptes informatiques par type, comme des serveurs ou des postes de travail. Cela nécessite une certaine créativité de votre part. Il n'y a rien dans AD qui distingue un serveur d'un client, sauf peut-être le système d'exploitation. Si votre ordinateur exécute Windows Server 2008, vous devrez effectuer quelques étapes supplémentaires.
Tout d’abord, vous devez obtenir une liste des systèmes d’exploitation, puis nous filtrons les comptes par systèmes d’exploitation disponibles.

PS C:\> Get-ADComputer -Filter * -Properties OperatingSystem | Sélectionnez Système d'exploitation -unique | Trier le système d'exploitation

Les résultats sont présentés dans la figure 7.


Riz. 7. Récupération de la liste des systèmes d'exploitation

Je souhaite trouver tous les ordinateurs exécutant un système d'exploitation serveur :

PS C:\> Get-ADComputer -Filter "Système d'exploitation -like "*Serveur*"" -propriétés Système d'exploitation, Système d'exploitation ServicePack | Sélectionnez Nom, Op* | liste de formats

Les résultats sont présentés dans la figure 8.

Comme les autres applets de commande AD Get, vous pouvez personnaliser les paramètres de recherche et limiter la demande à des unités d’organisation spécifiques si nécessaire. Toutes les expressions que j'ai montrées peuvent être intégrées dans des expressions PowerShell plus grandes. Par exemple, vous pouvez trier, regrouper, appliquer des filtres, exporter au format CSV ou créer et envoyer des rapports HTML par e-mail, le tout depuis PowerShell ! Dans ce cas, vous n’aurez pas à écrire un seul script.
Voici un bonus : un rapport sur l'âge du mot de passe utilisateur, enregistré dans un fichier HTML :

PS C:\> Get-ADUser -Filter "Enabled -eq "True" -AND PasswordNeverExpires -eq "False"" -Properties PasswordLastSet,PasswordNeverExpires,PasswordExpired | Sélectionnez DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |sort PasswordAge -Descending | ConvertTo-Html -Title "(!LANG : rapport sur l'âge des mots de passe" | Out-File c:\Work\pwage.htm !}

Bien que cette expression puisse paraître un peu intimidante, elle est facile à utiliser avec une connaissance minimale de PowerShell. Et il ne reste qu'un dernier conseil : comment définir une propriété personnalisée appelée Âge du mot de passe. La valeur représente l'écart entre aujourd'hui et la propriété PasswordLastSet. Ensuite, je trie les résultats pour ma nouvelle propriété. La figure 9 montre la sortie de mon petit domaine de test.

Mise à jour :
Le message contient une traduction de l'article sur le portail

0

J'ai le script de travail suivant qui vérifie si une grande liste d'utilisateurs dans un fichier CSV est membre d'un groupe AD et écrit les résultats dans results.csv.

Je ne sais pas comment convertir le script pour pouvoir changer $group = "InfraLite" en $group = DC .\List_Of_AD_Groups.CSV .

Ainsi, le script ne renvoie pas uniquement les correspondances pour un groupe AD, mais il renvoie également les correspondances pour les 80 groupes AD contenus dans List_of_AD_groups.csv. Écrire OUI/NON pour chaque groupe AD dans une nouvelle colonne CSV (ou si cela n'est pas possible, créer un fichier CSV distinct pour chaque groupe avec les résultats fera de même.

Je pourrais le faire manuellement en modifiant la valeur de $group et le nom du fichier d'exportation et réexécuter le script 80 fois, mais je devrais être rapide avec PS pour le faire.

par exemple résultats.csv ? :

NOM AD_GROUP1 AD_GROUP2 AD_GROUP80 etc. user1 oui non oui user2 non non oui user3 non oui non echo "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Recursive |

  • Sélectionnez -ExpandProperty SAMAccountName foreach ($user in $users) ( if ($members -contains $user) ( echo "$user $group`tYes" >> results.csv ) else ( echo "$user`tNo" >> résultats .csv) )
  • 2 réponses

    Tri:

0

Activité

Une solution triviale à votre problème serait d'envelopper votre code existant dans une autre boucle et de créer un fichier de sortie pour chaque groupe :

$groups = Get-Content "C:\groups.txt" pour chaque ($group in $groups) ( $members = Get-ADGroupMember ... ... )

Une approche plus élégante consisterait à créer un modèle de mappage de groupe, à le cloner pour chaque utilisateur et à remplir une copie avec les appartenances aux groupes de l'utilisateur. Quelque chose comme ceci devrait fonctionner :

0

Je joue avec ça depuis un moment et je pense avoir trouvé un moyen de vous obtenir exactement ce que vous recherchiez.

Je pense qu'Ansgar était sur la bonne voie, mais je n'ai pas réussi à lui faire faire ce qui a suivi. Il a mentionné qu'au moment de la rédaction de cet article, il n'avait pas accès à l'environnement AD.

Voici ce que j'ai trouvé :

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # Configuration d'une table de hachage pour une utilisation ultérieure $UserHash = New-Object -TypeName System.Collections.Hashtable # Boucle externe pour ajouter des utilisateurs et une adhésion à UserHash $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # Supprime la syntaxe LPAP uniquement pour le SAMAccountName du groupe $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split(",")) .replace("CN=","") ) #Ajout de la paire User=Membership au Hash $UserHash.Add($_,$Memberships) ) #Boucle externe pour créer un objet par utilisateur $Results = $UserArray | ForEach-Object( # Créez d'abord un objet simple $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # Ajoutez dynamiquement des membres à l'objet, en fonction de $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash pour voir si le groupe apparaît dans la liste des membres de l'utilisateur $UserIsMember = $UserHash.($User.Name) -contient $_ #Ajout d'une propriété à l'objet et d'une valeur $User | Add-Member -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) #Renvoyer l'objet à la variable Return $User ) #Convertir les objets en CSV, puis les afficher $Results |

Espérons que tout ait du sens. J'ai commenté autant que j'ai pu. Il serait très facile de convertir en ADSI si RSAT n'était pas installé sur la machine sur laquelle vous l'exécutez. Si vous en avez besoin, faites-le-moi savoir et j'apporterai quelques modifications rapides.

Utilisé pour créer, modifier et supprimer des objets de répertoire. L'utilisateur peut également utiliser la commande ldifde pour étendre le schéma, exporter les informations sur les utilisateurs et les groupes Active Directory vers d'autres applications ou services et remplir le service Active Directory Application Mode (ADAM) avec des données provenant d'autres services d'annuaire.

Syntaxe

ldifde [-je] [-f nom de fichier] [-s nom_serveur] [-c ligne1 ligne2] [-v] [-j chemin] [-t numéro_port] [-d DN_base] [-r filtre_LDAP] [-p région] [-l LDAP_attribute_list] [-o LDAP_attribute_list] [-g] [-m] [-n] [-k] [-un ] [-b ] [-? ]

Possibilités

-je Spécifie le mode d'importation. Si le paramètre n'est pas défini, le mode export est utilisé par défaut. -fnom de fichier Spécifie le nom du fichier d'importation ou d'exportation. -snom_serveur Spécifie l'ordinateur sur lequel l'opération d'importation ou d'exportation doit être effectuée. Programme par défaut ldifde sera exécuté sur l'ordinateur sur lequel ldifde installé. -cligne1 ligne2 Remplace toutes les occurrences lignes1 contenu lignes2. Généralement utilisé lorsque vous importez des données d'un domaine vers un autre et que vous devez remplacer le nom unique du domaine effectuant l'exportation ( ligne1), importation du nom de domaine ( ligne2). -v Active le mode de journalisation détaillée. -jchemin Spécifie l'emplacement du fichier journal. La valeur par défaut est le chemin actuel. -tnuméro_port Spécifie le numéro de port LDAP (Lightweight Directory Access Protocol). Le port LDAP par défaut est 389. Le port du catalogue global est 3268. -dDN_base Spécifie le nom unique de la base de recherche pour l'exportation des données. -rFiltre LDAP Crée un filtre de recherche LDAP pour l'exportation de données. Par exemple, le filtre suivant exporte tous les utilisateurs portant un deuxième prénom spécifique : csvde -r (et (objectClass=Utilisateur)(sn=Nom de famille)) -prégion Spécifie la zone de recherche. Les paramètres de la portée de recherche sont Base, Un niveau Et Sous-arbre. -lLDAP_attribute_list Spécifie la liste des attributs renvoyés dans les résultats de la demande d'exportation. Si ce paramètre est omis, tous les attributs sont renvoyés. -oLDAP_attribute_list Spécifie une liste d'attributs à omettre dans les résultats de la demande d'exportation. Cette option est généralement utilisée lors de l'exportation d'objets depuis Active Directory, puis de leur importation dans un autre annuaire compatible LDAP. Si des attributs ne sont pas pris en charge par un autre catalogue, ils peuvent être exclus du jeu de résultats à l'aide de cette option. -g Élimine les recherches de pages. -m Omet les attributs qui ne peuvent pas être écrits, tels que GUIDObjet Et objetSID. -n Omet l'exportation des valeurs binaires. -k Ignore les erreurs lors de l'opération d'importation et poursuit le traitement. Vous trouverez ci-dessous une liste complète des erreurs ignorées :

  • l'objet est déjà membre du groupe ;
  • une violation de classe d'objet (ce qui signifie que la classe d'objet spécifiée n'existe pas) si l'objet importé n'a pas d'autres attributs ;
  • l'objet existe déjà ;
  • violation de la restriction ;
  • l'attribut ou la valeur existe déjà ;
  • aucun objet de ce type n’existe.
-unnom_distingué_mot de passe Spécifie l'exécution d'une commande en utilisant le spécifié nom_distingué_nom_utilisateur Et mot de passe -b. -bnom d'utilisateur domaine mot de passe Spécifie la commande à exécuter en utilisant le spécifié nom d'utilisateur, domaine et mot de passe. Par défaut, la commande sera exécutée en utilisant les informations d'identification de l'utilisateur actuellement connecté au réseau. Ne peut pas être utilisé avec le paramètre -un. -? Affiche un menu de commandes.

Remarques

  • Avec paramètre -c vous pouvez utiliser des constantes #schemaNamingContext Et #configurationNamingContext au lieu des noms distinctifs de la partition du répertoire de schéma et de la partition du répertoire de configuration.
  • Lors de la création d'un fichier d'import pour une commande ldifde, utilisez la valeur changementType pour déterminer le type de modifications contenues dans le fichier d'importation. Valeurs changementType sont données dans le tableau ci-dessous.

Ci-dessous un exemple de fichier d'import LDAP au format LDIF utilisant la valeur ajouter:
DN : CN=utilisateur_sélectionné,DC=nom_domaine
changement de type : ajouter
CN : utilisateur_sélectionné
description:fichier_description
classe d'objet : utilisateur
classe d'objet : utilisateur_sélectionné

Exemples

Pour extraire uniquement le nom unique, le nom commun, le prénom, le nom et le numéro de téléphone des objets renvoyés, saisissez :
-l nom_distingué, CN, Nom, S.N. téléphone
Pour exclure un identifiant global unique (GUID) pour un objet, saisissez :
-o quand_créé, quand_changed, objet_GUID

Ce n'est un secret pour personne, depuis la première version de PowerShell, Microsoft tente d'en faire le principal outil d'administration de Windows. Et à bien des égards, cela fonctionne ! Aujourd'hui, à l'aide d'exemples simples, nous montrerons les fonctionnalités PowerShell qui peuvent être utilisées pour obtenir diverses informations sur les utilisateurs Active Directory et leurs attributs.

Note. Auparavant, pour obtenir des informations sur les attributs des comptes utilisateurs AD, il fallait utiliser différents outils : la console ADUC (incluant), un utilitaire, etc. Le choix de l'outil était généralement basé sur la tâche à accomplir et les capacités de programmation de l'administrateur.

PowerShell 2.0 a introduit un module spécial pour travailler avec Active Directory - (introduit dans Windows Server 2008 R2), dont les applets de commande vous permettent d'effectuer diverses manipulations avec les objets d'annuaire AD. L'applet de commande est utilisée pour obtenir des informations sur les utilisateurs du domaine Active Directory et leurs propriétés. Obtenir-ADUUser. Vous pouvez utiliser la cmdlet Get-ADUser pour obtenir la valeur de n’importe quel attribut d’un compte utilisateur existant dans AD. De plus, vous pouvez spécifier divers critères de sélection et générer des listes d'utilisateurs de domaine et leurs attributs.

Dans cet exemple, nous allons vous montrer comment utiliser l'applet de commande PowerShell Get-ADUser pour récupérer des informations sur la dernière modification du mot de passe d'un utilisateur et sa date d'expiration.

Lancez la fenêtre Powershll avec les droits d'administrateur et importez le module Active Directory avec la commande :

ActiveDirectory du module d'importation

Conseil. Dans Windows Server 2012 et versions ultérieures, vous pouvez ignorer cet élément, car le module PowerShell Active Directory est activé par défaut.

Dans les systèmes d'exploitation clients (Windows 10 par exemple), pour que le commandant Get-AdUser fonctionne, vous devez installer la version appropriée de RSAT et activer le composant dans le panneau de configuration. Module Active Directory pour Windows PowerShell(Outils d'administration de serveur distant -> Outils d'administration de rôles -> Outils AD DS et AD LDS -> Outils AD DS).

Une liste complète de tous les arguments de l'applet de commande Get-ADUser peut être obtenue comme suit :

Aide Get-ADUser

Pour afficher une liste de tous les comptes de domaine, exécutez la commande :

Get-ADUser-filter *

Le format de la liste renvoyée n'est pas très pratique à utiliser, seuls quelques 10 attributs et propriétés de base sur plus de 120 des comptes d'utilisateurs sont affichés (DN, SamAccountName, Name, UPN, etc.) en plus, on voit qu'il y a aucune information sur l'heure à laquelle le mot de passe a été modifié pour la dernière fois.

Pour afficher des informations complètes sur tous les attributs disponibles de l'utilisateur tuser, exécutez la commande :

Get-ADUser -identity tuser -propriétés *

Ainsi, nous voyons une liste complète des attributs utilisateur AD et leurs valeurs associées au compte utilisateur. Ensuite, nous passerons au formatage de la sortie de l'applet de commande Get-ADUser afin que les champs dont nous avons besoin soient affichés. Nous nous intéressons aux attributs :

  • Mot de passe expiré
  • Mot de passeDernierEnsemble
  • Mot de passeNeverExpires

Exécutons la commande :

Get-ADUser tuser -properties Mot de passeExpired, Mot de passeLastSet, Mot de passeNeverExpires

Désormais, les données utilisateur contiennent des informations sur la date du changement de mot de passe et l'heure à laquelle il expirera. Présentons les informations sous une forme tabulaire plus pratique :

Get-ADUser -filter * -properties Mot de passeExpired, Mot de passeLastSet, Mot de passeNeverExpires | ft Nom, Mot de passeExpiré, Mot de passeLastSet, Mot de passeNeverExpires

Pour afficher les données utilisateur d'une unité d'organisation spécifique, utilisez le paramètre Base de recherche:

Get-ADUser -SearchBase 'OU=Moscou,DC=winitpro,DC=loc' -filter * -properties Mot de passeExpired, Mot de passeLastSet, Mot de passeNeverExpires | ft Nom, Mot de passeExpiré, Mot de passeLastSet, Mot de passeNeverExpires

Le résultat de la commande peut être exporté vers un fichier texte :

Get-ADUser -filter * -properties Mot de passeExpired, Mot de passeLastSet, Mot de passeNeverExpires | ft Nom, Mot de passeExpiré, Mot de passeLastSet, Mot de passeNeverExpires > C:\temp\users.txt

Ou au format CSV, qui sera facilement exporté vers Excel à l'avenir (en utilisant également objet de tri Trions le tableau par la colonne PasswordLastSet et ajoutons également une condition – le nom d'utilisateur doit contenir la chaîne « Dmitry » :

Get-ADUser -filter * -properties Mot de passeExpired, Mot de passeLastSet, Mot de passeNeverExpires | où ($_.name – comme « *Dmitry* ») | objet de tri Mot de passeLastSet | Nom de l'objet sélectionné, Mot de passeExpired, Mot de passeLastSet, Mot de passeNeverExpires | Export-csv -chemin c:\temp\user-password-expires-2015.csv

Ainsi, vous pouvez créer une table avec tous les attributs utilisateur Active Directory nécessaires.

Pour obtenir une liste de comptes d'utilisateurs AD basée sur une caractéristique spécifique, utilisez le paramètre –Filter. Comme arguments de ce paramètre, vous pouvez spécifier la valeur de certains attributs utilisateur Active Directory, ce qui entraînera l'application de la cmdlet Get-ADUser aux utilisateurs qui correspondent aux critères de filtre.

Sortie des utilisateurs AD dont le nom commence par Roman :

Get-ADUser -filter (nom -like "Roman*")

Get-ADUser -Filter (SamAccountName -like "*") | Mesure-Objet

Liste de tous les comptes actifs (non bloqués) dans AD :

Get-ADUser -Filter (Activé -eq "True") | Sélectionner l'objet SamAccountName,Name,Surname,GivenName | Format-Table

Liste des comptes avec mot de passe expiré :

Get-ADUser -filter (Enabled -eq $True) -properties passwordExpired | où($_.PasswordExpired)

Liste des comptes actifs avec adresses e-mail :

Get-ADUser -Filter ((mail -ne "null") -et (Enabled -eq "true")) -Propriétés Nom,GivenName,mail | Sélectionner le nom de l'objet, le nom, le prénom, le courrier | Format-Table

Tâche : pour une liste de comptes stockés dans un fichier texte (un compte par ligne), vous devez obtenir le numéro de téléphone de l'utilisateur dans AD et télécharger les informations dans un fichier texte csv (peut être facilement importé dans Esxel).

Importer-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Nom, numéro de téléphone | Sélectionner le nom, numéro de téléphone | Export-CSV c:\ps\export_ad_list.csv -Append -Encodage UTF8 )

L'exemple suivant vous permet de télécharger un carnet d'adresses d'entreprise sous forme de fichier CSV, qui peut ensuite être importé dans Outlook ou Mozilla Thunderbird :

Get-ADUser -Filter ((mail -ne "null") -et (Enabled -eq "true")) -Propriétés Nom,GivenName,mail | Sélectionner le nom de l'objet, le nom, le prénom, le courrier | Export-Csv -NoTypeInformation -Encodage utf8 -delimiter "," $env:temp\mail_list.csv

Utilisateurs n'ayant pas modifié leur mot de passe au cours des 90 derniers jours :

$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$user = Get-ADUser winadmin -Propriétés thumbnailPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Octet de codage

Liste des groupes auxquels appartient le compte utilisateur

Get-AdUser winadmin -Propriétés membre de | Sélectionnez le membre de -expandproperty membre de



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :