Question
Problème de Filtre sur Objet
- Fournier
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 13 ans 6 mois #12618
par Fournier
Problème de Filtre sur Objet a été créé par Fournier
Bonjour,
Nouveau sur PowerShell et sur ce forum (qui m'a déjà permis d'écrire ce script !), je suis bloqué sur un \"simple\" filtre.
Mon objectif : Extraire l'ensemble des comptes de l'AD et afficher ceux pour lesquelles la date d'expiration est dépassée ou le sera dans les 48 heures.
Voici mon script :
clear
$ExpringIn = (Get-Date).AddDays(2)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=01 - Comptes du Groupe, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$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'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Date expiration'} |
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -gt $date} |
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -lt $ExpringIn} |
Sort-Object 'Date expiration' |
Out-GridView
Les plus avisés
auront compris que le résultat du script est le suivant :
Utilisateur Date de création Dernière connexion Date expiration
TOTO un 01/01/2012 00:00:00 02/01/2012 00:00:00 31/01/1601 00:00:00
TOTO Deux 01/01/2012 00:00:00 20/02/2012 00:00:00 31/01/1601 00:00:00
TOTO Quatre 01/01/2012 00:00:00 06/04/2012 00:00:00 31/12/1999 00:00:00
TITI un 01/01/2012 00:00:00 07/08/2012 00:00:00 01/01/2011 00:00:00
TITI Quatre 01/01/2012 00:00:00 08/08/2012 00:00:00 10/01/2012 00:00:00
TITI Deux 01/01/2012 00:00:00 08/08/2012 00:00:00 20/10/2012 00:00:00
Celui-ci fonctionne très bien sauf pour les filtres (qui ne servent à rien puisque j'ai toutes les dates d'expiration).
Mon pb vient de toute évidence de ces 2 méchantes lignes :
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -gt $date} |
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -lt $ExpringIn} |
Quelqu'un aurait une idée ?
Merci.
PS. : Pardon pour la mise en forme, je suis nouveau sur les forums et suis incapable d'utiliser les 'BoardCode'.
Nouveau sur PowerShell et sur ce forum (qui m'a déjà permis d'écrire ce script !), je suis bloqué sur un \"simple\" filtre.
Mon objectif : Extraire l'ensemble des comptes de l'AD et afficher ceux pour lesquelles la date d'expiration est dépassée ou le sera dans les 48 heures.
Voici mon script :
clear
$ExpringIn = (Get-Date).AddDays(2)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=01 - Comptes du Groupe, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$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'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Date expiration'} |
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -gt $date} |
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -lt $ExpringIn} |
Sort-Object 'Date expiration' |
Out-GridView
Les plus avisés
Utilisateur Date de création Dernière connexion Date expiration
TOTO un 01/01/2012 00:00:00 02/01/2012 00:00:00 31/01/1601 00:00:00
TOTO Deux 01/01/2012 00:00:00 20/02/2012 00:00:00 31/01/1601 00:00:00
TOTO Quatre 01/01/2012 00:00:00 06/04/2012 00:00:00 31/12/1999 00:00:00
TITI un 01/01/2012 00:00:00 07/08/2012 00:00:00 01/01/2011 00:00:00
TITI Quatre 01/01/2012 00:00:00 08/08/2012 00:00:00 10/01/2012 00:00:00
TITI Deux 01/01/2012 00:00:00 08/08/2012 00:00:00 20/10/2012 00:00:00
Celui-ci fonctionne très bien sauf pour les filtres (qui ne servent à rien puisque j'ai toutes les dates d'expiration).
Mon pb vient de toute évidence de ces 2 méchantes lignes :
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -gt $date} |
Where-Object {$date.AddTicks($($_.properties.pwdlastset)).AddDays(30) -lt $ExpringIn} |
Quelqu'un aurait une idée ?
Merci.
PS. : Pardon pour la mise en forme, je suis nouveau sur les forums et suis incapable d'utiliser les 'BoardCode'.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 6 mois #12624
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Problème de Filtre sur Objet
Aleator écrit:
Ces noms de balises ne contenant pas d'espace, il faut les supprimer.
Editer le message, puis insérerPS. : Pardon pour la mise en forme, je suis nouveau sur les forums et suis incapable d'utiliser les 'BoardCode'.
au début du code et[ code ]
en fin de code.[/ code ]
Ces noms de balises ne contenant pas d'espace, il faut les supprimer.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Fournier
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 13 ans 6 mois #12644
par Fournier
Réponse de Fournier sur le sujet [RESOLU]Re:Problème de Filtre sur Objet
Hello,
Voici le code finalisé (et dont je ne suis pas fier tellement il est mal écrit
) qui pourra peut-être servir à quelqu'un (au moins comme truc à ne pas faire) :
clear
$ExpringIn = (Get-Date).AddDays(31)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=01 - Comptes du Groupe 1, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Datecreation'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Derniereconnexion'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Dateexpiration'} |
Export-Csv -path \"\\groupe\expiration1.csv\" -force -NoTypeInformation -encoding unicode
clear
$ExpringIn = (Get-Date).AddDays(2)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=Groupe 2, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Datedecreation'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Derniereconnexion'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Dateexpiration'} |
Export-Csv -path \"\\groupe\expiration2.csv\" -force -NoTypeInformation -encoding unicode
clear
$ExpringIn = (Get-Date).AddDays(2)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=Groupe 3, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Datecreation'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Derniereconnexion'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Dateexpiration'} |
Export-Csv -path \"\\groupe\expiration3.csv\" -force -NoTypeInformation -encoding unicode
get-childitem \"\\groupe\*.*\" -include \"expiration?.csv\" |
Import-Csv |
sort {$_.\"dateexpiration\" -as [datetime]} |
Export-Csv -path \"\\groupe\expiration.csv\" -force -NoTypeInformation -encoding unicode
get-childitem \"\\groupe\*.*\" -include \"expiration?.csv\" | remove-item
J'obtiens 1 seul fichier avec mes expirations pour les 3 OU.
Toute critique est la bienvenue (ne frapper pas trop fort).
Voici le code finalisé (et dont je ne suis pas fier tellement il est mal écrit
clear
$ExpringIn = (Get-Date).AddDays(31)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=01 - Comptes du Groupe 1, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Datecreation'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Derniereconnexion'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Dateexpiration'} |
Export-Csv -path \"\\groupe\expiration1.csv\" -force -NoTypeInformation -encoding unicode
clear
$ExpringIn = (Get-Date).AddDays(2)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=Groupe 2, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Datedecreation'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Derniereconnexion'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Dateexpiration'} |
Export-Csv -path \"\\groupe\expiration2.csv\" -force -NoTypeInformation -encoding unicode
clear
$ExpringIn = (Get-Date).AddDays(2)
[datetime]$date = '01/01/1601'
$adsPath = 'LDAP://OU=Groupe 3, ' + ([ADSI]'').distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher ($objDomaine)
$requete = '(&(objectCategory=person) (objectClass=user))'
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n='Utilisateur'},
@{e={$_.properties.whencreated};n='Datecreation'},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n='Derniereconnexion'},
@{e={$date.AddTicks($($_.properties.pwdlastset)).AddDays(30)};n='Dateexpiration'} |
Export-Csv -path \"\\groupe\expiration3.csv\" -force -NoTypeInformation -encoding unicode
get-childitem \"\\groupe\*.*\" -include \"expiration?.csv\" |
Import-Csv |
sort {$_.\"dateexpiration\" -as [datetime]} |
Export-Csv -path \"\\groupe\expiration.csv\" -force -NoTypeInformation -encoding unicode
get-childitem \"\\groupe\*.*\" -include \"expiration?.csv\" | remove-item
J'obtiens 1 seul fichier avec mes expirations pour les 3 OU.
Toute critique est la bienvenue (ne frapper pas trop fort).
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 13 ans 6 mois #12646
par SiSMik
Réponse de SiSMik sur le sujet Re:Problème de Filtre sur Objet
Laurent Dardenne écrit:
Merci de lire les messages qu'on puisse y voir quelque chose
Aleator écrit:
Editer le message, puis insérerPS. : Pardon pour la mise en forme, je suis nouveau sur les forums et suis incapable d'utiliser les 'BoardCode'.
au début du code et[ code ]
en fin de code.[/ code ]
Ces noms de balises ne contenant pas d'espace, il faut les supprimer.
Merci de lire les messages qu'on puisse y voir quelque chose
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.049 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Problème de Filtre sur Objet