none
Script powershell AD/Dossier RRS feed

  • Question

  • Bonjour,

    J'ai des dossiers dont le nom est identique au SamAccountName des utilisateurs dans l'AD. Le problème est que lorsque un utilisateur est supprimé dans l'AD, le dossier n'est pas supprimé. J'essaie donc de créer un script qui permettrait de sortir une liste des dossiers dont l’utilisateur n'existe plus.

    Voici le début de mon code :

    import-module activedirectory

    $WrongDirectory = @() #Tableau contenant les dossiers à supprimés

    foreach ($Directory in Get-ChildItem "$Path" | Select Name) { foreach ($User in Get-ADUser -Searchbase "$OU" -Filter * -Properties SamAccountName | where {$_.SamAccountName -notlike "$Directory"} | Select SamAccountName) { $WrongDirectory =+ $Directory } } $WrongDirectory | export-csv "$CSVPath" -delimiter ";" -notypeinformation -encoding UTF8



    Cordialement, Julien OZBAY.


    jeudi 29 décembre 2016 09:43

Réponses

  • import-module activedirectory

    $CSVPath = "C:\Users\julien.ozbay\Desktop\Directory.csv" #Chemin qui contient les dossiers des utilisateurs $Path = "\\Server\Users" # Création d'un fichier avec la liste de tous les dossiers Utilisateurs Get-ChildItem -Path "$Path" | Select-Object Name | Export-Csv -Path C:\bin\dossier.csv -Encoding ascii -NoTypeInformation # Lecture du contenu du fichier $dossiers = Import-Csv -Delimiter ";" -Path "C:\bin\dossier.csv" # Traitement de chaque ligne du fichier foreach ($dossier in $dossiers) { # Initialisation de la variable $account pour chaque ligne $account = $null # Récupération du nom du dossier dans la ligne traitée $sam = $dossier.Name # Vérification de l'existence ou non du compte try { $account = Get-ADUser $sam } catch {} # Teste si le compte existe et qu'il est égal au nom du dossier if ($account."SamAccountName" -eq $sam) { # Le compte existe dans l'AD write-host "Compte présent $Path\$sam" } else { # Le compte n'existe pas dans l'AD write-host "Compte absent $Path\$sam" Add-Content -Path "$CSVPath" -Value $sam #remove-item "$Path\$sam" -force } }



    Cordialement, Julien OZBAY.



    lundi 2 janvier 2017 11:26

