Question
Suppression des sessions windows inutilisés
- Louis
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Je dois faire un script permettant la suppression des sessions utilisateur inutilisé depuis 1 an sur l'ensemble de nos serveurs windows.
Sans passer forcément par l'AD et les GPO sauf pour récuperer la liste des serveurs.
Sauf que je ne trouve pas grand chose à ce sujet sur le net, à part une commande pour récupérer les sessions avec le get wmi mais il ne récupère pas de LastlogonDate...
Le Get -ADuser me sort pas mal d'utilisateur mais sur certains il n'y a aucun LastLogonDate (je crois que c'est parce que ils ne se sont jamais connecté sur le serveur de l'AD).
Et cette commande ne fonctionne pas sur les serveurs lambda, juste sur l'AD.
Quelqu'un aurait des pistes ?
Merci d'avance
Connexion ou Créer un compte pour participer à la conversation.
- Quentin
- Hors Ligne
- Membre senior
-
- Messages : 47
- Remerciements reçus 0
[code:1]
$adsi = [ADSI]\"WinNT://$env:COMPUTERNAME\"
$adsi.Children | where {$_.SchemaClassName -eq 'user'} | ft name,lastlogin
#ça te renvoi :
PS C:\Users\Administrateur> $adsi.Children | where {$_.SchemaClassName -eq 'user'} | ft name,lastlogin
name lastlogin
----
{Administrateur} {31/05/2018 13:03:47}
{Invité}
[/code:1]
Par contre je ne saurais pas t'expliquer, je ne comprends pas moi même, je vais chercher et donner plus d'informations par la suite
Cordialement,
Whitatrax
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
je pense que tu voulais dire des comptes inutilisé !la suppression des sessions utilisateur inutilisé depuis 1 an
Whitatrax ta trouvé une solution qui fonctionne via l'ADSI.
ça te donne la liste des comptes utilisateurs locaux d'un ordinateur ainsi que le lastlogin qui est identique au LastLogonDate de l'AD
exact et idem en ADSILe Get -ADuser me sort pas mal d'utilisateur mais sur certains il n'y a aucun LastLogonDate (je crois que c'est parce que ils ne se sont jamais connecté sur le serveur de l'AD).
sauf si tu a plusieurs serveurs AD, il se peut pour le premier mois d'un compte que le LastLogonDate soit sur un seul serveur AD
si tu a besoin de plus d'info n'hésite pas
Connexion ou Créer un compte pour participer à la conversation.
- Louis
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Et merci a toi 6ratgus de m'avoir un peu plus éclairer
Du coup je viens d'éxécuter le script sur l'AD, la liste que je vois est celle des utilisateurs qui se sont connecté à ce serveur(ça me parait beaucoup) ou à n'importe quel serveurs de l'AD (ça me parait peu) ?
Et pour te répondre 6ratgus, je veux supprimer les sessions windows des personnes qui ne sont plus dans l'entreprise. Car ça prend de la place sur le disque pour rien.
Donc en gros j'aimerai supprimer les user de l'AD (mais j'ose pas trop y touché car je suis junior) et par la même occasion effacé toutes leurs session sur les serveurs windows pour libéré de l'espace disque
Au passage, si je fais un | remove, il se passe quoi ?
Connexion ou Créer un compte pour participer à la conversation.
- Quentin
- Hors Ligne
- Membre senior
-
- Messages : 47
- Remerciements reçus 0
Je me permets une parenthèse (tu liras si tu as envi, c'est des best-pratices, ça peut servir, sinon passe au point 2)
1)
Je ne sais pas quelle taille a ton entreprise, mais je pense qu'il faut mettre en place des processus de gestion du personnel dans l'AD :
l'idée c'est que quand une personne quitte l'entreprise il faut au moins désactiver son compte et le déplacer dans une OU que tu peux appeler par exemple To_Remove.
Tu te demandes certainement pourquoi je dis ça?
=> Le fait est que certains comptes de l'AD ne sont pas forcément utilisés pour se connecter (compte de service etc...) Donc ces comptes, s'ils n'ont jamais servi pour se connecter, tu vas les détecter comme inutiles et tu vas les supprimer. Et c'est là que les embrouilles commencent ! Il suffit qu'une application de ton entreprise nécessitant ce compte, détecte que le compte n'existe plus pour qu'elle s'arrête de fonctionner.
(exemple : un compte de service utilisé uniquement dans le cadres des tâches planifiées)
2)
Le script que je t'ai transmis utilise la variable d'environnement \"WinNT://$env:COMPUTERNAME\". C'est l'environnement propre à la machine. Les résultats que tu vois sont ceux de la machine sur laquelle tu as exécuter le script. Il faut donc le passer sur tous les serveurs
3)
Je ne te conseille pas de procéder ainsi (de toute manière je pense que powershell te dira non).Au passage, si je fais un | remove, il se passe quoi ?
Le mieux (d'après moi), c'est de faire un listing complet de tous les comptes réellement inutiles (voir §1 pour les détails). A partir de ce listing, tu créé un petit script de suppression visant à vider une OU par exemple.
Quand on touche à l'AD, c'est ceinture bretelle =)
Pense à faire des sauvegardes de ton AD on ne sait jamais.
Si ce n'est pas assez clair n'hésite pas à poser tes questions. Les avis ici ne m'impliquent que moi, c'est des choses que je mets en place et qui m'évitent des problèmes
Cordialement,
Whitatrax
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
voici le detail des étapes :
tu commencer par lister les utilisateurs inactif de 3 ou 6 mois dans l'AD comme ça :
[code:1]$listeinactif = get-aduser -filter * -Properties LastLogonDate | where {$_.LastLogonDate -ne $null -and ( (Get-Date) - $_.LastLogonDate).totaldays -gt 90} # 90 jours pour trois mois
$listeinactif | Export-Csv \"c:\temp\listeinactif.csv\" -Delimiter \";\"
[/code:1]$_.LastLogonDate -ne $null filtre les utilisateurs qui n'ont pas de date
la liste ce trouve dans le fichier \"c:\temp\listeinactif.csv\" que tu peut ouvrir dans excel
si la liste te semble bonne tu les désactives :
[code:1]$listeinactif = get-aduser -filter * -Properties LastLogonDate | where {$_.LastLogonDate -ne $null -and ( (Get-Date) - $_.LastLogonDate).totaldays -gt 90}
$listeinactif | Disable-ADAccount[/code:1]
après cette désactivation dans l'AD, tu passe au travail en local sur les serveurs ou/et poste de travail
un compte AD ne crée pas de compte local mais que le \"profil\" (le dossier dans c:\users et dans la base de registre)
là tu utilise la script de Whitatrax
plus la suppression du dossier dans c:\users
[code:1]$listeinactif = import-csv \"c:\temp\listeinactif.csv\" -Delimiter \";\"
$listeinactif | remove-item \"c:\users\$($_.SamAccountName)\"[/code:1]
a exécuter sur chaque serveur, il faut évidement copier le fichier \"c:\temp\listeinactif.csv\" localement ou le mettre dans un partage
sur un serveur AD il n'y a pas d'utilisateurs locauxje viens d'éxécuter le script sur l'AD, la liste que je vois est celle des utilisateurs qui se sont connecté à ce serveur
du coup tu a la liste de tous les utilisateurs du domaine même si y il ne ce sont jamais connecter !
rien ! remove seul n'existe pas et provoque donc une erreurAu passage, si je fais un | remove, il se passe quoi ?
il faut faire un delete :
[code:1]$adsi.Children | where {$_.SchemaClassName -eq 'user'} | foreach {$adsi.delete('user', \"$(_.name)\"«»)}[/code:1]
mais ça ne supprime que le compte, pas les fichiers
il faut aussi soit effacer le dossier de l'utilisateur sur le disque soit utilisé un utilitaire pour effacer le profil utilisateur
il existe un utilitaire chez Microsoft pour effacer les vieux compte/profil d'un serveur c'est defprof voici la doc
ATTENTION lis attentivement la doc car il peut effacer TOUS les comptes sauf les comptes systems si tu ne precise pas le paramètre /D pour le délais d'inactivité
peut utiliser la paramètre /P pour qu'il te demande effacement avant pour chaque compte
Si ce n'est pas assez clair n'hésite pas à poser tes questions<br><br>Message édité par: 6ratgus, à: 1/06/18 15:05
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Suppression des sessions windows inutilisés