Question
Lister les comptes utilisateurs inactifs
- Matthieu
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 15 ans 11 mois #6504
par Matthieu
Lister les comptes utilisateurs inactifs a été créé par Matthieu
Hello !
Après avoir lu les pages 459 à 461 du livre d'Arnaud et Robin, j'ai écris le script cité en exemple.
Malheureusement il ne me retourne aucun résultat et également une erreur.
Voici le scipt en question :
[code:1]param ($NonConnectesDepuisNbJours)
[datetime]$date = '01/01/2008'
$adsPath = 'LDAP://OU=Users' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
if ($NonConnectesDepuisNbJours -eq $Null) {
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Date de création'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Dernière connexion'}
}
else {
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Date de création'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Dernière connexion'} |
Where-object {
(new-timespan $_.'Dernière Connexion')
$(get-date).days -ge $NonConnectesDepuisNbJours
}
}[/code:1]
Et voici le résultat obtenu :
[code:1]Exception lors de l'appel de « FindAll » avec « 0 » argument(s) : « Erreur inconnue (0x80005000) »
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 11 Caractère : 33
+ $comptes = $objRecherche.FindAll <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Utilisateur Date de création Dernière connexion
01/01/2008 00:00:00 [/code:1]
Avez-vous une idée sur la nature de cette erreur et comment y remédier svp ?
Merci !
Après avoir lu les pages 459 à 461 du livre d'Arnaud et Robin, j'ai écris le script cité en exemple.
Malheureusement il ne me retourne aucun résultat et également une erreur.
Voici le scipt en question :
[code:1]param ($NonConnectesDepuisNbJours)
[datetime]$date = '01/01/2008'
$adsPath = 'LDAP://OU=Users' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
if ($NonConnectesDepuisNbJours -eq $Null) {
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Date de création'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Dernière connexion'}
}
else {
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Date de création'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Dernière connexion'} |
Where-object {
(new-timespan $_.'Dernière Connexion')
$(get-date).days -ge $NonConnectesDepuisNbJours
}
}[/code:1]
Et voici le résultat obtenu :
[code:1]Exception lors de l'appel de « FindAll » avec « 0 » argument(s) : « Erreur inconnue (0x80005000) »
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 11 Caractère : 33
+ $comptes = $objRecherche.FindAll <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Utilisateur Date de création Dernière connexion
01/01/2008 00:00:00 [/code:1]
Avez-vous une idée sur la nature de cette erreur et comment y remédier svp ?
Merci !
Connexion ou Créer un compte pour participer à la conversation.
- ken
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 15 ans 11 mois #6511
par ken
Réponse de ken sur le sujet Re:Lister les comptes utilisateurs inactifs
Bonjour,
Dans ce code, je pense que le directorySearcher n'est pas bien construit, car tu utilises un String....
Par conséquent, la proprité \"Filter\" n'est pas disponible.
J'ai pas testé mais je pense que le plus simple, serait d'utiliser un constructeur de ce type :
System.DirectoryServices.DirectorySearcher(DirectoryEntry)
Par conséquent, le code se traduirait comme ceci :
[code:1]
$adsPath = 'LDAP://OU=Users' + ([ADSI]'').distinguishedName
$objDomaine = New-Object System.DirectoryServices.DirectoryEntry($adsPath)
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)[/code:1]
Reste à tester maintenant
Dans ce code, je pense que le directorySearcher n'est pas bien construit, car tu utilises un String....
Par conséquent, la proprité \"Filter\" n'est pas disponible.
J'ai pas testé mais je pense que le plus simple, serait d'utiliser un constructeur de ce type :
System.DirectoryServices.DirectorySearcher(DirectoryEntry)
Par conséquent, le code se traduirait comme ceci :
[code:1]
$adsPath = 'LDAP://OU=Users' + ([ADSI]'').distinguishedName
$objDomaine = New-Object System.DirectoryServices.DirectoryEntry($adsPath)
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)[/code:1]
Reste à tester maintenant
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 15 ans 11 mois #6514
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Lister les comptes utilisateurs inactifs
Bonjour,
Pour la nouvelle édition de notre livre, nous avons mis en téléchargement tous les exemples sur le site de l'éditeur. Il sont accessibles (je crois) à tout le monde, il suffit juste de donner son email (même un bidon, ça marche aussi
).
-> Acceder au téléchargement <-
Ainsi plus de problème de frappe lors de la recopie des exemples
.
Arnaud
Pour la nouvelle édition de notre livre, nous avons mis en téléchargement tous les exemples sur le site de l'éditeur. Il sont accessibles (je crois) à tout le monde, il suffit juste de donner son email (même un bidon, ça marche aussi
-> Acceder au téléchargement <-
Ainsi plus de problème de frappe lors de la recopie des exemples
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Matthieu
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 15 ans 11 mois #6521
par Matthieu
Réponse de Matthieu sur le sujet Re:Lister les comptes utilisateurs inactifs
Merci
J'avais aussi oublié que j'avais accès au livre numérique, je peux donc faire des copier/coller !
J'ai téléchargé les scripts, mais j'ai toujours des erreurs en les exécutant !
Le premier Get-UserAccounts-v1.0.ps1 :
[code:1]
Exception lors de l'appel de « FindAll » avec « 0 » argument(s) : « Cet objet ne se trouve pas sur le serveur.
»
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 10 Caractère : 33
+ $comptes = $objRecherche.FindAll <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
[/code:1]
Le 2ème Get-UserAccounts-v1.1.ps1 :
[code:1]
Exception lors de l'appel de « FindAll » avec « 0 » argument(s) : « Cet objet ne se trouve pas sur le serveur.
»
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 12 Caractère : 33
+ $comptes = $objRecherche.FindAll <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
[/code:1]
Le 3ème Get-UserAccounts-v2.1.ps1 :
[code:1]
Le terme « Get-ADUser » n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès est c
orrect et réessayez.
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 6 Caractère : 22
+ $comptes = Get-ADUser <<<< -Filter * `
+ CategoryInfo : ObjectNotFound: (Get-ADUser:«»String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
[/code:1]
Merci pour votre aide !
J'avais aussi oublié que j'avais accès au livre numérique, je peux donc faire des copier/coller !
J'ai téléchargé les scripts, mais j'ai toujours des erreurs en les exécutant !
Le premier Get-UserAccounts-v1.0.ps1 :
[code:1]
Exception lors de l'appel de « FindAll » avec « 0 » argument(s) : « Cet objet ne se trouve pas sur le serveur.
»
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 10 Caractère : 33
+ $comptes = $objRecherche.FindAll <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
[/code:1]
Le 2ème Get-UserAccounts-v1.1.ps1 :
[code:1]
Exception lors de l'appel de « FindAll » avec « 0 » argument(s) : « Cet objet ne se trouve pas sur le serveur.
»
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 12 Caractère : 33
+ $comptes = $objRecherche.FindAll <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
[/code:1]
Le 3ème Get-UserAccounts-v2.1.ps1 :
[code:1]
Le terme « Get-ADUser » n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès est c
orrect et réessayez.
Au niveau de D:\Travail\Powershell\AD\AD_Comptes_Inactifs_90j.ps1 : 6 Caractère : 22
+ $comptes = Get-ADUser <<<< -Filter * `
+ CategoryInfo : ObjectNotFound: (Get-ADUser:«»String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
[/code:1]
Merci pour votre aide !
Connexion ou Créer un compte pour participer à la conversation.
- ken
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 15 ans 11 mois #6524
par ken
Réponse de ken sur le sujet Re:Lister les comptes utilisateurs inactifs
Re,
Je pense qu'il faut aussi remettre le contexte car dans les exemples ci-dessous, il semble que ce code doit être utiliser dans des fonctions....
Voilà comment je fais quand je veux chercher ce type d'information :
[code:1]
$DomainPath = \"LDAP://MonServeur/OU=_Users\"
$rootDomain = New-Object System.DirectoryServices.DirectoryEntry($DomainPath)
$MySearcher = New-Object System.DirectoryServices.DirectorySearcher($rootDomain)
$MySearcher.Filter = '(&(objectCategory=person)(userAccountControl=514))'
$users = $MySearcher.FindAll()
ForEach ($user in $users)
{
$CurrentUser = $User.GetDirectoryEntry()
write-host $CurrentUser.whencreated
write-host $CurrentUser.Mail
}[/code:1]
Après, c'est à toi de savoir ce que tu veux récupérer et comment le traiter.
Le reflexe à toujours avoir est d'utiliser MSDN.microsoft.com.
Sur ce site, tu trouveras toutes les informations sur une classe (Constructeur (new), Méthodes, propriétés, etc...)
Par exemple, $users me renvoie une collection de getDirectoryEntry. Après tu dois savoir ce que tu souhaites récupérer.....
Bon courage et n'hésite pas si tu as des questions.
++
Je pense qu'il faut aussi remettre le contexte car dans les exemples ci-dessous, il semble que ce code doit être utiliser dans des fonctions....
Voilà comment je fais quand je veux chercher ce type d'information :
[code:1]
$DomainPath = \"LDAP://MonServeur/OU=_Users\"
$rootDomain = New-Object System.DirectoryServices.DirectoryEntry($DomainPath)
$MySearcher = New-Object System.DirectoryServices.DirectorySearcher($rootDomain)
$MySearcher.Filter = '(&(objectCategory=person)(userAccountControl=514))'
$users = $MySearcher.FindAll()
ForEach ($user in $users)
{
$CurrentUser = $User.GetDirectoryEntry()
write-host $CurrentUser.whencreated
write-host $CurrentUser.Mail
}[/code:1]
Après, c'est à toi de savoir ce que tu veux récupérer et comment le traiter.
Le reflexe à toujours avoir est d'utiliser MSDN.microsoft.com.
Sur ce site, tu trouveras toutes les informations sur une classe (Constructeur (new), Méthodes, propriétés, etc...)
Par exemple, $users me renvoie une collection de getDirectoryEntry. Après tu dois savoir ce que tu souhaites récupérer.....
Bon courage et n'hésite pas si tu as des questions.
++
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 15 ans 11 mois #6533
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Lister les comptes utilisateurs inactifs
Je pense avoir compris ton erreur : OU=Users !!!!
Erreur classique car Users est une OU builtin (intégrée) donc ce n'est pas OU=Users mais CN=Users
Arnaud
Erreur classique car Users est une OU builtin (intégrée) donc ce n'est pas OU=Users mais CN=Users
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.106 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Lister les comptes utilisateurs inactifs