Question Lister les comptes utilisateurs inactifs

Plus d'informations
il y a 15 ans 11 mois #6504 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 ! :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 11 mois #6511 par ken
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 :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 11 mois #6514 par Arnaud Petitjean
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 :P.

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.

Plus d'informations
il y a 15 ans 11 mois #6521 par Matthieu
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 ! :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 11 mois #6524 par ken
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.

++

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 11 mois #6533 par Arnaud Petitjean
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

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
Propulsé par Kunena