Question
Script listant les utilisateurs inactifs d'un DC
- theduc
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 11 ans 8 mois #17745
par theduc
Script listant les utilisateurs inactifs d'un DC a été créé par theduc
Bonjour,
je cherche a faire un script qui permettrait de lister les utilisateurs inactifs de mon domain controller et qui me permettrait, en me basant sur le nom du compte, d'effectuer une recherche dans une grosse arborescence et qu'il me ressorte les folders correspondant au nom de comptes.
Voila ce que j'ai déja fait.
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
$NomUtilisateur = Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | FT SamAccountName
$NomUtilisateur | Out-File c:temp.csv
Get-Content c:temp.csv | Where { $_.Replace(\",\",\"\") -ne \"\" } | Out-File c:User.csv
Remove-Item C:temp.csv -force
$lines = import-csv C:User.csv
foreach ($test in $lines){
get-childitem -recurse ****Users | where {$_.Attributes -eq 'Directory'} | where { $_.Name -like \"$test.SamAccountName\"} | foreach {$_.Get_FullName()}
}
Ce qui est bizarre est que lorsque je tape la commande get-childitem -recurse ****Users | where {$_.Attributes -eq 'Directory'} | where { $_.Name -like \"nom d'un dossier en direct\"} | foreach {$_.Get_FullName()}, la commande s’exécute normalement mais lorsque la commande tape sur le csv, cela ne fonctionne pas.
Merci d'avance pour votre aide
Yoann
je cherche a faire un script qui permettrait de lister les utilisateurs inactifs de mon domain controller et qui me permettrait, en me basant sur le nom du compte, d'effectuer une recherche dans une grosse arborescence et qu'il me ressorte les folders correspondant au nom de comptes.
Voila ce que j'ai déja fait.
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
$NomUtilisateur = Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | FT SamAccountName
$NomUtilisateur | Out-File c:temp.csv
Get-Content c:temp.csv | Where { $_.Replace(\",\",\"\") -ne \"\" } | Out-File c:User.csv
Remove-Item C:temp.csv -force
$lines = import-csv C:User.csv
foreach ($test in $lines){
get-childitem -recurse ****Users | where {$_.Attributes -eq 'Directory'} | where { $_.Name -like \"$test.SamAccountName\"} | foreach {$_.Get_FullName()}
}
Ce qui est bizarre est que lorsque je tape la commande get-childitem -recurse ****Users | where {$_.Attributes -eq 'Directory'} | where { $_.Name -like \"nom d'un dossier en direct\"} | foreach {$_.Get_FullName()}, la commande s’exécute normalement mais lorsque la commande tape sur le csv, cela ne fonctionne pas.
Merci d'avance pour votre aide
Yoann
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 11 ans 8 mois #17746
par Gabriel
Réponse de Gabriel sur le sujet Re:Script listant les utilisateurs inactifs d'un DC
Salut
plusieurs choses notamment sur la partie CSV
[code:1]
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | export-csv c:\temp\exportUtilisateursInactifs.csv -notypeinformation
[/code:1]
Ensuite la 2eme partie peut etre ameliorer tu fais un Get-childitem alors que tu pourrais faire un test-path (en inversant le processus grosso modo):
[code:1]
$utilisateursInactifs = import-csv c:\temp\exportUtilisateursInactifs.csv
$cheminSource = \\serveur01\home # racine du repertoire ou se trouve tous les homedrive a tester
$utilisateursInactifs | foreach {
$cheminATester = join-path $cheminSource $_.samaccountname
if (test-path -literalpath $cheminATester){ write-host $cheminATester -foregroundcolor GREEN
} else { write-host $cheminATester -foregroundcolor RED}
[/code:1]
tu peux te passer du csv d'ailleurs
[code:1]
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
$cheminSource = \\serveur01\home # racine du repertoire ou se trouve tous les homedrive a tester
Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | foreach {
$cheminATester = join-path $cheminSource $$_.samaccountname
if (test-path -literalpath $cheminATester){ write-host $cheminATester -foregroundcolor GREEN
} else { write-host $cheminATester -foregroundcolor RED}
[/code:1]
plusieurs choses notamment sur la partie CSV
[code:1]
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | export-csv c:\temp\exportUtilisateursInactifs.csv -notypeinformation
[/code:1]
Ensuite la 2eme partie peut etre ameliorer tu fais un Get-childitem alors que tu pourrais faire un test-path (en inversant le processus grosso modo):
[code:1]
$utilisateursInactifs = import-csv c:\temp\exportUtilisateursInactifs.csv
$cheminSource = \\serveur01\home # racine du repertoire ou se trouve tous les homedrive a tester
$utilisateursInactifs | foreach {
$cheminATester = join-path $cheminSource $_.samaccountname
if (test-path -literalpath $cheminATester){ write-host $cheminATester -foregroundcolor GREEN
} else { write-host $cheminATester -foregroundcolor RED}
[/code:1]
tu peux te passer du csv d'ailleurs
[code:1]
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
$cheminSource = \\serveur01\home # racine du repertoire ou se trouve tous les homedrive a tester
Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | foreach {
$cheminATester = join-path $cheminSource $$_.samaccountname
if (test-path -literalpath $cheminATester){ write-host $cheminATester -foregroundcolor GREEN
} else { write-host $cheminATester -foregroundcolor RED}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 11 ans 8 mois #17747
par Gabriel
Réponse de Gabriel sur le sujet Re:Script listant les utilisateurs inactifs d'un DC
un dernier point
ne JAMAIS JAMAIS ecrire à la racine de ton disque systeme, il vaut mieux que tu le fasse dans un sous-repertoire,
d'abord parceque comme ça tu n'a pas a nettoyer, et donc supprimer par erruer des fichiers que tu n'aurais pas du supprimer
ensuite si ton code fonctionne avec toi qui est admin, il peut ne pas fonctionner avec d'autres personnes qui ne seront pas admin, et tu devras debuggé inutilement
ne JAMAIS JAMAIS ecrire à la racine de ton disque systeme, il vaut mieux que tu le fasse dans un sous-repertoire,
Connexion ou Créer un compte pour participer à la conversation.
- theduc
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 11 ans 8 mois #17748
par theduc
Réponse de theduc sur le sujet Re:Script listant les utilisateurs inactifs d'un DC
Merci pour ta reponse.
ça m'aide beaucoup !!!
Par contre, mon souci c'est qu'il y a des sous dossiers dans lesquels il doit tester aussi.
admettons que j'ai un utilisateur qui s'appelle bertrand et qui a un répertoire personnel dans l'arborescence \\serveur01\home.
cela fonctionnerait si le repertoire du rep perso de bertrand est \\serveur01\home\bertrand mais dans mon cas, bertrand est stocké au niveau de \\serveur01\home\informatique\bertrand.
comment puis je faire dans ce cas ?
ça m'aide beaucoup !!!
Par contre, mon souci c'est qu'il y a des sous dossiers dans lesquels il doit tester aussi.
admettons que j'ai un utilisateur qui s'appelle bertrand et qui a un répertoire personnel dans l'arborescence \\serveur01\home.
cela fonctionnerait si le repertoire du rep perso de bertrand est \\serveur01\home\bertrand mais dans mon cas, bertrand est stocké au niveau de \\serveur01\home\informatique\bertrand.
comment puis je faire dans ce cas ?
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 11 ans 8 mois #17749
par Gabriel
Réponse de Gabriel sur le sujet Re:Script listant les utilisateurs inactifs d'un DC
lister l'ensemble des repertoires contenant les dossiers homes et bouclé dessus, si je reprend ton exemple et supposons qu'il y est plusieurs repertoire (ca marche aussi avec les serveurs)
[code:1]
\\serveur01\home
\\serveur01\home\informatique
\\serveur01\home\compta
\\serveur99\home\compta
\\serveur99\home\stagiaires
[/code:1]
alors tu fais ceci
[code:1]Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
# racine du repertoire ou se trouve tous les homedrive a tester
[string[]]$cheminSources = \"\\serveur01\home\",\"\\serveur01\home\informatique\",\"\\serveur01\home\compta\",\"\\serveur99\home\compta\",\"\\serveur99\home\stagiaires\"
Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | foreach {
foreach ($cheminSourceATester in $cheminSources){
$cheminATester = join-path $cheminSourceATester $$_.samaccountname
if (test-path -literalpath $cheminATester){ write-host $cheminATester}
}
}[/code:1]
[string[]]$cheminSourceste permet de creer une liste de string, tu peux donc faire une boucle pour chaque string
[code:1]
\\serveur01\home
\\serveur01\home\informatique
\\serveur01\home\compta
\\serveur99\home\compta
\\serveur99\home\stagiaires
[/code:1]
alors tu fais ceci
[code:1]Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
# racine du repertoire ou se trouve tous les homedrive a tester
[string[]]$cheminSources = \"\\serveur01\home\",\"\\serveur01\home\informatique\",\"\\serveur01\home\compta\",\"\\serveur99\home\compta\",\"\\serveur99\home\stagiaires\"
Get-ADUser -Property SamAccountName -Filter {lastLogonDate -lt $then} | foreach {
foreach ($cheminSourceATester in $cheminSources){
$cheminATester = join-path $cheminSourceATester $$_.samaccountname
if (test-path -literalpath $cheminATester){ write-host $cheminATester}
}
}[/code:1]
[string[]]$cheminSourceste permet de creer une liste de string, tu peux donc faire une boucle pour chaque string
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 11 ans 8 mois #17750
par Gabriel
Réponse de Gabriel sur le sujet Re:Script listant les utilisateurs inactifs d'un DC
un point, les homdrive sont normalement stocké dans le compte Ad de l'utilisateur
[code:1]
get-aduser Guillaume -Properties homeDirectory
[/code:1]
donc tu n'a normalement pas a aller chercher a l'aveugle...
[code:1]
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
Get-ADUser -Property homeDirectory -Filter {lastLogonDate -lt $then} |
select SamAccountName,homeDirectory |
export-csv .\listeHomderiveUtilisateursInactifs.csv -notypeinformation
[/code:1]
[code:1]
get-aduser Guillaume -Properties homeDirectory
[/code:1]
donc tu n'a normalement pas a aller chercher a l'aveugle...
[code:1]
Import-Module ActiveDirectory
$then = (Get-Date).AddDays(-180) # The 180 is the number of days from today since the last logon.
Get-ADUser -Property homeDirectory -Filter {lastLogonDate -lt $then} |
select SamAccountName,homeDirectory |
export-csv .\listeHomderiveUtilisateursInactifs.csv -notypeinformation
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.097 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Script listant les utilisateurs inactifs d'un DC