Toutes les réponses

  • Bonjour,

    j'ai un script qui permet de rechercher (et supprimer si nécessaire) les références de comptes qui ont été supprimés:

    https://gallery.technet.microsoft.com/Suppression-des-SID-des-32c47762?redir=0

    Tu peux l'utiliser tel quel ou t'en inspirer pour ajouter des actions, telle que la suppression des dossiers correspondants.

    A bientôt,


    Thierry DEMAN. Exchange MVP. MCSE:Messaging 2013,MCSE:Server Infrastructure 2012(83 MCPs). MCSA Office 365 https://mvp.microsoft.com/en-us/mvp/Thierry%20Deman-7660 http://base.faqexchange.info

    jeudi 29 décembre 2016 17:09
  • Bonjour,

    Ma proposition :

    #Chemin qui contient les dossiers des utilisateurs
    $Path ="C:\Corporate"
    
    # Création d'un fichier avec la liste de tous les dossiers Utilisateurs
    Get-ChildItem -Path "$Path" | Select-Object Name | Export-Csv -Path C:\bin\dossiers.csv -Encoding ascii -NoTypeInformation
    
    # Lecture du contenu du fichier
    $dossiers = Import-Csv -Delimiter ";" -Path "C:\bin\dossiers.csv"
    
    # Traitement de chaque ligne du fichier
    foreach ($dossier in $dossiers)
    {
    	# Initialisation de la variable $account pour chaque ligne
    	$account = $null
    
    	# Récupération du nom du dossier dans la ligne traitée
    	$sam = $dossier.Name
    
    	# Vérification de l'existence ou non du compte
    	try { $account = Get-ADUser $sam }
    	catch {}
    
    	# Teste si le compte existe et qu'il est égal au nom du dossier
    	if ($account."SamAccountName" -eq $sam)
    	{
    		# Le compte existe dans l'AD
    		write-host "Compte présent $Path\$sam"
    	}
    	else
    	{
    		# Le compte n'existe pas dans l'AD
    		write-host "Compte absent $Path\$sam"
    		#remove-item "$Path\$sam" -force
    	}
    }


    Les conseils, informations ou suggestions sont fournis sans aucune garantie.

    jeudi 29 décembre 2016 18:19
  • Bonjour,

    @Thierry DEMAN-BARCELÒ : Merci pour ton lien il me sera très utile :)

    @Claude Couderc : Je viens de tester le script, et il m'indique que tous les dossiers sont absents :D J'ai mis en commentaire la commande "Remove".

    J'ai quelques questions :

    - A quoi sert la temporisation avec "sleep" ?

    - Je ne comprends pas bien la ligne "$account = $null"

    Merci pour votre aide.


    Cordialement, Julien OZBAY.

    vendredi 30 décembre 2016 15:28
  • Bonjour,

    Le script a été modifié : $account."SamAccountName" (au lieu de $account.SamAccountName).

    J'ai aussi rajouté des commentaires dans le code et enlevé ce qui était superfétatoire.

    Dans mon environnement avec mes valeurs, il est ok.


    LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.

    dimanche 1 janvier 2017 16:21
  • Bonjour,

    Merci pour les modifications et les commentaires sur votre script.

    Malheureusement, j'ai toujours le même problème. J'ai bien vérifié le chemin du $Path et si le sAMAccountName est bien égal au nom du dossier et c'est le cas.

    Je voudrais également faire un export dans un fichier CSV. Pour cela j'ai rajouté 2 lignes :

    else
    	{
    		# Le compte n'existe pas dans l'AD
    		write-host "Compte absent $Path\$sam"
    		$WrongDirectory =+ $account."SamAccountName"
    		#remove-item "$Path\$sam" -force
    	}
    }
    
    $WrongDirectory | export-csv "$CSVPath" -delimiter ";" -notypeinformation -encoding UTF8

    J'ai bien déclarer $WrongDirectory comme étant un tableau au début du script, pourtant le fichier CSV est toujours vide.


    Cordialement, Julien OZBAY.


    lundi 2 janvier 2017 09:57
  • Bonjour,

    Essayez plutôt :

    $WrongDirectory =+ $sam (à la place de $WrongDirectory =+ $account."SamAccountName")
    car $account."SamAccountName" est vide dans ce cas.


    LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.


    lundi 2 janvier 2017 10:20
  • J'ai ce message d'erreur :


    Cordialement, Julien OZBAY.

    lundi 2 janvier 2017 10:38
  • Ouups ! Je propose de simplifier et de corriger l'instruction ...

    Remplacez $WrongDirectory =+ $sam par

    Add-Content -Path "c:\exemple.csv" -Value $sam


    LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.


    lundi 2 janvier 2017 10:59
  • Effectivement ça passe mieux :)

    Je cherche toujours pourquoi le scripit me renvoie que des comptes absents.


    Cordialement, Julien OZBAY.

    lundi 2 janvier 2017 11:13
  • Pouvez-vous republier votre script en entier et me dire si les valeurs de C:\bin\dossiers.csv ?

    LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.

    lundi 2 janvier 2017 11:17
  • import-module activedirectory

    $CSVPath = "C:\Users\julien.ozbay\Desktop\Directory.csv" #Chemin qui contient les dossiers des utilisateurs $Path = "\\Server\Users" # Création d'un fichier avec la liste de tous les dossiers Utilisateurs Get-ChildItem -Path "$Path" | Select-Object Name | Export-Csv -Path C:\bin\dossier.csv -Encoding ascii -NoTypeInformation # Lecture du contenu du fichier $dossiers = Import-Csv -Delimiter ";" -Path "C:\bin\dossier.csv" # Traitement de chaque ligne du fichier foreach ($dossier in $dossiers) { # Initialisation de la variable $account pour chaque ligne $account = $null # Récupération du nom du dossier dans la ligne traitée $sam = $dossier.Name # Vérification de l'existence ou non du compte try { $account = Get-ADUser $sam } catch {} # Teste si le compte existe et qu'il est égal au nom du dossier if ($account."SamAccountName" -eq $sam) { # Le compte existe dans l'AD write-host "Compte présent $Path\$sam" } else { # Le compte n'existe pas dans l'AD write-host "Compte absent $Path\$sam" Add-Content -Path "$CSVPath" -Value $sam #remove-item "$Path\$sam" -force } }



    Cordialement, Julien OZBAY.



    lundi 2 janvier 2017 11:26
  • et C:\bin\dossier.csv contient quoi ?

    LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.

    lundi 2 janvier 2017 11:30
  • Le nom des dossiers dans \\Server\Users

    Cordialement, Julien OZBAY.

    lundi 2 janvier 2017 12:42
  • Bonjour,

    Problème résolu !

    Au tout début du script, il me manquait "import-module activedirectory"...

    Je le rajoute dans le code, le sujet peut être clos.

    @Claude Couderc : Merci pour votre aide précieuse ! :)


    Cordialement, Julien OZBAY.

    lundi 30 janvier 2017 17:26
  • Bonjour,

    Ce script marche parfaitement, merci pour le partage.

    J'ai bien la liste des "dossiers personnels" qui ne correspondant pas à des utilisateurs de l'AD.
    Par contre avant de supprimer les "dossiers personnels", j'aurais voulu connaitre l'espace disque sauvé avec cette opération.

    J'ai tenté:

    $size = $dossier.Length et $size = $dossier.Size

     et de ressortir la valeur à la fin avec

    Add-Content -Path "$CSVPath" -Value "$sam, $size"

    Mais çà ne marche pas.

    Si vous aviez une idée ...

    dimanche 21 novembre 2021 18:13