Question Script pour lister les droits NTFS + Utilisateurs d'un dossier partagé

Plus d'informations
il y a 1 an 7 mois #32646 par Laurent Dardenne
>>as-tu un contact pour échanger en direct ?
Non.

>>rien ne s'affiche que dois je faire
Déjà analyser les ACL du srv qui pose pb, tes specs sont peut être à revoir.
Là ce n'est pas vraiment un pb de code mais d'infra à mon avis.

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 6 mois #32657 par Christophe MELIN
Bonsoir,

Pas sûr que le problème vienne de $dispkayed_membres_groups_list.
Je crois que cela vient plutôt de la variable $acl_unit_IdentityReference_Without_DOMAIN pour laquelle je ne vois aucune initialisation donc $null par défaut, ce qui expliquerait l'erreur "argument null ou vide".

Petit conseil :
Ajouter au début du script la ligne
set-PSdebug -strict
Il y a une erreur si on essaie d'utiliser une variable pas encore initialisée. Cela permet de cibler plus rapidement des erreurs dues par exemple à une faute d'orthographe dans un nom de variables. D'ailleurs, en ajoutant cette ligne dans une copie de ton script, j'obtiens directement l'erreur suivante :
Impossible d’extraire la variable « $acl_unit_IdentityReference_Without_DOMAIN », car elle n’a pas été définie.
Au caractère xxx\TestAcl.ps1:xx : yy
+ ... ontent += " " + $acl_unit_IdentityReference_Without_DOMAIN + "`r`n ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (acl_unit_Identi..._Without_DOMAIN:String) , RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined


C'est très explicite.

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

Plus d'informations
il y a 1 an 3 mois #32917 par rhiwotar
Bonjour !

Si le sujet est toujours d'actu, je viens de finir un script qui correspond
Bon, c'est un assemblage de script et fonctionnellement, il est fini mais il est pas forcement très joli/optimisé
Le voici, si ça peut aider
function ListeGroupeAD($membreGroupe){
##Pour chaque membre, verifie si c'est un groupe
    foreach($membre in $membreGroupe){
        if($membre.objectClass -like "group"){
##ecrit l'arborescence des sous-groupe
            $SousGroupe = $SousGroupe + "/" + $membre.name
            $cut = "/" + $membre.name
##liste les membres du sous-groupe
            $MembreDeuxiemeGroupe = Get-ADGroupMember $membre.name
##Relance la fonction pour le sous-groupe
            ListeGroupeAD($MembreDeuxiemeGroupe)
##enleve le dernier morceau de l'arborescence pour redescendre
            $SousGroupe = $SousGroupe.Substring(0,$SousGroupe.Length-$cut.Length)
        }
        else{
##renseigne temporairement les infos de ListeMembre
            $temp = New-Object System.Object
##Complete la ListeMembre 
                $temp | Add-Member -MemberType NoteProperty -Name "Racine" -value $PremierGroupe
                if($SousGroupe -like $null){
                    $temp | Add-Member -MemberType NoteProperty -Name "SousGroupe" -value "-"
                }
                else{
                    $temp | Add-Member -MemberType NoteProperty -Name "SousGroupe" -value $SousGroupe
                }
                $temp | Add-Member -MemberType NoteProperty -Name "utilisateur" -value $Membre.name
                 
##Si le SID correspond au domaine (le domaine correspond a celui du serveur executant le script)
                try{
##recupere si le compte est actif et sa date de derniere connexion
                    $UserSID = get-aduser $membre.sid -Properties lastlogondate
                    $temp | Add-Member -MemberType NoteProperty -Name "compte actif" -value $UserSID.enabled
                    $temp | Add-Member -MemberType NoteProperty -Name "derniere connexion" -value $UserSID.lastlogondate
                }
                catch{
## indique que l'utilisateur n'est pas dans le domaine
                    $temp | Add-Member -MemberType NoteProperty -Name "compte actif" -value "Hors du domaine"
                    $temp | Add-Member -MemberType NoteProperty -Name "derniere connexion" -value "Hors du domaine"
                }
##ajoute l'objet à la collection
            $ListeMembre.Add($temp) | Out-Null 
        }
    }
}
$DossierRacine =  '\\Serveur\Dossier$\'
##recupere la liste des dossiers dans Service
$listeservice = (Get-ChildItem $DossierRacine).name
##Un boucle pour verifier tous les dossiers de Service
foreach($service in $listeservice){
## Verifie les groupes correspondant aux dossiers
    $servicegroupe = $service -replace " ",""
    $ListeMembre = New-Object System.Collections.ArrayList
    Clear-Variable premiergroupe,membrepremiergroupe
    $premiergroupe = "access" + $servicegroupe + "write"
        $MembrePremierGroupe = Get-ADGroupMember $PremierGroupe
        ListeGroupeAD($MembrePremierGroupe)
##Exporte les contenus des groupes dans des fichiers differents en fonction du service
    $grouperdest = "c:\listeGroupes"+$service+".csv"
    $ListeMembre|export-csv -Path $grouperdest -Delimiter ";" -Encoding UTF8 -NoTypeInformation
##recupere les droits d'acces des dossiers
    $dossierservice = "$DossierRacine$service\*"
        $listeacces = Get-Acl $dossierservice
##recupere le 2e niveau des dossiers s'il est different
        $dossierserviceRecursif = "$DossierRacine$service\*\*"
        $listeaccessRecursif = get-acl $dossierserviceRecursif
        $compare = compare-object $listeacces.pschildname $listeaccessRecursif.pschildname
        if($compare){
            $listeacces += $listeaccessRecursif
        }
##Liste tous les droits dans un fichiers differents par service
    $listeDossier = New-Object System.Collections.ArrayList
    foreach($access in $listeacces){
##filtre pour enlever le groupe "legitime" et les utilisateurs par defaut
        $access.Access|where {$_.IdentityReference -like "Domaine\*" -and $_.identityreference -notlike "Domaine\*access$servicegroupe*"}|foreach{
            $parentPath = ($access.PSParentPath -split "::")[1]
            $temp = New-Object System.Object
            $temp | Add-Member -MemberType NoteProperty -Name "Dossier_Parent" -Value $parentPath
            $temp | Add-Member -MemberType NoteProperty -Name "Nom" -Value $access.pschildname
            $temp | Add-Member -MemberType NoteProperty -Name "Autorisé" -Value $_.AccessControlType
            $temp | Add-Member -MemberType NoteProperty -Name "droits" -Value ($_.FileSystemRights -replace (", Synchronize",""))
            $temp | Add-Member -MemberType NoteProperty -Name "groupe" -Value $_.identityreference
            $listeDossier.Add($temp)| Out-Null
        }
    }
    $dossierdest = "c:\listeDossiers"+$servicegroupe+".csv"
    $listeDossier|export-csv -Path $dossierdest -Delimiter ";" -Encoding UTF8 -NoTypeInformation
}

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

Temps de génération de la page : 0.070 secondes
Propulsé par Kunena